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

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

Issue 1701843002: ServiceWorker: Implement 'source' and 'origin' attributes of ExtendableMessageEvent (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move_focus_into_utils
Patch Set: clean up tests Created 4 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-worker.js';
10 var scope = 'resources/scope/extendable-message-event-from-toplevel';
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('start');
25 return saw_message;
26 })
27 .then(function(results) {
28 var expected_results = [
29 'Client message: [object ExtendableMessageEvent]',
30 ' event.origin: ' + location.origin,
31 ' event.lastEventId: ',
32 ' event.source: [object WindowClient]',
33 ' event.source.url: ' + location.href,
34 ' event.source.frameType: top-level',
35 ' event.source.visibilityState: visible',
36 ' event.source.focused: true',
37 ' event.ports: null',
38 ];
39 assert_array_equals(results, expected_results);
40 });
41 }, 'Post an extendable message from a top-level client');
42
43 promise_test(function(t) {
44 var script = 'resources/extendable-message-event-worker.js';
45 var scope = 'resources/scope/extendable-message-event-from-nested';
46 var frame;
47
48 return service_worker_unregister_and_register(t, script, scope)
49 .then(function(registration) {
50 add_completion_callback(function() { registration.unregister(); });
51 return wait_for_state(t, registration.installing, 'activated');
52 })
53 .then(function() { return with_iframe(scope); })
54 .then(function(f) {
55 frame = f;
56 add_completion_callback(function() { frame.remove(); });
57 var saw_message = new Promise(function(resolve) {
58 frame.contentWindow.navigator.serviceWorker.onmessage =
59 function(event) { resolve(event.data); }
60 });
61 f.contentWindow.navigator.serviceWorker.controller.postMessage('');
62 return saw_message;
63 })
64 .then(function(results) {
65 var expected_results = [
66 'Client message: [object ExtendableMessageEvent]',
67 ' event.origin: ' + frame.contentWindow.location.origin,
68 ' event.lastEventId: ',
69 ' event.source: [object WindowClient]',
70 ' event.source.url: ' + frame.contentWindow.location.href,
71 ' event.source.frameType: nested',
72 ' event.source.visibilityState: visible',
73 ' event.source.focused: false',
74 ' event.ports: null',
75 ];
76 assert_array_equals(results, expected_results);
77 });
78 }, 'Post an extendable message from a nested client');
79
80 promise_test(function(t) {
81 var script = 'resources/extendable-message-event-worker.js';
82 var scope = 'resources/extendable-message-event-sandboxed-iframe.html';
83
84 return service_worker_unregister_and_register(t, script, scope)
85 .then(function(registration) {
86 add_completion_callback(function() { registration.unregister(); });
87 return wait_for_state(t, registration.installing, 'activated');
88 })
89 .then(function() { return with_iframe(scope); })
90 .then(function(frame) {
91 add_completion_callback(function() { frame.remove(); });
92 var saw_message = new Promise(function(resolve) {
93 onmessage = function(event) {
94 resolve(event.data);
95 }
96 });
97 frame.contentWindow.postMessage('', '*');
98 return saw_message;
99 })
100 .then(function(results) {
101 // 'origin' and 'url' should be hided.
102 var expected_results = [
103 'Client message: [object ExtendableMessageEvent]',
104 ' event.origin: ',
105 ' event.lastEventId: ',
106 ' event.source: [object WindowClient]',
107 ' event.source.url: ',
108 ' event.source.frameType: nested',
109 ' event.source.visibilityState: visible',
110 ' event.source.focused: false',
111 ' event.ports: null',
112 ];
113 assert_array_equals(results, expected_results);
114 });
115 }, 'Post an extendable message from a sandboxed client');
116
117 // TODO(nhiroki): Add tests to post an extendable message from a client whose
118 // execution context is already stopped (http://crbug.com/543198).
119
120 promise_test(function(t) {
121 var script = 'resources/extendable-message-event-loopback-worker.js';
122 var scope = 'resources/scope/extendable-message-event-loopback';
123 var registration;
124
125 return service_worker_unregister_and_register(t, script, scope)
126 .then(function(r) {
127 registration = r;
128 add_completion_callback(function() { registration.unregister(); });
129 return wait_for_state(t, registration.installing, 'activated');
130 })
131 .then(function() {
132 var results = [];
133 var saw_message = new Promise(function(resolve) {
134 navigator.serviceWorker.onmessage = function(event) {
135 switch (event.data.type) {
136 case 'record':
137 Array.prototype.push.apply(results, event.data.results);
138 break;
139 case 'finish':
140 resolve(results);
141 break;
142 }
143 };
144 });
145 registration.active.postMessage({type: 'start'});
146 return saw_message;
147 })
148 .then(function(results) {
149 var expected_results = [
150 '1st loopback: [object ExtendableMessageEvent]',
151 ' event.origin: ' + location.origin,
152 ' event.lastEventId: ',
153 ' event.source: [object ServiceWorker]',
154 ' event.source.scriptURL: ' + normalizeURL(script),
155 ' event.source.state: activated',
156 ' event.ports: null',
157 '2nd loopback: [object ExtendableMessageEvent]',
158 ' event.origin: ' + location.origin,
159 ' event.lastEventId: ',
160 ' event.source: [object ServiceWorker]',
161 ' event.source.scriptURL: ' + normalizeURL(script),
162 ' event.source.state: activated',
163 ' event.ports: null',
164 ];
165 assert_array_equals(results, expected_results);
166 });
167 }, 'Post loopback extendable messages');
168
169 promise_test(function(t) {
170 var script1 = 'resources/extendable-message-event-ping-worker.js';
171 var script2 = 'resources/extendable-message-event-pong-worker.js';
172 var scope = 'resources/scope/extendable-message-event-pingpong';
173 var registration;
174
175 return service_worker_unregister_and_register(t, script1, scope)
176 .then(function(r) {
177 registration = r;
178 add_completion_callback(function() { registration.unregister(); });
179 return wait_for_state(t, registration.installing, 'activated');
180 })
181 .then(function() {
182 // A controlled frame is necessary for keeping a waiting worker.
183 return with_iframe(scope);
184 })
185 .then(function(frame) {
186 add_completion_callback(function() { frame.remove(); });
187 return navigator.serviceWorker.register(script2, {scope: scope});
188 })
189 .then(function(r) {
190 return wait_for_state(t, r.installing, 'installed');
191 })
192 .then(function() {
193 var results = [];
194 var saw_message = new Promise(function(resolve) {
195 navigator.serviceWorker.onmessage = function(event) {
196 switch (event.data.type) {
197 case 'record':
198 Array.prototype.push.apply(results, event.data.results);
199 break;
200 case 'finish':
201 resolve(results);
202 break;
203 }
204 };
205 });
206 registration.active.postMessage({type: 'start'});
207 return saw_message;
208 })
209 .then(function(results) {
210 var expected_results = [
211 'Ping message: [object ExtendableMessageEvent]',
212 ' event.origin: ' + location.origin,
213 ' event.lastEventId: ',
214 ' event.source: [object ServiceWorker]',
215 ' event.source.scriptURL: ' + normalizeURL(script1),
216 ' event.source.state: activated',
217 ' event.ports: null',
218 'Pong message: [object ExtendableMessageEvent]',
219 ' event.origin: ' + location.origin,
220 ' event.lastEventId: ',
221 ' event.source: [object ServiceWorker]',
222 ' event.source.scriptURL: ' + normalizeURL(script2),
223 ' event.source.state: installed',
224 ' event.ports: null',
225 ];
226 assert_array_equals(results, expected_results);
227 });
228 }, 'Post extendable messages among service workers');
229
230 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698