#!mojo mojo:js_content_handler
// Demonstrate sharing services via application ServiceProviders.
// This application is launched by share_echo.js. It both provides
// and requests an EchoService implementation.
//
define("main", [
  "console",
  "mojo/services/public/js/application",
  "examples/echo/echo_service.mojom",
], function(console, application, echo) {

  var Application = application.Application;
  var EchoService = echo.EchoService;

  class EchoServiceImpl {
    echoString(s) {
      return Promise.resolve({value: "ShareEchoTarget: " + s});
    }
  }

  class ShareEchoTarget extends Application {
    acceptConnection(initiatorURL, shareEchoSP) {
      // The shareEchoSP parameter is-a JS ServiceProvider that's
      // connected to the share_echo.js application. We can request the
      // share_echo.js implementation of EchoService and provide the
      // share_echo.js application with our own EchoService implementation.
      var echoService = shareEchoSP.requestService(EchoService);
      echoService.echoString("ShareEchoTarget").then(function(response) {
        console.log(response.value);
      });
      shareEchoSP.provideService(EchoService, EchoServiceImpl);
    }
  }

  return ShareEchoTarget;
});
