|
19 | 19 | Home: https://github.com/gorhill/uBlock
|
20 | 20 | */
|
21 | 21 |
|
22 |
| -/* globals vAPI */ |
23 |
| - |
24 |
| -'use strict'; |
| 22 | +import * as sfp from './static-filtering-parser.js'; |
25 | 23 |
|
26 |
| -/******************************************************************************/ |
| 24 | +import { domainFromHostname, hostnameFromNetworkURL } from './uri-utils.js'; |
| 25 | +import { dropTask, queueTask } from './tasks.js'; |
27 | 26 |
|
28 |
| -import { queueTask, dropTask } from './tasks.js'; |
29 | 27 | import BidiTrieContainer from './biditrie.js';
|
30 |
| -import HNTrieContainer from './hntrie.js'; |
31 | 28 | import { CompiledListReader } from './static-filtering-io.js';
|
32 |
| -import * as sfp from './static-filtering-parser.js'; |
33 |
| - |
34 |
| -import { |
35 |
| - domainFromHostname, |
36 |
| - hostnameFromNetworkURL, |
37 |
| -} from './uri-utils.js'; |
38 |
| - |
39 |
| -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#browser_compatibility |
40 |
| -// |
41 |
| -// This import would be best done dynamically, but since dynamic imports are |
42 |
| -// not supported by older browsers, for now a static import is necessary. |
43 | 29 | import { FilteringContext } from './filtering-context.js';
|
| 30 | +import HNTrieContainer from './hntrie.js'; |
44 | 31 |
|
45 | 32 | /******************************************************************************/
|
46 | 33 |
|
@@ -3423,63 +3410,63 @@ class FilterCompiler {
|
3423 | 3410 |
|
3424 | 3411 | processOptionWithValue(parser, id) {
|
3425 | 3412 | switch ( id ) {
|
3426 |
| - case sfp.NODE_TYPE_NET_OPTION_NAME_CSP: |
3427 |
| - if ( this.processCspOption(parser.getNetOptionValue(id)) === false ) { return false; } |
3428 |
| - break; |
3429 |
| - case sfp.NODE_TYPE_NET_OPTION_NAME_DENYALLOW: |
3430 |
| - this.denyallowOpt = this.processHostnameList( |
3431 |
| - parser.getNetFilterDenyallowOptionIterator(), |
3432 |
| - ); |
3433 |
| - if ( this.denyallowOpt === '' ) { return false; } |
3434 |
| - this.optionUnitBits |= DENYALLOW_BIT; |
3435 |
| - break; |
3436 |
| - case sfp.NODE_TYPE_NET_OPTION_NAME_FROM: |
3437 |
| - this.fromDomainOpt = this.processHostnameList( |
3438 |
| - parser.getNetFilterFromOptionIterator(), |
3439 |
| - this.fromDomainOptList |
3440 |
| - ); |
3441 |
| - if ( this.fromDomainOpt === '' ) { return false; } |
3442 |
| - this.optionUnitBits |= FROM_BIT; |
3443 |
| - break; |
3444 |
| - case sfp.NODE_TYPE_NET_OPTION_NAME_HEADER: { |
3445 |
| - this.headerOpt = parser.getNetOptionValue(id) || ''; |
3446 |
| - this.optionUnitBits |= HEADER_BIT; |
3447 |
| - break; |
| 3413 | + case sfp.NODE_TYPE_NET_OPTION_NAME_CSP: |
| 3414 | + if ( this.processCspOption(parser.getNetOptionValue(id)) === false ) { return false; } |
| 3415 | + break; |
| 3416 | + case sfp.NODE_TYPE_NET_OPTION_NAME_DENYALLOW: |
| 3417 | + this.denyallowOpt = this.processHostnameList( |
| 3418 | + parser.getNetFilterDenyallowOptionIterator(), |
| 3419 | + ); |
| 3420 | + if ( this.denyallowOpt === '' ) { return false; } |
| 3421 | + this.optionUnitBits |= DENYALLOW_BIT; |
| 3422 | + break; |
| 3423 | + case sfp.NODE_TYPE_NET_OPTION_NAME_FROM: |
| 3424 | + this.fromDomainOpt = this.processHostnameList( |
| 3425 | + parser.getNetFilterFromOptionIterator(), |
| 3426 | + this.fromDomainOptList |
| 3427 | + ); |
| 3428 | + if ( this.fromDomainOpt === '' ) { return false; } |
| 3429 | + this.optionUnitBits |= FROM_BIT; |
| 3430 | + break; |
| 3431 | + case sfp.NODE_TYPE_NET_OPTION_NAME_HEADER: { |
| 3432 | + this.headerOpt = parser.getNetOptionValue(id) || ''; |
| 3433 | + this.optionUnitBits |= HEADER_BIT; |
| 3434 | + break; |
| 3435 | + } |
| 3436 | + case sfp.NODE_TYPE_NET_OPTION_NAME_METHOD: |
| 3437 | + this.processMethodOption(parser.getNetOptionValue(id)); |
| 3438 | + this.optionUnitBits |= METHOD_BIT; |
| 3439 | + break; |
| 3440 | + case sfp.NODE_TYPE_NET_OPTION_NAME_PERMISSIONS: |
| 3441 | + case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE: |
| 3442 | + case sfp.NODE_TYPE_NET_OPTION_NAME_REMOVEPARAM: |
| 3443 | + case sfp.NODE_TYPE_NET_OPTION_NAME_REPLACE: |
| 3444 | + case sfp.NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM: |
| 3445 | + if ( this.processModifierOption(id, parser.getNetOptionValue(id)) === false ) { |
| 3446 | + return false; |
3448 | 3447 | }
|
3449 |
| - case sfp.NODE_TYPE_NET_OPTION_NAME_METHOD: |
3450 |
| - this.processMethodOption(parser.getNetOptionValue(id)); |
3451 |
| - this.optionUnitBits |= METHOD_BIT; |
3452 |
| - break; |
3453 |
| - case sfp.NODE_TYPE_NET_OPTION_NAME_PERMISSIONS: |
3454 |
| - case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE: |
3455 |
| - case sfp.NODE_TYPE_NET_OPTION_NAME_REMOVEPARAM: |
3456 |
| - case sfp.NODE_TYPE_NET_OPTION_NAME_REPLACE: |
3457 |
| - case sfp.NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM: |
3458 |
| - if ( this.processModifierOption(id, parser.getNetOptionValue(id)) === false ) { |
3459 |
| - return false; |
3460 |
| - } |
3461 |
| - this.optionUnitBits |= MODIFY_BIT; |
3462 |
| - break; |
3463 |
| - case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECT: { |
3464 |
| - const actualId = this.action === ALLOW_REALM |
3465 |
| - ? sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE |
3466 |
| - : id; |
3467 |
| - if ( this.processModifierOption(actualId, parser.getNetOptionValue(id)) === false ) { |
3468 |
| - return false; |
3469 |
| - } |
3470 |
| - this.optionUnitBits |= MODIFY_BIT; |
3471 |
| - break; |
| 3448 | + this.optionUnitBits |= MODIFY_BIT; |
| 3449 | + break; |
| 3450 | + case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECT: { |
| 3451 | + const actualId = this.action === ALLOW_REALM |
| 3452 | + ? sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE |
| 3453 | + : id; |
| 3454 | + if ( this.processModifierOption(actualId, parser.getNetOptionValue(id)) === false ) { |
| 3455 | + return false; |
3472 | 3456 | }
|
3473 |
| - case sfp.NODE_TYPE_NET_OPTION_NAME_TO: |
3474 |
| - this.toDomainOpt = this.processHostnameList( |
3475 |
| - parser.getNetFilterToOptionIterator(), |
3476 |
| - this.toDomainOptList |
3477 |
| - ); |
3478 |
| - if ( this.toDomainOpt === '' ) { return false; } |
3479 |
| - this.optionUnitBits |= TO_BIT; |
3480 |
| - break; |
3481 |
| - default: |
3482 |
| - break; |
| 3457 | + this.optionUnitBits |= MODIFY_BIT; |
| 3458 | + break; |
| 3459 | + } |
| 3460 | + case sfp.NODE_TYPE_NET_OPTION_NAME_TO: |
| 3461 | + this.toDomainOpt = this.processHostnameList( |
| 3462 | + parser.getNetFilterToOptionIterator(), |
| 3463 | + this.toDomainOptList |
| 3464 | + ); |
| 3465 | + if ( this.toDomainOpt === '' ) { return false; } |
| 3466 | + this.optionUnitBits |= TO_BIT; |
| 3467 | + break; |
| 3468 | + default: |
| 3469 | + break; |
3483 | 3470 | }
|
3484 | 3471 | return true;
|
3485 | 3472 | }
|
@@ -3798,7 +3785,7 @@ class FilterCompiler {
|
3798 | 3785 | isJustOrigin() {
|
3799 | 3786 | if ( this.optionUnitBits !== FROM_BIT ) { return false; }
|
3800 | 3787 | if ( this.isRegex ) { return false; }
|
3801 |
| - if ( /[\/~]/.test(this.fromDomainOpt) ) { return false; } |
| 3788 | + if ( /[/~]/.test(this.fromDomainOpt) ) { return false; } |
3802 | 3789 | if ( this.pattern === '*' ) { return true; }
|
3803 | 3790 | if ( this.anchor !== 0b010 ) { return false; }
|
3804 | 3791 | if ( /^(?:http[s*]?:(?:\/\/)?)$/.test(this.pattern) ) { return true; }
|
@@ -5156,6 +5143,10 @@ StaticNetFilteringEngine.prototype.matchHeaders = function(fctxt, headers) {
|
5156 | 5143 | if ( r !== 0 && $isBlockImportant !== true ) {
|
5157 | 5144 | if ( this.realmMatchString(HEADERS_REALM | ALLOW_REALM, typeBits, partyBits) ) {
|
5158 | 5145 | r = 2;
|
| 5146 | + } else if ( this.realmMatchString(ALLOW_REALM, typeBits, partyBits) ) { |
| 5147 | + r = 2; |
| 5148 | + } |
| 5149 | + if ( r === 2 ) { |
5159 | 5150 | if ( this.realmMatchString(HEADERS_REALM | BLOCKIMPORTANT_REALM, typeBits, partyBits) ) {
|
5160 | 5151 | r = 1;
|
5161 | 5152 | }
|
|
0 commit comments