| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>Service Worker: Schedule Job algorithm</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="resources/testharness-helpers.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script> |
| // Tests for https://w3c.github.io/ServiceWorker/#schedule-job-algorithm |
| // Non-equivalent register jobs should not be coalesced. |
| const scope = 'resources/'; |
| const script1 = 'resources/empty.js'; |
| const script2 = 'resources/empty.js?change'; |
| |
| async function cleanup() { |
| const registration = await navigator.serviceWorker.getRegistration(scope); |
| if (registration) |
| await registration.unregister(); |
| } |
| |
| function absolute_url(url) { |
| return new URL(url, self.location).toString(); |
| } |
| |
| // Test scriptURL and updateViaCache. |
| promise_test(async t => { |
| await cleanup(); |
| t.add_cleanup(cleanup); |
| |
| // Check defaults. |
| const registration = await |
| navigator.serviceWorker.register(script1, {scope}); |
| assert_equals(registration.updateViaCache, 'imports'); |
| |
| // Schedule several register jobs. |
| navigator.serviceWorker.register(script1, {scope}); |
| navigator.serviceWorker.register(script2, {scope}); |
| await navigator.serviceWorker.register(script2, |
| {scope, updateViaCache: 'none'}); |
| |
| // None of the changes should have been coalesced. |
| assert_equals(registration.installing.scriptURL, absolute_url(script2)); |
| assert_equals(registration.updateViaCache, 'none'); |
| }, 'different scriptURL and updateViaCache'); |
| |
| // Test |type| in another test case because most browsers don't support it. |
| promise_test(async t => { |
| const script1 = 'resources/empty.js'; |
| const script2 = 'resources/empty.js?change'; |
| |
| await cleanup(); |
| t.add_cleanup(cleanup); |
| |
| // Check defaults. |
| const registration = await |
| navigator.serviceWorker.register(script1, {scope}); |
| assert_equals(registration.installing.type, 'classic'); |
| |
| // Schedule several register jobs. |
| navigator.serviceWorker.register(script1, {scope}); |
| navigator.serviceWorker.register(script2, {scope}); |
| await navigator.serviceWorker.register(script2, {scope, type: 'module'}); |
| |
| // None of the changes should have been coalesced. |
| assert_equals(registration.installing.scriptURL, absolute_url(script2)); |
| assert_equals(registration.installing.type, 'module'); |
| }, 'different type'); |
| </script> |