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

Side by Side Diff: third_party/WebKit/LayoutTests/http/tests/serviceworker/postmessage.html

Issue 2414333003: WebMessaging: Send transferable ArrayBuffers by copy-and-neuter semantics (Closed)
Patch Set: fix tests Created 4 years, 1 month 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.js"></script> 5 <script src="resources/test-helpers.js"></script>
6 <script> 6 <script>
7 7
8 promise_test(t => { 8 promise_test(t => {
9 var script = 'resources/postmessage-worker.js'; 9 var script = 'resources/postmessage-worker.js';
10 var scope = 'resources/blank.html'; 10 var scope = 'resources/blank.html';
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 .then(() => { 45 .then(() => {
46 assert_equals(worker.state, 'redundant'); 46 assert_equals(worker.state, 'redundant');
47 assert_throws( 47 assert_throws(
48 {name:'InvalidStateError'}, 48 {name:'InvalidStateError'},
49 function() { worker.postMessage(''); }, 49 function() { worker.postMessage(''); },
50 'Calling postMessage on a redundant ServiceWorker should ' + 50 'Calling postMessage on a redundant ServiceWorker should ' +
51 'throw InvalidStateError.'); 51 'throw InvalidStateError.');
52 }); 52 });
53 }, 'postMessage to a ServiceWorker (and back via MessagePort)'); 53 }, 'postMessage to a ServiceWorker (and back via MessagePort)');
54 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
55 </script> 141 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698