| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  * This file is part of Adblock Plus <https://adblockplus.org/>, |    2  * This file is part of Adblock Plus <https://adblockplus.org/>, | 
|    3  * Copyright (C) 2006-present eyeo GmbH |    3  * Copyright (C) 2006-present eyeo GmbH | 
|    4  * |    4  * | 
|    5  * Adblock Plus is free software: you can redistribute it and/or modify |    5  * Adblock Plus is free software: you can redistribute it and/or modify | 
|    6  * it under the terms of the GNU General Public License version 3 as |    6  * it under the terms of the GNU General Public License version 3 as | 
|    7  * published by the Free Software Foundation. |    7  * published by the Free Software Foundation. | 
|    8  * |    8  * | 
|    9  * Adblock Plus is distributed in the hope that it will be useful, |    9  * Adblock Plus is distributed in the hope that it will be useful, | 
|   10  * but WITHOUT ANY WARRANTY; without even the implied warranty of |   10  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
|   26 const {logRequest} = require("devtools"); |   26 const {logRequest} = require("devtools"); | 
|   27  |   27  | 
|   28 let loadingPopups = new Map(); |   28 let loadingPopups = new Map(); | 
|   29  |   29  | 
|   30 function forgetPopup(tabId) |   30 function forgetPopup(tabId) | 
|   31 { |   31 { | 
|   32   loadingPopups.delete(tabId); |   32   loadingPopups.delete(tabId); | 
|   33  |   33  | 
|   34   if (loadingPopups.size == 0) |   34   if (loadingPopups.size == 0) | 
|   35   { |   35   { | 
|   36     chrome.webRequest.onBeforeRequest.removeListener(onPopupURLChanged); |   36     browser.webRequest.onBeforeRequest.removeListener(onPopupURLChanged); | 
|   37     chrome.webNavigation.onCommitted.removeListener(onPopupURLChanged); |   37     browser.webNavigation.onCommitted.removeListener(onPopupURLChanged); | 
|   38     chrome.webNavigation.onCompleted.removeListener(onCompleted); |   38     browser.webNavigation.onCompleted.removeListener(onCompleted); | 
|   39     chrome.tabs.onRemoved.removeListener(forgetPopup); |   39     browser.tabs.onRemoved.removeListener(forgetPopup); | 
|   40   } |   40   } | 
|   41 } |   41 } | 
|   42  |   42  | 
|   43 function checkPotentialPopup(tabId, popup) |   43 function checkPotentialPopup(tabId, popup) | 
|   44 { |   44 { | 
|   45   let urlObj = new URL(popup.url || "about:blank"); |   45   let urlObj = new URL(popup.url || "about:blank"); | 
|   46   let urlString = stringifyURL(urlObj); |   46   let urlString = stringifyURL(urlObj); | 
|   47   let documentHost = extractHostFromFrame(popup.sourceFrame); |   47   let documentHost = extractHostFromFrame(popup.sourceFrame); | 
|   48   let thirdParty = isThirdParty(urlObj, documentHost); |   48   let thirdParty = isThirdParty(urlObj, documentHost); | 
|   49  |   49  | 
|   50   let specificOnly = !!checkWhitelisted( |   50   let specificOnly = !!checkWhitelisted( | 
|   51     popup.sourcePage, popup.sourceFrame, |   51     popup.sourcePage, popup.sourceFrame, | 
|   52     RegExpFilter.typeMap.GENERICBLOCK |   52     RegExpFilter.typeMap.GENERICBLOCK | 
|   53   ); |   53   ); | 
|   54  |   54  | 
|   55   let filter = defaultMatcher.matchesAny( |   55   let filter = defaultMatcher.matchesAny( | 
|   56     urlString, RegExpFilter.typeMap.POPUP, |   56     urlString, RegExpFilter.typeMap.POPUP, | 
|   57     documentHost, thirdParty, null, specificOnly |   57     documentHost, thirdParty, null, specificOnly | 
|   58   ); |   58   ); | 
|   59  |   59  | 
|   60   if (filter instanceof BlockingFilter) |   60   if (filter instanceof BlockingFilter) | 
|   61     chrome.tabs.remove(tabId); |   61     browser.tabs.remove(tabId); | 
|   62  |   62  | 
|   63   logRequest( |   63   logRequest( | 
|   64     popup.sourcePage, urlString, "POPUP", |   64     popup.sourcePage, urlString, "POPUP", | 
|   65     documentHost, thirdParty, null, |   65     documentHost, thirdParty, null, | 
|   66     specificOnly, filter |   66     specificOnly, filter | 
|   67   ); |   67   ); | 
|   68 } |   68 } | 
|   69  |   69  | 
|   70 function onPopupURLChanged(details) |   70 function onPopupURLChanged(details) | 
|   71 { |   71 { | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
|   84  |   84  | 
|   85 function onCompleted(details) |   85 function onCompleted(details) | 
|   86 { |   86 { | 
|   87   if (details.frameId == 0 && details.url != "about:blank") |   87   if (details.frameId == 0 && details.url != "about:blank") | 
|   88     forgetPopup(details.tabId); |   88     forgetPopup(details.tabId); | 
|   89 } |   89 } | 
|   90  |   90  | 
|   91 // Versions of Firefox before 54 do not support |   91 // Versions of Firefox before 54 do not support | 
|   92 // webNavigation.onCreatedNavigationTarget |   92 // webNavigation.onCreatedNavigationTarget | 
|   93 // https://bugzilla.mozilla.org/show_bug.cgi?id=1190687 |   93 // https://bugzilla.mozilla.org/show_bug.cgi?id=1190687 | 
|   94 if ("onCreatedNavigationTarget" in chrome.webNavigation) |   94 if ("onCreatedNavigationTarget" in browser.webNavigation) | 
|   95 { |   95 { | 
|   96   chrome.webNavigation.onCreatedNavigationTarget.addListener(details => |   96   browser.webNavigation.onCreatedNavigationTarget.addListener(details => | 
|   97   { |   97   { | 
|   98     if (loadingPopups.size == 0) |   98     if (loadingPopups.size == 0) | 
|   99     { |   99     { | 
|  100       chrome.webRequest.onBeforeRequest.addListener( |  100       browser.webRequest.onBeforeRequest.addListener( | 
|  101         onPopupURLChanged, |  101         onPopupURLChanged, | 
|  102         { |  102         { | 
|  103           urls: ["http://*/*", "https://*/*"], |  103           urls: ["http://*/*", "https://*/*"], | 
|  104           types: ["main_frame"] |  104           types: ["main_frame"] | 
|  105         } |  105         } | 
|  106       ); |  106       ); | 
|  107       chrome.webNavigation.onCommitted.addListener(onPopupURLChanged); |  107       browser.webNavigation.onCommitted.addListener(onPopupURLChanged); | 
|  108       chrome.webNavigation.onCompleted.addListener(onCompleted); |  108       browser.webNavigation.onCompleted.addListener(onCompleted); | 
|  109       chrome.tabs.onRemoved.addListener(forgetPopup); |  109       browser.tabs.onRemoved.addListener(forgetPopup); | 
|  110     } |  110     } | 
|  111  |  111  | 
|  112     let popup = { |  112     let popup = { | 
|  113       url: details.url, |  113       url: details.url, | 
|  114       sourcePage: new ext.Page({id: details.sourceTabId}), |  114       sourcePage: new ext.Page({id: details.sourceTabId}), | 
|  115       sourceFrame: null |  115       sourceFrame: null | 
|  116     }; |  116     }; | 
|  117  |  117  | 
|  118     loadingPopups.set(details.tabId, popup); |  118     loadingPopups.set(details.tabId, popup); | 
|  119  |  119  | 
|  120     let frame = ext.getFrame(details.sourceTabId, details.sourceFrameId); |  120     let frame = ext.getFrame(details.sourceTabId, details.sourceFrameId); | 
|  121  |  121  | 
|  122     if (checkWhitelisted(popup.sourcePage, frame)) |  122     if (checkWhitelisted(popup.sourcePage, frame)) | 
|  123     { |  123     { | 
|  124       forgetPopup(details.tabId); |  124       forgetPopup(details.tabId); | 
|  125     } |  125     } | 
|  126     else |  126     else | 
|  127     { |  127     { | 
|  128       popup.sourceFrame = frame; |  128       popup.sourceFrame = frame; | 
|  129       checkPotentialPopup(details.tabId, popup); |  129       checkPotentialPopup(details.tabId, popup); | 
|  130     } |  130     } | 
|  131   }); |  131   }); | 
|  132 } |  132 } | 
| OLD | NEW |