| 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 | 
|  |