61 lines
2.1 KiB
JavaScript
61 lines
2.1 KiB
JavaScript
// META: script=../../../service-workers/service-worker/resources/test-helpers.sub.js
|
|
// META: script=/common/utils.js
|
|
// META: script=/common/get-host-info.sub.js
|
|
// META: script=resources/utils.js
|
|
|
|
const { REMOTE_HOST } = get_host_info();
|
|
const BASE_SCOPE = 'resources/basic.html?';
|
|
|
|
async function cleanup() {
|
|
for (const iframe of document.querySelectorAll('.test-iframe')) {
|
|
iframe.parentNode.removeChild(iframe);
|
|
}
|
|
|
|
for (const reg of await navigator.serviceWorker.getRegistrations()) {
|
|
await reg.unregister();
|
|
}
|
|
}
|
|
|
|
async function setupRegistration(t, scope) {
|
|
await cleanup();
|
|
const reg = await navigator.serviceWorker.register(
|
|
'resources/sw-intercept-range.js', { scope });
|
|
await wait_for_state(t, reg.installing, 'activated');
|
|
return reg;
|
|
}
|
|
|
|
promise_test(async t => {
|
|
const scope = BASE_SCOPE + Math.random();
|
|
await setupRegistration(t, scope);
|
|
const iframe = await with_iframe(scope);
|
|
const w = iframe.contentWindow;
|
|
|
|
const url = new URL('long-wav.py', w.location);
|
|
url.searchParams.set('action', 'echo-range');
|
|
|
|
const response = await w.fetch(url, { headers: { Range: 'bytes=0-10' } });
|
|
|
|
assert_equals(response.status, 200, 'Response is served by the service worker');
|
|
assert_equals(
|
|
await response.text(), 'bytes=0-10',
|
|
'Service worker intercepted the same-origin range request and saw its Range header');
|
|
}, 'Same-origin range request must be intercepted by the service worker');
|
|
|
|
promise_test(async t => {
|
|
const scope = BASE_SCOPE + Math.random();
|
|
await setupRegistration(t, scope);
|
|
const iframe = await with_iframe(scope);
|
|
const w = iframe.contentWindow;
|
|
|
|
const url = new URL('long-wav.py', w.location);
|
|
url.hostname = REMOTE_HOST;
|
|
url.searchParams.set('action', 'echo-range');
|
|
|
|
const response =
|
|
await w.fetch(url, { mode: 'cors', headers: { Range: 'bytes=0-10' } });
|
|
|
|
assert_equals(
|
|
await response.text(), 'bytes=0-10',
|
|
'Service worker intercepted the cross-origin CORS range request and saw its Range header');
|
|
}, 'Cross-origin CORS range request must be intercepted by the service worker');
|