| 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
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..55002f5e2b5e550295a6c134a6331b6fc7bf6ad4
|
| --- /dev/null
|
| +++ b/third_party/mojo/src/mojo/public/dart/src/application.dart
|
| @@ -0,0 +1,121 @@
|
| +// 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.
|
| +
|
| +part of application;
|
| +
|
| +class _ApplicationImpl extends application_mojom.Application {
|
| + shell_mojom.ShellProxy shell;
|
| + Application _application;
|
| +
|
| + _ApplicationImpl(
|
| + Application application, core.MojoMessagePipeEndpoint endpoint)
|
| + : _application = application, super(endpoint) {
|
| + super.delegate = this;
|
| + }
|
| +
|
| + _ApplicationImpl.fromHandle(Application application, core.MojoHandle handle)
|
| + : _application = application, super.fromHandle(handle) {
|
| + super.delegate = this;
|
| + }
|
| +
|
| + void initialize(shell_mojom.ShellProxy shellProxy, List<String> args) {
|
| + assert(shell == null);
|
| + shell = shellProxy;
|
| + _application.initialize(args);
|
| + }
|
| +
|
| + void acceptConnection(
|
| + String requestorUrl,
|
| + service_provider.ServiceProviderStub services,
|
| + service_provider.ServiceProviderProxy exposedServices) =>
|
| + _application._acceptConnection(requestorUrl, services, exposedServices);
|
| +
|
| + void requestQuit() => _application._requestQuitAndClose();
|
| +
|
| + void close() => shell.close();
|
| +}
|
| +
|
| +// TODO(zra): Better documentation and examples.
|
| +// To implement, do the following:
|
| +// - 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.
|
| +abstract class Application {
|
| + _ApplicationImpl _applicationImpl;
|
| + List<service_provider.ServiceProviderProxy> _proxies;
|
| + List<ServiceProvider> _serviceProviders;
|
| +
|
| + Application(core.MojoMessagePipeEndpoint endpoint) {
|
| + _proxies = [];
|
| + _serviceProviders = [];
|
| + _applicationImpl = new _ApplicationImpl(this, endpoint);
|
| + }
|
| +
|
| + Application.fromHandle(core.MojoHandle appHandle) {
|
| + _proxies = [];
|
| + _serviceProviders = [];
|
| + _applicationImpl = new _ApplicationImpl.fromHandle(this, appHandle);
|
| + }
|
| +
|
| + void initialize(List<String> args) {}
|
| +
|
| + void connectToService(String url, bindings.Proxy proxy) {
|
| + assert(!proxy.isBound);
|
| + var endpoint = _connectToServiceHelper(url, proxy.name);
|
| + proxy.bind(endpoint);
|
| + }
|
| +
|
| + void requestQuit() {}
|
| +
|
| + listen() => _applicationImpl.listen();
|
| +
|
| + void _requestQuitAndClose() {
|
| + requestQuit();
|
| + close();
|
| + }
|
| +
|
| + void close() {
|
| + assert(_applicationImpl != null);
|
| + _proxies.forEach((c) => c.close());
|
| + _proxies.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);
|
| + }
|
| +
|
| + void acceptConnection(String requestorUrl, ServiceProvider serviceProvider) {}
|
| +
|
| + core.MojoMessagePipeEndpoint _connectToServiceHelper(
|
| + String url, String service) {
|
| + var applicationPipe = new core.MojoMessagePipe();
|
| + var proxyEndpoint = applicationPipe.endpoints[0];
|
| + var applicationEndpoint = applicationPipe.endpoints[1];
|
| + var serviceProviderProxy =
|
| + new service_provider.ServiceProviderProxy.unbound();
|
| + _applicationImpl.shell.connectToApplication(
|
| + url, serviceProviderProxy, null);
|
| + serviceProviderProxy.connectToService(service, applicationEndpoint);
|
| + _proxies.add(serviceProviderProxy);
|
| + return proxyEndpoint;
|
| + }
|
| +}
|
|
|