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> |