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

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

Powered by Google App Engine
This is Rietveld 408576698