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

Unified Diff: LayoutTests/http/tests/serviceworker/chromium/postmessage-after-terminate.html

Issue 729923004: Add some tests to make sure message ports properly queue up message. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@cross_process_messaging_with_terminate
Patch Set: Created 6 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 side-by-side diff with in-line comments
Download patch
Index: LayoutTests/http/tests/serviceworker/chromium/postmessage-after-terminate.html
diff --git a/LayoutTests/http/tests/serviceworker/chromium/postmessage-after-terminate.html b/LayoutTests/http/tests/serviceworker/chromium/postmessage-after-terminate.html
index cda38abf2531b4587d4404ffad8901a140fa4a06..66cc171f9628940d90aa7586bcc09400878dceaa 100644
--- a/LayoutTests/http/tests/serviceworker/chromium/postmessage-after-terminate.html
+++ b/LayoutTests/http/tests/serviceworker/chromium/postmessage-after-terminate.html
@@ -16,6 +16,12 @@ function sendPing(worker) {
});
}
+function delay(ms) {
+ return new Promise(function(resolve) {
+ window.setTimeout(resolve, ms);
+ });
+}
+
promise_test(function(test) {
var worker = 'resources/ping-worker.js';
var scope = 'resources/blank.html';
@@ -45,4 +51,120 @@ promise_test(function(test) {
});
}, 'Terminate terminates the worker.');
+async_test(function(t) {
+ var worker_script = 'resources/postmessage-worker.js';
+ var scope = 'resources/postmessage-worker-scope';
+ var worker;
+ var registration;
+ var port;
+
+ service_worker_unregister_and_register(
+ t, worker_script, scope)
+ .then(function(r) {
+ registration = r;
+ return wait_for_activated(t, registration);
+ })
+ .then(function() {
+ return get_newest_worker(registration);
falken 2014/11/20 04:09:28 registration.active
Marijn Kruisselbrink 2014/11/20 21:42:38 Done.
+ })
+ .then(function(sw) {
+ worker = sw;
+ internals.terminateServiceWorker(sw);
+ // FIXME: delay is temporary it work around http://crbug.com/433439
+ return delay(500);
+ })
+ .then(function() {
+ var messageChannel = new MessageChannel();
+ port = messageChannel.port1;
+ port.onmessage = t.step_func(onMessage);
+ port.postMessage({value: 0});
+ worker.postMessage({port: messageChannel.port2}, [messageChannel.port2]);
+ port.postMessage({value: 1});
+ return delay(1);
falken 2014/11/20 04:09:29 can you comment what this delay is for?
Marijn Kruisselbrink 2014/11/20 21:42:38 Done.
+ })
+ .then(function() {
+ port.postMessage({value: 2});
+ port.postMessage({done: true});
+ })
+ .catch(unreached_rejection(t));
+
+ var result = [];
+ var expected = [
+ 'Acking value: 0',
+ 'Acking value: 1',
+ 'Acking value: 2',
+ ];
+
+ function onMessage(e) {
+ var message = e.data;
+ console.log(message);
falken 2014/11/20 04:09:28 debugging code?
Marijn Kruisselbrink 2014/11/20 21:42:38 Done.
+ if (message === 'quit') {
+ assert_array_equals(result, expected,
+ 'Worker should post back expected values.');
+ service_worker_unregister_and_done(t, scope);
+ } else {
+ result.push(message);
+ }
+ };
+ }, 'postMessage a port to a not running service worker');
falken 2014/11/20 04:09:28 hard to parse this... "on a port"?
Marijn Kruisselbrink 2014/11/20 21:42:37 Done.
+
+async_test(function(t) {
+ var worker_script = 'resources/postmessage-port-worker.js';
+ var scope = 'resources/postmessage-port-worker-scope';
+ var worker;
+ var registration;
+ var port;
+
+ service_worker_unregister_and_register(
+ t, worker_script, scope)
+ .then(function(r) {
+ registration = r;
+ return wait_for_activated(t, registration);
+ })
+ .then(function() {
+ return get_newest_worker(registration);
+ })
+ .then(function(sw) {
+ worker = sw;
+ internals.terminateServiceWorker(sw);
+ // FIXME: delay is temporary it work around http://crbug.com/433439
+ return delay(500);
+ })
+ .then(function() {
+ var innerChannel = new MessageChannel();
+ var outerChannel = new MessageChannel();
+ port = innerChannel.port1;
+ port.onmessage = t.step_func(onMessage);
+ port.postMessage({value: 0});
+ outerChannel.port1.postMessage({port: innerChannel.port2}, [innerChannel.port2]);
+ worker.postMessage({port: outerChannel.port2}, [outerChannel.port2]);
+ port.postMessage({value: 1});
+ return delay(1);
+ })
+ .then(function() {
+ port.postMessage({value: 2});
+ port.postMessage({done: true});
+ })
+ .catch(unreached_rejection(t));
+
+ var result = [];
+ var expected = [
+ 'Acking value: 0',
+ 'Acking value: 1',
+ 'Acking value: 2',
+ ];
+
+ function onMessage(e) {
+ var message = e.data;
+ console.log(message);
falken 2014/11/20 04:09:29 debugging code?
Marijn Kruisselbrink 2014/11/20 21:42:38 Done.
+ if (message === 'quit') {
+ assert_array_equals(result, expected,
+ 'Worker should post back expected values.');
+ service_worker_unregister_and_done(t, scope);
+ } else {
+ result.push(message);
+ }
+ };
+ }, 'postMessage a port to a port to a not running service worker');
falken 2014/11/20 04:09:28 I can't parse this
Marijn Kruisselbrink 2014/11/20 21:42:37 I tried to rephrase it. If you have suggestions on
+
</script>

Powered by Google App Engine
This is Rietveld 408576698