blob: 4f8fd782e2fc3355e0dc37fca99cd6fde6c2ccb6 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This module provides the test page for WebUIMojoTest. Once the page is
// loaded it sends "syn" message to the native code. Once page receives "ack"
// from the native code, the page then sends "fin". Test succeeds only when
// "fin" is received by the native page. Refer to
// ios/web/webui/web_ui_mojo_inttest.mm for testing code.
/** @return {!Promise} */
function getBrowserProxy() {
return new Promise(function(resolve, reject) {
define([
'mojo/public/js/connection',
'ios/web/test/mojo_test.mojom',
'content/public/renderer/frame_service_registry',
], function(connection, mojom, serviceRegistry) {
var pageImpl, browserProxy;
/** @constructor */
function TestPageImpl() {};
TestPageImpl.prototype = {
__proto__: mojom.TestPage.stubClass.prototype,
/** @override */
handleNativeMessage: function(result) {
if (result.message == 'ack') {
// Native code has replied with "ack", send "fin" to complete the
// test.
browserProxy.handleJsMessage('fin');
}
},
};
browserProxy = connection.bindHandleToProxy(
serviceRegistry.connectToService(mojom.TestUIHandlerMojo.name),
mojom.TestUIHandlerMojo);
pageImpl = new TestPageImpl();
browserProxy.setClientPage(connection.bindStubDerivedImpl(pageImpl));
resolve(browserProxy);
});
});
}
/**
* @return {!Promise} Fires when DOMContentLoaded event is received.
*/
function whenDomContentLoaded() {
return new Promise(function(resolve, reject) {
document.addEventListener('DOMContentLoaded', resolve);
});
}
function main() {
Promise.all([
whenDomContentLoaded(), getBrowserProxy()
]).then(function(results) {
var browserProxy = results[1];
// Send "syn" so native code should reply with "ack".
browserProxy.handleJsMessage('syn');
});
}
main();