diff --git a/lib/notification.js b/lib/notification.js index ed68e70..941285c 100644 --- a/lib/notification.js +++ b/lib/notification.js @@ -26,8 +26,8 @@ settings.get("blockMode", url).startsWith("allow"); } - function getBrowserActionIconName(url, notified){ - if (isWhitelisted(url)){ + function getBrowserActionIconName(tabData, notified){ + if (tabData.whitelisted){ return "whitelisted"; } else if (notified) { @@ -56,12 +56,25 @@ color: "rgba(255, 0, 0, 0.6)" }); - const apiMap = new Map(); + const tabsData = new Map(); + function getTabData(tabId){ + let data = tabsData.get(tabId); + if (!data){ + data = { + url: "", + apis: new Set(), + whitelisted: false + }; + tabsData.set(tabId, data); + } + return data; + } scope.show = function showNotification(tabId, url, api){ if (settings.ignoredAPIs[api]){ return; } logging.notice("Show notification for tab", tabId); + const tabData = getTabData(tabId); if ( settings.get("showNotifications", url) && !lists.get("ignore").match(url) @@ -74,15 +87,11 @@ } browser.browserAction.setIcon({ tabId: tabId, - path: paths.browserAction[getBrowserActionIconName(url, true)] + path: paths.browserAction[getBrowserActionIconName(tabData, true)] }); - let apis = apiMap.get(tabId); - if (!apis){ - apis = new Set(); - } + const apis = tabData.apis; apis.add(api); - apiMap.set(tabId, apis); if (settings.get("displayBadge", url)){ browser.browserAction.setBadgeText({ tabId: tabId, @@ -96,8 +105,8 @@ }); let browserActionTitle = browser.i18n.getMessage("browserAction_title_default"); - if (isWhitelisted(url)){ - browserActionTitle += browser.i18n.getMessage("browserAction_title_whitelisted").replace(/{url}/g, url); + if (tabData.whitelisted){ + browserActionTitle += browser.i18n.getMessage("browserAction_title_whitelisted").replace(/{url}/g, tabData.url); } browserActionTitle += browser.i18n.getMessage("browserAction_title_notified"); browserActionTitle += apiList; @@ -109,7 +118,12 @@ scope.hide = function hideNotification(tabId, url){ logging.notice("Hide page action for tab", tabId); - apiMap.delete(tabId); + // clear old data + tabsData.delete(tabId); + const tabData = getTabData(tabId); + tabData.url = url; + tabData.whitelisted = isWhitelisted(url); + browser.pageAction.hide(tabId); browser.pageAction.setIcon({ tabId: tabId, @@ -117,14 +131,14 @@ }); browser.browserAction.setIcon({ tabId: tabId, - path: paths.browserAction[getBrowserActionIconName(url, false)] + path: paths.browserAction[getBrowserActionIconName(tabData, false)] }); browser.browserAction.setBadgeText({ tabId: tabId, text: "" }); let browserActionTitle = browser.i18n.getMessage("browserAction_title_default"); - if (isWhitelisted(url)){ + if (tabData.whitelisted){ browserActionTitle += browser.i18n.getMessage("browserAction_title_whitelisted").replace(/{url}/g, url); } browser.browserAction.setTitle({ @@ -145,7 +159,7 @@ }); browser.tabs.onRemoved.addListener(function(tabId){ - apiMap.delete(tabId); + tabsData.delete(tabId); }); settings.on("displayBadge", function({newValue}){ if (!newValue){