importScripts('/common/get-host-info.sub.js'); const text = 'worker loading intercepted by service worker'; const dedicated_worker_script = `postMessage('${text}');`; const shared_worker_script = `onconnect = evt => evt.ports[0].postMessage('${text}');`; let source; let resolveDone; let done = new Promise(resolve => resolveDone = resolve); // The page messages this worker to ask for the result. Keep the worker alive // via waitUntil() until the result is sent. self.addEventListener('message', event => { source = event.data.port; source.postMessage({id: event.source.id}); source.onmessage = resolveDone; event.waitUntil(done); }); self.onfetch = event => { const url = event.request.url; const destination = event.request.destination; if (source) source.postMessage({clientId:event.clientId, resultingClientId: event.resultingClientId}); // Request handler for a synthesized response. if (url.indexOf('synthesized') != -1) { let script_headers = new Headers({ "Content-Type": "text/javascript" }); if (destination === 'worker') event.respondWith(new Response(dedicated_worker_script, { 'headers': script_headers })); else if (destination === 'sharedworker') event.respondWith(new Response(shared_worker_script, { 'headers': script_headers })); else event.respondWith(new Response('Unexpected request! ' + destination)); return; } // Request handler for a same-origin response. if (url.indexOf('same-origin') != -1) { event.respondWith(fetch('postmessage-on-load-worker.js')); return; } // Request handler for a cross-origin response. if (url.indexOf('cors') != -1) { const filename = 'postmessage-on-load-worker.js'; const path = (new URL(filename, self.location)).pathname; let new_url = get_host_info()['HTTPS_REMOTE_ORIGIN'] + path; let mode; if (url.indexOf('no-cors') != -1) { // Test no-cors mode. mode = 'no-cors'; } else { // Test cors mode. new_url += '?pipe=header(Access-Control-Allow-Origin,*)'; mode = 'cors'; } event.respondWith(fetch(new_url, { mode: mode })); } };