diff --git a/.vscode/settings.json b/.vscode/settings.json index ed9cc7b..beba24a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -22,6 +22,7 @@ "prefs", "spodermenpls", "webgl", + "whitelisted", "yfdyh" ], "cSpell.language": "en,de,en-GB" diff --git a/_locales/de/messages.json b/_locales/de/messages.json index f2ff162..c4c4783 100644 --- a/_locales/de/messages.json +++ b/_locales/de/messages.json @@ -13,7 +13,11 @@ "description": "" }, "browserAction_title_notified": { - "message": "CanvasBlocker \n\nSchutz erfolgreich für:", + "message": " \n\nSchutz erfolgreich für:", + "description": "" + }, + "browserAction_title_whitelisted": { + "message": " (APIs erlaubt für {url})", "description": "" }, "browserAction_title_protectedAPIs": { diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 6666151..be166e4 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -13,7 +13,11 @@ "description": "" }, "browserAction_title_notified": { - "message": "CanvasBlocker \n\nprotection successful for:", + "message": " \n\nprotection successful for:", + "description": "" + }, + "browserAction_title_whitelisted": { + "message": " (APIs whitelisted for {url})", "description": "" }, "browserAction_title_protectedAPIs": { diff --git a/icons/browserAction-whitelisted.svg b/icons/browserAction-whitelisted.svg new file mode 100644 index 0000000..bcf5f1a --- /dev/null +++ b/icons/browserAction-whitelisted.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/lib/main.js b/lib/main.js index 4393f2d..8107858 100644 --- a/lib/main.js +++ b/lib/main.js @@ -65,7 +65,7 @@ notification.show(port.sender.tab.id, url, data["canvasBlocker-notify"].api); } if (data.hasOwnProperty("canvasBlocker-clear-page-action")){ - notification.hide(port.sender.tab.id); + notification.hide(port.sender.tab.id, url); } verbose("got data", data, "from port", port); }); diff --git a/lib/notification.js b/lib/notification.js index 0878cab..ed68e70 100644 --- a/lib/notification.js +++ b/lib/notification.js @@ -17,6 +17,27 @@ const lists = require("./lists"); const logging = require("./logging"); + function isWhitelisted(url){ + if (!(url instanceof URL)){ + url = new URL(url); + } + return lists.get("white").match(url) || + lists.get("sessionWhite").match(url) || + settings.get("blockMode", url).startsWith("allow"); + } + + function getBrowserActionIconName(url, notified){ + if (isWhitelisted(url)){ + return "whitelisted"; + } + else if (notified) { + return settings.highlightBrowserAction; + } + else { + return "none"; + } + } + const paths = { pageAction: { none: "icons/pageAction-printed.svg", @@ -26,7 +47,8 @@ browserAction: { none: "icons/browserAction-notPrinted.svg", color: "icons/browserAction-printed.svg", - blink: "icons/browserAction-printedBlink.svg" + blink: "icons/browserAction-printedBlink.svg", + whitelisted: "icons/browserAction-whitelisted.svg" } }; @@ -52,7 +74,7 @@ } browser.browserAction.setIcon({ tabId: tabId, - path: paths.browserAction[settings.highlightBrowserAction] + path: paths.browserAction[getBrowserActionIconName(url, true)] }); let apis = apiMap.get(tabId); @@ -72,13 +94,20 @@ apis.forEach(function(api){ apiList += browser.i18n.getMessage("browserAction_title_protectedAPIs").replace(/{api}/g, api); }); + + let browserActionTitle = browser.i18n.getMessage("browserAction_title_default"); + if (isWhitelisted(url)){ + browserActionTitle += browser.i18n.getMessage("browserAction_title_whitelisted").replace(/{url}/g, url); + } + browserActionTitle += browser.i18n.getMessage("browserAction_title_notified"); + browserActionTitle += apiList; browser.browserAction.setTitle({ tabId: tabId, - title: browser.i18n.getMessage("browserAction_title_notified") + apiList + title: browserActionTitle }); }; - scope.hide = function hideNotification(tabId){ + scope.hide = function hideNotification(tabId, url){ logging.notice("Hide page action for tab", tabId); apiMap.delete(tabId); browser.pageAction.hide(tabId); @@ -88,15 +117,19 @@ }); browser.browserAction.setIcon({ tabId: tabId, - path: paths.browserAction.none + path: paths.browserAction[getBrowserActionIconName(url, false)] }); browser.browserAction.setBadgeText({ tabId: tabId, text: "" }); + let browserActionTitle = browser.i18n.getMessage("browserAction_title_default"); + if (isWhitelisted(url)){ + browserActionTitle += browser.i18n.getMessage("browserAction_title_whitelisted").replace(/{url}/g, url); + } browser.browserAction.setTitle({ tabId: tabId, - title: browser.i18n.getMessage("browserAction_title_default") + title: browserActionTitle }); }; diff --git a/releaseNotes.txt b/releaseNotes.txt index efa48a7..e5d6ff4 100644 --- a/releaseNotes.txt +++ b/releaseNotes.txt @@ -4,6 +4,7 @@ Version 0.5.4: new features: - added save/load directly to/from file option + - browser action icon gets grayed out if the page is whitelisted fixes: - window and audio API were always blocked when using any of the "block ..." modes