Graceful degradation for missing WebExtensions APIs on Chromium.
This commit is contained in:
parent
d076a517ba
commit
781514cfb9
|
@ -51,6 +51,10 @@
|
|||
}
|
||||
};
|
||||
|
||||
if (!browser.contentScripts) { // #chromium fallback
|
||||
Scripts.register = () => {};
|
||||
}
|
||||
|
||||
let flatten = arr => arr.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);
|
||||
|
||||
let protocolRx = /^(\w+):/i;
|
||||
|
|
|
@ -20,7 +20,10 @@ var RequestGuard = (() => {
|
|||
media: "media",
|
||||
other: "",
|
||||
};
|
||||
const allTypes = Object.keys(policyTypesMap);
|
||||
const allTypes = UA.isMozilla ? Object.keys(policyTypesMap)
|
||||
: ["main_frame", "sub_frame", "stylesheet", "script", "image", "font",
|
||||
"object", "xmlhttprequest", "ping", "csp_report", "media", "websocket", "other"];
|
||||
|
||||
Object.assign(policyTypesMap, {"webgl": "webgl"}); // fake types
|
||||
const TabStatus = {
|
||||
map: new Map(),
|
||||
|
@ -254,7 +257,7 @@ var RequestGuard = (() => {
|
|||
return redirected;
|
||||
}
|
||||
const ABORT = {cancel: true}, ALLOW = {};
|
||||
const INTERNAL_SCHEME = /^(?:chrome|resource|moz-extension|about):/;
|
||||
const INTERNAL_SCHEME = /^(?:chrome|resource|(?:moz|chrome)-extension|about):/;
|
||||
const listeners = {
|
||||
onBeforeRequest(request) {
|
||||
try {
|
||||
|
@ -326,7 +329,7 @@ var RequestGuard = (() => {
|
|||
capabilities = perms.capabilities;
|
||||
} else {
|
||||
capabilities = perms.capabilities;
|
||||
if (frameAncestors.length > 0) {
|
||||
if (frameAncestors && frameAncestors.length > 0) {
|
||||
// cascade top document's restrictions to subframes
|
||||
let topUrl = frameAncestors.pop().url;
|
||||
let topPerms = policy.get(topUrl, topUrl).perms;
|
||||
|
|
|
@ -31,7 +31,7 @@ function deferWebTraffic(promiseToWaitFor, next) {
|
|||
if (type === "main_frame") {
|
||||
seenTabs.add(tabId);
|
||||
} else if (documentUrl) {
|
||||
if (frameId !== 0) {
|
||||
if (frameId !== 0 && request.frameAncestors) {
|
||||
documentUrl = request.frameAncestors.pop().url;
|
||||
}
|
||||
reloadTab(tabId);
|
||||
|
|
|
@ -7,14 +7,16 @@ var Prompts = (() => {
|
|||
async open(data) {
|
||||
promptData = data;
|
||||
this.close();
|
||||
this.currentWindow = await browser.windows.create({
|
||||
let options = {
|
||||
url: browser.extension.getURL("ui/prompt.html"),
|
||||
type: "panel",
|
||||
allowScriptsToClose: true,
|
||||
// titlePreface: "NoScript ",
|
||||
width: data.features.width,
|
||||
height: data.features.height,
|
||||
});
|
||||
};
|
||||
if (UA.isMozilla) {
|
||||
options.allowScriptsToClose = true;
|
||||
}
|
||||
this.currentWindow = await browser.windows.create(options);
|
||||
}
|
||||
async close() {
|
||||
if (this.currentWindow) {
|
||||
|
|
Loading…
Reference in New Issue