Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!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>