 Issue 29335388:
  Issue 3616 - Turn popupBlocker.js into a module  (Closed)
    
  
    Issue 29335388:
  Issue 3616 - Turn popupBlocker.js into a module  (Closed) 
  | Index: lib/popupBlocker.js | 
| =================================================================== | 
| rename from popupBlocker.js | 
| rename to lib/popupBlocker.js | 
| --- a/popupBlocker.js | 
| +++ b/lib/popupBlocker.js | 
| @@ -15,62 +15,25 @@ | 
| * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 
| */ | 
| -if (require("info").platform == "chromium") | 
| -{ | 
| - var logRequest = require("devtools").logRequest; | 
| - var tabsLoading = {}; | 
| +/** @module popupBlocker */ | 
| - chrome.webNavigation.onCreatedNavigationTarget.addListener(function(details) | 
| - { | 
| - var sourcePage = new ext.Page({id: details.sourceTabId}); | 
| - var sourceFrame = ext.getFrame(details.sourceTabId, details.sourceFrameId); | 
| +"use strict"; | 
| - if (checkWhitelisted(sourcePage, sourceFrame)) | 
| - return; | 
| +let {defaultMatcher} = require("matcher"); | 
| +let {BlockingFilter} = require("filterClasses"); | 
| +let {stringifyURL, isThirdParty, extractHostFromFrame} = require("url"); | 
| +let {checkWhitelisted} = require("whitelisting"); | 
| +let {logRequest} = require("devtools"); | 
| - var documentHost = extractHostFromFrame(sourceFrame); | 
| - if (!documentHost) | 
| - return; | 
| - | 
| - var specificOnly = checkWhitelisted(sourcePage, sourceFrame, | 
| - RegExpFilter.typeMap.GENERICBLOCK); | 
| - | 
| - tabsLoading[details.tabId] = { | 
| - page: sourcePage, | 
| - documentHost: documentHost, | 
| - specificOnly: specificOnly | 
| - }; | 
| - checkPotentialPopup(details.tabId, details.url, sourcePage, documentHost, specificOnly); | 
| - }); | 
| - | 
| - chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) | 
| - { | 
| - if (!(tabId in tabsLoading)) | 
| - { | 
| - // Not a pop-up we've previously seen | 
| - return; | 
| - } | 
| - | 
| - if ("url" in changeInfo) | 
| - { | 
| - var source = tabsLoading[tabId]; | 
| - checkPotentialPopup(tabId, tab.url, source.page, | 
| - source.documentHost, | 
| - source.specificOnly); | 
| - } | 
| - | 
| - if ("status" in changeInfo && changeInfo.status == "complete" && tab.url != "about:blank") | 
| - delete tabsLoading[tabId]; | 
| - }); | 
| -} | 
| +let tabsLoading = {}; | 
| function checkPotentialPopup(tabId, url, sourcePage, documentHost, specificOnly) | 
| { | 
| - var urlObj = new URL(url || "about:blank"); | 
| - var urlString = stringifyURL(urlObj); | 
| - var thirdParty = isThirdParty(urlObj, documentHost); | 
| + let urlObj = new URL(url || "about:blank"); | 
| + let urlString = stringifyURL(urlObj); | 
| + let thirdParty = isThirdParty(urlObj, documentHost); | 
| - var filter = defaultMatcher.matchesAny( | 
| + let filter = defaultMatcher.matchesAny( | 
| urlString, RegExpFilter.typeMap.POPUP, | 
| documentHost, thirdParty, null, specificOnly | 
| ); | 
| @@ -83,3 +46,43 @@ | 
| thirdParty, null, specificOnly, filter | 
| ); | 
| } | 
| + | 
| +chrome.webNavigation.onCreatedNavigationTarget.addListener(details => | 
| +{ | 
| + let sourcePage = new ext.Page({id: details.sourceTabId}); | 
| + let sourceFrame = ext.getFrame(details.sourceTabId, details.sourceFrameId); | 
| + | 
| + if (checkWhitelisted(sourcePage, sourceFrame)) | 
| + return; | 
| + | 
| + let documentHost = extractHostFromFrame(sourceFrame); | 
| + if (!documentHost) | 
| + return; | 
| + | 
| + let specificOnly = checkWhitelisted(sourcePage, sourceFrame, | 
| + RegExpFilter.typeMap.GENERICBLOCK); | 
| + | 
| + tabsLoading[details.tabId] = { | 
| + page: sourcePage, | 
| + documentHost: documentHost, | 
| + specificOnly: specificOnly | 
| + }; | 
| + checkPotentialPopup(details.tabId, details.url, sourcePage, documentHost, specificOnly); | 
| 
kzar
2016/02/03 10:18:14
Nit: Mind fixing the long lines too?
 | 
| +}); | 
| + | 
| +chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => | 
| +{ | 
| + if (!(tabId in tabsLoading)) | 
| + return; | 
| + | 
| + if ("url" in changeInfo) | 
| + { | 
| + let source = tabsLoading[tabId]; | 
| + checkPotentialPopup(tabId, tab.url, source.page, | 
| + source.documentHost, | 
| + source.specificOnly); | 
| + } | 
| + | 
| + if ("status" in changeInfo && changeInfo.status == "complete" && tab.url != "about:blank") | 
| + delete tabsLoading[tabId]; | 
| +}); |