| 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="../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 Loading... |
| 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 Loading... |
| 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> |
| OLD | NEW |