PureYAMLStreaming/coi-serviceworker.js
Mihaela Mihaljevic 01b38309e8 pages: deploy the WASM benchmark site
Built by scripts/build-wasm-site.sh; the loader fetches the gzipped
module and decompresses client-side, and coi-serviceworker.js supplies
COOP/COEP so SharedArrayBuffer works without server headers.
2026-07-05 06:07:19 +02:00

56 lines
1.7 KiB
JavaScript

(() => {
const coop = "same-origin";
const coep = "require-corp";
const reloadKey = "pureyamlStreamingCOIReloadedV3";
if (typeof Window !== "undefined" && self instanceof Window) {
if (window.crossOriginIsolated || !("serviceWorker" in navigator) || !window.isSecureContext) {
return;
}
const reloadForIsolation = () => {
if (!window.crossOriginIsolated && sessionStorage.getItem(reloadKey) !== "1") {
sessionStorage.setItem(reloadKey, "1");
window.location.reload();
}
};
navigator.serviceWorker.addEventListener("controllerchange", reloadForIsolation);
navigator.serviceWorker.register("./coi-serviceworker.js").then(async (registration) => {
await registration.update();
await navigator.serviceWorker.ready;
reloadForIsolation();
}).catch((error) => {
console.warn("Unable to register cross-origin isolation service worker", error);
});
return;
}
self.addEventListener("install", () => {
self.skipWaiting();
});
self.addEventListener("activate", (event) => {
event.waitUntil(self.clients.claim());
});
self.addEventListener("fetch", (event) => {
if (event.request.cache === "only-if-cached" && event.request.mode !== "same-origin") {
return;
}
event.respondWith((async () => {
const response = await fetch(event.request);
const headers = new Headers(response.headers);
headers.set("Cross-Origin-Opener-Policy", coop);
headers.set("Cross-Origin-Embedder-Policy", coep);
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers,
});
})());
});
})();