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

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

Issue 2844133003: Add associated binding set. Add associated_binding.html layout test. (Closed)
Patch Set: Make bindingType private and passed it into BindingSetEntry Created 3 years, 7 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
« no previous file with comments | « mojo/public/js/bindings.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 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>
OLDNEW
« no previous file with comments | « mojo/public/js/bindings.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698