| // Copyright 2016 The Chromium Authors |
| // 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. |
| |
| let pageImpl; |
| let browserProxy; |
| |
| /** @constructor */ |
| function TestPageImpl() { |
| this.binding = new mojo.Binding(web.mojom.TestPage, this); |
| } |
| |
| TestPageImpl.prototype = { |
| /** @override */ |
| handleNativeMessage: function(result) { |
| if (result.message === 'ack') { |
| // Expect "ack2" reply to syn2 via the callback. |
| browserProxy.handleJsMessageWithCallback('syn2').then((r) => { |
| if (r.result.message === 'ack2') { |
| // Send "fin" to complete the test. |
| browserProxy.handleJsMessage('fin'); |
| } |
| }); |
| } |
| }, |
| }; |
| |
| /** |
| * @return {!Promise} Fires when DOMContentLoaded event is received. |
| */ |
| function whenDomContentLoaded() { |
| return new Promise(function(resolve, reject) { |
| document.addEventListener('DOMContentLoaded', resolve); |
| }); |
| } |
| |
| function main() { |
| whenDomContentLoaded().then(function() { |
| browserProxy = new web.mojom.TestUIHandlerMojoPtr(); |
| Mojo.bindInterface(web.mojom.TestUIHandlerMojo.name, |
| mojo.makeRequest(browserProxy).handle); |
| |
| pageImpl = new TestPageImpl(); |
| const pagePtr = new web.mojom.TestPagePtr(); |
| pageImpl.binding.bind(mojo.makeRequest(pagePtr)); |
| browserProxy.setClientPage(pagePtr); |
| |
| // Send "syn" so native code should reply with "ack". |
| browserProxy.handleJsMessage('syn'); |
| }); |
| } |
| |
| main(); |