| 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)); |
| } |