From 48053d96d44abbfa3c659e5fc817d998dda2bb35 Mon Sep 17 00:00:00 2001 From: hackademix Date: Mon, 10 Sep 2018 19:10:32 +0200 Subject: Better IPV6 support. --- src/content/content.js | 8 +------- src/content/staticNS.js | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 8 deletions(-) (limited to 'src/content') 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); -- cgit v1.2.3