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

Side by Side Diff: third_party/WebKit/LayoutTests/http/tests/serviceworker/ServiceWorkerGlobalScope/extendable-message-event.html

Issue 2751113005: Upstream service worker message event tests to WPT (Closed)
Patch Set: Remove redundant comment Created 3 years, 9 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 <title>ServiceWorkerGlobalScope: ExtendableMessageEvent</title>
3 <script src='../../resources/testharness.js'></script>
4 <script src='../../resources/testharnessreport.js'></script>
5 <script src='../resources/test-helpers.js'></script>
6 <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) {
33 var script = 'resources/extendable-message-event-worker.js';
34 var scope = 'resources/scope/extendable-message-event-from-toplevel';
35 var registration;
36
37 return service_worker_unregister_and_register(t, script, scope)
38 .then(function(r) {
39 registration = r;
40 add_completion_callback(function() { registration.unregister(); });
41 return wait_for_state(t, registration.installing, 'activated');
42 })
43 .then(function() {
44 var saw_message = new Promise(function(resolve) {
45 navigator.serviceWorker.onmessage =
46 function(event) { resolve(event.data); }
47 });
48 var channel = new MessageChannel;
49 registration.active.postMessage('', [channel.port1]);
50 return saw_message;
51 })
52 .then(function(results) {
53 var expected_results = [
54 'Client message: [object ExtendableMessageEvent]',
55 ' event.origin: ' + location.origin,
56 ' event.lastEventId: ',
57 ' event.source: [object WindowClient]',
58 ' event.source.url: ' + location.href,
59 ' event.source.frameType: top-level',
60 ' event.source.visibilityState: visible',
61 ' event.source.focused: true',
62 ' event.ports: [object MessagePort]',
63 ];
64 assert_array_equals(results, expected_results);
65 });
66 }, 'Post an extendable message from a top-level client');
67
68 promise_test(function(t) {
69 var script = 'resources/extendable-message-event-worker.js';
70 var scope = 'resources/scope/extendable-message-event-from-nested';
71 var frame;
72
73 return service_worker_unregister_and_register(t, script, scope)
74 .then(function(registration) {
75 add_completion_callback(function() { registration.unregister(); });
76 return wait_for_state(t, registration.installing, 'activated');
77 })
78 .then(function() { return with_iframe(scope); })
79 .then(function(f) {
80 frame = f;
81 add_completion_callback(function() { frame.remove(); });
82 var saw_message = new Promise(function(resolve) {
83 frame.contentWindow.navigator.serviceWorker.onmessage =
84 function(event) { resolve(event.data); }
85 });
86 f.contentWindow.navigator.serviceWorker.controller.postMessage('');
87 return saw_message;
88 })
89 .then(function(results) {
90 var expected_results = [
91 'Client message: [object ExtendableMessageEvent]',
92 ' event.origin: ' + frame.contentWindow.location.origin,
93 ' event.lastEventId: ',
94 ' event.source: [object WindowClient]',
95 ' event.source.url: ' + frame.contentWindow.location.href,
96 ' event.source.frameType: nested',
97 ' event.source.visibilityState: visible',
98 ' event.source.focused: false',
99 ' event.ports: ',
100 ];
101 assert_array_equals(results, expected_results);
102 });
103 }, 'Post an extendable message from a nested client');
104
105 promise_test(function(t) {
106 var script = 'resources/extendable-message-event-loopback-worker.js';
107 var scope = 'resources/scope/extendable-message-event-loopback';
108 var registration;
109
110 return service_worker_unregister_and_register(t, script, scope)
111 .then(function(r) {
112 registration = r;
113 add_completion_callback(function() { registration.unregister(); });
114 return wait_for_state(t, registration.installing, 'activated');
115 })
116 .then(function() {
117 var results = [];
118 var saw_message = new Promise(function(resolve) {
119 navigator.serviceWorker.onmessage = function(event) {
120 switch (event.data.type) {
121 case 'record':
122 Array.prototype.push.apply(results, event.data.results);
123 break;
124 case 'finish':
125 resolve(results);
126 break;
127 }
128 };
129 });
130 registration.active.postMessage({type: 'start'});
131 return saw_message;
132 })
133 .then(function(results) {
134 var expected_results = [
135 '1st loopback: [object ExtendableMessageEvent]',
136 ' event.origin: ' + location.origin,
137 ' event.lastEventId: ',
138 ' event.source: [object ServiceWorker]',
139 ' event.source.scriptURL: ' + normalizeURL(script),
140 ' event.source.state: activated',
141 ' event.ports: ',
142 '2nd loopback: [object ExtendableMessageEvent]',
143 ' event.origin: ' + location.origin,
144 ' event.lastEventId: ',
145 ' event.source: [object ServiceWorker]',
146 ' event.source.scriptURL: ' + normalizeURL(script),
147 ' event.source.state: activated',
148 ' event.ports: ',
149 ];
150 assert_array_equals(results, expected_results);
151 });
152 }, 'Post loopback extendable messages');
153
154 promise_test(function(t) {
155 var script1 = 'resources/extendable-message-event-ping-worker.js';
156 var script2 = 'resources/extendable-message-event-pong-worker.js';
157 var scope = 'resources/scope/extendable-message-event-pingpong';
158 var registration;
159
160 return service_worker_unregister_and_register(t, script1, scope)
161 .then(function(r) {
162 registration = r;
163 add_completion_callback(function() { registration.unregister(); });
164 return wait_for_state(t, registration.installing, 'activated');
165 })
166 .then(function() {
167 // A controlled frame is necessary for keeping a waiting worker.
168 return with_iframe(scope);
169 })
170 .then(function(frame) {
171 add_completion_callback(function() { frame.remove(); });
172 return navigator.serviceWorker.register(script2, {scope: scope});
173 })
174 .then(function(r) {
175 return wait_for_state(t, r.installing, 'installed');
176 })
177 .then(function() {
178 var results = [];
179 var saw_message = new Promise(function(resolve) {
180 navigator.serviceWorker.onmessage = function(event) {
181 switch (event.data.type) {
182 case 'record':
183 Array.prototype.push.apply(results, event.data.results);
184 break;
185 case 'finish':
186 resolve(results);
187 break;
188 }
189 };
190 });
191 registration.active.postMessage({type: 'start'});
192 return saw_message;
193 })
194 .then(function(results) {
195 var expected_results = [
196 'Ping message: [object ExtendableMessageEvent]',
197 ' event.origin: ' + location.origin,
198 ' event.lastEventId: ',
199 ' event.source: [object ServiceWorker]',
200 ' event.source.scriptURL: ' + normalizeURL(script1),
201 ' event.source.state: activated',
202 ' event.ports: ',
203 'Pong message: [object ExtendableMessageEvent]',
204 ' event.origin: ' + location.origin,
205 ' event.lastEventId: ',
206 ' event.source: [object ServiceWorker]',
207 ' event.source.scriptURL: ' + normalizeURL(script2),
208 ' event.source.state: installed',
209 ' event.ports: ',
210 ];
211 assert_array_equals(results, expected_results);
212 });
213 }, 'Post extendable messages among service workers');
214
215 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698