OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <script src="../resources/testharness.js"></script> | 2 <script src="../resources/testharness.js"></script> |
3 <script src="../resources/testharnessreport.js"></script> | 3 <script src="../resources/testharnessreport.js"></script> |
4 <script src="../resources/mojo-helpers.js"></script> | 4 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></scr
ipt> |
| 5 <script src="file:///gen/mojo/public/interfaces/bindings/tests/test_associated_i
nterfaces.mojom.js"></script> |
5 <script> | 6 <script> |
6 'use strict'; | 7 'use strict'; |
7 | 8 |
8 setup({ explicit_done: true }); | 9 function SenderImpl(callback) { |
9 | 10 this.callback = callback; |
10 define([ | 11 } |
11 "mojo/public/interfaces/bindings/tests/test_associated_interfaces.mojom", | 12 |
12 "mojo/public/js/associated_bindings", | 13 SenderImpl.prototype.echo = function(value) { |
13 "mojo/public/js/bindings", | 14 return Promise.resolve({value: value}); |
14 ], function(testAssociatedInterfaces, associatedBindings, bindings) { | 15 }; |
15 | 16 |
16 function SenderImpl(callback) { | 17 SenderImpl.prototype.send = function(value) { |
17 this.callback = callback; | 18 if (this.callback) { |
| 19 this.callback(value); |
18 } | 20 } |
19 | 21 }; |
20 SenderImpl.prototype.echo = function(value) { | 22 |
21 return Promise.resolve({value: value}); | 23 var IntegerSenderImpl = SenderImpl; |
22 }; | 24 var StringSenderImpl = SenderImpl; |
23 | 25 |
24 SenderImpl.prototype.send = function(value) { | 26 function IntegerSenderConnectionImpl() { |
25 if (this.callback) { | 27 this.integerSenderBinding_ = null; |
26 this.callback(value); | 28 } |
27 } | 29 |
28 }; | 30 IntegerSenderConnectionImpl.prototype.getSender = function( |
29 | 31 integerSenderRequest) { |
30 var IntegerSenderImpl = SenderImpl; | 32 this.integerSenderBinding_ = new mojo.AssociatedBinding( |
31 var StringSenderImpl = SenderImpl; | 33 mojo.test.IntegerSender, new IntegerSenderImpl(), integerSenderRequest); |
32 | 34 }; |
33 function IntegerSenderConnectionImpl() { | 35 |
34 this.integerSenderBinding_ = null; | 36 IntegerSenderConnectionImpl.prototype.asyncGetSender = function() { |
35 } | 37 var integerSenderPtrInfo = new mojo.AssociatedInterfacePtrInfo(); |
36 | 38 var integerSenderRequest = mojo.makeRequest(integerSenderPtrInfo); |
37 IntegerSenderConnectionImpl.prototype.getSender = function( | 39 this.getSender(integerSenderRequest); |
38 integerSenderRequest) { | 40 return Promise.resolve({sender: integerSenderPtrInfo}); |
39 this.integerSenderBinding_ = new associatedBindings.AssociatedBinding( | 41 }; |
40 testAssociatedInterfaces.IntegerSender, | 42 |
41 new IntegerSenderImpl(), | 43 function IntegerSenderConnectionAtBothEndsImpl() { |
42 integerSenderRequest); | 44 this.integerSender_ = null; |
43 }; | 45 } |
44 | 46 |
45 IntegerSenderConnectionImpl.prototype.asyncGetSender = function() { | 47 IntegerSenderConnectionAtBothEndsImpl.prototype.getSender = |
46 var integerSenderPtrInfo = new | 48 IntegerSenderConnectionImpl.prototype.getSender; |
47 associatedBindings.AssociatedInterfacePtrInfo(); | 49 |
48 var integerSenderRequest = associatedBindings.makeRequest( | 50 IntegerSenderConnectionAtBothEndsImpl.prototype.setSender = function( |
49 integerSenderPtrInfo); | 51 integerSenderPtrInfo) { |
50 this.getSender(integerSenderRequest); | 52 this.integerSender_ = new mojo.test.IntegerSenderAssociatedPtr( |
51 return Promise.resolve({sender: integerSenderPtrInfo}); | 53 integerSenderPtrInfo); |
52 }; | 54 return this.integerSender_.echo(456); |
53 | 55 }; |
54 function IntegerSenderConnectionAtBothEndsImpl() { | 56 |
55 this.integerSender_ = null; | 57 function IntegerSenderConnectionImplWithConnectionError() { |
56 } | 58 this.integerSenderBinding_ = null; |
57 | 59 } |
58 IntegerSenderConnectionAtBothEndsImpl.prototype.getSender = | 60 |
59 IntegerSenderConnectionImpl.prototype.getSender; | 61 IntegerSenderConnectionImplWithConnectionError.prototype.getSender = |
60 | 62 function(integerSenderRequest) { |
61 IntegerSenderConnectionAtBothEndsImpl.prototype.setSender = function( | 63 this.integerSenderBinding_ = new mojo.AssociatedBinding( |
62 integerSenderPtrInfo) { | 64 mojo.test.IntegerSender, new IntegerSenderImpl(), integerSenderRequest); |
63 this.integerSender_ = new | 65 this.integerSenderBinding_.closeWithReason( |
64 testAssociatedInterfaces.AssociatedIntegerSenderPtr( | 66 {customReason: 42, description: 'hey'}); |
65 integerSenderPtrInfo); | 67 }; |
66 return this.integerSender_.echo(456); | 68 |
67 }; | 69 function SenderConnectionBindLaterImpl({getIntegerSenderCallback, |
68 | 70 getStringSenderCallback} = {}) { |
69 function IntegerSenderConnectionImplWithConnectionError() { | 71 this.getIntegerSenderCallback = getIntegerSenderCallback; |
70 this.integerSenderBinding_ = null; | 72 this.getStringSenderCallback = getStringSenderCallback; |
71 } | 73 this.integerSenderBinding_ = null; |
72 | 74 this.stringSenderBinding_ = null; |
73 IntegerSenderConnectionImplWithConnectionError.prototype.getSender = | 75 } |
74 function(integerSenderRequest) { | 76 |
75 this.integerSenderBinding_ = new associatedBindings.AssociatedBinding( | 77 SenderConnectionBindLaterImpl.prototype.getIntegerSender = |
76 testAssociatedInterfaces.IntegerSender, | 78 function(integerSenderRequest) { |
77 new IntegerSenderImpl(), | 79 setTimeout(() => { |
78 integerSenderRequest); | 80 this.integerSenderBinding_ = new mojo.AssociatedBinding( |
79 this.integerSenderBinding_.closeWithReason( | 81 mojo.test.IntegerSender, |
80 {custom_reason: 42, description: 'hey'}); | |
81 }; | |
82 | |
83 function SenderConnectionBindLaterImpl({getIntegerSenderCallback, | |
84 getStringSenderCallback} = {}) { | |
85 this.getIntegerSenderCallback = getIntegerSenderCallback; | |
86 this.getStringSenderCallback = getStringSenderCallback; | |
87 this.integerSenderBinding_ = null; | |
88 this.stringSenderBinding_ = null; | |
89 } | |
90 | |
91 SenderConnectionBindLaterImpl.prototype.getIntegerSender = | |
92 function(integerSenderRequest) { | |
93 setTimeout(() => { | |
94 this.integerSenderBinding_ = new associatedBindings.AssociatedBinding( | |
95 testAssociatedInterfaces.IntegerSender, | |
96 new IntegerSenderImpl(this.getIntegerSenderCallback), | |
97 integerSenderRequest); | |
98 }, 0); | |
99 }; | |
100 | |
101 SenderConnectionBindLaterImpl.prototype.getStringSender = | |
102 function(stringSenderRequest) { | |
103 this.stringSenderBinding_ = new associatedBindings.AssociatedBinding( | |
104 testAssociatedInterfaces.StringSender, | |
105 new StringSenderImpl(this.getStringSenderCallback), | |
106 stringSenderRequest); | |
107 }; | |
108 | |
109 function SenderConnectionImpl({getIntegerSenderCallback, | |
110 getStringSenderCallback} = {}) { | |
111 this.getIntegerSenderCallback = getIntegerSenderCallback; | |
112 this.getStringSenderCallback = getStringSenderCallback; | |
113 this.integerSenderBinding_ = null; | |
114 this.stringSenderBinding_ = null; | |
115 } | |
116 | |
117 SenderConnectionImpl.prototype.getIntegerSender = | |
118 function(integerSenderRequest) { | |
119 this.integerSenderBinding_ = new associatedBindings.AssociatedBinding( | |
120 testAssociatedInterfaces.IntegerSender, | |
121 new IntegerSenderImpl(this.getIntegerSenderCallback), | 82 new IntegerSenderImpl(this.getIntegerSenderCallback), |
122 integerSenderRequest); | 83 integerSenderRequest); |
123 }; | 84 }, 0); |
124 | 85 }; |
125 SenderConnectionImpl.prototype.getStringSender = | 86 |
126 function(stringSenderRequest) { | 87 SenderConnectionBindLaterImpl.prototype.getStringSender = |
127 this.stringSenderBinding_ = new associatedBindings.AssociatedBinding( | 88 function(stringSenderRequest) { |
128 testAssociatedInterfaces.StringSender, | 89 this.stringSenderBinding_ = new mojo.AssociatedBinding( |
129 new StringSenderImpl(this.getStringSenderCallback), | 90 mojo.test.StringSender, |
130 stringSenderRequest); | 91 new StringSenderImpl(this.getStringSenderCallback), |
131 }; | 92 stringSenderRequest); |
132 | 93 }; |
133 promise_test(async () => { | 94 |
134 var integerSenderConnection = new | 95 function SenderConnectionImpl({getIntegerSenderCallback, |
135 testAssociatedInterfaces.IntegerSenderConnectionPtr(); | 96 getStringSenderCallback} = {}) { |
136 var integerSenderConnectionBinding = new bindings.Binding( | 97 this.getIntegerSenderCallback = getIntegerSenderCallback; |
137 testAssociatedInterfaces.IntegerSenderConnection, | 98 this.getStringSenderCallback = getStringSenderCallback; |
138 new IntegerSenderConnectionImpl(), | 99 this.integerSenderBinding_ = null; |
139 bindings.makeRequest(integerSenderConnection)); | 100 this.stringSenderBinding_ = null; |
140 | 101 } |
141 // Sending AssociatedInterfaceRequest. | 102 |
142 var integerSenderPtrInfo0 = new | 103 SenderConnectionImpl.prototype.getIntegerSender = |
143 associatedBindings.AssociatedInterfacePtrInfo(); | 104 function(integerSenderRequest) { |
144 var integerSenderRequest0 = associatedBindings.makeRequest( | 105 this.integerSenderBinding_ = new mojo.AssociatedBinding( |
145 integerSenderPtrInfo0); | 106 mojo.test.IntegerSender, |
146 | 107 new IntegerSenderImpl(this.getIntegerSenderCallback), |
147 var integerSender0 = new | 108 integerSenderRequest); |
148 testAssociatedInterfaces.AssociatedIntegerSenderPtr( | 109 }; |
149 integerSenderPtrInfo0); | 110 |
150 | 111 SenderConnectionImpl.prototype.getStringSender = |
151 integerSenderConnection.getSender(integerSenderRequest0); | 112 function(stringSenderRequest) { |
152 assert_equals((await integerSender0.echo(123)).value, 123); | 113 this.stringSenderBinding_ = new mojo.AssociatedBinding( |
153 | 114 mojo.test.StringSender, |
154 // Recieving AssociatedInterfacePtrInfo. | 115 new StringSenderImpl(this.getStringSenderCallback), |
155 var integerSenderPtrInfo1 = | 116 stringSenderRequest); |
156 (await integerSenderConnection.asyncGetSender()).sender; | 117 }; |
157 var integerSender1 = new | 118 |
158 testAssociatedInterfaces.AssociatedIntegerSenderPtr( | 119 promise_test(async () => { |
159 integerSenderPtrInfo1); | 120 var integerSenderConnection = new |
160 assert_equals((await integerSender1.echo(456)).value, 456); | 121 mojo.test.IntegerSenderConnectionPtr(); |
161 }, 'pass associated interfaces'); | 122 var integerSenderConnectionBinding = new mojo.Binding( |
162 | 123 mojo.test.IntegerSenderConnection, |
163 // Bind to the same pipe two associated interfaces, whose implementation | 124 new IntegerSenderConnectionImpl(), |
164 // lives at different ends. Test that the two don't interfere. | 125 mojo.makeRequest(integerSenderConnection)); |
165 promise_test(async () => { | 126 |
166 var integerSenderConnectionAtBothEnds = new | 127 // Sending AssociatedInterfaceRequest. |
167 testAssociatedInterfaces.IntegerSenderConnectionAtBothEndsPtr(); | 128 var integerSenderPtrInfo0 = new mojo.AssociatedInterfacePtrInfo(); |
168 var integerSenderConnectionAtBothEndsBinding = new bindings.Binding( | 129 var integerSenderRequest0 = mojo.makeRequest(integerSenderPtrInfo0); |
169 testAssociatedInterfaces.IntegerSenderConnectionAtBothEnds, | 130 |
170 new IntegerSenderConnectionAtBothEndsImpl(), | 131 var integerSender0 = new mojo.test.IntegerSenderAssociatedPtr( |
171 bindings.makeRequest(integerSenderConnectionAtBothEnds)); | 132 integerSenderPtrInfo0); |
172 | 133 |
173 // Associated Interface whose Binding Impl lives on the other side. | 134 integerSenderConnection.getSender(integerSenderRequest0); |
174 // Sending AssociatedInterfaceRequest. | 135 assert_equals((await integerSender0.echo(123)).value, 123); |
175 var integerSenderPtrInfo0 = new | 136 |
176 associatedBindings.AssociatedInterfacePtrInfo(); | 137 // Recieving AssociatedInterfacePtrInfo. |
177 var integerSenderRequest0 = associatedBindings.makeRequest( | 138 var integerSenderPtrInfo1 = |
178 integerSenderPtrInfo0); | 139 (await integerSenderConnection.asyncGetSender()).sender; |
179 | 140 var integerSender1 = new mojo.test.IntegerSenderAssociatedPtr( |
180 var integerSender0 = new | 141 integerSenderPtrInfo1); |
181 testAssociatedInterfaces.AssociatedIntegerSenderPtr( | 142 assert_equals((await integerSender1.echo(456)).value, 456); |
182 integerSenderPtrInfo0); | 143 }, 'pass associated interfaces'); |
183 | 144 |
184 integerSenderConnectionAtBothEnds.getSender(integerSenderRequest0); | 145 // Bind to the same pipe two associated interfaces, whose implementation |
185 assert_equals((await integerSender0.echo(123)).value, 123); | 146 // lives at different ends. Test that the two don't interfere. |
186 | 147 promise_test(async () => { |
187 // Associated Interface whose Binding Impl lives on this side. | 148 var integerSenderConnectionAtBothEnds = new |
188 // Sending AssociatedInterfacePtrInfo. | 149 mojo.test.IntegerSenderConnectionAtBothEndsPtr(); |
189 var integerSenderPtrInfo1 = new | 150 var integerSenderConnectionAtBothEndsBinding = new mojo.Binding( |
190 associatedBindings.AssociatedInterfacePtrInfo(); | 151 mojo.test.IntegerSenderConnectionAtBothEnds, |
191 var integerSenderRequest1 = associatedBindings.makeRequest( | 152 new IntegerSenderConnectionAtBothEndsImpl(), |
192 integerSenderPtrInfo1); | 153 mojo.makeRequest(integerSenderConnectionAtBothEnds)); |
193 | 154 |
194 var integerSenderBinding = new associatedBindings.AssociatedBinding( | 155 // Associated Interface whose Binding Impl lives on the other side. |
195 testAssociatedInterfaces.IntegerSender, | 156 // Sending AssociatedInterfaceRequest. |
196 new IntegerSenderImpl(), | 157 var integerSenderPtrInfo0 = new mojo.AssociatedInterfacePtrInfo(); |
197 integerSenderRequest1); | 158 var integerSenderRequest0 = mojo.makeRequest(integerSenderPtrInfo0); |
198 | 159 |
199 assert_equals((await integerSenderConnectionAtBothEnds.setSender( | 160 var integerSender0 = new mojo.test.IntegerSenderAssociatedPtr( |
200 integerSenderPtrInfo1)).value, 456); | 161 integerSenderPtrInfo0); |
201 }, 'associated interfaces on both ends'); | 162 |
202 | 163 integerSenderConnectionAtBothEnds.getSender(integerSenderRequest0); |
203 promise_test(async () => { | 164 assert_equals((await integerSender0.echo(123)).value, 123); |
204 var integerSenderConnection = new | 165 |
205 testAssociatedInterfaces.IntegerSenderConnectionPtr(); | 166 // Associated Interface whose Binding Impl lives on this side. |
206 var integerSenderConnectionBinding = new bindings.Binding( | 167 // Sending AssociatedInterfacePtrInfo. |
207 testAssociatedInterfaces.IntegerSenderConnection, | 168 var integerSenderPtrInfo1 = new mojo.AssociatedInterfacePtrInfo(); |
208 new IntegerSenderConnectionImplWithConnectionError(), | 169 var integerSenderRequest1 = mojo.makeRequest(integerSenderPtrInfo1); |
209 bindings.makeRequest(integerSenderConnection)); | 170 |
210 | 171 var integerSenderBinding = new mojo.AssociatedBinding( |
211 // Sending AssociatedInterfaceRequest. | 172 mojo.test.IntegerSender, new IntegerSenderImpl(), |
212 var integerSenderPtrInfo0 = new | 173 integerSenderRequest1); |
213 associatedBindings.AssociatedInterfacePtrInfo(); | 174 |
214 var integerSenderRequest0 = associatedBindings.makeRequest( | 175 assert_equals((await integerSenderConnectionAtBothEnds.setSender( |
215 integerSenderPtrInfo0); | 176 integerSenderPtrInfo1)).value, 456); |
216 | 177 }, 'associated interfaces on both ends'); |
217 var integerSender0 = new | 178 |
218 testAssociatedInterfaces.AssociatedIntegerSenderPtr( | 179 promise_test(async () => { |
219 integerSenderPtrInfo0); | 180 var integerSenderConnection = new mojo.test.IntegerSenderConnectionPtr(); |
220 | 181 var integerSenderConnectionBinding = new mojo.Binding( |
221 integerSenderConnection.getSender(integerSenderRequest0); | 182 mojo.test.IntegerSenderConnection, |
222 await new Promise((resolve, reject) => { | 183 new IntegerSenderConnectionImplWithConnectionError(), |
223 integerSender0.ptr.setConnectionErrorHandler(function({custom_reason, | 184 mojo.makeRequest(integerSenderConnection)); |
224 description}) { | 185 |
225 assert_equals(custom_reason, 42); | 186 // Sending AssociatedInterfaceRequest. |
226 assert_equals(description, 'hey'); | 187 var integerSenderPtrInfo0 = new mojo.AssociatedInterfacePtrInfo(); |
227 resolve(); | 188 var integerSenderRequest0 = mojo.makeRequest(integerSenderPtrInfo0); |
228 }); | 189 |
229 }); | 190 var integerSender0 = new mojo.test.IntegerSenderAssociatedPtr( |
230 }, 'connection error with reason'); | 191 integerSenderPtrInfo0); |
231 | 192 |
232 // Test that AssociatedInterfacePtr is notified with connection error when | 193 integerSenderConnection.getSender(integerSenderRequest0); |
233 // the interface hasn't associated with a message pipe and the peer is | 194 await new Promise((resolve, reject) => { |
234 // closed. | 195 integerSender0.ptr.setConnectionErrorHandler(function({customReason, |
235 promise_test(async () => { | 196 description}) { |
236 var integerSenderPtrInfo = new | 197 assert_equals(customReason, 42); |
237 associatedBindings.AssociatedInterfacePtrInfo(); | 198 assert_equals(description, 'hey'); |
238 var integerSenderRequest = associatedBindings.makeRequest( | 199 resolve(); |
239 integerSenderPtrInfo); | 200 }); |
240 | 201 }); |
241 var integerSender = new | 202 }, 'connection error with reason'); |
242 testAssociatedInterfaces.AssociatedIntegerSenderPtr( | 203 |
243 integerSenderPtrInfo); | 204 // Test that AssociatedInterfacePtr is notified with connection error when |
244 | 205 // the interface hasn't associated with a message pipe and the peer is |
245 await new Promise((resolve, reject) => { | 206 // closed. |
246 integerSender.ptr.setConnectionErrorHandler(function({custom_reason, | 207 promise_test(async () => { |
247 description}) { | 208 var integerSenderPtrInfo = new mojo.AssociatedInterfacePtrInfo(); |
248 assert_equals(custom_reason, 42); | 209 var integerSenderRequest = mojo.makeRequest(integerSenderPtrInfo); |
249 assert_equals(description, 'hey'); | 210 |
250 resolve(); | 211 var integerSender = new mojo.test.IntegerSenderAssociatedPtr( |
251 }); | 212 integerSenderPtrInfo); |
252 integerSenderRequest.resetWithReason({custom_reason: 42, | 213 |
253 description: 'hey'}) | 214 await new Promise((resolve, reject) => { |
254 }); | 215 integerSender.ptr.setConnectionErrorHandler(function({customReason, |
255 }, 'pending AssociatedInterfacePtr connection error with reason'); | 216 description}) { |
256 | 217 assert_equals(customReason, 42); |
257 promise_test(async () => { | 218 assert_equals(description, 'hey'); |
258 var integerSenderConnection = new | 219 resolve(); |
259 testAssociatedInterfaces.IntegerSenderConnectionPtr(); | 220 }); |
260 var integerSenderConnectionBinding = new bindings.Binding( | 221 integerSenderRequest.resetWithReason({customReason: 42, |
261 testAssociatedInterfaces.IntegerSenderConnection, | 222 description: 'hey'}) |
262 new IntegerSenderConnectionImpl(), | 223 }); |
263 bindings.makeRequest(integerSenderConnection)); | 224 }, 'pending AssociatedInterfacePtr connection error with reason'); |
264 | 225 |
265 // Sending AssociatedInterfaceRequest. | 226 promise_test(async () => { |
266 var integerSenderPtrInfo0 = new | 227 var integerSenderConnection = new mojo.test.IntegerSenderConnectionPtr(); |
267 associatedBindings.AssociatedInterfacePtrInfo(); | 228 var integerSenderConnectionBinding = new mojo.Binding( |
268 var integerSenderRequest0 = associatedBindings.makeRequest( | 229 mojo.test.IntegerSenderConnection, new IntegerSenderConnectionImpl(), |
269 integerSenderPtrInfo0); | 230 mojo.makeRequest(integerSenderConnection)); |
270 var integerSender0 = new | 231 |
271 testAssociatedInterfaces.AssociatedIntegerSenderPtr( | 232 // Sending AssociatedInterfaceRequest. |
272 integerSenderPtrInfo0); | 233 var integerSenderPtrInfo0 = new mojo.AssociatedInterfacePtrInfo(); |
273 integerSenderConnection.getSender(integerSenderRequest0); | 234 var integerSenderRequest0 = mojo.makeRequest(integerSenderPtrInfo0); |
274 | 235 var integerSender0 = new mojo.test.IntegerSenderAssociatedPtr( |
275 // Recieving AssociatedInterfacePtrInfo. | 236 integerSenderPtrInfo0); |
276 var integerSenderPtrInfo1 = | 237 integerSenderConnection.getSender(integerSenderRequest0); |
277 (await integerSenderConnection.asyncGetSender()).sender; | 238 |
278 var integerSender1 = new | 239 // Recieving AssociatedInterfacePtrInfo. |
279 testAssociatedInterfaces.AssociatedIntegerSenderPtr( | 240 var integerSenderPtrInfo1 = |
280 integerSenderPtrInfo1); | 241 (await integerSenderConnection.asyncGetSender()).sender; |
281 | 242 var integerSender1 = new mojo.test.IntegerSenderAssociatedPtr( |
282 // Master InterfacePtrController reset triggers connection error handler on | 243 integerSenderPtrInfo1); |
283 // interface endpoint clients for all associated endpoints. | 244 |
284 var connectionErrorHandler0 = new Promise((resolve, reject) => { | 245 // Master InterfacePtrController reset triggers connection error handler on |
285 integerSender0.ptr.setConnectionErrorHandler(() => { | 246 // interface endpoint clients for all associated endpoints. |
286 resolve(); | 247 var connectionErrorHandler0 = new Promise((resolve, reject) => { |
287 }); | 248 integerSender0.ptr.setConnectionErrorHandler(() => { |
288 }); | 249 resolve(); |
289 | 250 }); |
290 var connectionErrorHandler1 = new Promise((resolve, reject) => { | 251 }); |
291 integerSender1.ptr.setConnectionErrorHandler(() => { | 252 |
292 resolve(); | 253 var connectionErrorHandler1 = new Promise((resolve, reject) => { |
293 }); | 254 integerSender1.ptr.setConnectionErrorHandler(() => { |
294 }); | 255 resolve(); |
295 | 256 }); |
296 setTimeout(integerSenderConnection.ptr.reset.bind( | 257 }); |
297 integerSenderConnection.ptr), 0); | 258 |
298 await Promise.all([connectionErrorHandler0, connectionErrorHandler1]); | 259 setTimeout(integerSenderConnection.ptr.reset.bind( |
299 }, 'all endpoints connectionErrorHandler called on master interface reset'); | 260 integerSenderConnection.ptr), 0); |
300 | 261 await Promise.all([connectionErrorHandler0, connectionErrorHandler1]); |
301 // Cache the current message and pause processing incoming messages if | 262 }, 'all endpoints connectionErrorHandler called on master interface reset'); |
302 // endpoint does not have client attached yet to ensure fifo message arrival. | 263 |
303 promise_test(async () => { | 264 // Cache the current message and pause processing incoming messages if |
304 var senderConnection = new | 265 // endpoint does not have client attached yet to ensure fifo message arrival. |
305 testAssociatedInterfaces.SenderConnectionPtr(); | 266 promise_test(async () => { |
306 var senderConnectionBindLaterImpl = new SenderConnectionBindLaterImpl(); | 267 var senderConnection = new mojo.test.SenderConnectionPtr(); |
307 var senderConnectionBinding = new bindings.Binding( | 268 var senderConnectionBindLaterImpl = new SenderConnectionBindLaterImpl(); |
308 testAssociatedInterfaces.SenderConnection, | 269 var senderConnectionBinding = new mojo.Binding( |
309 senderConnectionBindLaterImpl, | 270 mojo.test.SenderConnection, senderConnectionBindLaterImpl, |
310 bindings.makeRequest(senderConnection)); | 271 mojo.makeRequest(senderConnection)); |
311 | 272 |
312 // AssociatedInterfaceRequest for stringSender. | 273 // AssociatedInterfaceRequest for stringSender. |
313 var stringSenderPtrInfo = new | 274 var stringSenderPtrInfo = new mojo.AssociatedInterfacePtrInfo(); |
314 associatedBindings.AssociatedInterfacePtrInfo(); | 275 var stringSenderRequest = mojo.makeRequest(stringSenderPtrInfo); |
315 var stringSenderRequest = associatedBindings.makeRequest( | 276 var stringSender = new mojo.test.StringSenderAssociatedPtr( |
316 stringSenderPtrInfo); | 277 stringSenderPtrInfo); |
317 var stringSender = | 278 |
318 new testAssociatedInterfaces.AssociatedStringSenderPtr( | 279 // AssociatedInterfaceRequest for integerSender. |
319 stringSenderPtrInfo); | 280 var integerSenderPtrInfo = new mojo.AssociatedInterfacePtrInfo(); |
320 | 281 var integerSenderRequest = mojo.makeRequest(integerSenderPtrInfo); |
321 // AssociatedInterfaceRequest for integerSender. | 282 var integerSender = new mojo.test.IntegerSenderAssociatedPtr( |
322 var integerSenderPtrInfo = new | 283 integerSenderPtrInfo); |
323 associatedBindings.AssociatedInterfacePtrInfo(); | 284 |
324 var integerSenderRequest = associatedBindings.makeRequest( | 285 var value = await new Promise(function(resolve, reject) { |
325 integerSenderPtrInfo); | 286 senderConnectionBindLaterImpl.getIntegerSenderCallback = resolve; |
326 var integerSender = new | 287 senderConnectionBindLaterImpl.getStringSenderCallback= reject; |
327 testAssociatedInterfaces.AssociatedIntegerSenderPtr( | 288 senderConnection.getStringSender(stringSenderRequest); |
328 integerSenderPtrInfo); | 289 senderConnection.getIntegerSender(integerSenderRequest); |
329 | 290 // Test FIFO arrival order of message. |
330 var value = await new Promise(function(resolve, reject) { | 291 integerSender.send(456); // This message should arrive first. |
331 senderConnectionBindLaterImpl.getIntegerSenderCallback = resolve; | 292 stringSender.send('goodbye'); |
332 senderConnectionBindLaterImpl.getStringSenderCallback= reject; | 293 }); |
333 senderConnection.getStringSender(stringSenderRequest); | 294 |
334 senderConnection.getIntegerSender(integerSenderRequest); | 295 assert_equals(value, 456); |
335 // Test FIFO arrival order of message. | 296 }, 'fifo order should be preserved for messages'); |
336 integerSender.send(456); // This message should arrive first. | 297 |
| 298 promise_test(async () => { |
| 299 var senderConnection = new mojo.test.SenderConnectionPtr(); |
| 300 var senderConnectionImpl = new SenderConnectionImpl(); |
| 301 var senderConnectionBinding = new mojo.Binding( |
| 302 mojo.test.SenderConnection, senderConnectionImpl, |
| 303 mojo.makeRequest(senderConnection)); |
| 304 |
| 305 // AssociatedInterfaceRequest for stringSender. |
| 306 var stringSenderPtrInfo = new mojo.AssociatedInterfacePtrInfo(); |
| 307 var stringSenderRequest = mojo.makeRequest(stringSenderPtrInfo); |
| 308 var stringSender = new mojo.test.StringSenderAssociatedPtr( |
| 309 stringSenderPtrInfo); |
| 310 |
| 311 // AssociatedInterfaceRequest for integerSender. |
| 312 var integerSenderPtrInfo = new mojo.AssociatedInterfacePtrInfo(); |
| 313 var integerSenderRequest = mojo.makeRequest(integerSenderPtrInfo); |
| 314 var integerSender = new mojo.test.IntegerSenderAssociatedPtr( |
| 315 integerSenderPtrInfo); |
| 316 |
| 317 var value = await new Promise(function(resolve, reject) { |
| 318 senderConnectionImpl.getIntegerSenderCallback = reject; |
| 319 senderConnectionImpl.getStringSenderCallback= resolve; |
| 320 senderConnection.getStringSender(stringSenderRequest); |
| 321 senderConnection.getIntegerSender(integerSenderRequest); |
| 322 |
| 323 // Wait for integerSenderBinding to be created. |
| 324 integerSender.echo(100).then(function(result) { |
| 325 assert_equals(result.value, 100); |
| 326 |
| 327 // This causes this endpoint handle's endpoint client to be detached. |
| 328 var handle = senderConnectionImpl.integerSenderBinding_. |
| 329 interfaceEndpointClient_.passHandle(); |
| 330 |
| 331 // Cache message. Connector will pause processing incoming messages. |
| 332 integerSender.send(456); |
337 stringSender.send('goodbye'); | 333 stringSender.send('goodbye'); |
338 }); | 334 |
339 | 335 // Closing the target endpoint handle of the cached message will cause |
340 assert_equals(value, 456); | 336 // the cached message to be discarded and the connector to resume |
341 }, 'fifo order should be preserved for messages'); | 337 // processing incoming messages. |
342 | 338 setTimeout(handle.reset.bind(handle), 0); |
343 promise_test(async () => { | 339 }); |
344 var senderConnection = new | 340 }); |
345 testAssociatedInterfaces.SenderConnectionPtr(); | 341 |
346 var senderConnectionImpl = new SenderConnectionImpl(); | 342 assert_equals(value, 'goodbye'); |
347 var senderConnectionBinding = new bindings.Binding( | 343 }, 'discard cached message if target endpoint closed'); |
348 testAssociatedInterfaces.SenderConnection, | |
349 senderConnectionImpl, | |
350 bindings.makeRequest(senderConnection)); | |
351 | |
352 // AssociatedInterfaceRequest for stringSender. | |
353 var stringSenderPtrInfo = new | |
354 associatedBindings.AssociatedInterfacePtrInfo(); | |
355 var stringSenderRequest = associatedBindings.makeRequest( | |
356 stringSenderPtrInfo); | |
357 var stringSender = | |
358 new testAssociatedInterfaces.AssociatedStringSenderPtr( | |
359 stringSenderPtrInfo); | |
360 | |
361 // AssociatedInterfaceRequest for integerSender. | |
362 var integerSenderPtrInfo = new | |
363 associatedBindings.AssociatedInterfacePtrInfo(); | |
364 var integerSenderRequest = associatedBindings.makeRequest( | |
365 integerSenderPtrInfo); | |
366 var integerSender = new | |
367 testAssociatedInterfaces.AssociatedIntegerSenderPtr( | |
368 integerSenderPtrInfo); | |
369 | |
370 var value = await new Promise(function(resolve, reject) { | |
371 senderConnectionImpl.getIntegerSenderCallback = reject; | |
372 senderConnectionImpl.getStringSenderCallback= resolve; | |
373 senderConnection.getStringSender(stringSenderRequest); | |
374 senderConnection.getIntegerSender(integerSenderRequest); | |
375 | |
376 // Wait for integerSenderBinding to be created. | |
377 integerSender.echo(100).then(function(result) { | |
378 assert_equals(result.value, 100); | |
379 | |
380 // This causes this endpoint handle's endpoint client to be detached. | |
381 var handle = senderConnectionImpl.integerSenderBinding_. | |
382 interfaceEndpointClient_.passHandle(); | |
383 | |
384 // Cache message. Connector will pause processing incoming messages. | |
385 integerSender.send(456); | |
386 stringSender.send('goodbye'); | |
387 | |
388 // Closing the target endpoint handle of the cached message will cause | |
389 // the cached message to be discarded and the connector to resume | |
390 // processing incoming messages. | |
391 setTimeout(handle.reset.bind(handle), 0); | |
392 }); | |
393 }); | |
394 | |
395 assert_equals(value, 'goodbye'); | |
396 }, 'discard cached message if target endpoint closed'); | |
397 | |
398 done(); | |
399 }); | |
400 | 344 |
401 </script> | 345 </script> |
OLD | NEW |