Index: ext/background.js |
=================================================================== |
--- a/ext/background.js |
+++ b/ext/background.js |
@@ -563,17 +563,17 @@ |
}); |
}); |
chrome.webRequest.onBeforeRequest.addListener(details => |
{ |
// The high-level code isn't interested in requests that aren't |
// related to a tab or requests loading a top-level document, |
// those should never be blocked. |
- if (details.tabId == -1 || details.type == "main_frame") |
+ if (details.type == "main_frame") |
return; |
// Filter out requests from non web protocols. Ideally, we'd explicitly |
// specify the protocols we are interested in (i.e. http://, https://, |
// ws:// and wss://) with the url patterns, given below, when adding this |
// listener. But unfortunately, Chrome <=57 doesn't support the WebSocket |
// protocol and is causing an error if it is given. |
let url = new URL(details.url); |
@@ -584,26 +584,29 @@ |
// We are looking for the frame that contains the element which |
// has triggered this request. For most requests (e.g. images) we |
// can just use the request's frame ID, but for subdocument requests |
// (e.g. iframes) we must instead use the request's parent frame ID. |
let {frameId, type} = details; |
if (type == "sub_frame") |
frameId = details.parentFrameId; |
- let frame = ext.getFrame(details.tabId, frameId); |
- if (frame) |
+ // Sometimes requests are not associated with a browser tab and |
+ // in this case we want to still be able to view the url being called. |
+ let frame = null; |
+ let page = null; |
+ if (details.tabId != -1) |
{ |
- let results = ext.webRequest.onBeforeRequest._dispatch( |
- url, type, new Page({id: details.tabId}), frame |
- ); |
+ frame = ext.getFrame(details.tabId, frameId); |
+ page = new Page({id: details.tabId}); |
+ } |
- if (results.indexOf(false) != -1) |
- return {cancel: true}; |
- } |
+ if (ext.webRequest.onBeforeRequest._dispatch( |
+ url, type, page, frame).includes(false)) |
+ return {cancel: true}; |
}, {urls: ["<all_urls>"]}, ["blocking"]); |
/* Message passing */ |
chrome.runtime.onMessage.addListener((message, rawSender, sendResponse) => |
{ |
let sender = {}; |