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( | |
yzshen1
2017/04/27 17:28:38
Would you please explain this line?
wangjimmy
2017/04/27 20:26:49
Fixed.
| |
87 integerSenderConnection.ptr), 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 // AssociatedInterfaceRequest for integerSender. | |
101 var integerSenderPtrInfo0 = | |
yzshen1
2017/04/27 17:28:38
Please use a for loop to do the work, instead of d
wangjimmy
2017/04/27 20:26:49
Done.
| |
102 new associatedBindings.AssociatedInterfacePtrInfo(); | |
103 var integerSenderRequest0 = associatedBindings.makeRequest( | |
104 integerSenderPtrInfo0); | |
105 var integerSender0 = | |
106 new testAssociatedInterfaces.AssociatedIntegerSenderPtr( | |
107 integerSenderPtrInfo0); | |
108 | |
109 var integerSenderPtrInfo1 = | |
110 new associatedBindings.AssociatedInterfacePtrInfo(); | |
111 var integerSenderRequest1 = associatedBindings.makeRequest( | |
112 integerSenderPtrInfo1); | |
113 var integerSender1 = | |
114 new testAssociatedInterfaces.AssociatedIntegerSenderPtr( | |
115 integerSenderPtrInfo1); | |
116 | |
117 var integerSenderPtrInfo2 = | |
118 new associatedBindings.AssociatedInterfacePtrInfo(); | |
119 var integerSenderRequest2 = associatedBindings.makeRequest( | |
120 integerSenderPtrInfo2); | |
121 var integerSender2 = | |
122 new testAssociatedInterfaces.AssociatedIntegerSenderPtr( | |
123 integerSenderPtrInfo2); | |
124 | |
125 integerSenderConnection.getSender(integerSenderRequest0); | |
126 integerSenderConnection.getSender(integerSenderRequest1); | |
127 integerSenderConnection.getSender(integerSenderRequest2); | |
128 | |
129 // Wait for integerSenderConnection getSender message to be received by | |
130 // integerSenderConnection's binding side and all integerSender bindings | |
131 // to be created. | |
132 assert_equals((await integerSender0.echo(3)).value, 3); | |
133 assert_equals((await integerSender1.echo(4)).value, 4); | |
134 assert_equals((await integerSender2.echo(5)).value, 5); | |
135 | |
136 await new Promise((resolve, reject) => { | |
137 integerSenderConnectionImpl.integerSenderBindings | |
138 .setConnectionErrorHandler(() => {resolve();}); | |
139 integerSender0.ptr.reset(); | |
140 }); | |
141 | |
142 await new Promise((resolve, reject) => { | |
143 integerSenderConnectionImpl.integerSenderBindings | |
144 .setConnectionErrorHandler(function({custom_reason, description}) { | |
145 assert_equals(custom_reason, 32); | |
146 assert_equals(description, 'goodbye'); | |
147 resolve(); | |
148 }); | |
149 integerSender1.ptr.resetWithReason({custom_reason: 32, | |
150 description: 'goodbye'}); | |
151 }); | |
152 | |
153 // integerSender2's binding should still exist. | |
154 assert_equals((await integerSender2.echo(11)).value, 11); | |
155 | |
156 integerSenderConnectionImpl.integerSenderBindings.closeAllBindings(); | |
157 assert_true(integerSenderConnectionImpl.integerSenderBindings.isEmpty()); | |
158 }, 'associated binding set'); | |
159 | |
160 done(); | |
161 }); | |
162 | |
163 </script> | |
OLD | NEW |