| Index: popupBlocker.js | 
| =================================================================== | 
| --- a/popupBlocker.js | 
| +++ b/popupBlocker.js | 
| @@ -17,6 +17,7 @@ | 
|  | 
| if (require("info").platform == "chromium") | 
| { | 
| +  var logRequest = require("devtools").logRequest; | 
| var tabsLoading = {}; | 
|  | 
| chrome.webNavigation.onCreatedNavigationTarget.addListener(function(details) | 
| @@ -24,21 +25,22 @@ | 
| var sourcePage = new ext.Page({id: details.sourceTabId}); | 
| var sourceFrame = ext.getFrame(details.sourceTabId, details.sourceFrameId); | 
|  | 
| -    if (!sourceFrame || isFrameWhitelisted(sourcePage, sourceFrame)) | 
| +    if (!sourceFrame || checkWhitelisted(sourcePage, sourceFrame)) | 
| return; | 
|  | 
| var documentHost = extractHostFromFrame(sourceFrame); | 
| if (!documentHost) | 
| return; | 
|  | 
| -    var specificOnly = isFrameWhitelisted(sourcePage, sourceFrame, | 
| -                                          RegExpFilter.typeMap.GENERICBLOCK); | 
| +    var specificOnly = checkWhitelisted(sourcePage, sourceFrame, | 
| +                                        RegExpFilter.typeMap.GENERICBLOCK); | 
|  | 
| tabsLoading[details.tabId] = { | 
| +      page: sourcePage, | 
| documentHost: documentHost, | 
| specificOnly: specificOnly | 
| }; | 
| -    checkPotentialPopup(details.tabId, details.url, documentHost, specificOnly); | 
| +    checkPotentialPopup(details.tabId, details.url, sourcePage, documentHost, specificOnly); | 
| }); | 
|  | 
| chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) | 
| @@ -52,8 +54,9 @@ | 
| if ("url" in changeInfo) | 
| { | 
| var source = tabsLoading[tabId]; | 
| -      checkPotentialPopup(tabId, tab.url, source.documentHost, | 
| -                          source.specificOnly); | 
| +      checkPotentialPopup(tabId, tab.url, source.page, | 
| +                                          source.documentHost, | 
| +                                          source.specificOnly); | 
| } | 
|  | 
| if ("status" in changeInfo && changeInfo.status == "complete" && tab.url != "about:blank") | 
| @@ -61,16 +64,22 @@ | 
| }); | 
| } | 
|  | 
| -function checkPotentialPopup(tabId, url, documentHost, specificOnly) | 
| +function checkPotentialPopup(tabId, url, sourcePage, documentHost, specificOnly) | 
| { | 
| -  url = new URL(url || "about:blank"); | 
| +  var urlObj = new URL(url || "about:blank"); | 
| +  var urlString = stringifyURL(urlObj); | 
| +  var thirdParty = isThirdParty(urlObj, documentHost); | 
|  | 
| var filter = defaultMatcher.matchesAny( | 
| -    stringifyURL(url), RegExpFilter.typeMap.POPUP, | 
| -    documentHost, isThirdParty(url, documentHost), | 
| -    null, specificOnly | 
| +    urlString, RegExpFilter.typeMap.POPUP, | 
| +    documentHost, thirdParty, null, specificOnly | 
| ); | 
|  | 
| if (filter instanceof BlockingFilter) | 
| chrome.tabs.remove(tabId); | 
| + | 
| +  logRequest( | 
| +    sourcePage, urlString, "POPUP", documentHost, | 
| +    thirdParty, null, specificOnly, filter | 
| +  ); | 
| } | 
|  |