OLD | NEW |
| (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/bindings", [ | |
6 "mojo/public/js/router", | |
7 "mojo/public/js/core", | |
8 ], function(router, core) { | |
9 | |
10 var Router = router.Router; | |
11 | |
12 var kProxyProperties = Symbol("proxyProperties"); | |
13 var kStubProperties = Symbol("stubProperties"); | |
14 | |
15 // Public proxy class properties that are managed at runtime by the JS | |
16 // bindings. See ProxyBindings below. | |
17 function ProxyProperties(receiver) { | |
18 this.receiver = receiver; | |
19 } | |
20 | |
21 // TODO(hansmuller): remove then after 'Client=' has been removed from Mojom. | |
22 ProxyProperties.prototype.getLocalDelegate = function() { | |
23 return this.local && StubBindings(this.local).delegate; | |
24 } | |
25 | |
26 // TODO(hansmuller): remove then after 'Client=' has been removed from Mojom. | |
27 ProxyProperties.prototype.setLocalDelegate = function(impl) { | |
28 if (this.local) | |
29 StubBindings(this.local).delegate = impl; | |
30 else | |
31 throw new Error("no stub object"); | |
32 } | |
33 | |
34 function connectionHandle(connection) { | |
35 return connection && | |
36 connection.router && | |
37 connection.router.connector_ && | |
38 connection.router.connector_.handle_; | |
39 } | |
40 | |
41 ProxyProperties.prototype.close = function() { | |
42 var handle = connectionHandle(this.connection); | |
43 if (handle) | |
44 core.close(handle); | |
45 } | |
46 | |
47 // Public stub class properties that are managed at runtime by the JS | |
48 // bindings. See StubBindings below. | |
49 function StubProperties(delegate) { | |
50 this.delegate = delegate; | |
51 } | |
52 | |
53 StubProperties.prototype.close = function() { | |
54 var handle = connectionHandle(this.connection); | |
55 if (handle) | |
56 core.close(handle); | |
57 } | |
58 | |
59 // The base class for generated proxy classes. | |
60 function ProxyBase(receiver) { | |
61 this[kProxyProperties] = new ProxyProperties(receiver); | |
62 | |
63 // TODO(hansmuller): Temporary, for Chrome backwards compatibility. | |
64 if (receiver instanceof Router) | |
65 this.receiver_ = receiver; | |
66 } | |
67 | |
68 // The base class for generated stub classes. | |
69 function StubBase(delegate) { | |
70 this[kStubProperties] = new StubProperties(delegate); | |
71 } | |
72 | |
73 // TODO(hansmuller): remove everything except the connection property doc | |
74 // after 'Client=' has been removed from Mojom. | |
75 | |
76 // Provides access to properties added to a proxy object without risking | |
77 // Mojo interface name collisions. Unless otherwise specified, the initial | |
78 // value of all properties is undefined. | |
79 // | |
80 // ProxyBindings(proxy).connection - The Connection object that links the | |
81 // proxy for a remote Mojo service to an optional local stub for a local | |
82 // service. The value of ProxyBindings(proxy).connection.remote == proxy. | |
83 // | |
84 // ProxyBindings(proxy).local - The "local" stub object whose delegate | |
85 // implements the proxy's Mojo client interface. | |
86 // | |
87 // ProxyBindings(proxy).setLocalDelegate(impl) - Sets the implementation | |
88 // delegate of the proxy's client stub object. This is just shorthand | |
89 // for |StubBindings(ProxyBindings(proxy).local).delegate = impl|. | |
90 // | |
91 // ProxyBindings(proxy).getLocalDelegate() - Returns the implementation | |
92 // delegate of the proxy's client stub object. This is just shorthand | |
93 // for |StubBindings(ProxyBindings(proxy).local).delegate|. | |
94 | |
95 function ProxyBindings(proxy) { | |
96 return (proxy instanceof ProxyBase) ? proxy[kProxyProperties] : proxy; | |
97 } | |
98 | |
99 // TODO(hansmuller): remove the remote doc after 'Client=' has been | |
100 // removed from Mojom. | |
101 | |
102 // Provides access to properties added to a stub object without risking | |
103 // Mojo interface name collisions. Unless otherwise specified, the initial | |
104 // value of all properties is undefined. | |
105 // | |
106 // StubBindings(stub).delegate - The optional implementation delegate for | |
107 // the Mojo interface stub. | |
108 // | |
109 // StubBindings(stub).connection - The Connection object that links an | |
110 // optional proxy for a remote service to this stub. The value of | |
111 // StubBindings(stub).connection.local == stub. | |
112 // | |
113 // StubBindings(stub).remote - A proxy for the the stub's Mojo client | |
114 // service. | |
115 | |
116 function StubBindings(stub) { | |
117 return stub instanceof StubBase ? stub[kStubProperties] : stub; | |
118 } | |
119 | |
120 var exports = {}; | |
121 exports.EmptyProxy = ProxyBase; | |
122 exports.EmptyStub = StubBase; | |
123 exports.ProxyBase = ProxyBase; | |
124 exports.ProxyBindings = ProxyBindings; | |
125 exports.StubBase = StubBase; | |
126 exports.StubBindings = StubBindings; | |
127 return exports; | |
128 }); | |
OLD | NEW |