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

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: 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 Client]',
33 ' event.source.url: ' + location.href,
34 ' event.source.frameType: top-level',
35 ' event.ports: null',
36 ];
37 assert_array_equals(results, expected_results);
38 });
39 }, 'Post an extendable message from a top-level client');
40
41 promise_test(function(t) {
42 var script = 'resources/extendable-message-event-worker.js';
43 var scope = 'resources/scope/extendable-message-event-from-nested';
44 var registration;
45 var frame;
46
47 return service_worker_unregister_and_register(t, script, scope)
48 .then(function(r) {
49 registration = r;
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 frame.contentWindow.navigator.serviceWorker.controller.postMessage('st art');
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 Client]',
70 ' event.source.url: ' + frame.contentWindow.location.href,
71 ' event.source.frameType: nested',
72 ' event.ports: null',
73 ];
74 assert_array_equals(results, expected_results);
75 });
76 }, 'Post an extendable message from a nested client');
77
78 // TODO(nhiroki): Add tests to post an extendable message from a cross origin
79 // client and from a client whose execution context is already stopped.
80 // (http://crbug.com/543198)
81
82 promise_test(function(t) {
83 var script = 'resources/extendable-message-event-loopback-worker.js';
84 var scope = 'resources/scope/extendable-message-event-loopback';
85 var registration;
86
87 return service_worker_unregister_and_register(t, script, scope)
88 .then(function(r) {
89 registration = r;
90 add_completion_callback(function() { registration.unregister(); });
91 return wait_for_state(t, registration.installing, 'activated');
92 })
93 .then(function() {
94 var results = [];
95 var saw_message = new Promise(function(resolve) {
96 navigator.serviceWorker.onmessage = function(event) {
97 switch (event.data.type) {
98 case 'record':
99 Array.prototype.push.apply(results, event.data.results);
100 break;
101 case 'finish':
102 resolve(results);
103 break;
104 }
105 };
106 });
107 registration.active.postMessage({type: 'start'});
108 return saw_message;
109 })
110 .then(function(results) {
111 var expected_results = [
112 '1st loopback: [object ExtendableMessageEvent]',
113 ' event.origin: ' + location.origin,
114 ' event.lastEventId: ',
115 ' event.source: [object ServiceWorker]',
116 ' event.source.scriptURL: ' + normalizeURL(script),
117 ' event.source.state: activated',
118 ' event.ports: null',
119 '2nd loopback: [object ExtendableMessageEvent]',
120 ' event.origin: ' + location.origin,
121 ' event.lastEventId: ',
122 ' event.source: [object ServiceWorker]',
123 ' event.source.scriptURL: ' + normalizeURL(script),
124 ' event.source.state: activated',
125 ' event.ports: null',
126 ];
127 assert_array_equals(results, expected_results);
128 });
129 }, 'Post loopback extendable messages');
130
131 promise_test(function(t) {
132 var script1 = 'resources/extendable-message-event-ping-worker.js';
133 var script2 = 'resources/extendable-message-event-pong-worker.js';
134 var scope = 'resources/scope/extendable-message-event-pingpong';
135 var registration;
136
137 return service_worker_unregister_and_register(t, script1, scope)
138 .then(function(r) {
139 registration = r;
140 add_completion_callback(function() { registration.unregister(); });
141 return wait_for_state(t, registration.installing, 'activated');
142 })
143 .then(function() {
144 // A controlled frame is necessary for keeping a waiting worker.
145 return with_iframe(scope);
146 })
147 .then(function(frame) {
148 add_completion_callback(function() { frame.remove(); });
149 return navigator.serviceWorker.register(script2, {scope: scope});
150 })
151 .then(function(r) {
152 return wait_for_state(t, r.installing, 'installed');
153 })
154 .then(function() {
155 var results = [];
156 var saw_message = new Promise(function(resolve) {
157 navigator.serviceWorker.onmessage = function(event) {
158 switch (event.data.type) {
159 case 'record':
160 Array.prototype.push.apply(results, event.data.results);
161 break;
162 case 'finish':
163 resolve(results);
164 break;
165 }
166 };
167 });
168 registration.active.postMessage({type: 'start'});
169 return saw_message;
170 })
171 .then(function(results) {
172 var expected_results = [
173 'Ping message: [object ExtendableMessageEvent]',
174 ' event.origin: ' + location.origin,
175 ' event.lastEventId: ',
176 ' event.source: [object ServiceWorker]',
177 ' event.source.scriptURL: ' + normalizeURL(script1),
178 ' event.source.state: activated',
179 ' event.ports: null',
180 'Pong message: [object ExtendableMessageEvent]',
181 ' event.origin: ' + location.origin,
182 ' event.lastEventId: ',
183 ' event.source: [object ServiceWorker]',
184 ' event.source.scriptURL: ' + normalizeURL(script2),
185 ' event.source.state: installed',
186 ' event.ports: null',
187 ];
188 assert_array_equals(results, expected_results);
189 });
190 }, 'Post extendable messages among service workers');
191
192 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698