| Index: third_party/mojo/src/mojo/public/dart/src/application.dart
|
| diff --git a/third_party/mojo/src/mojo/public/dart/src/application.dart b/third_party/mojo/src/mojo/public/dart/src/application.dart
|
| index e5b9d4b73f3b9e13654aa3f5d5175ff3c66c73c1..4be554df1bee1800fdcaaa4981e5e607a6a2ee12 100644
|
| --- a/third_party/mojo/src/mojo/public/dart/src/application.dart
|
| +++ b/third_party/mojo/src/mojo/public/dart/src/application.dart
|
| @@ -19,16 +19,17 @@ class _ApplicationImpl extends application_mojom.Application {
|
| super.delegate = this;
|
| }
|
|
|
| - void initialize(shell_mojom.ShellProxy shellProxy, List<String> args) {
|
| + void initialize(
|
| + shell_mojom.ShellProxy shellProxy, List<String> args, String url) {
|
| assert(shell == null);
|
| shell = shellProxy;
|
| - _application.initialize(args);
|
| + _application.initialize(args, url);
|
| }
|
|
|
| void acceptConnection(
|
| String requestorUrl,
|
| - service_provider.ServiceProviderStub services,
|
| - service_provider.ServiceProviderProxy exposedServices) =>
|
| + ServiceProviderStub services,
|
| + ServiceProviderProxy exposedServices) =>
|
| _application._acceptConnection(requestorUrl, services, exposedServices);
|
|
|
| void requestQuit() => _application._requestQuitAndClose();
|
| @@ -36,72 +37,46 @@ class _ApplicationImpl extends application_mojom.Application {
|
| void close({bool nodefer: false}) => shell.close();
|
| }
|
|
|
| -// ApplicationConnection represents a single outgoing connection to another app.
|
| -class ApplicationConnection {
|
| - // ServiceProvider used to obtain services from the remote application.
|
| - service_provider.ServiceProviderProxy serviceProvider;
|
| -
|
| - ApplicationConnection(this.serviceProvider);
|
| -
|
| - // Obtains a service from the remote application.
|
| - void connectToService(bindings.Proxy proxy) {
|
| - assert(!proxy.isBound);
|
| - var applicationPipe = new core.MojoMessagePipe();
|
| - var proxyEndpoint = applicationPipe.endpoints[0];
|
| - var applicationEndpoint = applicationPipe.endpoints[1];
|
| - proxy.bind(proxyEndpoint);
|
| - serviceProvider.connectToService(proxy.name, applicationEndpoint);
|
| - }
|
| -}
|
| -
|
| // TODO(zra): Better documentation and examples.
|
| // To implement, do the following:
|
| +// - Optionally override initialize() to process command-line args.
|
| // - Optionally override acceptConnection() if services are to be provided.
|
| -// The override should assign a factory function to the passed in
|
| -// ServiceProvider's |factory| field, and then call listen on the
|
| -// ServiceProvider. The factory function should take a MojoMessagePipeEndpoint
|
| -// and return an object that implements the requested interface.
|
| -// - Optionally override initialize() where needed.
|
| -// - Optionally override requestClose() to clean up state specific to your
|
| -// application.
|
| -// To use an Application:
|
| -// - Call listen() on a newly created Application to begin providing services.
|
| -// - Call connectToService() to request services from the Shell.
|
| -// - Call close() to close connections to any requested ServiceProviders and the
|
| -// Shell.
|
| +// - Optionally override close() to clean up application resources.
|
| abstract class Application {
|
| _ApplicationImpl _applicationImpl;
|
| List<ApplicationConnection> _applicationConnections;
|
| - List<ServiceProvider> _serviceProviders;
|
|
|
| Application(core.MojoMessagePipeEndpoint endpoint) {
|
| _applicationConnections = [];
|
| - _serviceProviders = [];
|
| _applicationImpl = new _ApplicationImpl(this, endpoint);
|
| }
|
|
|
| Application.fromHandle(core.MojoHandle appHandle) {
|
| _applicationConnections = [];
|
| - _serviceProviders = [];
|
| _applicationImpl = new _ApplicationImpl.fromHandle(this, appHandle);
|
| }
|
|
|
| - void initialize(List<String> args) {}
|
| + void initialize(List<String> args, String url) {}
|
|
|
| - // Establishes a connection to the app at |url|.
|
| + // TODO(skydart): This is a temporary fix to allow sky application to consume
|
| + // mojo services. Do not use for any other purpose.
|
| + void initializeFromShellProxy(shell_mojom.ShellProxy shellProxy,
|
| + List<String> args, String url) {
|
| + _applicationImpl.initialize(shellProxy, args, url);
|
| + }
|
| +
|
| + // Returns a connection to the app at |url|.
|
| ApplicationConnection connectToApplication(String url) {
|
| - var serviceProviderProxy =
|
| - new service_provider.ServiceProviderProxy.unbound();
|
| - // TODO: Need to expose ServiceProvider for local services.
|
| - _applicationImpl.shell.connectToApplication(
|
| - url, serviceProviderProxy, null);
|
| - var applicationConnection = new ApplicationConnection(serviceProviderProxy);
|
| - _applicationConnections.add(applicationConnection);
|
| - return applicationConnection;
|
| + var proxy = new ServiceProviderProxy.unbound();
|
| + var stub = new ServiceProviderStub.unbound();
|
| + _applicationImpl.shell.connectToApplication(url, proxy, stub);
|
| + var connection = new ApplicationConnection(stub, proxy);
|
| + _applicationConnections.add(connection);
|
| + return connection;
|
| }
|
|
|
| void connectToService(String url, bindings.Proxy proxy) {
|
| - connectToApplication(url).connectToService(proxy);
|
| + connectToApplication(url).requestService(proxy);
|
| }
|
|
|
| void requestQuit() {}
|
| @@ -115,21 +90,23 @@ abstract class Application {
|
|
|
| void close() {
|
| assert(_applicationImpl != null);
|
| - _applicationConnections.forEach((c) => c.serviceProvider.close());
|
| + _applicationConnections.forEach((c) => c.close());
|
| _applicationConnections.clear();
|
| - _serviceProviders.forEach((sp) => sp.close());
|
| - _serviceProviders.clear();
|
| _applicationImpl.close();
|
| }
|
|
|
| void _acceptConnection(
|
| String requestorUrl,
|
| - service_provider.ServiceProviderStub services,
|
| - service_provider.ServiceProviderProxy exposedServices) {
|
| - var serviceProvider = new ServiceProvider(services, exposedServices);
|
| - _serviceProviders.add(serviceProvider);
|
| - acceptConnection(requestorUrl, serviceProvider);
|
| + ServiceProviderStub services,
|
| + ServiceProviderProxy exposedServices) {
|
| + var connection = new ApplicationConnection(services, exposedServices);
|
| + _applicationConnections.add(connection);
|
| + acceptConnection(requestorUrl, connection);
|
| }
|
|
|
| - void acceptConnection(String requestorUrl, ServiceProvider serviceProvider) {}
|
| + // Override this method to provide services on |connection|.
|
| + // If you provide at least one service or set fallbackServiceProvider,
|
| + // then you must invoke connection.listen().
|
| + void acceptConnection(String requestorUrl, ApplicationConnection connection) {
|
| + }
|
| }
|
|
|