| <!DOCTYPE html> |
| <title>register() and scope</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 script = 'resources/empty-worker.js'; |
| var script_url = new URL(script, location.href); |
| var expected_scope = new URL('./', script_url).href; |
| return service_worker_unregister(t, expected_scope) |
| .then(function() { |
| return navigator.serviceWorker.register('resources/empty-worker.js'); |
| }).then(function(registration) { |
| assert_equals(registration.scope, expected_scope, |
| 'The default scope should be URL("./", script_url)'); |
| return registration.unregister(); |
| }).then(function() { |
| t.done(); |
| }); |
| }, 'default scope'); |
| |
| promise_test(function(t) { |
| // This script must be different than the 'default scope' test, or else |
| // the scopes will collide. |
| var script = 'resources/empty.js'; |
| var script_url = new URL(script, location.href); |
| var expected_scope = new URL('./', script_url).href; |
| return service_worker_unregister(t, expected_scope) |
| .then(function() { |
| return navigator.serviceWorker.register('resources/empty.js', |
| { scope: undefined }); |
| }).then(function(registration) { |
| assert_equals(registration.scope, expected_scope, |
| 'The default scope should be URL("./", script_url)'); |
| return registration.unregister(); |
| }).then(function() { |
| t.done(); |
| }); |
| }, 'undefined scope'); |
| |
| promise_test(function(t) { |
| var script = 'resources/simple-fetch-worker.js'; |
| var script_url = new URL(script, location.href); |
| var expected_scope = new URL('./', script_url).href; |
| return service_worker_unregister(t, expected_scope) |
| .then(function() { |
| return navigator.serviceWorker.register('resources/empty.js', |
| { scope: null }); |
| }) |
| .then( |
| function(registration) { |
| t.add_cleanup(function() { |
| return service_worker_unregister(t, registration.scope); |
| }); |
| |
| assert_unreached('register should fail'); |
| }, |
| function(error) { |
| assert_equals(error.name, 'SecurityError', |
| 'passing a null scope should be interpreted as ' + |
| 'scope="null" which violates the path restriction'); |
| t.done(); |
| }); |
| }, 'null scope'); |
| |
| </script> |