Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Side by Side Diff: mojo/services/public/js/service_provider.js

Issue 861683003: Move services code brought in from Mojo to live under //third_party. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mojo/services/public/js/application.js ('k') | mojo/services/public/js/shell.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 define("mojo/services/public/js/service_provider", [
6 "mojo/public/js/bindings",
7 "mojo/public/interfaces/application/service_provider.mojom",
8 "mojo/public/js/connection",
9 ], function(bindings, spMojom, connection) {
10
11 const ProxyBindings = bindings.ProxyBindings;
12 const StubBindings = bindings.StubBindings;
13 const ServiceProviderInterface = spMojom.ServiceProvider;
14
15 function checkServiceProvider(sp) {
16 if (!sp.providers_)
17 throw new Error("Service was closed");
18 }
19
20 class ServiceProvider {
21 constructor(servicesRequest, exposedServicesProxy) {
22 this.proxy = exposedServicesProxy;
23 this.providers_ = new Map(); // serviceName => see provideService() below
24 this.pendingRequests_ = new Map(); // serviceName => serviceHandle
25 if (servicesRequest)
26 StubBindings(servicesRequest).delegate = this;
27 }
28
29 // Incoming requests
30 connectToService(serviceName, serviceHandle) {
31 if (!this.providers_) // We're closed.
32 return;
33
34 var provider = this.providers_.get(serviceName);
35 if (!provider) {
36 this.pendingRequests_.set(serviceName, serviceHandle);
37 return;
38 }
39
40 var stub = connection.bindHandleToStub(serviceHandle, provider.service);
41 StubBindings(stub).delegate = new provider.factory();
42 provider.connections.push(StubBindings(stub).connection);
43 }
44
45 provideService(service, factory) {
46 checkServiceProvider(this);
47
48 var provider = {
49 service: service, // A JS bindings interface object.
50 factory: factory, // factory(clientProxy) => interface implemntation
51 connections: [],
52 };
53 this.providers_.set(service.name, provider);
54
55 if (this.pendingRequests_.has(service.name)) {
56 this.connectToService(service.name, pendingRequests_.get(service.name));
57 pendingRequests_.delete(service.name);
58 }
59 return this;
60 }
61
62 // Outgoing requests
63 requestService(interfaceObject, clientImpl) {
64 checkServiceProvider(this);
65 if (!interfaceObject.name)
66 throw new Error("Invalid service parameter");
67 if (!clientImpl && interfaceObject.client)
68 throw new Error("Client implementation must be provided");
69
70 var serviceProxy;
71 var serviceHandle = connection.bindProxy(
72 function(sp) {serviceProxy = sp;}, interfaceObject);
73 this.proxy.connectToService(interfaceObject.name, serviceHandle);
74 return serviceProxy;
75 };
76
77 close() {
78 this.providers_ = null;
79 this.pendingRequests_ = null;
80 }
81 }
82
83 var exports = {};
84 exports.ServiceProvider = ServiceProvider;
85 return exports;
86 });
OLDNEW
« no previous file with comments | « mojo/services/public/js/application.js ('k') | mojo/services/public/js/shell.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698