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

Side by Side Diff: third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/postmessage.https.html

Issue 2875383002: Upstream service worker `postMessage` tests to WPT (Closed)
Patch Set: Incorporate review feedback 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
OLDNEW
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <title>Service Worker: postMessage</title> 2 <title>Service Worker: postMessage</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.sub.js"></script> 5 <script src="resources/test-helpers.sub.js"></script>
6 <script> 6 <script>
7 async_test(function(t) { 7 promise_test(t => {
8 var script = 'resources/postmessage-worker.js';
8 var scope = 'resources/blank.html'; 9 var scope = 'resources/blank.html';
9 var registration; 10 var registration;
10 var worker; 11 var worker;
11 service_worker_unregister_and_register( 12 var port;
12 t, 'resources/postmessage-worker.js', scope) 13
13 .then(function(r) { 14 return service_worker_unregister_and_register(t, script, scope)
15 .then(r => {
16 t.add_cleanup(() => r.unregister());
14 registration = r; 17 registration = r;
15 worker = registration.installing; 18 worker = registration.installing;
19
16 var messageChannel = new MessageChannel(); 20 var messageChannel = new MessageChannel();
17 messageChannel.port1.onmessage = t.step_func(onMessage); 21 port = messageChannel.port1;
18 worker.postMessage({port: messageChannel.port2}, 22 return new Promise(resolve => {
19 [messageChannel.port2]); 23 port.onmessage = resolve;
20 worker.postMessage({value: 1}); 24 worker.postMessage({port: messageChannel.port2},
21 worker.postMessage({value: 2}); 25 [messageChannel.port2]);
22 worker.postMessage({done: true}); 26 worker.postMessage({value: 1});
27 worker.postMessage({value: 2});
28 worker.postMessage({done: true});
29 });
23 }) 30 })
24 .catch(unreached_rejection(t)); 31 .then(e => {
32 assert_equals(e.data, 'Acking value: 1');
33 return new Promise(resolve => { port.onmessage = resolve; });
34 })
35 .then(e => {
36 assert_equals(e.data, 'Acking value: 2');
37 return new Promise(resolve => { port.onmessage = resolve; });
38 })
39 .then(e => {
40 assert_equals(e.data, 'quit');
41 return registration.unregister(scope);
42 })
43 .then(() => { return wait_for_state(t, worker, 'redundant'); })
44 .then(() => {
45 assert_equals(worker.state, 'redundant');
46 assert_throws(
47 {name:'InvalidStateError'},
48 function() { worker.postMessage(''); },
49 'Calling postMessage on a redundant ServiceWorker should ' +
50 'throw InvalidStateError.');
51 });
52 }, 'postMessage to a ServiceWorker (and back via MessagePort)');
25 53
26 var result = []; 54 promise_test(t => {
27 var expected = [ 55 var script = 'resources/postmessage-transferables-worker.js';
28 'Acking value: 1', 56 var scope = 'resources/blank.html';
29 'Acking value: 2', 57 var sw = navigator.serviceWorker;
30 ];
31 58
32 function onMessage(e) { 59 var message = 'Hello, world!';
33 var message = e.data; 60 var text_encoder = new TextEncoder;
34 if (message === 'quit') { 61 var text_decoder = new TextDecoder;
35 assert_array_equals(result, expected,
36 'Worker should post back expected values.');
37 postMessageToRedundantWorker();
38 } else {
39 result.push(message);
40 }
41 };
42 62
43 function postMessageToRedundantWorker() { 63 return service_worker_unregister_and_register(t, script, scope)
44 registration.unregister(scope) 64 .then(r => {
45 .then(function() { 65 t.add_cleanup(() => r.unregister());
46 return wait_for_state(t, worker, 'redundant'); 66
47 }) 67 var ab = text_encoder.encode(message);
48 .then(function() { 68 assert_equals(ab.byteLength, message.length);
49 assert_equals(worker.state, 'redundant'); 69 r.installing.postMessage(ab, [ab.buffer]);
50 assert_throws( 70 assert_equals(text_decoder.decode(ab), '');
51 {name:'InvalidStateError'}, 71 assert_equals(ab.byteLength, 0);
52 function() { worker.postMessage(''); }, 72
53 'Calling postMessage on a redundant ServiceWorker should ' + 73 return new Promise(resolve => { sw.onmessage = resolve; });
54 'throw InvalidStateError.'); 74 })
55 t.done(); 75 .then(e => {
56 }) 76 // Verify the integrity of the transferred array buffer.
57 .catch(unreached_rejection(t)); 77 assert_equals(e.data.content, message);
58 } 78 assert_equals(e.data.byteLength, message.length);
59 }, 'postMessage to a ServiceWorker (and back via MessagePort)'); 79 return new Promise(resolve => { sw.onmessage = resolve; });
80 })
81 .then(e => {
82 // Verify the integrity of the array buffer sent back from
83 // ServiceWorker via Client.postMessage.
84 assert_equals(text_decoder.decode(e.data), message);
85 assert_equals(e.data.byteLength, message.length);
86 return new Promise(resolve => { sw.onmessage = resolve; });
87 })
88 .then(e => {
89 // Verify that the array buffer on ServiceWorker is neutered.
90 assert_equals(e.data.content, '');
91 assert_equals(e.data.byteLength, 0);
92 });
93 }, 'postMessage a transferable ArrayBuffer between ServiceWorker and Client');
94
95 promise_test(t => {
96 var script = 'resources/postmessage-transferables-worker.js';
97 var scope = 'resources/blank.html';
98 var message = 'Hello, world!';
99 var text_encoder = new TextEncoder;
100 var text_decoder = new TextDecoder;
101 var port;
102
103 return service_worker_unregister_and_register(t, script, scope)
104 .then(r => {
105 t.add_cleanup(() => r.unregister());
106
107 var channel = new MessageChannel;
108 port = channel.port1;
109 r.installing.postMessage(undefined, [channel.port2]);
110
111 var ab = text_encoder.encode(message);
112 assert_equals(ab.byteLength, message.length);
113 port.postMessage(ab, [ab.buffer]);
114 assert_equals(text_decoder.decode(ab), '');
115 assert_equals(ab.byteLength, 0);
116
117 return new Promise(resolve => { port.onmessage = resolve; });
118 })
119 .then(e => {
120 // Verify the integrity of the transferred array buffer.
121 assert_equals(e.data.content, message);
122 assert_equals(e.data.byteLength, message.length);
123 return new Promise(resolve => { port.onmessage = resolve; });
124 })
125 .then(e => {
126 // Verify the integrity of the array buffer sent back from
127 // ServiceWorker via Client.postMessage.
128 assert_equals(text_decoder.decode(e.data), message);
129 assert_equals(e.data.byteLength, message.length);
130 return new Promise(resolve => { port.onmessage = resolve; });
131 })
132 .then(e => {
133 // Verify that the array buffer on ServiceWorker is neutered.
134 assert_equals(e.data.content, '');
135 assert_equals(e.data.byteLength, 0);
136 });
137 }, 'postMessage a transferable ArrayBuffer between ServiceWorker and Client' +
138 ' over MessagePort');
60 </script> 139 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698