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

Unified 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, 2 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/LayoutTests/http/tests/serviceworker/postmessage.html
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/postmessage.html b/third_party/WebKit/LayoutTests/http/tests/serviceworker/postmessage.html
index 16b4df9a994679066899b9690004a01a0c7fed19..8fc9778b2a64bea4cde2ec3043b238291b513ec7 100644
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/postmessage.html
+++ b/third_party/WebKit/LayoutTests/http/tests/serviceworker/postmessage.html
@@ -52,4 +52,90 @@ promise_test(t => {
});
}, 'postMessage to a ServiceWorker (and back via MessagePort)');
+promise_test(t => {
+ var script = 'resources/postmessage-transferables-worker.js';
+ var scope = 'resources/blank.html';
+ var sw = navigator.serviceWorker;
+
+ var message = 'Hello, world!';
+ var text_encoder = new TextEncoder;
+ var text_decoder = new TextDecoder;
+
+ return service_worker_unregister_and_register(t, script, scope)
+ .then(r => {
+ add_completion_callback(() => r.unregister());
+
+ var ab = text_encoder.encode(message);
+ assert_equals(ab.byteLength, message.length);
+ r.installing.postMessage(ab, [ab.buffer]);
+ assert_equals(text_decoder.decode(ab), '');
+ assert_equals(ab.byteLength, 0);
+
+ return new Promise(resolve => { sw.onmessage = resolve; });
+ })
+ .then(e => {
+ // Verify the integrity of the transferred array buffer.
+ assert_equals(e.data.content, message);
+ assert_equals(e.data.byteLength, message.length);
+ return new Promise(resolve => { sw.onmessage = resolve; });
+ })
+ .then(e => {
+ // Verify the integrity of the array buffer sent back from
+ // ServiceWorker via Client.postMessage.
+ assert_equals(text_decoder.decode(e.data), message);
+ assert_equals(e.data.byteLength, message.length);
+ return new Promise(resolve => { sw.onmessage = resolve; });
+ })
+ .then(e => {
+ // Verify that the array buffer on ServiceWorker is neutered.
+ assert_equals(e.data.content, '');
+ assert_equals(e.data.byteLength, 0);
+ });
+ }, 'postMessage a transferable ArrayBuffer between ServiceWorker and Client');
+
+promise_test(t => {
+ var script = 'resources/postmessage-transferables-worker.js';
+ var scope = 'resources/blank.html';
+ var message = 'Hello, world!';
+ var text_encoder = new TextEncoder;
+ var text_decoder = new TextDecoder;
+ var port;
+
+ return service_worker_unregister_and_register(t, script, scope)
+ .then(r => {
+ add_completion_callback(() => r.unregister());
+
+ var channel = new MessageChannel;
+ port = channel.port1;
+ r.installing.postMessage(undefined, [channel.port2]);
+
+ var ab = text_encoder.encode(message);
+ assert_equals(ab.byteLength, message.length);
+ port.postMessage(ab, [ab.buffer]);
+ assert_equals(text_decoder.decode(ab), '');
+ assert_equals(ab.byteLength, 0);
+
+ return new Promise(resolve => { port.onmessage = resolve; });
+ })
+ .then(e => {
+ // Verify the integrity of the transferred array buffer.
+ assert_equals(e.data.content, message);
+ assert_equals(e.data.byteLength, message.length);
+ return new Promise(resolve => { port.onmessage = resolve; });
+ })
+ .then(e => {
+ // Verify the integrity of the array buffer sent back from
+ // ServiceWorker via Client.postMessage.
+ assert_equals(text_decoder.decode(e.data), message);
+ assert_equals(e.data.byteLength, message.length);
+ return new Promise(resolve => { port.onmessage = resolve; });
+ })
+ .then(e => {
+ // Verify that the array buffer on ServiceWorker is neutered.
+ assert_equals(e.data.content, '');
+ assert_equals(e.data.byteLength, 0);
+ });
+ }, 'postMessage a transferable ArrayBuffer between ServiceWorker and Client' +
+ ' over MessagePort');
+
</script>

Powered by Google App Engine
This is Rietveld 408576698