|
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