| Index: lib/requestBlocker.js |
| =================================================================== |
| --- a/lib/requestBlocker.js |
| +++ b/lib/requestBlocker.js |
| @@ -24,30 +24,50 @@ |
| const {defaultMatcher} = require("matcher"); |
| const {FilterNotifier} = require("filterNotifier"); |
| const {Prefs} = require("prefs"); |
| const {checkWhitelisted, getKey} = require("whitelisting"); |
| const {stringifyURL, extractHostFromFrame, isThirdParty} = require("url"); |
| const {port} = require("messaging"); |
| const devtools = require("devtools"); |
| -// Chrome can't distinguish between OBJECT_SUBREQUEST and OBJECT requests. |
| +// Chrome and Firefox (WebExtensions) can't distinguish between |
| +// OBJECT_SUBREQUEST and OBJECT requests. |
| RegExpFilter.typeMap.OBJECT_SUBREQUEST = RegExpFilter.typeMap.OBJECT; |
| +let resourceTypeMapping = new Map([ |
| + ["beacon", "PING"], |
| + ["imageset", "IMAGE"], |
| + ["sub_frame", "SUBDOCUMENT"] |
| +]); |
|
Sebastian Noack
2017/05/19 11:30:46
How about using a mapping like below?
let resou
Manish Jethani
2017/05/19 16:54:42
Yes, that's two lookups now instead of one for the
|
| + |
| +let typeMasks = new Map( |
| + Object.keys(chrome.webRequest.ResourceType) |
| + .map(typeKey => chrome.webRequest.ResourceType[typeKey]) |
| + .map(type => [type, RegExpFilter.typeMap[resourceTypeMapping.get(type)] || |
| + RegExpFilter.typeMap[type.toUpperCase()] || |
| + RegExpFilter.typeMap.OTHER]) |
| +); |
| + |
| function onBeforeRequestAsync(page, url, type, docDomain, |
| thirdParty, sitekey, |
| specificOnly, filter) |
| { |
| if (filter) |
| FilterNotifier.emit("filter.hitCount", filter, 0, 0, page); |
| if (devtools) |
| { |
| + let mappedType = resourceTypeMapping.get(type) || type.toUpperCase(); |
| + if (!RegExpFilter.typeMap[mappedType]) |
| + mappedType = "OTHER"; |
| + |
| devtools.logRequest( |
| - page, url, type, docDomain, |
| + page, url, |
| + mappedType, docDomain, |
| thirdParty, sitekey, |
| specificOnly, filter |
| ); |
| } |
| } |
| ext.webRequest.onBeforeRequest.addListener((url, type, page, frame) => |
| { |
| @@ -59,17 +79,17 @@ |
| let thirdParty = isThirdParty(url, docDomain); |
| let sitekey = getKey(page, frame); |
| let specificOnly = !!checkWhitelisted( |
| page, frame, RegExpFilter.typeMap.GENERICBLOCK |
| ); |
| let filter = defaultMatcher.matchesAny( |
| - urlString, RegExpFilter.typeMap[type], |
| + urlString, typeMasks.get(type), |
| docDomain, thirdParty, sitekey, specificOnly |
| ); |
| setTimeout(onBeforeRequestAsync, 0, page, urlString, |
| type, docDomain, |
| thirdParty, sitekey, |
| specificOnly, filter); |