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

Side by Side Diff: mojo/public/js/connection.js

Issue 2250183003: Make the fuchsia mojo/public repo the source of truth. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 4 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/public/js/codec_unittests.js ('k') | mojo/public/js/connector.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/public/js/connection", [
6 "mojo/public/js/bindings",
7 "mojo/public/js/connector",
8 "mojo/public/js/core",
9 "mojo/public/js/router",
10 ], function(bindings, connector, core, router) {
11
12 var Router = router.Router;
13 var EmptyProxy = bindings.EmptyProxy;
14 var EmptyStub = bindings.EmptyStub;
15 var ProxyBindings = bindings.ProxyBindings;
16 var StubBindings = bindings.StubBindings;
17 var TestConnector = connector.TestConnector;
18 var TestRouter = router.TestRouter;
19
20 // TODO(hansmuller): the proxy receiver_ property should be receiver$
21
22 function BaseConnection(localStub, remoteProxy, router) {
23 this.router_ = router;
24 this.local = localStub;
25 this.remote = remoteProxy;
26
27 this.router_.setIncomingReceiver(localStub);
28 if (this.remote)
29 this.remote.receiver_ = router;
30
31 // Validate incoming messages: remote responses and local requests.
32 var validateRequest = localStub && localStub.validator;
33 var validateResponse = remoteProxy && remoteProxy.validator;
34 var payloadValidators = [];
35 if (validateRequest)
36 payloadValidators.push(validateRequest);
37 if (validateResponse)
38 payloadValidators.push(validateResponse);
39 this.router_.setPayloadValidators(payloadValidators);
40 }
41
42 BaseConnection.prototype.close = function() {
43 this.router_.close();
44 this.router_ = null;
45 this.local = null;
46 this.remote = null;
47 };
48
49 BaseConnection.prototype.encounteredError = function() {
50 return this.router_.encounteredError();
51 };
52
53 function Connection(
54 handle, localFactory, remoteFactory, routerFactory, connectorFactory) {
55 var routerClass = routerFactory || Router;
56 var router = new routerClass(handle, connectorFactory);
57 var remoteProxy = remoteFactory && new remoteFactory(router);
58 var localStub = localFactory && new localFactory(remoteProxy);
59 BaseConnection.call(this, localStub, remoteProxy, router);
60 }
61
62 Connection.prototype = Object.create(BaseConnection.prototype);
63
64 // The TestConnection subclass is only intended to be used in unit tests.
65 function TestConnection(handle, localFactory, remoteFactory) {
66 Connection.call(this,
67 handle,
68 localFactory,
69 remoteFactory,
70 TestRouter,
71 TestConnector);
72 }
73
74 TestConnection.prototype = Object.create(Connection.prototype);
75
76 // Return a handle for a message pipe that's connected to a proxy
77 // for remoteInterface. Used by generated code for outgoing interface&
78 // (request) parameters: the caller is given the generated proxy via
79 // |proxyCallback(proxy)| and the generated code sends the handle
80 // returned by this function.
81 function bindProxy(proxyCallback, remoteInterface) {
82 var messagePipe = core.createMessagePipe();
83 if (messagePipe.result != core.RESULT_OK)
84 throw new Error("createMessagePipe failed " + messagePipe.result);
85
86 var proxy = new remoteInterface.proxyClass;
87 var router = new Router(messagePipe.handle0);
88 var connection = new BaseConnection(undefined, proxy, router);
89 ProxyBindings(proxy).connection = connection;
90 if (proxyCallback)
91 proxyCallback(proxy);
92
93 return messagePipe.handle1;
94 }
95
96 // Return a handle for a message pipe that's connected to a stub for
97 // localInterface. Used by generated code for outgoing interface
98 // parameters: the caller is given the generated stub via
99 // |stubCallback(stub)| and the generated code sends the handle
100 // returned by this function. The caller is responsible for managing
101 // the lifetime of the stub and for setting it's implementation
102 // delegate with: StubBindings(stub).delegate = myImpl;
103 function bindImpl(stubCallback, localInterface) {
104 var messagePipe = core.createMessagePipe();
105 if (messagePipe.result != core.RESULT_OK)
106 throw new Error("createMessagePipe failed " + messagePipe.result);
107
108 var stub = new localInterface.stubClass;
109 var router = new Router(messagePipe.handle0);
110 var connection = new BaseConnection(stub, undefined, router);
111 StubBindings(stub).connection = connection;
112 if (stubCallback)
113 stubCallback(stub);
114
115 return messagePipe.handle1;
116 }
117
118 // Return a remoteInterface proxy for handle. Used by generated code
119 // for converting incoming interface parameters to proxies.
120 function bindHandleToProxy(handle, remoteInterface) {
121 if (!core.isHandle(handle))
122 throw new Error("Not a handle " + handle);
123
124 var proxy = new remoteInterface.proxyClass;
125 var router = new Router(handle);
126 var connection = new BaseConnection(undefined, proxy, router);
127 ProxyBindings(proxy).connection = connection;
128 return proxy;
129 }
130
131 // Return a localInterface stub for handle. Used by generated code
132 // for converting incoming interface& request parameters to localInterface
133 // stubs. The caller can specify the stub's implementation of localInterface
134 // like this: StubBindings(stub).delegate = myStubImpl.
135 function bindHandleToStub(handle, localInterface) {
136 if (!core.isHandle(handle))
137 throw new Error("Not a handle " + handle);
138
139 var stub = new localInterface.stubClass;
140 var router = new Router(handle);
141 var connection = new BaseConnection(stub, undefined, router);
142 StubBindings(stub).connection = connection;
143 return stub;
144 }
145
146 var exports = {};
147 exports.Connection = Connection;
148 exports.TestConnection = TestConnection;
149
150 exports.bindProxy = bindProxy;
151 exports.bindImpl = bindImpl;
152 exports.bindHandleToProxy = bindHandleToProxy;
153 exports.bindHandleToStub = bindHandleToStub;
154 return exports;
155 });
OLDNEW
« no previous file with comments | « mojo/public/js/codec_unittests.js ('k') | mojo/public/js/connector.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698