2017-07-27 19:14:04 +02:00
|
|
|
/* 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/. */
|
2017-11-07 00:36:44 +01:00
|
|
|
(function(){
|
2017-07-27 19:14:04 +02:00
|
|
|
"use strict";
|
2017-11-07 00:36:44 +01:00
|
|
|
|
|
|
|
const settings = require("./settings");
|
|
|
|
const {parseErrorStack} = require("./callingStack");
|
2017-07-27 19:14:04 +02:00
|
|
|
const {error, warning, message, notice, verbose, setPrefix: setLogPrefix} = require("./logging");
|
2017-11-07 00:36:44 +01:00
|
|
|
setLogPrefix("page action script");
|
|
|
|
|
2017-10-03 12:17:14 +02:00
|
|
|
const domainNotification = require("./domainNotification");
|
|
|
|
const Notification = require("./Notification");
|
|
|
|
const {createActionButtons, modalPrompt} = require("./gui");
|
|
|
|
|
2017-11-07 00:36:44 +01:00
|
|
|
Promise.all([
|
|
|
|
browser.tabs.query({active: true, currentWindow: true}),
|
|
|
|
settings.loaded
|
|
|
|
]).then(function(values){
|
|
|
|
const tabs = values[0];
|
|
|
|
|
|
|
|
notice("create global action buttons");
|
2017-10-03 12:17:14 +02:00
|
|
|
|
2017-11-07 00:36:44 +01:00
|
|
|
createActionButtons(
|
|
|
|
document.getElementById("globalActions"),
|
|
|
|
[{
|
|
|
|
name: "disableNotifications",
|
|
|
|
isIcon: true,
|
|
|
|
callback: function(){
|
|
|
|
settings.showNotifications = false;
|
2017-10-03 12:17:14 +02:00
|
|
|
window.close();
|
2017-11-07 00:36:44 +01:00
|
|
|
}
|
|
|
|
}],
|
|
|
|
undefined
|
|
|
|
);
|
|
|
|
|
|
|
|
if (!tabs.length){
|
|
|
|
throw new Error("noTabsFound");
|
2017-10-03 12:17:14 +02:00
|
|
|
}
|
2017-11-07 00:36:44 +01:00
|
|
|
else if (tabs.length > 1){
|
|
|
|
error(tabs);
|
|
|
|
throw new Error("tooManyTabsFound");
|
|
|
|
}
|
|
|
|
|
2017-10-03 12:17:14 +02:00
|
|
|
|
2017-11-07 00:36:44 +01:00
|
|
|
verbose("registering domain actions");
|
|
|
|
[
|
|
|
|
{
|
|
|
|
name: "ignorelistDomain",
|
|
|
|
isIcon: true,
|
|
|
|
callback: function(domain){
|
|
|
|
modalPrompt(
|
|
|
|
browser.i18n.getMessage("inputIgnoreDomain"),
|
|
|
|
domain
|
|
|
|
).then(function(domain){
|
|
|
|
if (domain){
|
2017-12-03 23:58:54 +01:00
|
|
|
settings.set("showNotifications", false, domain);
|
2017-11-07 00:36:44 +01:00
|
|
|
}
|
|
|
|
window.close();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "whitelistDomain",
|
|
|
|
isIcon: true,
|
|
|
|
callback: function(domain){
|
|
|
|
modalPrompt(
|
|
|
|
browser.i18n.getMessage("inputWhitelistURL"),
|
|
|
|
domain
|
|
|
|
).then(function(domain){
|
|
|
|
if (domain){
|
2017-12-03 23:58:54 +01:00
|
|
|
settings.set("blockMode", "allow", domain);
|
2017-11-07 00:36:44 +01:00
|
|
|
}
|
|
|
|
window.close();
|
|
|
|
});
|
|
|
|
}
|
2017-10-03 12:17:14 +02:00
|
|
|
}
|
2017-11-07 00:36:44 +01:00
|
|
|
].forEach(function(domainAction){
|
|
|
|
domainNotification.addAction(domainAction);
|
|
|
|
});
|
|
|
|
|
|
|
|
verbose("registering notification actions");
|
|
|
|
[
|
|
|
|
{
|
|
|
|
name: "displayFullURL",
|
|
|
|
isIcon: true,
|
|
|
|
callback: function({url}){
|
|
|
|
alert(url.href);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "displayCallingStack",
|
|
|
|
isIcon: true,
|
|
|
|
callback: function({errorStack}){
|
|
|
|
alert(parseErrorStack(errorStack));
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "whitelistURL",
|
|
|
|
isIcon: true,
|
|
|
|
callback: function({url}){
|
|
|
|
modalPrompt(
|
|
|
|
browser.i18n.getMessage("inputWhitelistDomain"),
|
|
|
|
"^" + url.href.replace(/([\\+*?[^\]$(){}=!|.])/g, "\\$1") + "$"
|
|
|
|
).then(function(url){
|
|
|
|
if (url){
|
2017-12-03 23:58:54 +01:00
|
|
|
settings.set("blockMode", "allow", url);
|
2017-11-07 00:36:44 +01:00
|
|
|
}
|
|
|
|
window.close();
|
|
|
|
});
|
|
|
|
}
|
2017-10-03 12:17:14 +02:00
|
|
|
}
|
2017-11-07 00:36:44 +01:00
|
|
|
].forEach(function(action){
|
|
|
|
Notification.addAction(action);
|
|
|
|
});
|
|
|
|
|
|
|
|
var tab = tabs[0];
|
|
|
|
browser.runtime.onMessage.addListener(function(data){
|
|
|
|
if (Array.isArray(data["canvasBlocker-notifications"])){
|
|
|
|
message("got notifications");
|
|
|
|
data["canvasBlocker-notifications"].forEach(function(notification){
|
|
|
|
verbose(notification);
|
|
|
|
notification.url = new URL(notification.url);
|
|
|
|
domainNotification(
|
|
|
|
notification.url.hostname,
|
|
|
|
notification.messageId
|
|
|
|
).addNotification(new Notification(notification));
|
2017-10-03 12:17:14 +02:00
|
|
|
});
|
|
|
|
}
|
2017-11-07 00:36:44 +01:00
|
|
|
});
|
|
|
|
message("request notifications from tab", tab.id);
|
|
|
|
browser.tabs.sendMessage(
|
|
|
|
tab.id,
|
|
|
|
{
|
|
|
|
"canvasBlocker-sendNotifications": tab.id
|
|
|
|
}
|
|
|
|
);
|
|
|
|
notice("waiting for notifications");
|
|
|
|
}).catch(function(e){
|
|
|
|
error(e);
|
2017-06-29 07:21:36 +02:00
|
|
|
});
|
2017-11-07 00:36:44 +01:00
|
|
|
}());
|