| Index: lib/requestBlocker.js | 
| =================================================================== | 
| --- a/lib/requestBlocker.js | 
| +++ b/lib/requestBlocker.js | 
| @@ -65,20 +65,21 @@ | 
| for (let type in browser.webRequest.ResourceType) | 
| yield resourceTypes.get(browser.webRequest.ResourceType[type]) || "OTHER"; | 
| // WEBRTC gets addressed through a workaround, even if the webRequest API is | 
| // lacking support to block this kind of a request. | 
| yield "WEBRTC"; | 
| - // POPUP, CSP and ELEMHIDE filters aren't mapped to resource types. | 
| + // POPUP, CSP, REWRITE and ELEMHIDE filters aren't mapped to resource types. | 
| 
 
Sebastian Noack
2018/05/02 15:04:59
Nit: As this list growth, listing those filter opt
 
hub
2018/05/03 01:18:02
Done.
 
 | 
| yield "POPUP"; | 
| yield "ELEMHIDE"; | 
| yield "CSP"; | 
| + yield "REWRITE"; | 
| }()); | 
| function getDocumentInfo(page, frame, originUrl) | 
| { | 
| return [ | 
| extractHostFromFrame(frame, originUrl), | 
| getKey(page, frame, originUrl), | 
| !!checkWhitelisted(page, frame, originUrl, | 
| @@ -189,22 +190,37 @@ | 
| return; | 
| let type = resourceTypes.get(details.type) || "OTHER"; | 
| let [docDomain, sitekey, specificOnly] = getDocumentInfo(page, frame, | 
| originUrl); | 
| let [filter, urlString, thirdParty] = matchRequest(url, type, docDomain, | 
| sitekey, specificOnly); | 
| - getRelatedTabIds(details).then(tabIds => | 
| + let log = logType => getRelatedTabIds(details).then(tabIds => | 
| { | 
| - logRequest(tabIds, urlString, type, docDomain, | 
| + logRequest(tabIds, urlString, logType, docDomain, | 
| thirdParty, sitekey, specificOnly, filter); | 
| }); | 
| + if (filter instanceof BlockingFilter && filter.rewrite) | 
| 
 
Manish Jethani
2018/04/30 20:24:58
I think maybe rewrite should be a separate module
 
hub
2018/05/01 18:32:36
This is a blocking filter with the rewrite option.
 
Sebastian Noack
2018/05/02 15:04:59
I agree that having the logic here is fine. Otherw
 
Manish Jethani
2018/05/02 16:13:45
Suppose there are two filters:
  /([^/]+\/)?bar$/
 
Sebastian Noack
2018/05/02 16:40:09
If we want to give precedence to blocking filters
 
Manish Jethani
2018/05/02 17:45:50
Yeah, I think that's fair.
I think defaultMatcher
 
hub
2018/05/03 01:18:02
I'm trying to actually keep it simple here.
 
Manish Jethani
2018/05/03 02:51:16
I'm OK with letting the filters with a rewrite opt
 
Sebastian Noack
2018/05/03 15:55:47
I don't quite get what we need another argument fo
 
Manish Jethani
2018/05/04 10:01:59
If the typeMask doesn't contain REWRITE it'll stil
 
Sebastian Noack
2018/05/04 15:17:16
Gotya. In fact REWRITE isn't even a flag in the ty
 
Manish Jethani
2018/05/04 15:37:47
Makes sense.
 
 | 
| + { | 
| + let rewritten = filter.doRewrite(urlString); | 
| + if (rewritten && rewritten != urlString) | 
| + { | 
| + log("REWRITE"); | 
| + | 
| + return {redirectUrl: rewritten}; | 
| + } | 
| + // we couldn't do the rewrite, so just let it through. | 
| + return; | 
| + } | 
| + | 
| + log(type); | 
| 
 
Sebastian Noack
2018/05/02 15:04:59
I'd rather move the logic around so that we don't
 
hub
2018/05/03 01:18:03
Done in a different way.
 
 | 
| + | 
| if (filter instanceof BlockingFilter) | 
| return {cancel: true}; | 
| }, {urls: ["<all_urls>"]}, ["blocking"]); | 
| port.on("filters.collapse", (message, sender) => | 
| { | 
| let {page, frame} = sender; |