Chromium Code Reviews| 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> |