Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: lib/requestBlocker.js

Issue 29421712: Issue 5184 - Support Firefox-specific webRequest types (Closed) Base URL: https://hg.adblockplus.org/adblockpluschrome/
Patch Set: Report unmapped types as OTHER Created May 18, 2017, 9:48 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ext/background.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « ext/background.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld