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: Simplify logic a little bit Created May 19, 2017, 4:50 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,19 +24,31 @@
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 resourceTypes = new Map(
+ Object.keys(RegExpFilter.typeMap).map(type => [type.toLowerCase(), type])
+ .concat([
+ // Map unsupported resource types to types we support. Anything that isn't
Sebastian Noack 2017/05/19 17:47:41 I wouldn't consider these resource types "unsuppor
Manish Jethani 2017/05/19 23:44:15 OK, I've just copied that comment over and changed
Sebastian Noack 2017/05/20 06:42:37 As I said, I don't have a strong opinion. So if yo
Manish Jethani 2017/05/20 18:50:47 Acknowledged.
+ // mapped here is implicitly mapped to "OTHER".
+ ["beacon", "PING"],
+ ["imageset", "IMAGE"],
+ ["sub_frame", "SUBDOCUMENT"]
+ ])
+);
+
function onBeforeRequestAsync(page, url, type, docDomain,
thirdParty, sitekey,
specificOnly, filter)
{
if (filter)
FilterNotifier.emit("filter.hitCount", filter, 0, 0, page);
if (devtools)
@@ -58,23 +70,25 @@
let docDomain = extractHostFromFrame(frame);
let thirdParty = isThirdParty(url, docDomain);
let sitekey = getKey(page, frame);
let specificOnly = !!checkWhitelisted(
page, frame, RegExpFilter.typeMap.GENERICBLOCK
);
+ let mappedType = resourceTypes.get(type) || "OTHER";
+
let filter = defaultMatcher.matchesAny(
- urlString, RegExpFilter.typeMap[type],
+ urlString, RegExpFilter.typeMap[mappedType],
docDomain, thirdParty, sitekey, specificOnly
);
setTimeout(onBeforeRequestAsync, 0, page, urlString,
- type, docDomain,
+ mappedType, docDomain,
thirdParty, sitekey,
specificOnly, filter);
return !(filter instanceof BlockingFilter);
});
port.on("filters.collapse", (message, sender) =>
{
« 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