summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhackademix2020-01-08 12:54:50 +0100
committerhackademix2020-01-08 12:54:50 +0100
commitbd5acb2be3bac7cb22f8b2828b0f950af22b1f37 (patch)
tree2b2552af7ad047bffc53c51314f354d4c46a2327
parentce6e5a54a00322332188eddc2a358288db7d20c3 (diff)
downloadnoscript-bd5acb2be3bac7cb22f8b2828b0f950af22b1f37.tar.gz
noscript-bd5acb2be3bac7cb22f8b2828b0f950af22b1f37.tar.xz
noscript-bd5acb2be3bac7cb22f8b2828b0f950af22b1f37.zip
Support for reporting service workers and their imported scripts in UI.
-rw-r--r--src/bg/RequestGuard.js13
-rw-r--r--src/content/content.js14
2 files changed, 25 insertions, 2 deletions
diff --git a/src/bg/RequestGuard.js b/src/bg/RequestGuard.js
index 1ff4269..2f5a615 100644
--- a/src/bg/RequestGuard.js
+++ b/src/bg/RequestGuard.js
@@ -228,7 +228,18 @@ var RequestGuard = (() => {
key: Policy.requestKey(url, type, documentUrl || "", /^(media|object|frame)$/.test(type)),
type, url, documentUrl, originUrl
};
- if (tabId < 0) return;
+ if (tabId < 0) {
+ if (type === "script" && url.startsWith("https://") && documentUrl && documentUrl.startsWith("https://")) {
+ // service worker / importScripts()?
+ let payload = {request, allowed, policyType, serviceWorker: Sites.origin(documentUrl)};
+ let recipient = {frameId: 0};
+ for (let tab of await browser.tabs.query({url: ["http://*/*", "https://*/*"]})) {
+ recipient.tabId = tab.id;
+ Messages.send("seen", payload, recipient);
+ }
+ }
+ return;
+ }
if (pending) request.initialUrl = pending.initialUrl;
if (type !== "sub_frame") { // we couldn't deliver it to frameId, since it's generally not loaded yet
try {
diff --git a/src/content/content.js b/src/content/content.js
index 74e1d95..3862a58 100644
--- a/src/content/content.js
+++ b/src/content/content.js
@@ -32,7 +32,19 @@ var seen = {
Messages.addHandler({
seen(event) {
- let {allowed, policyType, request, ownFrame} = event;
+ let {allowed, policyType, request, ownFrame, serviceWorker} = event;
+ if (serviceWorker) {
+ for (let e of seen.list) {
+ let {request} = e;
+ if (e.serviceWorker === serviceWorker ||
+ (request.type === "main_frame" || request.type === "sub_frame") &&
+ new URL(request.url).origin === serviceWorker) {
+ seen.record(event);
+ break;
+ }
+ }
+ return;
+ }
if (window.top === window) {
seen.record(event);
}