OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <title>ServiceWorkerGlobalScope: ExtendableMessageEvent</title> | 2 <title>ServiceWorkerGlobalScope: ExtendableMessageEvent</title> |
3 <script src='../../resources/testharness.js'></script> | 3 <script src='/resources/testharness.js'></script> |
4 <script src='../../resources/testharnessreport.js'></script> | 4 <script src='/resources/testharnessreport.js'></script> |
5 <script src='../resources/test-helpers.js'></script> | 5 <script src='../resources/test-helpers.sub.js'></script> |
| 6 <script src='./resources/extendable-message-event.js'></script> |
6 <script> | 7 <script> |
7 | |
8 promise_test(function(t) { | |
9 var script = 'resources/extendable-message-event-constructor-worker.js'; | |
10 var scope = 'resources/scope/extendable-message-event-constructor'; | |
11 var registration; | |
12 | |
13 return service_worker_unregister_and_register(t, script, scope) | |
14 .then(function(r) { | |
15 registration = r; | |
16 add_completion_callback(function() { registration.unregister(); }); | |
17 return wait_for_state(t, registration.installing, 'activated'); | |
18 }) | |
19 .then(function() { | |
20 var saw_message = new Promise(function(resolve) { | |
21 navigator.serviceWorker.onmessage = | |
22 function(event) { resolve(event.data); }; | |
23 }); | |
24 registration.active.postMessage(''); | |
25 return saw_message; | |
26 }) | |
27 .then(function(result) { | |
28 assert_equals(result, 'success'); | |
29 }); | |
30 }, 'Test the constructor for ExtendableMessageEvent'); | |
31 | |
32 promise_test(function(t) { | 8 promise_test(function(t) { |
33 var script = 'resources/extendable-message-event-worker.js'; | 9 var script = 'resources/extendable-message-event-worker.js'; |
34 var scope = 'resources/scope/extendable-message-event-from-toplevel'; | 10 var scope = 'resources/scope/extendable-message-event-from-toplevel'; |
35 var registration; | 11 var registration; |
36 | 12 |
37 return service_worker_unregister_and_register(t, script, scope) | 13 return service_worker_unregister_and_register(t, script, scope) |
38 .then(function(r) { | 14 .then(function(r) { |
39 registration = r; | 15 registration = r; |
40 add_completion_callback(function() { registration.unregister(); }); | 16 add_completion_callback(function() { registration.unregister(); }); |
41 return wait_for_state(t, registration.installing, 'activated'); | 17 return wait_for_state(t, registration.installing, 'activated'); |
42 }) | 18 }) |
43 .then(function() { | 19 .then(function() { |
44 var saw_message = new Promise(function(resolve) { | 20 var saw_message = new Promise(function(resolve) { |
45 navigator.serviceWorker.onmessage = | 21 navigator.serviceWorker.onmessage = |
46 function(event) { resolve(event.data); } | 22 function(event) { resolve(event.data); } |
47 }); | 23 }); |
48 var channel = new MessageChannel; | 24 var channel = new MessageChannel; |
49 registration.active.postMessage('', [channel.port1]); | 25 registration.active.postMessage('', [channel.port1]); |
50 return saw_message; | 26 return saw_message; |
51 }) | 27 }) |
52 .then(function(results) { | 28 .then(function(results) { |
53 var expected_results = [ | 29 var expected = { |
54 'Client message: [object ExtendableMessageEvent]', | 30 constructor: { name: 'ExtendableMessageEvent' }, |
55 ' event.origin: ' + location.origin, | 31 origin: location.origin, |
56 ' event.lastEventId: ', | 32 lastEventId: '', |
57 ' event.source: [object WindowClient]', | 33 source: { |
58 ' event.source.url: ' + location.href, | 34 constructor: { name: 'WindowClient' }, |
59 ' event.source.frameType: top-level', | 35 frameType: 'top-level', |
60 ' event.source.visibilityState: visible', | 36 url: location.href, |
61 ' event.source.focused: true', | 37 visibilityState: 'visible', |
62 ' event.ports: [object MessagePort]', | 38 focused: true |
63 ]; | 39 }, |
64 assert_array_equals(results, expected_results); | 40 ports: [ { constructor: { name: 'MessagePort' } } ] |
| 41 }; |
| 42 wptEME.assert_equals(results, expected); |
65 }); | 43 }); |
66 }, 'Post an extendable message from a top-level client'); | 44 }, 'Post an extendable message from a top-level client'); |
67 | 45 |
68 promise_test(function(t) { | 46 promise_test(function(t) { |
69 var script = 'resources/extendable-message-event-worker.js'; | 47 var script = 'resources/extendable-message-event-worker.js'; |
70 var scope = 'resources/scope/extendable-message-event-from-nested'; | 48 var scope = 'resources/scope/extendable-message-event-from-nested'; |
71 var frame; | 49 var frame; |
72 | 50 |
73 return service_worker_unregister_and_register(t, script, scope) | 51 return service_worker_unregister_and_register(t, script, scope) |
74 .then(function(registration) { | 52 .then(function(registration) { |
75 add_completion_callback(function() { registration.unregister(); }); | 53 add_completion_callback(function() { registration.unregister(); }); |
76 return wait_for_state(t, registration.installing, 'activated'); | 54 return wait_for_state(t, registration.installing, 'activated'); |
77 }) | 55 }) |
78 .then(function() { return with_iframe(scope); }) | 56 .then(function() { return with_iframe(scope); }) |
79 .then(function(f) { | 57 .then(function(f) { |
80 frame = f; | 58 frame = f; |
81 add_completion_callback(function() { frame.remove(); }); | 59 add_completion_callback(function() { frame.remove(); }); |
82 var saw_message = new Promise(function(resolve) { | 60 var saw_message = new Promise(function(resolve) { |
83 frame.contentWindow.navigator.serviceWorker.onmessage = | 61 frame.contentWindow.navigator.serviceWorker.onmessage = |
84 function(event) { resolve(event.data); } | 62 function(event) { resolve(event.data); } |
85 }); | 63 }); |
86 f.contentWindow.navigator.serviceWorker.controller.postMessage(''); | 64 f.contentWindow.navigator.serviceWorker.controller.postMessage(''); |
87 return saw_message; | 65 return saw_message; |
88 }) | 66 }) |
89 .then(function(results) { | 67 .then(function(results) { |
90 var expected_results = [ | 68 var expected = { |
91 'Client message: [object ExtendableMessageEvent]', | 69 constructor: { name: 'ExtendableMessageEvent' }, |
92 ' event.origin: ' + frame.contentWindow.location.origin, | 70 origin: location.origin, |
93 ' event.lastEventId: ', | 71 lastEventId: '', |
94 ' event.source: [object WindowClient]', | 72 source: { |
95 ' event.source.url: ' + frame.contentWindow.location.href, | 73 constructor: { name: 'WindowClient' }, |
96 ' event.source.frameType: nested', | 74 url: frame.contentWindow.location.href, |
97 ' event.source.visibilityState: visible', | 75 frameType: 'nested', |
98 ' event.source.focused: false', | 76 visibilityState: 'visible', |
99 ' event.ports: ', | 77 focused: false |
100 ]; | 78 }, |
101 assert_array_equals(results, expected_results); | 79 ports: [] |
| 80 }; |
| 81 wptEME.assert_equals(results, expected); |
102 }); | 82 }); |
103 }, 'Post an extendable message from a nested client'); | 83 }, 'Post an extendable message from a nested client'); |
104 | 84 |
105 promise_test(function(t) { | 85 promise_test(function(t) { |
106 var script = 'resources/extendable-message-event-loopback-worker.js'; | 86 var script = 'resources/extendable-message-event-loopback-worker.js'; |
107 var scope = 'resources/scope/extendable-message-event-loopback'; | 87 var scope = 'resources/scope/extendable-message-event-loopback'; |
108 var registration; | 88 var registration; |
109 | 89 |
110 return service_worker_unregister_and_register(t, script, scope) | 90 return service_worker_unregister_and_register(t, script, scope) |
111 .then(function(r) { | 91 .then(function(r) { |
112 registration = r; | 92 registration = r; |
113 add_completion_callback(function() { registration.unregister(); }); | 93 add_completion_callback(function() { registration.unregister(); }); |
114 return wait_for_state(t, registration.installing, 'activated'); | 94 return wait_for_state(t, registration.installing, 'activated'); |
115 }) | 95 }) |
116 .then(function() { | 96 .then(function() { |
117 var results = []; | 97 var results = []; |
118 var saw_message = new Promise(function(resolve) { | 98 var saw_message = new Promise(function(resolve) { |
119 navigator.serviceWorker.onmessage = function(event) { | 99 navigator.serviceWorker.onmessage = function(event) { |
120 switch (event.data.type) { | 100 switch (event.data.type) { |
121 case 'record': | 101 case 'record': |
122 Array.prototype.push.apply(results, event.data.results); | 102 results.push(event.data.results); |
123 break; | 103 break; |
124 case 'finish': | 104 case 'finish': |
125 resolve(results); | 105 resolve(results); |
126 break; | 106 break; |
127 } | 107 } |
128 }; | 108 }; |
129 }); | 109 }); |
130 registration.active.postMessage({type: 'start'}); | 110 registration.active.postMessage({type: 'start'}); |
131 return saw_message; | 111 return saw_message; |
132 }) | 112 }) |
133 .then(function(results) { | 113 .then(function(results) { |
134 var expected_results = [ | 114 assert_equals(results.length, 2); |
135 '1st loopback: [object ExtendableMessageEvent]', | 115 |
136 ' event.origin: ' + location.origin, | 116 var expected_trial_1 = { |
137 ' event.lastEventId: ', | 117 constructor: { name: 'ExtendableMessageEvent' }, |
138 ' event.source: [object ServiceWorker]', | 118 origin: location.origin, |
139 ' event.source.scriptURL: ' + normalizeURL(script), | 119 lastEventId: '', |
140 ' event.source.state: activated', | 120 source: { |
141 ' event.ports: ', | 121 constructor: { name: 'ServiceWorker' }, |
142 '2nd loopback: [object ExtendableMessageEvent]', | 122 scriptURL: normalizeURL(script), |
143 ' event.origin: ' + location.origin, | 123 state: 'activated' |
144 ' event.lastEventId: ', | 124 }, |
145 ' event.source: [object ServiceWorker]', | 125 ports: [] |
146 ' event.source.scriptURL: ' + normalizeURL(script), | 126 }; |
147 ' event.source.state: activated', | 127 assert_equals(results[0].trial, 1); |
148 ' event.ports: ', | 128 wptEME.assert_equals(results[0].event, expected_trial_1); |
149 ]; | 129 |
150 assert_array_equals(results, expected_results); | 130 var expected_trial_2 = { |
| 131 constructor: { name: 'ExtendableMessageEvent' }, |
| 132 origin: location.origin, |
| 133 lastEventId: '', |
| 134 source: { |
| 135 constructor: { name: 'ServiceWorker' }, |
| 136 scriptURL: normalizeURL(script), |
| 137 state: 'activated' |
| 138 }, |
| 139 ports: [], |
| 140 }; |
| 141 assert_equals(results[1].trial, 2); |
| 142 wptEME.assert_equals(results[1].event, expected_trial_2); |
151 }); | 143 }); |
152 }, 'Post loopback extendable messages'); | 144 }, 'Post loopback extendable messages'); |
153 | 145 |
154 promise_test(function(t) { | 146 promise_test(function(t) { |
155 var script1 = 'resources/extendable-message-event-ping-worker.js'; | 147 var script1 = 'resources/extendable-message-event-ping-worker.js'; |
156 var script2 = 'resources/extendable-message-event-pong-worker.js'; | 148 var script2 = 'resources/extendable-message-event-pong-worker.js'; |
157 var scope = 'resources/scope/extendable-message-event-pingpong'; | 149 var scope = 'resources/scope/extendable-message-event-pingpong'; |
158 var registration; | 150 var registration; |
159 | 151 |
160 return service_worker_unregister_and_register(t, script1, scope) | 152 return service_worker_unregister_and_register(t, script1, scope) |
(...skipping 12 matching lines...) Expand all Loading... |
173 }) | 165 }) |
174 .then(function(r) { | 166 .then(function(r) { |
175 return wait_for_state(t, r.installing, 'installed'); | 167 return wait_for_state(t, r.installing, 'installed'); |
176 }) | 168 }) |
177 .then(function() { | 169 .then(function() { |
178 var results = []; | 170 var results = []; |
179 var saw_message = new Promise(function(resolve) { | 171 var saw_message = new Promise(function(resolve) { |
180 navigator.serviceWorker.onmessage = function(event) { | 172 navigator.serviceWorker.onmessage = function(event) { |
181 switch (event.data.type) { | 173 switch (event.data.type) { |
182 case 'record': | 174 case 'record': |
183 Array.prototype.push.apply(results, event.data.results); | 175 results.push(event.data.results); |
184 break; | 176 break; |
185 case 'finish': | 177 case 'finish': |
186 resolve(results); | 178 resolve(results); |
187 break; | 179 break; |
188 } | 180 } |
189 }; | 181 }; |
190 }); | 182 }); |
191 registration.active.postMessage({type: 'start'}); | 183 registration.active.postMessage({type: 'start'}); |
192 return saw_message; | 184 return saw_message; |
193 }) | 185 }) |
194 .then(function(results) { | 186 .then(function(results) { |
195 var expected_results = [ | 187 assert_equals(results.length, 2); |
196 'Ping message: [object ExtendableMessageEvent]', | 188 |
197 ' event.origin: ' + location.origin, | 189 var expected_ping = { |
198 ' event.lastEventId: ', | 190 constructor: { name: 'ExtendableMessageEvent' }, |
199 ' event.source: [object ServiceWorker]', | 191 origin: location.origin, |
200 ' event.source.scriptURL: ' + normalizeURL(script1), | 192 lastEventId: '', |
201 ' event.source.state: activated', | 193 source: { |
202 ' event.ports: ', | 194 constructor: { name: 'ServiceWorker' }, |
203 'Pong message: [object ExtendableMessageEvent]', | 195 scriptURL: normalizeURL(script1), |
204 ' event.origin: ' + location.origin, | 196 state: 'activated' |
205 ' event.lastEventId: ', | 197 }, |
206 ' event.source: [object ServiceWorker]', | 198 ports: [] |
207 ' event.source.scriptURL: ' + normalizeURL(script2), | 199 }; |
208 ' event.source.state: installed', | 200 assert_equals(results[0].pingOrPong, 'ping'); |
209 ' event.ports: ', | 201 wptEME.assert_equals(results[0].event, expected_ping); |
210 ]; | 202 |
211 assert_array_equals(results, expected_results); | 203 var expected_pong = { |
| 204 constructor: { name: 'ExtendableMessageEvent' }, |
| 205 origin: location.origin, |
| 206 lastEventId: '', |
| 207 source: { |
| 208 constructor: { name: 'ServiceWorker' }, |
| 209 scriptURL: normalizeURL(script2), |
| 210 state: 'installed' |
| 211 }, |
| 212 ports: [] |
| 213 }; |
| 214 assert_equals(results[1].pingOrPong, 'pong'); |
| 215 wptEME.assert_equals(results[1].event, expected_pong); |
212 }); | 216 }); |
213 }, 'Post extendable messages among service workers'); | 217 }, 'Post extendable messages among service workers'); |
214 | |
215 </script> | 218 </script> |
OLD | NEW |