@@ -182,19 +182,22 @@ const MODIFIER_TYPE_REDIRECT = 1;
182
182
const MODIFIER_TYPE_REDIRECTRULE = 2;
183
183
const MODIFIER_TYPE_REMOVEPARAM = 3;
184
184
const MODIFIER_TYPE_CSP = 4;
185
+
const MODIFIER_TYPE_PERMISSIONS = 5;
185
186
186
187
const modifierTypeFromName = new Map([
187
188
[ 'redirect', MODIFIER_TYPE_REDIRECT ],
188
189
[ 'redirect-rule', MODIFIER_TYPE_REDIRECTRULE ],
189
190
[ 'removeparam', MODIFIER_TYPE_REMOVEPARAM ],
190
191
[ 'csp', MODIFIER_TYPE_CSP ],
192
+
[ 'permissions', MODIFIER_TYPE_PERMISSIONS ],
191
193
]);
192
194
193
195
const modifierNameFromType = new Map([
194
196
[ MODIFIER_TYPE_REDIRECT, 'redirect' ],
195
197
[ MODIFIER_TYPE_REDIRECTRULE, 'redirect-rule' ],
196
198
[ MODIFIER_TYPE_REMOVEPARAM, 'removeparam' ],
197
199
[ MODIFIER_TYPE_CSP, 'csp' ],
200
+
[ MODIFIER_TYPE_PERMISSIONS, 'permissions' ],
198
201
]);
199
202
200
203
//const typeValueFromCatBits = catBits => (catBits >>> TypeBitsOffset) & 0b11111;
@@ -3169,6 +3172,7 @@ class FilterCompiler {
3169
3172
]);
3170
3173
this.modifierIdToNormalizedId = new Map([
3171
3174
[ sfp.NODE_TYPE_NET_OPTION_NAME_CSP, MODIFIER_TYPE_CSP ],
3175
+
[ sfp.NODE_TYPE_NET_OPTION_NAME_PERMISSIONS, MODIFIER_TYPE_PERMISSIONS ],
3172
3176
[ sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECT, MODIFIER_TYPE_REDIRECT ],
3173
3177
[ sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE, MODIFIER_TYPE_REDIRECTRULE ],
3174
3178
[ sfp.NODE_TYPE_NET_OPTION_NAME_REMOVEPARAM, MODIFIER_TYPE_REMOVEPARAM ],
@@ -3438,6 +3442,12 @@ class FilterCompiler {
3438
3442
this.processMethodOption(parser.getNetOptionValue(id));
3439
3443
this.optionUnitBits |= this.METHOD_BIT;
3440
3444
break;
3445
+
case sfp.NODE_TYPE_NET_OPTION_NAME_PERMISSIONS:
3446
+
if ( this.processModifierOption(id, parser.getNetOptionValue(id)) === false ) {
3447
+
return false;
3448
+
}
3449
+
this.optionUnitBits |= this.PERMISSIONS_BIT;
3450
+
break;
3441
3451
case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECT: {
3442
3452
const actualId = this.action === AllowAction
3443
3453
? sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE
@@ -3554,6 +3564,7 @@ class FilterCompiler {
3554
3564
case sfp.NODE_TYPE_NET_OPTION_NAME_FROM:
3555
3565
case sfp.NODE_TYPE_NET_OPTION_NAME_HEADER:
3556
3566
case sfp.NODE_TYPE_NET_OPTION_NAME_METHOD:
3567
+
case sfp.NODE_TYPE_NET_OPTION_NAME_PERMISSIONS:
3557
3568
case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECT:
3558
3569
case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE:
3559
3570
case sfp.NODE_TYPE_NET_OPTION_NAME_REMOVEPARAM:
@@ -3622,8 +3633,12 @@ class FilterCompiler {
3622
3633
this.optionUnitBits |= this.NOT_TYPE_BIT;
3623
3634
}
3624
3635
3625
-
// CSP directives implicitly apply only to document/subdocument.
3626
-
if ( this.modifyType === MODIFIER_TYPE_CSP ) {
3636
+
// CSP/permissions options implicitly apply only to
3637
+
// document/subdocument.
3638
+
if (
3639
+
this.modifyType === MODIFIER_TYPE_CSP ||
3640
+
this.modifyType === MODIFIER_TYPE_PERMISSIONS
3641
+
) {
3627
3642
if ( this.typeBits === 0 ) {
3628
3643
this.processTypeOption(sfp.NODE_TYPE_NET_OPTION_NAME_DOC, false);
3629
3644
this.processTypeOption(sfp.NODE_TYPE_NET_OPTION_NAME_FRAME, false);
@@ -4013,17 +4028,18 @@ class FilterCompiler {
4013
4028
}
4014
4029
}
4015
4030
4016
-
FilterCompiler.prototype.FROM_BIT = 0b00000000001;
4017
-
FilterCompiler.prototype.TO_BIT = 0b00000000010;
4018
-
FilterCompiler.prototype.DENYALLOW_BIT = 0b00000000100;
4019
-
FilterCompiler.prototype.HEADER_BIT = 0b00000001000;
4020
-
FilterCompiler.prototype.STRICT_PARTY_BIT = 0b00000010000;
4021
-
FilterCompiler.prototype.CSP_BIT = 0b00000100000;
4022
-
FilterCompiler.prototype.REMOVEPARAM_BIT = 0b00001000000;
4023
-
FilterCompiler.prototype.REDIRECT_BIT = 0b00010000000;
4024
-
FilterCompiler.prototype.NOT_TYPE_BIT = 0b00100000000;
4025
-
FilterCompiler.prototype.IMPORTANT_BIT = 0b01000000000;
4026
-
FilterCompiler.prototype.METHOD_BIT = 0b10000000000;
4031
+
FilterCompiler.prototype.FROM_BIT = 0b000000000001;
4032
+
FilterCompiler.prototype.TO_BIT = 0b000000000010;
4033
+
FilterCompiler.prototype.DENYALLOW_BIT = 0b000000000100;
4034
+
FilterCompiler.prototype.HEADER_BIT = 0b000000001000;
4035
+
FilterCompiler.prototype.STRICT_PARTY_BIT = 0b000000010000;
4036
+
FilterCompiler.prototype.CSP_BIT = 0b000000100000;
4037
+
FilterCompiler.prototype.REMOVEPARAM_BIT = 0b000001000000;
4038
+
FilterCompiler.prototype.REDIRECT_BIT = 0b000010000000;
4039
+
FilterCompiler.prototype.NOT_TYPE_BIT = 0b000100000000;
4040
+
FilterCompiler.prototype.IMPORTANT_BIT = 0b001000000000;
4041
+
FilterCompiler.prototype.METHOD_BIT = 0b010000000000;
4042
+
FilterCompiler.prototype.PERMISSIONS_BIT = 0b100000000000;
4027
4043
4028
4044
FilterCompiler.prototype.FILTER_OK = 0;
4029
4045
FilterCompiler.prototype.FILTER_INVALID = 1;
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4