blob: 44cb57a6bebdea62d2148a9a254ce5ab8f027e3c [file] [log] [blame]
// Helper functions for ServiceWorker static routing API.
//
// test-helpers.sub.js must be loaded before using this.
// Get a dictionary of information recorded inside ServiceWorker.
// It includes:
// - request URL and mode.
// - errors.
//
// See: static-router-sw.js for details.
const get_info_from_worker = async worker => {
const promise = new Promise(function(resolve) {
var channel = new MessageChannel();
channel.port1.onmessage = function(msg) { resolve(msg); };
worker.postMessage({port: channel.port2}, [channel.port2]);
});
const message = await promise;
return message.data;
}
// Reset information stored inside ServiceWorker.
const reset_info_in_worker = async worker => {
const promise = new Promise(function(resolve) {
var channel = new MessageChannel();
channel.port1.onmessage = function(msg) { resolve(msg); };
worker.postMessage({port: channel.port2, reset: true}, [channel.port2]);
});
await promise;
}
// Register the ServiceWorker and wait until activated.
// {ruleKey} represents the key of routerRules defined in router-rules.js.
const registerAndActivate = async (test, ruleKey) => {
const swScript = 'resources/static-router-sw.js';
const swURL = `${swScript}?key=${ruleKey}`;
const swScope = 'resources/';
const reg = await service_worker_unregister_and_register(
test, swURL, swScope, { type: 'module' });
add_completion_callback(() => reg.unregister());
const worker = reg.installing;
await wait_for_state(test, worker, 'activated');
return worker;
};