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

Side by Side Diff: third_party/WebKit/LayoutTests/mojo/associated_interface_ptr.html

Issue 2832303002: Fifo order should be preserved for messages on associated interfaces. (Closed)
Patch Set: Add string sender and use that instead of integer sender twice. Created 3 years, 8 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
« mojo/public/js/router.js ('K') | « mojo/public/js/router.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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="../resources/mojo-helpers.js"></script>
5 <script> 5 <script>
6 'use strict'; 6 'use strict';
7 7
8 setup({ explicit_done: true }); 8 setup({ explicit_done: true });
9 9
10 define([ 10 define([
11 "mojo/public/interfaces/bindings/tests/test_associated_interfaces.mojom", 11 "mojo/public/interfaces/bindings/tests/test_associated_interfaces.mojom",
12 "mojo/public/js/associated_bindings", 12 "mojo/public/js/associated_bindings",
13 "mojo/public/js/bindings", 13 "mojo/public/js/bindings",
14 ], function(testAssociatedInterfaces, associatedBindings, bindings) { 14 ], function(testAssociatedInterfaces, associatedBindings, bindings) {
15 15
16 function IntegerSenderImpl(callback) { 16 function SenderImpl(callback) {
17 this.callback = callback; 17 this.callback = callback;
18 } 18 }
19 19
20 IntegerSenderImpl.prototype.echo = function(value) { 20 SenderImpl.prototype.echo = function(value) {
21 return Promise.resolve({value: value}); 21 return Promise.resolve({value: value});
22 }; 22 };
23 23
24 IntegerSenderImpl.prototype.send = function(value) { 24 SenderImpl.prototype.send = function(value) {
25 if (this.callback) { 25 if (this.callback) {
26 this.callback(value); 26 this.callback(value);
27 } 27 }
28 }; 28 };
29 29
30 var IntegerSenderImpl = SenderImpl;
31 var StringSenderImpl = SenderImpl;
32
30 function IntegerSenderConnectionImpl() { 33 function IntegerSenderConnectionImpl() {
31 this.integerSenderBinding_ = null; 34 this.integerSenderBinding_ = null;
32 } 35 }
33 36
34 IntegerSenderConnectionImpl.prototype.getSender = function( 37 IntegerSenderConnectionImpl.prototype.getSender = function(
35 integerSenderRequest) { 38 integerSenderRequest) {
36 this.integerSenderBinding_ = new associatedBindings.AssociatedBinding( 39 this.integerSenderBinding_ = new associatedBindings.AssociatedBinding(
37 testAssociatedInterfaces.IntegerSender, 40 testAssociatedInterfaces.IntegerSender,
38 new IntegerSenderImpl(), 41 new IntegerSenderImpl(),
39 integerSenderRequest); 42 integerSenderRequest);
(...skipping 30 matching lines...) Expand all
70 IntegerSenderConnectionImplWithConnectionError.prototype.getSender = 73 IntegerSenderConnectionImplWithConnectionError.prototype.getSender =
71 function(integerSenderRequest) { 74 function(integerSenderRequest) {
72 this.integerSenderBinding_ = new associatedBindings.AssociatedBinding( 75 this.integerSenderBinding_ = new associatedBindings.AssociatedBinding(
73 testAssociatedInterfaces.IntegerSender, 76 testAssociatedInterfaces.IntegerSender,
74 new IntegerSenderImpl(), 77 new IntegerSenderImpl(),
75 integerSenderRequest); 78 integerSenderRequest);
76 this.integerSenderBinding_.closeWithReason( 79 this.integerSenderBinding_.closeWithReason(
77 {custom_reason: 42, description: 'hey'}); 80 {custom_reason: 42, description: 'hey'});
78 }; 81 };
79 82
83 function SenderConnectionBindLaterImpl(resolve, reject) {
84 this.resolve = resolve;
85 this.reject = reject;
86 this.integerSenderBinding_ = null;
87 this.stringSenderBinding_ = null;
88 }
89
90 SenderConnectionBindLaterImpl.prototype.getIntegerSender =
91 function(integerSenderRequest, callback_type) {
92 setTimeout(() => {
93 this.integerSenderBinding_ = new associatedBindings.AssociatedBinding(
94 testAssociatedInterfaces.IntegerSender,
95 new IntegerSenderImpl(callback_type ? this.resolve : this.reject),
96 integerSenderRequest);
97 }, 0);
98 };
99
100 SenderConnectionBindLaterImpl.prototype.getStringSender =
101 function(stringSenderRequest, callback_type) {
102 setTimeout(() => {
103 this.stringSenderBinding_ = new associatedBindings.AssociatedBinding(
104 testAssociatedInterfaces.StringSender,
105 new StringSenderImpl(callback_type ? this.resolve : this.reject),
106 stringSenderRequest);
107 }, 0);
108 };
109
80 promise_test(async () => { 110 promise_test(async () => {
81 var integerSenderConnection = new 111 var integerSenderConnection = new
82 testAssociatedInterfaces.IntegerSenderConnectionPtr(); 112 testAssociatedInterfaces.IntegerSenderConnectionPtr();
83 var integerSenderConnectionBinding = new bindings.Binding( 113 var integerSenderConnectionBinding = new bindings.Binding(
84 testAssociatedInterfaces.IntegerSenderConnection, 114 testAssociatedInterfaces.IntegerSenderConnection,
85 new IntegerSenderConnectionImpl(), 115 new IntegerSenderConnectionImpl(),
86 bindings.makeRequest(integerSenderConnection)); 116 bindings.makeRequest(integerSenderConnection));
87 117
88 // Sending AssociatedInterfaceRequest. 118 // Sending AssociatedInterfaceRequest.
89 var integerSenderPtrInfo0 = new 119 var integerSenderPtrInfo0 = new
90 associatedBindings.AssociatedInterfacePtrInfo(); 120 associatedBindings.AssociatedInterfacePtrInfo();
91 var integerSenderRequest0 = associatedBindings.makeRequest( 121 var integerSenderRequest0 = associatedBindings.makeRequest(
92 integerSenderPtrInfo0); 122 integerSenderPtrInfo0);
93 123
94 var integerSender0 = new 124 var integerSender0 = new
95 testAssociatedInterfaces.AssociatedIntegerSenderPtr(); 125 testAssociatedInterfaces.AssociatedIntegerSenderPtr();
96 integerSender0.ptr.bind(integerSenderPtrInfo0); 126 integerSender0.ptr.bind(integerSenderPtrInfo0);
yzshen1 2017/04/24 17:30:46 nit: It would be more concise if you directly pass
wangjimmy 2017/04/24 19:03:36 Done.
97 127
98 integerSenderConnection.getSender(integerSenderRequest0); 128 integerSenderConnection.getSender(integerSenderRequest0);
99 assert_equals((await integerSender0.echo(123)).value, 123); 129 assert_equals((await integerSender0.echo(123)).value, 123);
100 130
101 // Recieving AssociatedInterfacePtrInfo. 131 // Recieving AssociatedInterfacePtrInfo.
102 var integerSenderPtrInfo1 = 132 var integerSenderPtrInfo1 =
103 (await integerSenderConnection.asyncGetSender()).sender; 133 (await integerSenderConnection.asyncGetSender()).sender;
104 var integerSender1 = new 134 var integerSender1 = new
105 testAssociatedInterfaces.AssociatedIntegerSenderPtr(); 135 testAssociatedInterfaces.AssociatedIntegerSenderPtr();
106 integerSender1.ptr.bind(integerSenderPtrInfo1); 136 integerSender1.ptr.bind(integerSenderPtrInfo1);
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 integerSender1.ptr.setConnectionErrorHandler(() => { 243 integerSender1.ptr.setConnectionErrorHandler(() => {
214 resolve(); 244 resolve();
215 }); 245 });
216 }); 246 });
217 247
218 setTimeout(integerSenderConnection.ptr.reset.bind( 248 setTimeout(integerSenderConnection.ptr.reset.bind(
219 integerSenderConnection.ptr), 0); 249 integerSenderConnection.ptr), 0);
220 await Promise.all([connectionErrorHandler0, connectionErrorHandler1]); 250 await Promise.all([connectionErrorHandler0, connectionErrorHandler1]);
221 }, 'all endpoints connectionErrorHandler called on master interface reset'); 251 }, 'all endpoints connectionErrorHandler called on master interface reset');
222 252
253 promise_test(async () => {
254 var value = await new Promise(function(resolve, reject) {
yzshen1 2017/04/24 17:30:46 I feel that this test is unnecessarily complex. I
wangjimmy 2017/04/24 19:03:36 Done. Modified mojom to not be passing in callback
255 var senderConnection = new
256 testAssociatedInterfaces.SenderConnectionBindLaterPtr();
257 var senderConnectionBinding = new bindings.Binding(
258 testAssociatedInterfaces.SenderConnectionBindLater,
259 new SenderConnectionBindLaterImpl(resolve, reject),
260 bindings.makeRequest(senderConnection));
261
262 var callbackType = {REJECT_CALLBACK: 0, RESOLVE_CALLBACK: 1};
263
264 // Sending AssociatedInterfaceRequest.
265 var stringSenderPtrInfo = new
266 associatedBindings.AssociatedInterfacePtrInfo();
267 var stringSenderRequest = associatedBindings.makeRequest(
268 stringSenderPtrInfo);
269
270 var stringSender = new
271 testAssociatedInterfaces.AssociatedStringSenderPtr();
272 stringSender.ptr.bind(stringSenderPtrInfo);
273 senderConnection.getStringSender(stringSenderRequest,
274 callbackType.REJECT_CALLBACK);
275
276 // Wait for associated endpoint handle to be bound to the binding side
277 // and for method call to return a value. This tests that the message
278 // is cached properly because the handle is bound later.
279 stringSender.echo('hello').then((result) => {
280 assert_equals(result.value, 'hello');
281
282 // integerSender whose binding side has not bound the associated
283 // endpoint handle.
284 var integerSenderPtrInfo = new
285 associatedBindings.AssociatedInterfacePtrInfo();
286 var integerSenderRequest = associatedBindings.makeRequest(
287 integerSenderPtrInfo);
288 var integerSender = new
289 testAssociatedInterfaces.AssociatedIntegerSenderPtr();
290 integerSender.ptr.bind(integerSenderPtrInfo);
291 senderConnection.getIntegerSender(integerSenderRequest,
292 callbackType.RESOLVE_CALLBACK);
293
294 // Test FIFO arrival order of message.
295 integerSender.send(456); // This message should arrive first.
296 stringSender.send('goodbye');
297 });
298 });
299
300 assert_equals(value, 456);
301 }, `cache current message and pause processing incoming messages if endpoint
yzshen1 2017/04/24 17:30:46 int: I think you could convert this long descripti
wangjimmy 2017/04/24 19:03:36 Done.
302 does not have client attached yet. fifo order should be preserved for
303 messages`);
304
223 done(); 305 done();
224 }); 306 });
225 307
226 </script> 308 </script>
OLDNEW
« mojo/public/js/router.js ('K') | « mojo/public/js/router.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698