| <!DOCTYPE html> |
| <title>Service Worker: Register wait-forever-in-install-worker</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="resources/testharness-helpers.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/test-helpers.sub.js"></script> |
| <script> |
| |
| promise_test(function(t) { |
| var bad_script = 'resources/wait-forever-in-install-worker.js'; |
| var good_script = 'resources/empty-worker.js'; |
| var scope = 'resources/wait-forever-in-install-worker'; |
| var other_scope = 'resources/wait-forever-in-install-worker-other'; |
| var registration; |
| var registerPromise; |
| |
| return navigator.serviceWorker.register(bad_script, {scope: scope}) |
| .then(function(r) { |
| t.add_cleanup(function() { |
| return service_worker_unregister(t, scope); |
| }); |
| |
| registration = r; |
| assert_equals(registration.installing.scriptURL, |
| normalizeURL(bad_script)); |
| |
| // This register job should not start until the first |
| // register for the same scope completes. |
| registerPromise = |
| navigator.serviceWorker.register(good_script, {scope: scope}); |
| |
| // In order to test that the above register does not complete |
| // we will perform a register() on a different scope. The |
| // assumption here is that the previous register call would |
| // have completed in the same timeframe if it was able to do |
| // so. |
| return navigator.serviceWorker.register(good_script, |
| {scope: other_scope}); |
| }) |
| .then(function(swr) { |
| return swr.unregister(); |
| }) |
| .then(function() { |
| assert_equals(registration.installing.scriptURL, |
| normalizeURL(bad_script)); |
| registration.installing.postMessage('STOP_WAITING'); |
| return registerPromise; |
| }) |
| .then(function(swr) { |
| assert_equals(registration.installing.scriptURL, |
| normalizeURL(good_script)); |
| return wait_for_state(t, registration.installing, 'activated'); |
| }) |
| }, 'register worker that calls waitUntil with a promise that never ' + |
| 'resolves in oninstall'); |
| |
| </script> |