Source code

Revision control

Copy as Markdown

Other Tools

// This is the (shared or dedicated) worker file for the
// worker-interception-redirect test. It should be served by the corresponding
// .py file instead of being served directly.
//
// This file is served from both resources/*webworker.py,
// resources/scope2/*webworker.py and resources/subdir/*webworker.py.
// Relative paths are used in `fetch()` and `importScripts()` to confirm that
// the correct base URLs are used.
// This greeting text is meant to be injected by the Python script that serves
// this file, to indicate how the script was served (from network or from
// service worker).
//
// We can't just use a sub pipe and name this file .sub.js since we want
// to serve the file from multiple URLs (see above).
let greeting = '%GREETING_TEXT%';
if (!greeting)
greeting = 'the worker script was served from network';
// Call importScripts() which fills |echo_output| with a string indicating
// whether a service worker intercepted the importScripts() request.
let echo_output;
const import_scripts_msg = encodeURIComponent(
'importScripts: served from network');
let import_scripts_greeting = 'not set';
try {
importScripts(`import-scripts-echo.py?msg=${import_scripts_msg}`);
import_scripts_greeting = echo_output;
} catch(e) {
import_scripts_greeting = 'importScripts failed';
}
async function runTest(port) {
port.postMessage(greeting);
port.postMessage(import_scripts_greeting);
const response = await fetch('simple.txt');
const text = await response.text();
port.postMessage('fetch(): ' + text);
port.postMessage(self.location.href);
}
if ('DedicatedWorkerGlobalScope' in self &&
self instanceof DedicatedWorkerGlobalScope) {
runTest(self);
} else if (
'SharedWorkerGlobalScope' in self &&
self instanceof SharedWorkerGlobalScope) {
self.onconnect = function(e) {
const port = e.ports[0];
port.start();
runTest(port);
};
}