| 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 |