OLD | NEW |
(Empty) | |
| 1 <!DOCTYPE html> |
| 2 <script src="../resources/testharness.js"></script> |
| 3 <script src="../resources/testharnessreport.js"></script> |
| 4 <script src="../resources/mojo-helpers.js"></script> |
| 5 <script> |
| 6 'use strict'; |
| 7 |
| 8 setup({ explicit_done: true }); |
| 9 |
| 10 define([ |
| 11 "mojo/public/interfaces/bindings/tests/test_associated_interfaces.mojom", |
| 12 "mojo/public/js/associated_bindings", |
| 13 "mojo/public/js/bindings", |
| 14 ], function(testAssociatedInterfaces, associatedBindings, bindings) { |
| 15 |
| 16 function SenderImpl(callback) { |
| 17 this.callback = callback; |
| 18 } |
| 19 |
| 20 SenderImpl.prototype.echo = function(value) { |
| 21 return Promise.resolve({value: value}); |
| 22 }; |
| 23 |
| 24 SenderImpl.prototype.send = function(value) { |
| 25 if (this.callback) { |
| 26 this.callback(value); |
| 27 } |
| 28 }; |
| 29 |
| 30 var IntegerSenderImpl = SenderImpl; |
| 31 |
| 32 function IntegerSenderConnectionImpl() { |
| 33 this.integerSenderBindings = new associatedBindings.AssociatedBindingSet( |
| 34 testAssociatedInterfaces.IntegerSender); |
| 35 } |
| 36 |
| 37 IntegerSenderConnectionImpl.prototype.getSender = function( |
| 38 integerSenderRequest) { |
| 39 this.integerSenderBindings.addBinding(new IntegerSenderImpl(), |
| 40 integerSenderRequest); |
| 41 }; |
| 42 |
| 43 promise_test(async () => { |
| 44 var integerSenderConnection = |
| 45 new testAssociatedInterfaces.IntegerSenderConnectionPtr(); |
| 46 var integerSenderConnectionImpl = new IntegerSenderConnectionImpl(); |
| 47 var integerSenderConnectionBinding = new bindings.Binding( |
| 48 testAssociatedInterfaces.IntegerSenderConnection, |
| 49 integerSenderConnectionImpl, |
| 50 bindings.makeRequest(integerSenderConnection)); |
| 51 |
| 52 // AssociatedInterfaceRequest for integerSender. |
| 53 var integerSenderPtrInfo0 = |
| 54 new associatedBindings.AssociatedInterfacePtrInfo(); |
| 55 var integerSenderRequest0 = associatedBindings.makeRequest( |
| 56 integerSenderPtrInfo0); |
| 57 var integerSender0 = |
| 58 new testAssociatedInterfaces.AssociatedIntegerSenderPtr( |
| 59 integerSenderPtrInfo0); |
| 60 |
| 61 var integerSenderPtrInfo1 = |
| 62 new associatedBindings.AssociatedInterfacePtrInfo(); |
| 63 var integerSenderRequest1 = associatedBindings.makeRequest( |
| 64 integerSenderPtrInfo1); |
| 65 var integerSender1 = |
| 66 new testAssociatedInterfaces.AssociatedIntegerSenderPtr( |
| 67 integerSenderPtrInfo1); |
| 68 |
| 69 integerSenderConnection.getSender(integerSenderRequest0); |
| 70 integerSenderConnection.getSender(integerSenderRequest1); |
| 71 |
| 72 // Master Binding close triggers connection error handler on |
| 73 // interface endpoint clients for all associated endpoints. |
| 74 var connectionErrorHandler0 = new Promise((resolve, reject) => { |
| 75 integerSender0.ptr.setConnectionErrorHandler(() => { |
| 76 resolve(); |
| 77 }); |
| 78 }); |
| 79 |
| 80 var connectionErrorHandler1 = new Promise((resolve, reject) => { |
| 81 integerSender1.ptr.setConnectionErrorHandler(() => { |
| 82 resolve(); |
| 83 }); |
| 84 }); |
| 85 |
| 86 setTimeout(integerSenderConnectionBinding.close.bind( |
| 87 integerSenderConnectionBinding), 0); |
| 88 await Promise.all([connectionErrorHandler0, connectionErrorHandler1]); |
| 89 }, 'all endpoints connectionErrorHandler called on master binding close'); |
| 90 |
| 91 promise_test(async () => { |
| 92 var integerSenderConnection = |
| 93 new testAssociatedInterfaces.IntegerSenderConnectionPtr(); |
| 94 var integerSenderConnectionImpl = new IntegerSenderConnectionImpl(); |
| 95 var integerSenderConnectionBinding = new bindings.Binding( |
| 96 testAssociatedInterfaces.IntegerSenderConnection, |
| 97 integerSenderConnectionImpl, |
| 98 bindings.makeRequest(integerSenderConnection)); |
| 99 |
| 100 var integerSenders = []; |
| 101 for (var i = 0; i < 3; i++) { |
| 102 // AssociatedInterfaceRequest for integerSender. |
| 103 var integerSenderPtrInfo = |
| 104 new associatedBindings.AssociatedInterfacePtrInfo(); |
| 105 var integerSenderRequest = associatedBindings.makeRequest( |
| 106 integerSenderPtrInfo); |
| 107 var integerSender = |
| 108 new testAssociatedInterfaces.AssociatedIntegerSenderPtr( |
| 109 integerSenderPtrInfo); |
| 110 integerSenderConnection.getSender(integerSenderRequest); |
| 111 |
| 112 // Wait for integerSenderConnection getSender message to be received by |
| 113 // integerSenderConnection's binding side and all integerSender binding |
| 114 // to be created. |
| 115 assert_equals((await integerSender.echo(3)).value, 3); |
| 116 integerSenders.push(integerSender); |
| 117 } |
| 118 |
| 119 await new Promise((resolve, reject) => { |
| 120 integerSenderConnectionImpl.integerSenderBindings |
| 121 .setConnectionErrorHandler(() => {resolve();}); |
| 122 integerSenders[0].ptr.reset(); |
| 123 }); |
| 124 |
| 125 await new Promise((resolve, reject) => { |
| 126 integerSenderConnectionImpl.integerSenderBindings |
| 127 .setConnectionErrorHandler(function({custom_reason, description}) { |
| 128 assert_equals(custom_reason, 32); |
| 129 assert_equals(description, 'goodbye'); |
| 130 resolve(); |
| 131 }); |
| 132 integerSenders[1].ptr.resetWithReason({custom_reason: 32, |
| 133 description: 'goodbye'}); |
| 134 }); |
| 135 |
| 136 // integerSender2's binding should still exist. |
| 137 assert_equals((await integerSenders[2].echo(11)).value, 11); |
| 138 |
| 139 integerSenderConnectionImpl.integerSenderBindings.closeAllBindings(); |
| 140 assert_true(integerSenderConnectionImpl.integerSenderBindings.isEmpty()); |
| 141 }, 'associated binding set'); |
| 142 |
| 143 done(); |
| 144 }); |
| 145 |
| 146 </script> |
OLD | NEW |