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

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: Check cacheMessageData is set then get cachedMessage interface id Created 3 years, 7 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 11 matching lines...) Expand all
51 function IntegerSenderConnectionAtBothEndsImpl() { 54 function IntegerSenderConnectionAtBothEndsImpl() {
52 this.integerSender_ = null; 55 this.integerSender_ = null;
53 } 56 }
54 57
55 IntegerSenderConnectionAtBothEndsImpl.prototype.getSender = 58 IntegerSenderConnectionAtBothEndsImpl.prototype.getSender =
56 IntegerSenderConnectionImpl.prototype.getSender; 59 IntegerSenderConnectionImpl.prototype.getSender;
57 60
58 IntegerSenderConnectionAtBothEndsImpl.prototype.setSender = function( 61 IntegerSenderConnectionAtBothEndsImpl.prototype.setSender = function(
59 integerSenderPtrInfo) { 62 integerSenderPtrInfo) {
60 this.integerSender_ = new 63 this.integerSender_ = new
61 testAssociatedInterfaces.AssociatedIntegerSenderPtr(); 64 testAssociatedInterfaces.AssociatedIntegerSenderPtr(
62 this.integerSender_.ptr.bind(integerSenderPtrInfo); 65 integerSenderPtrInfo);
63 return this.integerSender_.echo(456); 66 return this.integerSender_.echo(456);
64 }; 67 };
65 68
66 function IntegerSenderConnectionImplWithConnectionError() { 69 function IntegerSenderConnectionImplWithConnectionError() {
67 this.integerSenderBinding_ = null; 70 this.integerSenderBinding_ = null;
68 } 71 }
69 72
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) {
92 setTimeout(() => {
93 this.integerSenderBinding_ = new associatedBindings.AssociatedBinding(
94 testAssociatedInterfaces.IntegerSender,
95 new IntegerSenderImpl(this.resolve),
96 integerSenderRequest);
97 }, 0);
98 };
99
100 SenderConnectionBindLaterImpl.prototype.getStringSender =
101 function(stringSenderRequest) {
102 setTimeout(() => {
103 this.stringSenderBinding_ = new associatedBindings.AssociatedBinding(
104 testAssociatedInterfaces.StringSender,
105 new StringSenderImpl(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 integerSenderPtrInfo0);
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 integerSenderPtrInfo1);
107 assert_equals((await integerSender1.echo(456)).value, 456); 137 assert_equals((await integerSender1.echo(456)).value, 456);
108 }, 'pass associated interfaces'); 138 }, 'pass associated interfaces');
109 139
110 // Bind to the same pipe two associated interfaces, whose implementation 140 // Bind to the same pipe two associated interfaces, whose implementation
111 // lives at different ends. Test that the two don't interfere. 141 // lives at different ends. Test that the two don't interfere.
112 promise_test(async () => { 142 promise_test(async () => {
113 var integerSenderConnectionAtBothEnds = new 143 var integerSenderConnectionAtBothEnds = new
114 testAssociatedInterfaces.IntegerSenderConnectionAtBothEndsPtr(); 144 testAssociatedInterfaces.IntegerSenderConnectionAtBothEndsPtr();
115 var integerSenderConnectionAtBothEndsBinding = new bindings.Binding( 145 var integerSenderConnectionAtBothEndsBinding = new bindings.Binding(
116 testAssociatedInterfaces.IntegerSenderConnectionAtBothEnds, 146 testAssociatedInterfaces.IntegerSenderConnectionAtBothEnds,
117 new IntegerSenderConnectionAtBothEndsImpl(), 147 new IntegerSenderConnectionAtBothEndsImpl(),
118 bindings.makeRequest(integerSenderConnectionAtBothEnds)); 148 bindings.makeRequest(integerSenderConnectionAtBothEnds));
119 149
120 // Associated Interface whose Binding Impl lives on the other side. 150 // Associated Interface whose Binding Impl lives on the other side.
121 // Sending AssociatedInterfaceRequest. 151 // Sending AssociatedInterfaceRequest.
122 var integerSenderPtrInfo0 = new 152 var integerSenderPtrInfo0 = new
123 associatedBindings.AssociatedInterfacePtrInfo(); 153 associatedBindings.AssociatedInterfacePtrInfo();
124 var integerSenderRequest0 = associatedBindings.makeRequest( 154 var integerSenderRequest0 = associatedBindings.makeRequest(
125 integerSenderPtrInfo0); 155 integerSenderPtrInfo0);
126 156
127 var integerSender0 = new 157 var integerSender0 = new
128 testAssociatedInterfaces.AssociatedIntegerSenderPtr(); 158 testAssociatedInterfaces.AssociatedIntegerSenderPtr(
129 integerSender0.ptr.bind(integerSenderPtrInfo0); 159 integerSenderPtrInfo0);
130 160
131 integerSenderConnectionAtBothEnds.getSender(integerSenderRequest0); 161 integerSenderConnectionAtBothEnds.getSender(integerSenderRequest0);
132 assert_equals((await integerSender0.echo(123)).value, 123); 162 assert_equals((await integerSender0.echo(123)).value, 123);
133 163
134 // Associated Interface whose Binding Impl lives on this side. 164 // Associated Interface whose Binding Impl lives on this side.
135 // Sending AssociatedInterfacePtrInfo. 165 // Sending AssociatedInterfacePtrInfo.
136 var integerSenderPtrInfo1 = new 166 var integerSenderPtrInfo1 = new
137 associatedBindings.AssociatedInterfacePtrInfo(); 167 associatedBindings.AssociatedInterfacePtrInfo();
138 var integerSenderRequest1 = associatedBindings.makeRequest( 168 var integerSenderRequest1 = associatedBindings.makeRequest(
139 integerSenderPtrInfo1); 169 integerSenderPtrInfo1);
(...skipping 15 matching lines...) Expand all
155 new IntegerSenderConnectionImplWithConnectionError(), 185 new IntegerSenderConnectionImplWithConnectionError(),
156 bindings.makeRequest(integerSenderConnection)); 186 bindings.makeRequest(integerSenderConnection));
157 187
158 // Sending AssociatedInterfaceRequest. 188 // Sending AssociatedInterfaceRequest.
159 var integerSenderPtrInfo0 = new 189 var integerSenderPtrInfo0 = new
160 associatedBindings.AssociatedInterfacePtrInfo(); 190 associatedBindings.AssociatedInterfacePtrInfo();
161 var integerSenderRequest0 = associatedBindings.makeRequest( 191 var integerSenderRequest0 = associatedBindings.makeRequest(
162 integerSenderPtrInfo0); 192 integerSenderPtrInfo0);
163 193
164 var integerSender0 = new 194 var integerSender0 = new
165 testAssociatedInterfaces.AssociatedIntegerSenderPtr(); 195 testAssociatedInterfaces.AssociatedIntegerSenderPtr(
166 integerSender0.ptr.bind(integerSenderPtrInfo0); 196 integerSenderPtrInfo0);
167 197
168 integerSenderConnection.getSender(integerSenderRequest0); 198 integerSenderConnection.getSender(integerSenderRequest0);
169 await new Promise((resolve, reject) => { 199 await new Promise((resolve, reject) => {
170 integerSender0.ptr.setConnectionErrorHandler(function({custom_reason, 200 integerSender0.ptr.setConnectionErrorHandler(function({custom_reason,
171 description}) { 201 description}) {
172 assert_equals(custom_reason, 42); 202 assert_equals(custom_reason, 42);
173 assert_equals(description, 'hey'); 203 assert_equals(description, 'hey');
174 resolve(); 204 resolve();
175 }); 205 });
176 }); 206 });
177 }, 'connection error with reason'); 207 }, 'connection error with reason');
178 208
179 promise_test(async () => { 209 promise_test(async () => {
180 var integerSenderConnection = new 210 var integerSenderConnection = new
181 testAssociatedInterfaces.IntegerSenderConnectionPtr(); 211 testAssociatedInterfaces.IntegerSenderConnectionPtr();
182 var integerSenderConnectionBinding = new bindings.Binding( 212 var integerSenderConnectionBinding = new bindings.Binding(
183 testAssociatedInterfaces.IntegerSenderConnection, 213 testAssociatedInterfaces.IntegerSenderConnection,
184 new IntegerSenderConnectionImpl(), 214 new IntegerSenderConnectionImpl(),
185 bindings.makeRequest(integerSenderConnection)); 215 bindings.makeRequest(integerSenderConnection));
186 216
187 // Sending AssociatedInterfaceRequest. 217 // Sending AssociatedInterfaceRequest.
188 var integerSenderPtrInfo0 = new 218 var integerSenderPtrInfo0 = new
189 associatedBindings.AssociatedInterfacePtrInfo(); 219 associatedBindings.AssociatedInterfacePtrInfo();
190 var integerSenderRequest0 = associatedBindings.makeRequest( 220 var integerSenderRequest0 = associatedBindings.makeRequest(
191 integerSenderPtrInfo0); 221 integerSenderPtrInfo0);
192 var integerSender0 = new 222 var integerSender0 = new
193 testAssociatedInterfaces.AssociatedIntegerSenderPtr(); 223 testAssociatedInterfaces.AssociatedIntegerSenderPtr(
194 integerSender0.ptr.bind(integerSenderPtrInfo0); 224 integerSenderPtrInfo0);
195 integerSenderConnection.getSender(integerSenderRequest0); 225 integerSenderConnection.getSender(integerSenderRequest0);
196 226
197 // Recieving AssociatedInterfacePtrInfo. 227 // Recieving AssociatedInterfacePtrInfo.
198 var integerSenderPtrInfo1 = 228 var integerSenderPtrInfo1 =
199 (await integerSenderConnection.asyncGetSender()).sender; 229 (await integerSenderConnection.asyncGetSender()).sender;
200 var integerSender1 = new 230 var integerSender1 = new
201 testAssociatedInterfaces.AssociatedIntegerSenderPtr(); 231 testAssociatedInterfaces.AssociatedIntegerSenderPtr(
202 integerSender1.ptr.bind(integerSenderPtrInfo1); 232 integerSenderPtrInfo1);
203 233
204 // Master InterfacePtrController reset triggers connection error handler on 234 // Master InterfacePtrController reset triggers connection error handler on
205 // interface endpoint clients for all associated endpoints. 235 // interface endpoint clients for all associated endpoints.
206 var connectionErrorHandler0 = new Promise((resolve, reject) => { 236 var connectionErrorHandler0 = new Promise((resolve, reject) => {
207 integerSender0.ptr.setConnectionErrorHandler(() => { 237 integerSender0.ptr.setConnectionErrorHandler(() => {
208 resolve(); 238 resolve();
209 }); 239 });
210 }); 240 });
211 241
212 var connectionErrorHandler1 = new Promise((resolve, reject) => { 242 var connectionErrorHandler1 = new Promise((resolve, reject) => {
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 // Cache the current message and pause processing incoming messages if
254 // endpoint does not have client attached yet to ensure fifo message arrival.
255 promise_test(async () => {
256 var value = await new Promise(function(resolve, reject) {
257 var senderConnection = new
258 testAssociatedInterfaces.SenderConnectionBindLaterPtr();
259 var senderConnectionBinding = new bindings.Binding(
260 testAssociatedInterfaces.SenderConnectionBindLater,
261 new SenderConnectionBindLaterImpl(resolve, reject),
262 bindings.makeRequest(senderConnection));
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 stringSenderPtrInfo);
273 senderConnection.getStringSender(stringSenderRequest);
274
275 // Wait for associated endpoint handle to be bound to the binding side
276 // and for method call to return a value. This tests that the message
277 // is cached properly because the handle is bound later.
278 stringSender.echo('hello').then((result) => {
279 assert_equals(result.value, 'hello');
280
281 // integerSender whose binding side has not bound the associated
282 // endpoint handle.
283 var integerSenderPtrInfo = new
284 associatedBindings.AssociatedInterfacePtrInfo();
285 var integerSenderRequest = associatedBindings.makeRequest(
286 integerSenderPtrInfo);
287 var integerSender = new
288 testAssociatedInterfaces.AssociatedIntegerSenderPtr(
289 integerSenderPtrInfo);
290 senderConnection.getIntegerSender(integerSenderRequest);
291
292 // Test FIFO arrival order of message.
293 integerSender.send(456); // This message should arrive first.
294 stringSender.send('goodbye');
295 });
296 });
297
298 assert_equals(value, 456);
299 }, 'fifo order should be preserved for messages');
300
223 done(); 301 done();
224 }); 302 });
225 303
226 </script> 304 </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