| Index: LayoutTests/http/tests/serviceworker/chromium/stashed-ports-after-terminate.html
|
| diff --git a/LayoutTests/http/tests/serviceworker/chromium/stashed-ports-after-terminate.html b/LayoutTests/http/tests/serviceworker/chromium/stashed-ports-after-terminate.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..633bf282ed9eedb2354506593fd56389202dd6ff
|
| --- /dev/null
|
| +++ b/LayoutTests/http/tests/serviceworker/chromium/stashed-ports-after-terminate.html
|
| @@ -0,0 +1,62 @@
|
| +<!DOCTYPE html>
|
| +<title>
|
| + Tests stashed message ports when the service worker is killed.
|
| +</title>
|
| +<script src="../../../resources/testharness.js"></script>
|
| +<script src="../../../resources/testharnessreport.js"></script>
|
| +<script src="../resources/test-helpers.js"></script>
|
| +<script>
|
| +var worker = 'resources/stashed-ports-echo-worker.js';
|
| +var scope = 'resources/';
|
| +
|
| +// Helper method that waits for a reply on a port, and resolves a promise with
|
| +// the reply.
|
| +function wait_for_reply(test, port) {
|
| + return new Promise(function(resolve) {
|
| + var resolved = false;
|
| + port.onmessage = test.step_func(function(event) {
|
| + assert_false(resolved);
|
| + resolved = true;
|
| + resolve(event.data);
|
| + });
|
| + });
|
| +}
|
| +
|
| +test(function(test) {
|
| + assert_exists(window, 'internals');
|
| + test.done();
|
| + }, 'internals.terminateServiceWorker is required for the following tests.');
|
| +
|
| +promise_test(function(test) {
|
| + var sw;
|
| + var channel = new MessageChannel();
|
| + var portName = 'foobarname';
|
| + return service_worker_unregister_and_register(test, worker, scope + 'basic')
|
| + .then(function(registration) {
|
| + sw = registration.installing;
|
| + sw.postMessage({name: portName, port: channel.port2}, [channel.port2]);
|
| + channel.port1.postMessage('first ping');
|
| + return wait_for_reply(test, channel.port1);
|
| + })
|
| + .then(test.step_func(function(reply) {
|
| + assert_equals(reply.data, 'first ping');
|
| + assert_equals(reply.name, portName);
|
| + channel.port1.postMessage('ping pong');
|
| + return wait_for_reply(test, channel.port1);
|
| + }))
|
| + .then(test.step_func(function(reply) {
|
| + assert_equals(reply.data, 'ping pong');
|
| + assert_equals(reply.name, portName);
|
| + return internals.terminateServiceWorker(sw);
|
| + }))
|
| + .then(function() {
|
| + channel.port1.postMessage('second ping');
|
| + return wait_for_reply(test, channel.port1);
|
| + })
|
| + .then(test.step_func(function(reply) {
|
| + assert_equals(reply.data, 'second ping');
|
| + assert_equals(reply.name, portName);
|
| + }));
|
| + }, 'Messages can be send when the service worker has been terminated');
|
| +
|
| +</script>
|
|
|