Index: third_party/mojo/src/mojo/public/dart/src/service_provider.dart |
diff --git a/third_party/mojo/src/mojo/public/dart/src/service_provider.dart b/third_party/mojo/src/mojo/public/dart/src/service_provider.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..deac6bc79f43e57f6c151f8bc09b40fa88c7524f |
--- /dev/null |
+++ b/third_party/mojo/src/mojo/public/dart/src/service_provider.dart |
@@ -0,0 +1,39 @@ |
+// 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; |
+ |
+typedef core.Listener ListenerFactory(core.MojoMessagePipeEndpoint endpoint); |
+ |
+class ServiceProvider extends service_provider.ServiceProvider { |
+ ListenerFactory factory; |
+ |
+ service_provider.ServiceProviderProxy _proxy; |
+ |
+ ServiceProvider( |
+ service_provider.ServiceProviderStub services, |
+ [service_provider.ServiceProviderProxy exposedServices = null]) |
+ : _proxy = exposedServices, |
+ super.fromStub(services) { |
+ delegate = this; |
+ } |
+ |
+ connectToService(String interfaceName, core.MojoMessagePipeEndpoint pipe) => |
+ factory(pipe).listen(); |
+ |
+ requestService(String name, bindings.Proxy clientImpl) { |
+ assert(_proxy != null); |
+ assert(!clientImpl.isBound); |
+ var pipe = new core.MojoMessagePipe(); |
+ clientImpl.bind(pipe.endpoints[0]); |
+ _proxy.connectToService(name, pipe.endpoints[1]); |
+ } |
+ |
+ close() { |
+ if (_proxy != null) { |
+ _proxy.close(); |
+ _proxy = null; |
+ } |
+ } |
+} |