| Index: popupBlocker.js | 
| diff --git a/popupBlocker.js b/popupBlocker.js | 
| index 2735f0a987d5d6dbdd093efe9c5d51cfaaeb3be6..477f1d21a8a0af57a5a9f14dff72017659888d1e 100644 | 
| --- a/popupBlocker.js | 
| +++ b/popupBlocker.js | 
| @@ -31,8 +31,13 @@ if (require("info").platform == "chromium") | 
| if (!documentHost) | 
| return; | 
|  | 
| -    tabsLoading[details.tabId] = documentHost; | 
| -    checkPotentialPopup(details.tabId, details.url, documentHost); | 
| +    var specificOnly = isFrameWhitelisted(sourcePage, sourceFrame, "GENERICBLOCK"); | 
| + | 
| +    tabsLoading[details.tabId] = { | 
| +      documentHost: documentHost, | 
| +      specificOnly: specificOnly | 
| +    }; | 
| +    checkPotentialPopup(details.tabId, details.url, documentHost, specificOnly); | 
| }); | 
|  | 
| chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) | 
| @@ -44,20 +49,24 @@ if (require("info").platform == "chromium") | 
| } | 
|  | 
| if ("url" in changeInfo) | 
| -      checkPotentialPopup(tabId, tab.url, tabsLoading[tabId]); | 
| +    { | 
| +      var source = tabsLoading[tabId]; | 
| +      checkPotentialPopup(tabId, tab.url, source.documentHost, source.specificOnly); | 
| +    } | 
|  | 
| if ("status" in changeInfo && changeInfo.status == "complete" && tab.url != "about:blank") | 
| delete tabsLoading[tabId]; | 
| }); | 
| } | 
|  | 
| -function checkPotentialPopup(tabId, url, documentHost) | 
| +function checkPotentialPopup(tabId, url, documentHost, specificOnly) | 
| { | 
| url = new URL(url || "about:blank"); | 
|  | 
| var filter = defaultMatcher.matchesAny( | 
| stringifyURL(url), "POPUP", | 
| -    documentHost, isThirdParty(url, documentHost) | 
| +    documentHost, isThirdParty(url, documentHost), | 
| +    null, specificOnly | 
| ); | 
|  | 
| if (filter instanceof BlockingFilter) | 
|  |