| #!mojo mojo:js_content_handler |
| // Copyright 2014 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. |
| |
| // Demonstrate using the ServiceProvider returned by the Shell |
| // connectToApplication() method to provide a service to the |
| // target application and to request a service from the target |
| // application. To run this application with mojo_shell: |
| // mojo_shell file://full/path/to/share_echo.js |
| |
| define("main", [ |
| "console", |
| "mojo/services/public/js/application", |
| "examples/echo/echo.mojom", |
| ], function(console, application, echo) { |
| |
| const Application = application.Application; |
| const Echo = echo.Echo; |
| |
| var shareEchoApp; |
| var everythingDone = {providedService: false, requestedService: false}; |
| |
| // This application will quit after the EchoImpl has been used once |
| // and the target Echo application has responded once. |
| function quitIfEverythingIsDone(doneNow) { |
| everythingDone[doneNow] = true; |
| if (everythingDone.providedService && everythingDone.requestedService) |
| shareEchoApp.quit(); |
| } |
| |
| class EchoImpl { |
| echoString(s) { |
| quitIfEverythingIsDone("providedService"); |
| return Promise.resolve({value: "ShareEcho: " + s}); |
| } |
| } |
| |
| class ShareEcho extends Application { |
| initialize(args) { |
| // The Application object is a singleton. Remember it. |
| shareEchoApp = this; |
| |
| var shareEchoTargetURL = |
| this.url.replace("share_echo.js", "share_echo_target.js"); |
| |
| // The value of targetSP is-a JS ServiceProvider that's connected to the |
| // share_echo_target.js application. We provide our implementation of |
| // Echo to the share_echo_target.js application and request its |
| // Echo implementation. |
| var targetSP = this.shell.connectToApplication(shareEchoTargetURL); |
| |
| // Make our implementation of Echo available to the other end. |
| // Note that we pass the class, not an instance. |
| targetSP.provideService(Echo, EchoImpl); |
| |
| // Get the implementation at the other end, call it, and prepare for |
| // the async callback. |
| var echoService = targetSP.requestService(Echo); |
| echoService.echoString("ShareEcho").then(function(response) { |
| console.log(response.value); |
| quitIfEverythingIsDone("requestedService"); |
| }); |
| } |
| } |
| |
| return ShareEcho; |
| }); |