Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(208)

Side by Side Diff: third_party/WebKit/LayoutTests/mojo/associated_interface_ptr.html

Issue 2820783002: Add associated interfaces & bindings. (Closed)
Patch Set: Change Router.prototype.accept. Add a TODO for endpoint client not attached. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 IntegerSenderImpl(callback) {
17 this.callback = callback;
18 }
19
20 IntegerSenderImpl.prototype.echo = function(value) {
21 return Promise.resolve({value: value});
22 };
23
24 IntegerSenderImpl.prototype.send = function(value) {
25 if (this.callback) {
26 this.callback(value);
27 }
28 };
29
30 function IntegerSenderConnectionImpl() {
31 this.integerSenderBinding_ = null;
32 }
33
34 IntegerSenderConnectionImpl.prototype.getSender = function(
35 integerSenderRequest) {
36 this.integerSenderBinding_ = new associatedBindings.AssociatedBinding(
37 testAssociatedInterfaces.IntegerSender,
38 new IntegerSenderImpl(),
39 integerSenderRequest);
40 };
41
42 IntegerSenderConnectionImpl.prototype.asyncGetSender = function() {
43 var integerSenderPtrInfo = new
44 associatedBindings.AssociatedInterfacePtrInfo();
45 var integerSenderRequest = associatedBindings.makeRequest(
46 integerSenderPtrInfo);
47 this.getSender(integerSenderRequest);
48 return Promise.resolve({sender: integerSenderPtrInfo});
49 };
50
51 function IntegerSenderConnectionAtBothEndsImpl() {
52 this.integerSender_ = null;
53 }
54
55 IntegerSenderConnectionAtBothEndsImpl.prototype.getSender =
56 IntegerSenderConnectionImpl.prototype.getSender;
57
58 IntegerSenderConnectionAtBothEndsImpl.prototype.setSender = function(
59 integerSenderPtrInfo) {
60 this.integerSender_ = new
61 testAssociatedInterfaces.AssociatedIntegerSenderPtr();
62 this.integerSender_.ptr.bind(integerSenderPtrInfo);
63 return this.integerSender_.echo(456);
64 };
65
66 function IntegerSenderConnectionImplWithConnectionError() {
67 this.integerSenderBinding_ = null;
68 }
69
70 IntegerSenderConnectionImplWithConnectionError.prototype.getSender =
71 function(integerSenderRequest) {
72 this.integerSenderBinding_ = new associatedBindings.AssociatedBinding(
73 testAssociatedInterfaces.IntegerSender,
74 new IntegerSenderImpl(),
75 integerSenderRequest);
76 this.integerSenderBinding_.closeWithReason(
77 {custom_reason: 42, description: 'hey'});
78 };
79
80 promise_test(async () => {
81 var integerSenderConnection = new
82 testAssociatedInterfaces.IntegerSenderConnectionPtr();
83 var integerSenderConnectionBinding = new bindings.Binding(
84 testAssociatedInterfaces.IntegerSenderConnection,
85 new IntegerSenderConnectionImpl(),
86 bindings.makeRequest(integerSenderConnection));
87
88 // Sending AssociatedInterfaceRequest.
89 var integerSenderPtrInfo0 = new
90 associatedBindings.AssociatedInterfacePtrInfo();
91 var integerSenderRequest0 = associatedBindings.makeRequest(
92 integerSenderPtrInfo0);
93
94 var integerSender0 = new
95 testAssociatedInterfaces.AssociatedIntegerSenderPtr();
96 integerSender0.ptr.bind(integerSenderPtrInfo0);
97
98 integerSenderConnection.getSender(integerSenderRequest0);
99 assert_equals((await integerSender0.echo(123)).value, 123);
100
101 // Recieving AssociatedInterfacePtrInfo.
102 var integerSenderPtrInfo1 =
103 (await integerSenderConnection.asyncGetSender()).sender;
104 var integerSender1 = new
105 testAssociatedInterfaces.AssociatedIntegerSenderPtr();
106 integerSender1.ptr.bind(integerSenderPtrInfo1);
107 assert_equals((await integerSender1.echo(456)).value, 456);
108 }, 'pass associated interfaces');
109
110 // Bind to the same pipe two associated interfaces, whose implementation
111 // lives at different ends. Test that the two don't interfere.
112 promise_test(async () => {
113 var integerSenderConnectionAtBothEnds = new
114 testAssociatedInterfaces.IntegerSenderConnectionAtBothEndsPtr();
115 var integerSenderConnectionAtBothEndsBinding = new bindings.Binding(
116 testAssociatedInterfaces.IntegerSenderConnectionAtBothEnds,
117 new IntegerSenderConnectionAtBothEndsImpl(),
118 bindings.makeRequest(integerSenderConnectionAtBothEnds));
119
120 // Associated Interface whose Binding Impl lives on the other side.
121 // Sending AssociatedInterfaceRequest.
122 var integerSenderPtrInfo0 = new
123 associatedBindings.AssociatedInterfacePtrInfo();
124 var integerSenderRequest0 = associatedBindings.makeRequest(
125 integerSenderPtrInfo0);
126
127 var integerSender0 = new
128 testAssociatedInterfaces.AssociatedIntegerSenderPtr();
129 integerSender0.ptr.bind(integerSenderPtrInfo0);
130
131 integerSenderConnectionAtBothEnds.getSender(integerSenderRequest0);
132 assert_equals((await integerSender0.echo(123)).value, 123);
133
134 // Associated Interface whose Binding Impl lives on this side.
135 // Sending AssociatedInterfacePtrInfo.
136 var integerSenderPtrInfo1 = new
137 associatedBindings.AssociatedInterfacePtrInfo();
138 var integerSenderRequest1 = associatedBindings.makeRequest(
139 integerSenderPtrInfo1);
140
141 var integerSenderBinding = new associatedBindings.AssociatedBinding(
142 testAssociatedInterfaces.IntegerSender,
143 new IntegerSenderImpl(),
144 integerSenderRequest1);
145
146 assert_equals((await integerSenderConnectionAtBothEnds.setSender(
147 integerSenderPtrInfo1)).value, 456);
148 }, 'associated interfaces on both ends');
149
150 promise_test(async () => {
151 var integerSenderConnection = new
152 testAssociatedInterfaces.IntegerSenderConnectionPtr();
153 var integerSenderConnectionBinding = new bindings.Binding(
154 testAssociatedInterfaces.IntegerSenderConnection,
155 new IntegerSenderConnectionImplWithConnectionError(),
156 bindings.makeRequest(integerSenderConnection));
157
158 // Sending AssociatedInterfaceRequest.
159 var integerSenderPtrInfo0 = new
160 associatedBindings.AssociatedInterfacePtrInfo();
161 var integerSenderRequest0 = associatedBindings.makeRequest(
162 integerSenderPtrInfo0);
163
164 var integerSender0 = new
165 testAssociatedInterfaces.AssociatedIntegerSenderPtr();
166 integerSender0.ptr.bind(integerSenderPtrInfo0);
167
168 integerSenderConnection.getSender(integerSenderRequest0);
169 await new Promise((resolve, reject) => {
170 integerSender0.ptr.setConnectionErrorHandler(function({custom_reason,
171 description}) {
172 assert_equals(custom_reason, 42);
173 assert_equals(description, 'hey');
174 resolve();
175 });
176 });
177 }, 'connection error with reason');
178
179 promise_test(async () => {
180 var integerSenderConnection = new
181 testAssociatedInterfaces.IntegerSenderConnectionPtr();
182 var integerSenderConnectionBinding = new bindings.Binding(
183 testAssociatedInterfaces.IntegerSenderConnection,
184 new IntegerSenderConnectionImpl(),
185 bindings.makeRequest(integerSenderConnection));
186
187 // Sending AssociatedInterfaceRequest.
188 var integerSenderPtrInfo0 = new
189 associatedBindings.AssociatedInterfacePtrInfo();
190 var integerSenderRequest0 = associatedBindings.makeRequest(
191 integerSenderPtrInfo0);
192 var integerSender0 = new
193 testAssociatedInterfaces.AssociatedIntegerSenderPtr();
194 integerSender0.ptr.bind(integerSenderPtrInfo0);
195 integerSenderConnection.getSender(integerSenderRequest0);
196
197 // Recieving AssociatedInterfacePtrInfo.
198 var integerSenderPtrInfo1 =
199 (await integerSenderConnection.asyncGetSender()).sender;
200 var integerSender1 = new
201 testAssociatedInterfaces.AssociatedIntegerSenderPtr();
202 integerSender1.ptr.bind(integerSenderPtrInfo1);
203
204 // Master InterfacePtrController reset triggers connection error handler on
205 // interface endpoint clients for all associated endpoints.
206 var connectionErrorHandler0 = new Promise((resolve, reject) => {
207 integerSender0.ptr.setConnectionErrorHandler(() => {
208 resolve();
209 });
210 });
211
212 var connectionErrorHandler1 = new Promise((resolve, reject) => {
213 integerSender1.ptr.setConnectionErrorHandler(() => {
214 resolve();
215 });
216 });
217
218 setTimeout(integerSenderConnection.ptr.reset.bind(
219 integerSenderConnection.ptr), 0);
220 await Promise.all([connectionErrorHandler0, connectionErrorHandler1]);
221 }, 'all endpoints connectionErrorHandler called on master interface reset');
222
223 done();
224 });
225
226 </script>
OLDNEW
« no previous file with comments | « mojo/public/tools/bindings/pylib/mojom/generate/module.py ('k') | third_party/WebKit/LayoutTests/mojo/codec.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698