| <!DOCTYPE html> |
| <title>Service Worker: Claim() when update happens after redirect</title> |
| <script src="/common/get-host-info.sub.js"></script> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/test-helpers.sub.js"></script> |
| <body> |
| <script> |
| var host_info = get_host_info(); |
| var BASE_URL = host_info['HTTPS_ORIGIN'] + base_path(); |
| var OTHER_BASE_URL = host_info['HTTPS_REMOTE_ORIGIN'] + base_path(); |
| |
| var WORKER_URL = OTHER_BASE_URL + 'resources/update-claim-worker.py' |
| var SCOPE_URL = OTHER_BASE_URL + 'resources/redirect.py' |
| var OTHER_IFRAME_URL = OTHER_BASE_URL + |
| 'resources/claim-with-redirect-iframe.html'; |
| |
| // Different origin from the registration |
| var REDIRECT_TO_URL = BASE_URL + |
| 'resources/claim-with-redirect-iframe.html?redirected'; |
| |
| var REGISTER_IFRAME_URL = OTHER_IFRAME_URL + '?register=' + |
| encodeURIComponent(WORKER_URL) + '&' + |
| 'scope=' + encodeURIComponent(SCOPE_URL); |
| var REDIRECT_IFRAME_URL = SCOPE_URL + '?Redirect=' + |
| encodeURIComponent(REDIRECT_TO_URL); |
| var UPDATE_IFRAME_URL = OTHER_IFRAME_URL + '?update=' + |
| encodeURIComponent(SCOPE_URL); |
| var UNREGISTER_IFRAME_URL = OTHER_IFRAME_URL + '?unregister=' + |
| encodeURIComponent(SCOPE_URL); |
| |
| var waiting_resolver = undefined; |
| |
| addEventListener('message', e => { |
| if (waiting_resolver !== undefined) { |
| waiting_resolver(e.data); |
| } |
| }); |
| |
| function assert_with_iframe(url, expected_message) { |
| return new Promise(resolve => { |
| waiting_resolver = resolve; |
| with_iframe(url); |
| }) |
| .then(data => assert_equals(data.message, expected_message)); |
| } |
| |
| // This test checks behavior when browser got a redirect header from in-scope |
| // page and navigated to out-of-scope page which has a different origin from any |
| // registrations. |
| promise_test(t => { |
| return assert_with_iframe(REGISTER_IFRAME_URL, 'registered') |
| .then(() => assert_with_iframe(REDIRECT_IFRAME_URL, 'redirected')) |
| .then(() => assert_with_iframe(UPDATE_IFRAME_URL, 'updated')) |
| .then(() => assert_with_iframe(UNREGISTER_IFRAME_URL, 'unregistered')); |
| }, 'Claim works after redirection to another origin'); |
| |
| </script> |
| </body> |