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