Source code

Revision control

Copy as Markdown

Other Tools

function remote(path) {
const REMOTE_ORIGIN = get_host_info().HTTPS_REMOTE_ORIGIN;
return new URL(path, REMOTE_ORIGIN).href;
}
function local(path) {
return new URL(path, location.origin).href;
}
function encode(url) {
return encodeURI(url).replace(/\;/g, '%3B');
}
const resource_path = (new URL('./resources', location)).pathname;
const header_coep = '|header(Cross-Origin-Embedder-Policy,require-corp)';
const header_coep_report_only =
'|header(Cross-Origin-Embedder-Policy-Report-Only,require-corp)';
const iframe_path = resource_path + '/iframe.html?pipe=';
const worker_path = resource_path + '/reporting-worker.js?pipe=';
const image_url = remote('/images/blue.png');
// This script attempt to load a COEP:require-corp CORP:undefined response from
// the CacheStorage.
//
// Executed from different context:
// - A Document
// - A ServiceWorker
// - A DedicatedWorker
// - A SharedWorker
//
// The context has either COEP or COEP-Report-Only defined.
const eval_script = `
(async function() {
try {
const cache = await caches.open('v1');
const request = new Request('${image_url}', { mode: 'no-cors' });
const response = await cache.match(request);
} catch(e) {
}
})()
`;
promise_setup(async (t) => {
const cache = await caches.open('v1');
const request = new Request(image_url, {mode: 'no-cors'});
const response = await fetch(request);
await cache.put(request, response);
}, 'Setup: store a CORS:cross-origin COEP:none response into CacheStorage')
async function makeIframe(test, iframe_url) {
const iframe = document.createElement('iframe');
test.add_cleanup(() => iframe.remove());
iframe.src = iframe_url;
const iframe_loaded = new Promise(resolve => iframe.onload = resolve);
document.body.appendChild(iframe);
await iframe_loaded;
return iframe;
}
function wait(ms) {
return new Promise(resolve => step_timeout(resolve, ms));
}