diff --git a/core/messenger.js b/core/messenger.js index be273502..dd9cdc11 100644 --- a/core/messenger.js +++ b/core/messenger.js @@ -42,8 +42,7 @@ messenger._handleMessageReceived = function (message, sender, sendResponse) { } if (topic === 'domain:fetch-is-allowlisted') { - - let allowlistRecord = requestAnalyzer.allowlistedDomains[value]; + let allowlistRecord = requestAnalyzer.allowlistedDomains[value] || requestAnalyzer.allowlistedDomains[helpers.getWildcard(value)]; sendResponse({'value': Boolean(allowlistRecord)}); return MessageResponse.SYNCHRONOUS; diff --git a/core/request-analyzer.js b/core/request-analyzer.js index 64b1db7e..26f43a31 100644 --- a/core/request-analyzer.js +++ b/core/request-analyzer.js @@ -29,7 +29,7 @@ var requestAnalyzer = {}; */ requestAnalyzer.isValidCandidate = function (requestDetails, tabDetails) { - let initiatorDomain, isAllowlisted, sDomain; + let initiatorDomain, isAllowlisted, wildcard; initiatorDomain = helpers.extractDomainFromUrl(tabDetails.url, true); @@ -37,15 +37,8 @@ requestAnalyzer.isValidCandidate = function (requestDetails, tabDetails) { initiatorDomain = Address.EXAMPLE; } - - sDomain = initiatorDomain.split("."); - if (sDomain.length <= 2) { - isAllowlisted = requestAnalyzer.allowlistedDomains[initiatorDomain]; - } else { - sDomain[0] = '*'; - sDomain = sDomain.join().replace(/,/g, '.'); - isAllowlisted = requestAnalyzer.allowlistedDomains[sDomain]; - } + wildcard = helpers.getWildcard(initiatorDomain); + isAllowlisted = requestAnalyzer.allowlistedDomains[initiatorDomain] || requestAnalyzer.allowlistedDomains[wildcard]; if (isAllowlisted) { return false; diff --git a/core/state-manager.js b/core/state-manager.js index d604b4d1..af61ab12 100644 --- a/core/state-manager.js +++ b/core/state-manager.js @@ -91,8 +91,16 @@ stateManager.removeDomainFromAllowlist = function (domain) { return new Promise((resolve) => { - let allowlistedDomains = requestAnalyzer.allowlistedDomains; - delete allowlistedDomains[domain]; + let allowlistedDomains, wildcard; + + allowlistedDomains = requestAnalyzer.allowlistedDomains; + wildcard = helpers.getWildcard(domain); + + if (allowlistedDomains[domain]) { + delete allowlistedDomains[domain]; + } else { + delete allowlistedDomains[wildcard]; + } storageManager.type.set({allowlistedDomains}, resolve); }); @@ -239,7 +247,6 @@ stateManager._removeIconBadgeFromTab = function (tab) { }; stateManager._domainIsListed = function (domain, listname) { - if (domain !== null) { let allowlistRecord, isAllowlisted; @@ -248,7 +255,7 @@ stateManager._domainIsListed = function (domain, listname) { allowlistRecord = requestAnalyzer.domainsManipulateDOM[domain]; isAllowlisted = Boolean(allowlistRecord); } else { - allowlistRecord = requestAnalyzer.allowlistedDomains[domain]; + allowlistRecord = requestAnalyzer.allowlistedDomains[domain] || requestAnalyzer.allowlistedDomains[helpers.getWildcard(domain)]; isAllowlisted = Boolean(allowlistRecord); } diff --git a/modules/internal/helpers.js b/modules/internal/helpers.js index 12f7ba2a..819b4790 100644 --- a/modules/internal/helpers.js +++ b/modules/internal/helpers.js @@ -126,6 +126,17 @@ helpers.extractDomainFromUrl = function (url, normalize) { return extractedDomain; }; +helpers.getWildcard = function(initiatorDomain) { + let domain = initiatorDomain.split("."); + + if (domain.length > 2) { + domain[0] = '*'; + domain = domain.join().replace(/,/g, '.'); + return domain; + } + +}; + helpers.extractFilenameFromPath = function (path) { let pathSegments, filename; diff --git a/pages/popup/popup.js b/pages/popup/popup.js index 75eaf283..6b1deed5 100644 --- a/pages/popup/popup.js +++ b/pages/popup/popup.js @@ -187,6 +187,10 @@ popup._determineDomainAllowlistStatus = function () { value: popup._domain, }; + if (popup._domain === null) { + return; + } + chrome.runtime.sendMessage(message, function (response) { popup._domainIsAllowlisted = response.value; resolve();