diff options
author | Wojtek Kosior <koszko@koszko.org> | 2021-09-10 17:46:24 +0200 |
---|---|---|
committer | Wojtek Kosior <koszko@koszko.org> | 2021-09-10 17:46:24 +0200 |
commit | d658cadf5184b127ec6ae6d6d8900f5e428095b0 (patch) | |
tree | c96367f01ba62c45b2ce51f46deec32e6c90bf84 | |
parent | 5c75d7446187a01409eff1a1e5946f66267f61fb (diff) | |
download | browser-extension-d658cadf5184b127ec6ae6d6d8900f5e428095b0.tar.gz browser-extension-d658cadf5184b127ec6ae6d6d8900f5e428095b0.zip |
disable service workers when scripts are blocked
-rw-r--r-- | content/main.js | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/content/main.js b/content/main.js index cc7692a..6478ea0 100644 --- a/content/main.js +++ b/content/main.js @@ -304,6 +304,27 @@ http-equiv="Content-Security-Policy" content="${make_csp_rule(policy)}"\ start_data_urls_sanitizing(doc); } +async function disable_service_workers() +{ + if (!navigator.serviceWorker) + return; + + const registrations = await navigator.serviceWorker.getRegistrations(); + if (registrations.length === 0) + return; + + console.warn("Service Workers detected on this page! Unregistering and reloading"); + + try { + await Promise.all(registrations.map(r => r.unregister())); + } finally { + location.reload(); + } + + /* Never actually return! */ + return new Promise(() => 0); +} + if (!is_privileged_url(document.URL)) { let policy_received_callback = () => undefined; let policy; @@ -343,6 +364,7 @@ if (!is_privileged_url(document.URL)) { const doc_ready = Promise.all([ policy.allow ? Promise.resolve() : sanitize_document(document, policy), + policy.allow ? Promise.resolve() : disable_service_workers(), wait_loaded(document) ]); |