diff options
Diffstat (limited to 'src/content')
-rw-r--r-- | src/content/content.js | 8 | ||||
-rw-r--r-- | src/content/staticNS.js | 21 |
2 files changed, 21 insertions, 8 deletions
diff --git a/src/content/content.js b/src/content/content.js index fc76906..dc493c2 100644 --- a/src/content/content.js +++ b/src/content/content.js @@ -49,15 +49,9 @@ var notifyPage = async () => { if (document.readyState === "complete") { try { if (!("canScript" in ns)) { - let childPolicy = await Messages.send("fetchChildPolicy", {url: document.URL}); - if (!childPolicy) { - debug(`No answer to fetchChildPolicy message. This should not be happening.`); - return; - } - ns.setup(childPolicy.permissions, childPolicy.MARKER); + ns.fetchPolicy(); return; } - await Messages.send("pageshow", {seen: seen.list, canScript: ns.canScript}); return true; } catch (e) { diff --git a/src/content/staticNS.js b/src/content/staticNS.js index 6179da0..4e192b8 100644 --- a/src/content/staticNS.js +++ b/src/content/staticNS.js @@ -33,7 +33,17 @@ backlog.add(eventName); }, - setup(permissions, MARKER) { + async fetchPolicy() { + let policy = await Messages.send("fetchChildPolicy", {url: document.URL}); + if (!policy) { + debug(`No answer to fetchChildPolicy message. This should not be happening.`); + return false; + } + this.setup(policy.permissions, policy.MARKER, true); + return true; + }, + + setup(permissions, MARKER, fetched = false) { this.config.permissions = permissions; // ugly hack: since now we use registerContentScript instead of the @@ -75,6 +85,15 @@ this.capabilities = Object.assign( new Set(["script"]), { has() { return true; } }); } else { + if (!fetched) { + let hostname = window.location.hostname; + if (hostname && hostname.startsWith("[")) { + // WebExt match patterns don't seem to support IPV6 (Firefox 63)... + debug("Ignoring child policy setup parameters for IPV6 address %s, forcing IPC...", hostname); + this.fetchPolicy(); + return; + } + } let perms = this.config.permissions; this.capabilities = new Set(perms.capabilities); new DocumentCSP(document).apply(this.capabilities, this.embeddingDocument); |