mirror of
https://github.com/kkapsner/CanvasBlocker
synced 2024-12-22 04:40:20 +01:00
Switch to asych/await where useful
This commit is contained in:
parent
372ee755f7
commit
10413a89c3
@ -83,12 +83,10 @@ async function translate(language){
|
||||
return data;
|
||||
}
|
||||
|
||||
translate(language).then(function(data){
|
||||
(async function(){
|
||||
"use strict";
|
||||
|
||||
return saveTranslation(language, data);
|
||||
}).catch(function(error){
|
||||
"use strict";
|
||||
const data = await translate(language);
|
||||
|
||||
console.error(error);
|
||||
});
|
||||
saveTranslation(language, data);
|
||||
}());
|
@ -114,11 +114,10 @@
|
||||
}
|
||||
return lists[type];
|
||||
};
|
||||
scope.appendTo = function appendToList(type, entry){
|
||||
scope.appendTo = async function appendToList(type, entry){
|
||||
const oldValue = settings[type + "List"];
|
||||
return settings.set(type + "List", oldValue + (oldValue? ",": "") + entry).then(function(){
|
||||
return updateList(type);
|
||||
});
|
||||
await settings.set(type + "List", oldValue + (oldValue? ",": "") + entry);
|
||||
return updateList(type);
|
||||
};
|
||||
scope.update = updateList;
|
||||
scope.updateAll = function updateAllLists(){
|
||||
|
@ -13,10 +13,11 @@
|
||||
}
|
||||
|
||||
let settings = false;
|
||||
scope.setSettings = function(realSettings){
|
||||
scope.setSettings = async function(realSettings){
|
||||
if (!settings){
|
||||
settings = realSettings;
|
||||
return settings.loaded.then(scope.clearQueue);
|
||||
await settings.loaded;
|
||||
return scope.clearQueue();
|
||||
}
|
||||
else {
|
||||
warning("logging: Settings can only be set once.");
|
||||
|
44
lib/main.js
44
lib/main.js
@ -14,7 +14,7 @@
|
||||
const registerSettingsContentScript = (function(){
|
||||
let unregisterSettingsContentScript = function(){};
|
||||
let lastRegistering;
|
||||
return function registerSettingsContentScript(){
|
||||
return async function registerSettingsContentScript(){
|
||||
logging.message("Register content script for the settings.");
|
||||
logging.verbose("Unregister old content script, if present.");
|
||||
unregisterSettingsContentScript();
|
||||
@ -23,7 +23,7 @@
|
||||
data[def.name] = def.get();
|
||||
});
|
||||
lastRegistering = data;
|
||||
browser.contentScripts.register({
|
||||
const api = await browser.contentScripts.register({
|
||||
matches: ["<all_urls>"],
|
||||
matchAboutBlank: true,
|
||||
allFrames: true,
|
||||
@ -52,19 +52,16 @@
|
||||
}
|
||||
}(${JSON.stringify(data)}))`
|
||||
}]
|
||||
}).then(function(api){
|
||||
logging.verbose("Content script registered.");
|
||||
if (data !== lastRegistering){
|
||||
logging.verbose("Multiple content scripts registered at once. Remove unnecessary one.");
|
||||
api.unregister();
|
||||
}
|
||||
else {
|
||||
unregisterSettingsContentScript = api.unregister;
|
||||
}
|
||||
return;
|
||||
}).catch(function(error){
|
||||
logging.warning("Unable to register content script:", error);
|
||||
});
|
||||
|
||||
logging.verbose("Content script registered.");
|
||||
if (data !== lastRegistering){
|
||||
logging.verbose("Multiple content scripts registered at once. Remove unnecessary one.");
|
||||
api.unregister();
|
||||
}
|
||||
else {
|
||||
unregisterSettingsContentScript = api.unregister;
|
||||
}
|
||||
};
|
||||
}());
|
||||
|
||||
@ -79,7 +76,7 @@
|
||||
persistentRndStorage.init();
|
||||
|
||||
logging.message("register non port message listener");
|
||||
browser.runtime.onMessage.addListener(function(data){
|
||||
browser.runtime.onMessage.addListener(async function(data){
|
||||
logging.notice("got data without port", data);
|
||||
const keys = Object.keys(data);
|
||||
if (data["canvasBlocker-new-domain-rnd"]){
|
||||
@ -105,13 +102,9 @@
|
||||
}
|
||||
}
|
||||
logging.notice("pass the message to the tabs");
|
||||
browser.tabs.query({}).then(function(tabs){
|
||||
tabs.forEach(function(tab){
|
||||
browser.tabs.sendMessage(tab.id, data);
|
||||
});
|
||||
return;
|
||||
}).catch(function(error){
|
||||
logging.warning("Unable to get browser tabs:", error);
|
||||
const tabs = await browser.tabs.query({});
|
||||
tabs.forEach(function(tab){
|
||||
browser.tabs.sendMessage(tab.id, data);
|
||||
});
|
||||
});
|
||||
|
||||
@ -190,10 +183,9 @@
|
||||
}
|
||||
|
||||
// mobile default settings
|
||||
mobile.ifMobile(function(){
|
||||
return browser.storage.local.get().then(mobile.applyMobileDefaults).catch(function(error){
|
||||
logging.error("Unable to set mobile default values:", error);
|
||||
});
|
||||
mobile.ifMobile(async function(){
|
||||
const settings = await browser.storage.local.get();
|
||||
mobile.applyMobileDefaults(settings);
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -15,31 +15,29 @@
|
||||
const settings = require("./settings");
|
||||
const settingDefinitions = require("./settingDefinitions");
|
||||
|
||||
scope.isMobile = function isMobile(){
|
||||
scope.isMobile = async function isMobile(){
|
||||
// todo: proper mobile check (e.g. over browser.runtime.getBrowserInfo()) and no feature check
|
||||
return Promise.resolve(
|
||||
!browser.pageAction ||
|
||||
return !browser.pageAction ||
|
||||
!browser.pageAction.show ||
|
||||
!browser.pageAction.openPopup
|
||||
);
|
||||
;
|
||||
};
|
||||
|
||||
scope.ifMobile = function ifMobile(ifCallback, elseCallback){
|
||||
return scope.isMobile().then(function(isMobile){
|
||||
if (isMobile){
|
||||
return ifCallback();
|
||||
}
|
||||
else if (elseCallback){
|
||||
return elseCallback();
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
scope.ifMobile = async function ifMobile(ifCallback, elseCallback){
|
||||
const isMobile = await scope.isMobile();
|
||||
if (isMobile){
|
||||
return ifCallback();
|
||||
}
|
||||
else if (elseCallback){
|
||||
return elseCallback();
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
scope.applyMobileDefaults = function applyMobileDefaults(storage = false){
|
||||
return Promise.all(settingDefinitions.filter(function(definition){
|
||||
scope.applyMobileDefaults = async function applyMobileDefaults(storage = false){
|
||||
await Promise.all(settingDefinitions.filter(function(definition){
|
||||
return definition.hasOwnProperty("mobileDefaultValue") && (
|
||||
!storage ||
|
||||
!storage.hasOwnProperty(definition.name)
|
||||
|
@ -163,16 +163,12 @@
|
||||
});
|
||||
};
|
||||
|
||||
settings.on("showNotifications", function({newValue}){
|
||||
settings.on("showNotifications", async function({newValue}){
|
||||
if (!newValue){
|
||||
logging.message("notifications were disabled -> hide all page actions");
|
||||
browser.tabs.query({}).then(function(tabs){
|
||||
tabs.forEach(function(tab){
|
||||
browser.pageAction.hide(tab.id);
|
||||
});
|
||||
return;
|
||||
}).catch(function(error){
|
||||
logging.warning("Unable to get browser tabs:", error);
|
||||
const tabs = await browser.tabs.query({});
|
||||
tabs.forEach(function(tab){
|
||||
browser.pageAction.hide(tab.id);
|
||||
});
|
||||
}
|
||||
});
|
||||
@ -180,20 +176,16 @@
|
||||
browser.tabs.onRemoved.addListener(function(tabId){
|
||||
tabsData.delete(tabId);
|
||||
});
|
||||
settings.on("displayBadge", function({newValue}){
|
||||
settings.on("displayBadge", async function({newValue}){
|
||||
if (!newValue){
|
||||
logging.message("badge was disabled -> hide all badges");
|
||||
if (browser.browserAction.setBadgeText){
|
||||
browser.tabs.query({}).then(function(tabs){
|
||||
tabs.forEach(function(tab){
|
||||
browser.browserAction.setBadgeText({
|
||||
tabId: tab.id,
|
||||
text: ""
|
||||
});
|
||||
const tabs = await browser.tabs.query({});
|
||||
tabs.forEach(function(tab){
|
||||
browser.browserAction.setBadgeText({
|
||||
tabId: tab.id,
|
||||
text: ""
|
||||
});
|
||||
return;
|
||||
}).catch(function(error){
|
||||
logging.warning("Unable to get browser tabs:", error);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -89,17 +89,13 @@
|
||||
};
|
||||
}();
|
||||
|
||||
browser.windows.onRemoved.addListener(function(){
|
||||
browser.windows.getAll().then(function(windows){
|
||||
if (windows.every(function(window){
|
||||
return !window.incognito;
|
||||
})){
|
||||
clearIncognito();
|
||||
}
|
||||
return;
|
||||
}).catch(function(error){
|
||||
logging.warning("Unable to get browser windows:", error);
|
||||
});
|
||||
browser.windows.onRemoved.addListener(async function(){
|
||||
const windows = await browser.windows.getAll();
|
||||
if (windows.every(function(window){
|
||||
return !window.incognito;
|
||||
})){
|
||||
clearIncognito();
|
||||
}
|
||||
});
|
||||
|
||||
function registerTimeout(){
|
||||
@ -117,14 +113,10 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
function broadcast(data){
|
||||
browser.tabs.query({}).then(function(tabs){
|
||||
tabs.forEach(function(tab){
|
||||
browser.tabs.sendMessage(tab.id, data);
|
||||
});
|
||||
return;
|
||||
}).catch(function(error){
|
||||
logging.warning("Unable to get browser tabs:", error);
|
||||
async function broadcast(data){
|
||||
const tabs = await browser.tabs.query({});
|
||||
tabs.forEach(function(tab){
|
||||
browser.tabs.sendMessage(tab.id, data);
|
||||
});
|
||||
}
|
||||
function clearIncognito(){
|
||||
|
@ -129,24 +129,24 @@
|
||||
}
|
||||
return true;
|
||||
};
|
||||
const storeValue = function storeValue(newValue){
|
||||
const storeValue = async function storeValue(newValue){
|
||||
logging.verbose("Trying to store new value for %s", name, newValue);
|
||||
settings[name] = newValue;
|
||||
if (!settingDefinition.transient){
|
||||
const storeObject = {};
|
||||
storeObject[name] = newValue;
|
||||
const promise = browser.storage.local.set(storeObject);
|
||||
promise.then(function(){
|
||||
try {
|
||||
await browser.storage.local.set(storeObject);
|
||||
logging.verbose("New value stored for %s:", name, newValue);
|
||||
return;
|
||||
}).catch(function(error){
|
||||
}
|
||||
catch (error){
|
||||
logging.error("Unable to store new value for %s:", name, newValue, error);
|
||||
});
|
||||
return promise;
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
else {
|
||||
logging.warning("Transient setting %s cannot be stored.", name);
|
||||
return Promise.reject("Transient setting " + name + " cannot be stored.");
|
||||
throw "Transient setting " + name + " cannot be stored.";
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -35,23 +35,18 @@
|
||||
logging.notice("send message to main script");
|
||||
extension.message.send({"canvasBlocker-clear-domain-rnd": true});
|
||||
},
|
||||
clearPersistentRndForContainer: function(){
|
||||
browser.contextualIdentities.query({}).then(function(identities){
|
||||
return modal.select(
|
||||
extension.getTranslation("clearPersistentRndForContainer_title"),
|
||||
identities.map(function(identity){
|
||||
return {
|
||||
name: `${identity.name} (${identity.cookieStoreId})`,
|
||||
object: identity
|
||||
};
|
||||
})
|
||||
);
|
||||
}).then(function(identity){
|
||||
extension.message.send({"canvasBlocker-clear-container-rnd": identity.cookieStoreId});
|
||||
return;
|
||||
}).catch(function(error){
|
||||
logging.warning("Unable to clear persistent rnd for container:", error);
|
||||
});
|
||||
clearPersistentRndForContainer: async function(){
|
||||
const identities = await browser.contextualIdentities.query({});
|
||||
const identity = await modal.select(
|
||||
extension.getTranslation("clearPersistentRndForContainer_title"),
|
||||
identities.map(function(identity){
|
||||
return {
|
||||
name: `${identity.name} (${identity.cookieStoreId})`,
|
||||
object: identity
|
||||
};
|
||||
})
|
||||
);
|
||||
extension.message.send({"canvasBlocker-clear-container-rnd": identity.cookieStoreId});
|
||||
},
|
||||
inspectSettings: function(){
|
||||
logging.verbose("open settings inspection");
|
||||
@ -96,9 +91,9 @@
|
||||
logging.verbose("open whitelist inspection");
|
||||
window.open("whitelist.html", "_blank");
|
||||
},
|
||||
loadSettings: function(){
|
||||
loadSettings: async function(){
|
||||
logging.verbose("load settings");
|
||||
new Promise(function(resolve, reject){
|
||||
const text = await new Promise(function(resolve, reject){
|
||||
const input = document.createElement("input");
|
||||
input.type = "file";
|
||||
input.addEventListener("change", function(){
|
||||
@ -114,32 +109,27 @@
|
||||
}
|
||||
});
|
||||
input.click();
|
||||
}).then(function(text){
|
||||
return JSON.parse(text);
|
||||
}).then(function(json){
|
||||
while (settingsMigration.transitions.hasOwnProperty(json.storageVersion)){
|
||||
let oldVersion = json.storageVersion;
|
||||
json = settingsMigration.transitions[json.storageVersion](json);
|
||||
if (oldVersion === json.storageVersion){
|
||||
break;
|
||||
}
|
||||
});
|
||||
let json = JSON.parse(text);
|
||||
while (settingsMigration.transitions.hasOwnProperty(json.storageVersion)){
|
||||
let oldVersion = json.storageVersion;
|
||||
json = settingsMigration.transitions[json.storageVersion](json);
|
||||
if (oldVersion === json.storageVersion){
|
||||
break;
|
||||
}
|
||||
const keys = Object.keys(json);
|
||||
keys.forEach(function(key){
|
||||
const setting = settings.getDefinition(key);
|
||||
if (!settings){
|
||||
throw new Error("Unknown setting " + key + ".");
|
||||
}
|
||||
if (!setting.fixed && setting.invalid(json[key])){
|
||||
throw new Error("Invalid value " + json[key] + " for " + key + ".");
|
||||
}
|
||||
});
|
||||
keys.forEach(function(key){
|
||||
settings[key] = json[key];
|
||||
});
|
||||
return;
|
||||
}).catch(function(error){
|
||||
alert(error);
|
||||
}
|
||||
const keys = Object.keys(json);
|
||||
keys.forEach(function(key){
|
||||
const setting = settings.getDefinition(key);
|
||||
if (!settings){
|
||||
throw new Error("Unknown setting " + key + ".");
|
||||
}
|
||||
if (!setting.fixed && setting.invalid(json[key])){
|
||||
throw new Error("Invalid value " + json[key] + " for " + key + ".");
|
||||
}
|
||||
});
|
||||
keys.forEach(function(key){
|
||||
settings[key] = json[key];
|
||||
});
|
||||
},
|
||||
resetSettings: async function(){
|
||||
@ -165,18 +155,7 @@
|
||||
}
|
||||
};
|
||||
|
||||
new Promise(function(resolve){
|
||||
const port = browser.runtime.connect();
|
||||
port.onMessage.addListener(function(data){
|
||||
if (data.hasOwnProperty("tabId")){
|
||||
logging.notice("my tab id is", data.tabId);
|
||||
port.disconnect();
|
||||
resolve(data.tabId);
|
||||
}
|
||||
});
|
||||
}).then(function(tabId){
|
||||
return browser.tabs.get(tabId);
|
||||
}).then(function(tab){
|
||||
browser.tabs.getCurrent().then(function(tab){
|
||||
document.querySelector("head title").textContent = extension.getTranslation("options_title");
|
||||
let head = document.createElement("header");
|
||||
document.body.insertBefore(head, document.body.firstChild);
|
||||
@ -236,7 +215,7 @@
|
||||
linkDiv.appendChild(link);
|
||||
head.appendChild(linkDiv);
|
||||
}
|
||||
return;
|
||||
return undefined;
|
||||
}).catch(function(error){
|
||||
logging.warning("Unable to identify tab:", error);
|
||||
});
|
||||
@ -569,7 +548,7 @@
|
||||
return response.json();
|
||||
}).then(function(manifest){
|
||||
version.textContent = "Version " + manifest.version;
|
||||
return;
|
||||
return manifest.version;
|
||||
}).catch(function(error){
|
||||
version.textContent = "Unable to get version: " + error;
|
||||
});
|
||||
@ -578,7 +557,7 @@
|
||||
settings.onloaded(function(){
|
||||
const reCaptchaEntry = "^https://www\\.google\\.com/recaptcha/api2/(?:b?frame|anchor).*$";
|
||||
const {url: urlContainer} = settings.getContainers();
|
||||
settings.on("protectWindow", function({newValue}){
|
||||
settings.on("protectWindow", async function({newValue}){
|
||||
if (newValue){
|
||||
const urlValue = urlContainer.get();
|
||||
const matching = urlValue.filter(function(entry){
|
||||
@ -591,20 +570,16 @@
|
||||
matching[0].protectWindow
|
||||
)
|
||||
){
|
||||
modal.confirm(
|
||||
const addException = await modal.confirm(
|
||||
extension.getTranslation("protectWindow_askReCaptchaException"),
|
||||
{
|
||||
node: document.querySelector("[data-storage-name=protectWindow]"),
|
||||
selector: ".settingRow .content"
|
||||
}
|
||||
).then(function(addException){
|
||||
if (addException){
|
||||
settings.set("protectWindow", false, reCaptchaEntry);
|
||||
}
|
||||
return;
|
||||
}).catch(function(error){
|
||||
logging.warning("Error while adding reCaptcha exception:", error);
|
||||
});
|
||||
);
|
||||
if (addException){
|
||||
settings.set("protectWindow", false, reCaptchaEntry);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
(function(){
|
||||
(async function(){
|
||||
"use strict";
|
||||
|
||||
const extension = require("../lib/extension");
|
||||
@ -76,8 +76,8 @@
|
||||
if (settingsList.childNodes.length){
|
||||
const button = document.createElement("button");
|
||||
button.textContent = extension.getTranslation("apply");
|
||||
button.addEventListener("click", function(){
|
||||
Promise.all(Object.keys(preset).map(function(settingName){
|
||||
button.addEventListener("click", async function(){
|
||||
await Promise.all(Object.keys(preset).map(function(settingName){
|
||||
const value = preset[settingName];
|
||||
if ((typeof value) === "object"){
|
||||
return Promise.all(Object.keys(value).map(function(url){
|
||||
@ -87,12 +87,9 @@
|
||||
else {
|
||||
return settings.set(settingName, value);
|
||||
}
|
||||
})).then(function(){
|
||||
window.location.reload();
|
||||
return;
|
||||
}).catch(function(error){
|
||||
logging.warning("Unable to apply preset:", error);
|
||||
});
|
||||
}));
|
||||
|
||||
window.location.reload();
|
||||
});
|
||||
container.appendChild(button);
|
||||
}
|
||||
@ -100,20 +97,7 @@
|
||||
return container;
|
||||
}
|
||||
|
||||
Promise.all([
|
||||
settings.loaded,
|
||||
fetch("presets.json").then(function(data){
|
||||
return data.json();
|
||||
})
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
]).then(function([settingsLoaded, presets]){
|
||||
Object.keys(presets).map(function(presetName){
|
||||
return buildPresetGui(presetName, presets[presetName]);
|
||||
}).forEach(function(node){
|
||||
document.body.appendChild(node);
|
||||
});
|
||||
|
||||
// fit content to the window size
|
||||
function fitContentToWindowSize(){
|
||||
if (window.innerHeight > document.body.getBoundingClientRect().bottom){
|
||||
const computedStyle = window.getComputedStyle(document.body);
|
||||
const availableHeight = window.innerHeight - parseFloat(computedStyle.marginBottom);
|
||||
@ -141,10 +125,7 @@
|
||||
document.body.style.fontSize = fontSize + "px";
|
||||
}
|
||||
}
|
||||
return;
|
||||
}).catch(function(error){
|
||||
logging.warning("Unable to setup presets:", error);
|
||||
});
|
||||
}
|
||||
|
||||
document.querySelector("head title").textContent = extension.getTranslation("presets_title");
|
||||
let head = document.createElement("header");
|
||||
@ -153,7 +134,7 @@
|
||||
let heading = document.createElement("h1");
|
||||
heading.textContent = extension.getTranslation("presets");
|
||||
head.appendChild(heading);
|
||||
|
||||
|
||||
if (searchParameters.has("notice")){
|
||||
const noticeName = `presets_${searchParameters.get("notice")}Notice`;
|
||||
const noticeText = extension.getTranslation(noticeName);
|
||||
@ -195,4 +176,17 @@
|
||||
introduction.className = "introduction";
|
||||
introduction.textContent = extension.getTranslation("presets_introduction");
|
||||
head.appendChild(introduction);
|
||||
|
||||
const [settingsLoaded, presets] = await Promise.all([
|
||||
settings.loaded,
|
||||
(await fetch("presets.json")).json()
|
||||
]);
|
||||
|
||||
Object.keys(presets).map(function(presetName){
|
||||
return buildPresetGui(presetName, presets[presetName]);
|
||||
}).forEach(function(node){
|
||||
document.body.appendChild(node);
|
||||
});
|
||||
|
||||
fitContentToWindowSize();
|
||||
}());
|
@ -1,7 +1,7 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
(function(){
|
||||
(async function(){
|
||||
"use strict";
|
||||
|
||||
const extension = require("../lib/extension");
|
||||
@ -37,12 +37,9 @@
|
||||
{
|
||||
name: "disableNotifications",
|
||||
isIcon: true,
|
||||
callback: function(){
|
||||
settings.set("showNotifications", false).then(function(){
|
||||
return window.close();
|
||||
}).catch(function(error){
|
||||
logging.warning("Unable to disable notifications:", error);
|
||||
});
|
||||
callback: async function(){
|
||||
await settings.set("showNotifications", false);
|
||||
window.close();
|
||||
}
|
||||
}
|
||||
],
|
||||
@ -55,26 +52,24 @@
|
||||
{
|
||||
name: "ignorelist",
|
||||
isIcon: true,
|
||||
callback: function({domain, urls}){
|
||||
return domainOrUrlPicker(
|
||||
callback: async function({domain, urls}){
|
||||
const choice = await domainOrUrlPicker(
|
||||
domain,
|
||||
urls,
|
||||
extension.getTranslation("selectIgnore"),
|
||||
extension.getTranslation("inputIgnoreURL")
|
||||
).then(function(choice){
|
||||
if (choice){
|
||||
return settings.set("showNotifications", false, choice);
|
||||
}
|
||||
return false;
|
||||
}).then(function(){
|
||||
return window.close();
|
||||
});
|
||||
);
|
||||
|
||||
if (choice){
|
||||
await settings.set("showNotifications", false, choice);
|
||||
}
|
||||
window.close();
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "whitelist",
|
||||
isIcon: true,
|
||||
callback: function({domain, urls, api}){
|
||||
callback: async function({domain, urls, api}){
|
||||
const whitelistingSettings = {
|
||||
all: {name: "blockMode", value: "allow"},
|
||||
canvas: {name: "protectedCanvasPart", value: "nothing"},
|
||||
@ -85,67 +80,56 @@
|
||||
windows: {name: "protectWindow", value: false},
|
||||
screen: {name: "protectScreen", value: false},
|
||||
};
|
||||
return domainOrUrlPicker(
|
||||
const choice = await domainOrUrlPicker(
|
||||
domain,
|
||||
urls,
|
||||
extension.getTranslation("selectWhitelist"),
|
||||
extension.getTranslation("inputWhitelistURL")
|
||||
).then(function(choice){
|
||||
if (
|
||||
api &&
|
||||
whitelistingSettings[api]
|
||||
){
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
return modalChoice(
|
||||
extension.getTranslation("selectWhitelistScope"),
|
||||
[
|
||||
{
|
||||
text: extension.getTranslation("whitelistOnlyAPI")
|
||||
.replace(
|
||||
/\{api\}/g,
|
||||
extension.getTranslation("section_" + api + "-api")
|
||||
),
|
||||
value: api
|
||||
},
|
||||
{
|
||||
text: extension.getTranslation("whitelistAllAPIs"),
|
||||
value: "all"
|
||||
}
|
||||
]
|
||||
).then(function(selection){
|
||||
return {choice, setting: whitelistingSettings[selection]};
|
||||
});
|
||||
}
|
||||
else {
|
||||
return {choice, setting: whitelistingSettings.all};
|
||||
}
|
||||
}).then(function({choice, setting}){
|
||||
if (choice){
|
||||
return settings.set(setting.name, setting.value, choice);
|
||||
}
|
||||
return false;
|
||||
}).then(function(){
|
||||
return window.close();
|
||||
});
|
||||
);
|
||||
let setting = whitelistingSettings.all;
|
||||
if (
|
||||
api &&
|
||||
whitelistingSettings[api]
|
||||
){
|
||||
setting = whitelistingSettings[await modalChoice(
|
||||
extension.getTranslation("selectWhitelistScope"),
|
||||
[
|
||||
{
|
||||
text: extension.getTranslation("whitelistOnlyAPI")
|
||||
.replace(
|
||||
/\{api\}/g,
|
||||
extension.getTranslation("section_" + api + "-api")
|
||||
),
|
||||
value: api
|
||||
},
|
||||
{
|
||||
text: extension.getTranslation("whitelistAllAPIs"),
|
||||
value: "all"
|
||||
}
|
||||
]
|
||||
)];
|
||||
}
|
||||
if (choice){
|
||||
await settings.set(setting.name, setting.value, choice);
|
||||
}
|
||||
|
||||
window.close();
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "whitelistTemporarily",
|
||||
isIcon: true,
|
||||
callback: function({domain, urls}){
|
||||
return domainOrUrlPicker(
|
||||
callback: async function({domain, urls}){
|
||||
const choice = await domainOrUrlPicker(
|
||||
domain,
|
||||
urls,
|
||||
extension.getTranslation("selectSessionWhitelist"),
|
||||
extension.getTranslation("inputSessionWhitelistURL")
|
||||
).then(function(choice){
|
||||
if (choice){
|
||||
return lists.appendTo("sessionWhite", choice);
|
||||
}
|
||||
return false;
|
||||
}).then(function(){
|
||||
return window.close();
|
||||
});
|
||||
);
|
||||
if (choice){
|
||||
await lists.appendTo("sessionWhite", choice);
|
||||
}
|
||||
window.close();
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -193,7 +177,7 @@
|
||||
});
|
||||
}
|
||||
|
||||
function domainOrUrlPicker(domain, urls, selectText, urlInputText){
|
||||
async function domainOrUrlPicker(domain, urls, selectText, urlInputText){
|
||||
const choices = Array.from(urls).map(function(url){
|
||||
return {
|
||||
text: url,
|
||||
@ -203,99 +187,94 @@
|
||||
if (domain){
|
||||
choices.unshift(domain);
|
||||
}
|
||||
return modalChoice(
|
||||
const choice = await modalChoice(
|
||||
selectText,
|
||||
choices
|
||||
).then(function(choice){
|
||||
if (choice.startsWith("^")){
|
||||
return modalPrompt(
|
||||
urlInputText,
|
||||
choice
|
||||
);
|
||||
}
|
||||
else {
|
||||
return choice;
|
||||
}
|
||||
});
|
||||
);
|
||||
if (choice.startsWith("^")){
|
||||
return modalPrompt(
|
||||
urlInputText,
|
||||
choice
|
||||
);
|
||||
}
|
||||
else {
|
||||
return choice;
|
||||
}
|
||||
}
|
||||
|
||||
Promise.all([
|
||||
const values = await Promise.all([
|
||||
browser.tabs.query({active: true, currentWindow: true}),
|
||||
settings.loaded
|
||||
]).then(function(values){
|
||||
const tabs = values[0];
|
||||
|
||||
if (!tabs.length){
|
||||
throw new Error("noTabsFound");
|
||||
]);
|
||||
const tabs = values[0];
|
||||
|
||||
if (!tabs.length){
|
||||
throw new Error("noTabsFound");
|
||||
}
|
||||
else if (tabs.length > 1){
|
||||
logging.error(tabs);
|
||||
throw new Error("tooManyTabsFound");
|
||||
}
|
||||
|
||||
registerActionButtons();
|
||||
|
||||
registerDomainActions();
|
||||
|
||||
registerNotificationActions();
|
||||
|
||||
const tab = tabs[0];
|
||||
extension.message.on(function(data){
|
||||
if (data["canvasBlocker-notificationCounter"]){
|
||||
const url = new URL(data.url);
|
||||
Object.keys(data["canvasBlocker-notificationCounter"]).forEach(function(key){
|
||||
domainNotification(
|
||||
url,
|
||||
key,
|
||||
data["canvasBlocker-notificationCounter"][key].count,
|
||||
data["canvasBlocker-notificationCounter"][key].api
|
||||
);
|
||||
});
|
||||
}
|
||||
else if (tabs.length > 1){
|
||||
logging.error(tabs);
|
||||
throw new Error("tooManyTabsFound");
|
||||
}
|
||||
|
||||
registerActionButtons();
|
||||
|
||||
registerDomainActions();
|
||||
|
||||
registerNotificationActions();
|
||||
|
||||
const tab = tabs[0];
|
||||
extension.message.on(function(data){
|
||||
if (data["canvasBlocker-notificationCounter"]){
|
||||
const url = new URL(data.url);
|
||||
Object.keys(data["canvasBlocker-notificationCounter"]).forEach(function(key){
|
||||
domainNotification(
|
||||
url,
|
||||
key,
|
||||
data["canvasBlocker-notificationCounter"][key].count,
|
||||
data["canvasBlocker-notificationCounter"][key].api
|
||||
);
|
||||
});
|
||||
}
|
||||
if (
|
||||
Array.isArray(data["canvasBlocker-notifications"]) &&
|
||||
data["canvasBlocker-notifications"].length
|
||||
){
|
||||
logging.message("got notifications");
|
||||
const notifications = data["canvasBlocker-notifications"];
|
||||
let i = 0;
|
||||
const length = notifications.length;
|
||||
const tick = window.setInterval(function(){
|
||||
if (i >= length){
|
||||
window.clearInterval(tick);
|
||||
}
|
||||
else {
|
||||
let delta = 0;
|
||||
for (; delta < 20 && i + delta < length; delta += 1){
|
||||
let notification = notifications[i + delta];
|
||||
logging.verbose(notification);
|
||||
if (settings.ignoredAPIs[notification.api]){
|
||||
continue;
|
||||
}
|
||||
logging.verbose(notification);
|
||||
notification.url = new URL(notification.url);
|
||||
domainNotification(
|
||||
notification.url,
|
||||
notification.messageId,
|
||||
0,
|
||||
notification.api
|
||||
).addNotification(new Notification(notification));
|
||||
if (
|
||||
Array.isArray(data["canvasBlocker-notifications"]) &&
|
||||
data["canvasBlocker-notifications"].length
|
||||
){
|
||||
logging.message("got notifications");
|
||||
const notifications = data["canvasBlocker-notifications"];
|
||||
let i = 0;
|
||||
const length = notifications.length;
|
||||
const tick = window.setInterval(function(){
|
||||
if (i >= length){
|
||||
window.clearInterval(tick);
|
||||
}
|
||||
else {
|
||||
let delta = 0;
|
||||
for (; delta < 20 && i + delta < length; delta += 1){
|
||||
let notification = notifications[i + delta];
|
||||
logging.verbose(notification);
|
||||
if (settings.ignoredAPIs[notification.api]){
|
||||
continue;
|
||||
}
|
||||
i += delta;
|
||||
logging.verbose(notification);
|
||||
notification.url = new URL(notification.url);
|
||||
domainNotification(
|
||||
notification.url,
|
||||
notification.messageId,
|
||||
0,
|
||||
notification.api
|
||||
).addNotification(new Notification(notification));
|
||||
}
|
||||
}, 1);
|
||||
}
|
||||
});
|
||||
logging.message("request notifications from tab", tab.id);
|
||||
browser.tabs.sendMessage(
|
||||
tab.id,
|
||||
{
|
||||
"canvasBlocker-sendNotifications": tab.id
|
||||
}
|
||||
);
|
||||
logging.notice("waiting for notifications");
|
||||
return;
|
||||
}).catch(function(error){
|
||||
error(error);
|
||||
i += delta;
|
||||
}
|
||||
}, 1);
|
||||
}
|
||||
});
|
||||
logging.message("request notifications from tab", tab.id);
|
||||
browser.tabs.sendMessage(
|
||||
tab.id,
|
||||
{
|
||||
"canvasBlocker-sendNotifications": tab.id
|
||||
}
|
||||
);
|
||||
logging.notice("waiting for notifications");
|
||||
}());
|
Loading…
x
Reference in New Issue
Block a user