| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>Tests for importScripts: import scripts updated flag</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/test-helpers.sub.js"></script> |
| <body> |
| <script> |
| // This test registers a worker that calls importScripts at various stages of |
| // service worker lifetime. The sub-tests trigger subsequent `importScript` |
| // invocations via the `message` event. |
| |
| var register; |
| |
| function post_and_wait_for_reply(worker, message) { |
| return new Promise(resolve => { |
| navigator.serviceWorker.onmessage = e => { resolve(e.data); }; |
| worker.postMessage(message); |
| }); |
| } |
| |
| promise_test(function(t) { |
| const scope = 'resources/import-scripts-updated-flag'; |
| let registration; |
| |
| register = service_worker_unregister_and_register( |
| t, 'resources/import-scripts-updated-flag-worker.js', scope) |
| .then(r => { |
| registration = r; |
| add_completion_callback(() => { registration.unregister(); }); |
| return wait_for_state(t, registration.installing, 'activated'); |
| }) |
| .then(() => { |
| // This test should not be considered complete until after the |
| // service worker has been unregistered. Currently, `testharness.js` |
| // does not support asynchronous global "tear down" logic, so this |
| // must be expressed using a dedicated `promise_test`. Because the |
| // other sub-tests in this file are declared synchronously, this test |
| // will be the final test executed. |
| promise_test(function(t) { |
| return registration.unregister(); |
| }); |
| |
| return registration.active; |
| }); |
| |
| return register; |
| }, 'initialize global state'); |
| |
| promise_test(t => { |
| return register |
| .then(function(worker) { |
| return post_and_wait_for_reply(worker, 'root-and-message'); |
| }) |
| .then(result => { |
| assert_equals(result.error, null); |
| assert_equals(result.value, 'root-and-message'); |
| }); |
| }, 'import script previously imported at worker evaluation time'); |
| |
| promise_test(t => { |
| return register |
| .then(function(worker) { |
| return post_and_wait_for_reply(worker, 'install-and-message'); |
| }) |
| .then(result => { |
| assert_equals(result.error, null); |
| assert_equals(result.value, 'install-and-message'); |
| }); |
| }, 'import script previously imported at worker install time'); |
| |
| promise_test(t => { |
| return register |
| .then(function(worker) { |
| return post_and_wait_for_reply(worker, 'message'); |
| }) |
| .then(result => { |
| assert_equals(result.error, 'NetworkError'); |
| assert_equals(result.value, null); |
| }); |
| }, 'import script not previously imported'); |
| </script> |
| </body> |