| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 define("mojo/services/public/js/service_exchange", [ | 5 define("mojo/services/public/js/service_exchange", [ |
| 6 "mojo/public/js/bindings", | 6 "mojo/public/js/bindings", |
| 7 "mojo/public/interfaces/application/service_provider.mojom", | 7 "mojo/public/interfaces/application/service_provider.mojom", |
| 8 "mojo/public/js/connection", | 8 "mojo/public/js/connection", |
| 9 ], function(bindings, spMojom, connection) { | 9 ], function(bindings, spMojom, connection) { |
| 10 | 10 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 var stub = connection.bindHandleToStub(serviceHandle, provider.service); | 40 var stub = connection.bindHandleToStub(serviceHandle, provider.service); |
| 41 StubBindings(stub).delegate = new provider.factory(); | 41 StubBindings(stub).delegate = new provider.factory(); |
| 42 provider.connections.push(StubBindings(stub).connection); | 42 provider.connections.push(StubBindings(stub).connection); |
| 43 } | 43 } |
| 44 | 44 |
| 45 provideService(service, factory) { | 45 provideService(service, factory) { |
| 46 checkServiceExchange(this); | 46 checkServiceExchange(this); |
| 47 | 47 |
| 48 var provider = { | 48 var provider = { |
| 49 service: service, // A JS bindings interface object. | 49 service: service, // A JS bindings interface object. |
| 50 factory: factory, // factory(clientProxy) => interface implemntation | 50 factory: factory, // factory() => interface implemntation |
| 51 connections: [], | 51 connections: [], |
| 52 }; | 52 }; |
| 53 this.providers_.set(service.name, provider); | 53 this.providers_.set(service.name, provider); |
| 54 | 54 |
| 55 if (this.pendingRequests_.has(service.name)) { | 55 if (this.pendingRequests_.has(service.name)) { |
| 56 this.connectToService(service.name, pendingRequests_.get(service.name)); | 56 this.connectToService(service.name, pendingRequests_.get(service.name)); |
| 57 pendingRequests_.delete(service.name); | 57 pendingRequests_.delete(service.name); |
| 58 } | 58 } |
| 59 return this; | 59 return this; |
| 60 } | 60 } |
| 61 | 61 |
| 62 // Outgoing requests | 62 // Outgoing requests |
| 63 requestService(interfaceObject, clientImpl) { | 63 requestService(interfaceObject) { |
| 64 checkServiceExchange(this); | 64 checkServiceExchange(this); |
| 65 if (!interfaceObject.name) | 65 if (!interfaceObject.name) |
| 66 throw new Error("Invalid service parameter"); | 66 throw new Error("Invalid service parameter"); |
| 67 if (!clientImpl && interfaceObject.client) | |
| 68 throw new Error("Client implementation must be provided"); | |
| 69 | 67 |
| 70 var serviceProxy; | 68 var serviceProxy; |
| 71 var serviceHandle = connection.bindProxy( | 69 var serviceHandle = connection.bindProxy( |
| 72 function(sp) {serviceProxy = sp;}, interfaceObject); | 70 function(sp) {serviceProxy = sp;}, interfaceObject); |
| 73 this.proxy.connectToService(interfaceObject.name, serviceHandle); | 71 this.proxy.connectToService(interfaceObject.name, serviceHandle); |
| 74 return serviceProxy; | 72 return serviceProxy; |
| 75 }; | 73 }; |
| 76 | 74 |
| 77 close() { | 75 close() { |
| 78 this.providers_ = null; | 76 this.providers_ = null; |
| 79 this.pendingRequests_ = null; | 77 this.pendingRequests_ = null; |
| 80 } | 78 } |
| 81 } | 79 } |
| 82 | 80 |
| 83 var exports = {}; | 81 var exports = {}; |
| 84 exports.ServiceExchange = ServiceExchange; | 82 exports.ServiceExchange = ServiceExchange; |
| 85 return exports; | 83 return exports; |
| 86 }); | 84 }); |
| OLD | NEW |