summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhackademix2018-08-18 22:52:34 +0200
committerhackademix2018-08-18 22:52:34 +0200
commitbb232e0895ba2090c5b4555e882453c5f60f2dfb (patch)
tree4d512d1fe9f40c8a77f561f8e9aa6dc4bdf3c8c3 /src
parent3819592dfcb6618dce067ed9086d914d20e643d5 (diff)
downloadnoscript-bb232e0895ba2090c5b4555e882453c5f60f2dfb.tar.gz
noscript-bb232e0895ba2090c5b4555e882453c5f60f2dfb.tar.xz
noscript-bb232e0895ba2090c5b4555e882453c5f60f2dfb.zip
More reliable attempt to run onResponseHeader listener the last of installed extension.
Diffstat (limited to 'src')
-rw-r--r--src/bg/RequestGuard.js24
-rw-r--r--src/bg/deferWebTraffic.js6
-rw-r--r--src/lib/LastListener.js5
3 files changed, 23 insertions, 12 deletions
diff --git a/src/bg/RequestGuard.js b/src/bg/RequestGuard.js
index 703623f..38801de 100644
--- a/src/bg/RequestGuard.js
+++ b/src/bg/RequestGuard.js
@@ -462,19 +462,33 @@ var RequestGuard = (() => {
onResponseStarted(request) {
debug("onResponseStarted", request);
- if (request.type === "main_frame") {
- TabStatus.initTab(request.tabId);
+ let {url, tabId, frameId, type} = request;
+ if (type === "main_frame") {
+ TabStatus.initTab(tabId);
}
let scriptBlocked = request.responseHeaders.some(
h => CSP.isMine(h) && CSP.blocks(h.value, "script")
);
- debug("%s scriptBlocked=%s setting noscriptFrame on ", request.url, scriptBlocked, request.tabId, request.frameId);
+ debug("%s scriptBlocked=%s setting noscriptFrame on ", url, scriptBlocked, tabId, frameId);
TabStatus.record(request, "noscriptFrame", scriptBlocked);
let pending = pendingRequests.get(request.requestId);
if (pending) {
pending.scriptBlocked = scriptBlocked;
- if (!pending.headersProcessed) {
- debug("[WARNING] onHeadersReceived could not process", request);
+ if (!(pending.headersProcessed &&
+ (scriptBlocked || ns.policy.can(url, "script", request.documentURL))
+ )) {
+ debug("[WARNING] onHeadersReceived %s %o", frameId, tabId,
+ pending.headersProcessed ? "has been overridden on": "could not process",
+ request);
+
+ if (tabId !== -1) {
+ debug("[WARNING] Reloading %s frame %s of tab %s.", url, frameId, tabId);
+ browser.tabs.executeScript(tabId, {
+ runAt: "document_start",
+ code: "window.location.reload(false)",
+ frameId
+ });
+ }
}
}
},
diff --git a/src/bg/deferWebTraffic.js b/src/bg/deferWebTraffic.js
index 15d177b..3f27dd5 100644
--- a/src/bg/deferWebTraffic.js
+++ b/src/bg/deferWebTraffic.js
@@ -34,11 +34,7 @@ function deferWebTraffic(promiseToWaitFor, next) {
if (frameId !== 0) {
documentUrl = request.frameAncestors.pop().url;
}
- if (tabId !== -1) {
- reloadTab(tabId);
- } else {
- debug("No tab to reload for %s %s from %s", type, url, documentUrl);
- }
+ reloadTab(tabId);
}
}
debug("Deferring %s %s from %s", type, url, documentUrl);
diff --git a/src/lib/LastListener.js b/src/lib/LastListener.js
index 51600eb..6506e32 100644
--- a/src/lib/LastListener.js
+++ b/src/lib/LastListener.js
@@ -19,12 +19,13 @@ class LastListener {
let ww = this._wrapped = [listener, listener].map(l => {
let w = (...args) => {
if (this.observed.hasListener(w._other)) {
- this.observed.removeListener(w._other);
- if (this.last === w) return this.defaultResult;
+ this.observed.removeListener(w);
+ if (this.last !== w) return this.defaultResult;
} else if (this.installed) {
this.observed.addListener(w._other, ...this.extras);
this.last = w._other;
}
+ debug("Running listener", w === ww[0] ? 0 : 1, ...args);
return this.installed ? this.listener(...args)
: this.defaultResult;
}