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

Side by Side Diff: lib/abp2blocklist.js

Issue 29441592: Issue 4329 - Add $genericblock support (Closed) Base URL: https://hg.adblockplus.org/abp2blocklist
Patch Set: Rebase Created May 21, 2017, 9:26 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | test/abp2blocklist.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>, 2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-2017 eyeo GmbH 3 * Copyright (C) 2006-2017 eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 typeMap.OBJECT_SUBREQUEST | 207 typeMap.OBJECT_SUBREQUEST |
208 typeMap.PING | 208 typeMap.PING |
209 typeMap.OTHER)) 209 typeMap.OTHER))
210 types.push("raw"); 210 types.push("raw");
211 if (filter.contentType & typeMap.SUBDOCUMENT) 211 if (filter.contentType & typeMap.SUBDOCUMENT)
212 types.push("document"); 212 types.push("document");
213 213
214 return types; 214 return types;
215 } 215 }
216 216
217 function convertFilterAddRules(rules, filter, action, withResourceTypes) 217 function convertFilterAddRules(rules, filter, action, withResourceTypes,
218 exceptionDomains)
218 { 219 {
219 let parsed = parseFilterRegexpSource(filter.regexpSource); 220 let parsed = parseFilterRegexpSource(filter.regexpSource);
220 221
221 // For the special case of $document whitelisting filters with just a domain 222 // For the special case of $document whitelisting filters with just a domain
222 // we can generate an equivalent blocking rule exception using if-domain. 223 // we can generate an equivalent blocking rule exception using if-domain.
223 if (filter instanceof filterClasses.WhitelistFilter && 224 if (filter instanceof filterClasses.WhitelistFilter &&
224 filter.contentType & typeMap.DOCUMENT && 225 filter.contentType & typeMap.DOCUMENT &&
225 parsed.justHostname) 226 parsed.justHostname)
226 { 227 {
227 rules.push({ 228 rules.push({
(...skipping 21 matching lines...) Expand all
249 trigger["url-filter"] = trigger["url-filter"].toLowerCase(); 250 trigger["url-filter"] = trigger["url-filter"].toLowerCase();
250 251
251 if (parsed.canSafelyMatchAsLowercase || filter.matchCase) 252 if (parsed.canSafelyMatchAsLowercase || filter.matchCase)
252 trigger["url-filter-is-case-sensitive"] = true; 253 trigger["url-filter-is-case-sensitive"] = true;
253 254
254 let included = []; 255 let included = [];
255 let excluded = []; 256 let excluded = [];
256 257
257 parseDomains(filter.domains, included, excluded); 258 parseDomains(filter.domains, included, excluded);
258 259
260 if (exceptionDomains)
261 excluded = excluded.concat(exceptionDomains);
262
259 if (withResourceTypes) 263 if (withResourceTypes)
260 { 264 {
261 trigger["resource-type"] = getResourceTypes(filter); 265 trigger["resource-type"] = getResourceTypes(filter);
262 266
263 if (trigger["resource-type"].length == 0) 267 if (trigger["resource-type"].length == 0)
264 return; 268 return;
265 } 269 }
266 270
267 if (filter.thirdParty != null) 271 if (filter.thirdParty != null)
268 trigger["load-type"] = [filter.thirdParty ? "third-party" : "first-party"]; 272 trigger["load-type"] = [filter.thirdParty ? "third-party" : "first-party"];
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 * Create a new Adblock Plus filter to content blocker list converter 378 * Create a new Adblock Plus filter to content blocker list converter
375 * 379 *
376 * @constructor 380 * @constructor
377 */ 381 */
378 exports.ContentBlockerList = function () 382 exports.ContentBlockerList = function ()
379 { 383 {
380 this.requestFilters = []; 384 this.requestFilters = [];
381 this.requestExceptions = []; 385 this.requestExceptions = [];
382 this.elemhideFilters = []; 386 this.elemhideFilters = [];
383 this.elemhideExceptions = []; 387 this.elemhideExceptions = [];
388 this.genericblockExceptions = [];
384 this.generichideExceptions = []; 389 this.generichideExceptions = [];
385 this.elemhideSelectorExceptions = new Map(); 390 this.elemhideSelectorExceptions = new Map();
386 }; 391 };
387 392
388 /** 393 /**
389 * Add Adblock Plus filter to be converted 394 * Add Adblock Plus filter to be converted
390 * 395 *
391 * @param {Filter} filter Filter to convert 396 * @param {Filter} filter Filter to convert
392 */ 397 */
393 ContentBlockerList.prototype.addFilter = function(filter) 398 ContentBlockerList.prototype.addFilter = function(filter)
394 { 399 {
395 if (filter.sitekeys) 400 if (filter.sitekeys)
396 return; 401 return;
397 if (filter instanceof filterClasses.RegExpFilter && 402 if (filter instanceof filterClasses.RegExpFilter &&
398 filter.regexpSource == null) 403 filter.regexpSource == null)
399 return; 404 return;
400 405
401 if (filter instanceof filterClasses.BlockingFilter) 406 if (filter instanceof filterClasses.BlockingFilter)
402 this.requestFilters.push(filter); 407 this.requestFilters.push(filter);
403 408
404 if (filter instanceof filterClasses.WhitelistFilter) 409 if (filter instanceof filterClasses.WhitelistFilter)
405 { 410 {
406 if (filter.contentType & (typeMap.DOCUMENT | whitelistableRequestTypes)) 411 if (filter.contentType & (typeMap.DOCUMENT | whitelistableRequestTypes))
407 this.requestExceptions.push(filter); 412 this.requestExceptions.push(filter);
408 413
414 if (filter.contentType & typeMap.GENERICBLOCK)
415 this.genericblockExceptions.push(filter);
416
409 if (filter.contentType & typeMap.ELEMHIDE) 417 if (filter.contentType & typeMap.ELEMHIDE)
410 this.elemhideExceptions.push(filter); 418 this.elemhideExceptions.push(filter);
411 else if (filter.contentType & typeMap.GENERICHIDE) 419 else if (filter.contentType & typeMap.GENERICHIDE)
412 this.generichideExceptions.push(filter); 420 this.generichideExceptions.push(filter);
413 } 421 }
414 422
415 if (filter instanceof filterClasses.ElemHideFilter) 423 if (filter instanceof filterClasses.ElemHideFilter)
416 this.elemhideFilters.push(filter); 424 this.elemhideFilters.push(filter);
417 425
418 if (filter instanceof filterClasses.ElemHideException) 426 if (filter instanceof filterClasses.ElemHideException)
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 for (let filter of this.generichideExceptions) 473 for (let filter of this.generichideExceptions)
466 convertFilterAddRules(rules, filter, "ignore-previous-rules", false); 474 convertFilterAddRules(rules, filter, "ignore-previous-rules", false);
467 475
468 groupedElemhideFilters.forEach((selectors, matchDomain) => 476 groupedElemhideFilters.forEach((selectors, matchDomain) =>
469 { 477 {
470 addCSSRules(rules, selectors, matchDomain); 478 addCSSRules(rules, selectors, matchDomain);
471 }); 479 });
472 480
473 for (let filter of this.elemhideExceptions) 481 for (let filter of this.elemhideExceptions)
474 convertFilterAddRules(rules, filter, "ignore-previous-rules", false); 482 convertFilterAddRules(rules, filter, "ignore-previous-rules", false);
483
484 let requestFilterExceptionDomains = [];
485 for (let filter of this.genericblockExceptions)
486 {
487 let parsed = parseFilterRegexpSource(filter.regexpSource);
488 if (parsed.hostname)
489 requestFilterExceptionDomains.push(parsed.hostname);
490 }
491
475 for (let filter of this.requestFilters) 492 for (let filter of this.requestFilters)
476 convertFilterAddRules(rules, filter, "block", true); 493 {
494 convertFilterAddRules(rules, filter, "block", true,
495 requestFilterExceptionDomains);
496 }
497
477 for (let filter of this.requestExceptions) 498 for (let filter of this.requestExceptions)
478 convertFilterAddRules(rules, filter, "ignore-previous-rules", true); 499 convertFilterAddRules(rules, filter, "ignore-previous-rules", true);
479 500
480 return rules.filter(rule => !hasNonASCI(rule)); 501 return rules.filter(rule => !hasNonASCI(rule));
481 }; 502 };
OLDNEW
« no previous file with comments | « no previous file | test/abp2blocklist.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld