| Index: lib/devtools.js |
| =================================================================== |
| --- a/lib/devtools.js |
| +++ b/lib/devtools.js |
| @@ -29,20 +29,25 @@ |
| const nonRequestTypes = ["DOCUMENT", "ELEMHIDE", "GENERICBLOCK", "GENERICHIDE"]; |
| // Mapping of inspected tabs to their devpanel page |
| // and recorded items. We can't use a PageMap here, |
| // because data must persist after navigation/reload. |
| let panels = new Map(); |
| +function isActivePanel(panel) |
| +{ |
| + return panel && !panel.reload && !panel.reloading; |
| +} |
| + |
| function getActivePanel(page) |
| { |
| let panel = panels.get(page.id); |
| - if (panel && !panel.reload && !panel.reloading) |
| + if (isActivePanel(panel)) |
| return panel; |
| return null; |
| } |
| function getFilterInfo(filter) |
| { |
| if (!filter) |
| return null; |
| @@ -111,37 +116,39 @@ |
| request.sitekey, |
| request.specificOnly |
| ); |
| } |
| /** |
| * Logs a request to the devtools panel. |
| * |
| - * @param {Page} page The page the request occured on |
| + * @param {?Page} page The page the request occured on or null if |
| + * the request isn't associated with a page |
| * @param {string} url The URL of the request |
| * @param {string} type The request type |
| * @param {string} docDomain The IDN-decoded hostname of the document |
| * @param {boolean} thirdParty Whether the origin of the request and |
| * document differs |
| * @param {?string} sitekey The active sitekey if there is any |
| * @param {?boolean} specificOnly Whether generic filters should be ignored |
| * @param {?BlockingFilter} filter The matched filter or null if there is no |
| * match |
| */ |
| exports.logRequest = function(page, url, type, docDomain, |
| thirdParty, sitekey, |
| specificOnly, filter) |
| { |
| - let panel = getActivePanel(page); |
| - if (panel) |
| - { |
| - let request = {url, type, docDomain, thirdParty, sitekey, specificOnly}; |
| - addRecord(panel, request, filter); |
| - } |
| + if (panels.size == 0) |
| + return; |
| + |
| + let request = {url, type, docDomain, thirdParty, sitekey, specificOnly}; |
| + for (let [tabId, panel] of panels) |
| + if ((!page || page.id == tabId) && isActivePanel(panel)) |
| + addRecord(panel, request, filter); |
| }; |
| /** |
| * Logs active element hiding filters to the devtools panel. |
| * |
| * @param {Page} page The page the elements were hidden on |
| * @param {string[]} selectors The selectors of applied ElemHideFilters |
| * @param {string[]} filters The text of applied ElemHideEmulationFilters |