 Issue 29421712:
  Issue 5184 - Support Firefox-specific webRequest types  (Closed) 
  Base URL: https://hg.adblockplus.org/adblockpluschrome/
    
  
    Issue 29421712:
  Issue 5184 - Support Firefox-specific webRequest types  (Closed) 
  Base URL: https://hg.adblockplus.org/adblockpluschrome/| 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); |