@browserless.io/browserless 2.5.0-beta-4 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -2
- package/README.md +65 -34
- package/build/config.d.ts +2 -2
- package/build/config.js +3 -3
- package/build/data/classes.json +1 -1
- package/build/data/selectors.json +1 -1
- package/build/http.d.ts +1 -0
- package/build/http.js +1 -0
- package/build/routes/chrome/http/content.post.body.json +8 -8
- package/build/routes/chrome/http/pdf.post.body.json +8 -8
- package/build/routes/chrome/http/scrape.post.body.json +8 -8
- package/build/routes/chrome/http/screenshot.post.body.json +9 -9
- package/build/routes/chromium/http/content.post.body.json +8 -8
- package/build/routes/chromium/http/pdf.post.body.json +8 -8
- package/build/routes/chromium/http/scrape.post.body.json +8 -8
- package/build/routes/chromium/http/screenshot.post.body.json +9 -9
- package/build/routes/management/http/active.get.d.ts +16 -0
- package/build/routes/management/http/active.get.js +17 -0
- package/build/routes/management/tests/management.spec.js +7 -0
- package/build/server.js +1 -1
- package/build/types.d.ts +6 -4
- package/build/types.js +1 -0
- package/build/utils.d.ts +1 -1
- package/docker/base/Dockerfile +1 -1
- package/extensions/ublock/1p-filters.html +4 -3
- package/extensions/ublock/3p-filters.html +3 -3
- package/extensions/ublock/_locales/ar/messages.json +16 -4
- package/extensions/ublock/_locales/az/messages.json +16 -4
- package/extensions/ublock/_locales/be/messages.json +19 -7
- package/extensions/ublock/_locales/bg/messages.json +16 -4
- package/extensions/ublock/_locales/bn/messages.json +33 -21
- package/extensions/ublock/_locales/br_FR/messages.json +33 -21
- package/extensions/ublock/_locales/bs/messages.json +16 -4
- package/extensions/ublock/_locales/ca/messages.json +16 -4
- package/extensions/ublock/_locales/cs/messages.json +16 -4
- package/extensions/ublock/_locales/cv/messages.json +16 -4
- package/extensions/ublock/_locales/cy/messages.json +16 -4
- package/extensions/ublock/_locales/da/messages.json +21 -9
- package/extensions/ublock/_locales/de/messages.json +17 -5
- package/extensions/ublock/_locales/el/messages.json +16 -4
- package/extensions/ublock/_locales/en/messages.json +16 -4
- package/extensions/ublock/_locales/en_GB/messages.json +16 -4
- package/extensions/ublock/_locales/eo/messages.json +17 -5
- package/extensions/ublock/_locales/es/messages.json +16 -4
- package/extensions/ublock/_locales/et/messages.json +16 -4
- package/extensions/ublock/_locales/eu/messages.json +16 -4
- package/extensions/ublock/_locales/fa/messages.json +24 -12
- package/extensions/ublock/_locales/fi/messages.json +16 -4
- package/extensions/ublock/_locales/fil/messages.json +16 -4
- package/extensions/ublock/_locales/fr/messages.json +16 -4
- package/extensions/ublock/_locales/fy/messages.json +16 -4
- package/extensions/ublock/_locales/gl/messages.json +16 -4
- package/extensions/ublock/_locales/gu/messages.json +16 -4
- package/extensions/ublock/_locales/he/messages.json +25 -13
- package/extensions/ublock/_locales/hi/messages.json +31 -19
- package/extensions/ublock/_locales/hr/messages.json +16 -4
- package/extensions/ublock/_locales/hu/messages.json +16 -4
- package/extensions/ublock/_locales/hy/messages.json +17 -5
- package/extensions/ublock/_locales/id/messages.json +16 -4
- package/extensions/ublock/_locales/it/messages.json +17 -5
- package/extensions/ublock/_locales/ja/messages.json +16 -4
- package/extensions/ublock/_locales/ka/messages.json +16 -4
- package/extensions/ublock/_locales/kk/messages.json +16 -4
- package/extensions/ublock/_locales/kn/messages.json +74 -62
- package/extensions/ublock/_locales/ko/messages.json +16 -4
- package/extensions/ublock/_locales/lt/messages.json +23 -11
- package/extensions/ublock/_locales/lv/messages.json +16 -4
- package/extensions/ublock/_locales/mk/messages.json +16 -4
- package/extensions/ublock/_locales/ml/messages.json +19 -7
- package/extensions/ublock/_locales/mr/messages.json +16 -4
- package/extensions/ublock/_locales/ms/messages.json +16 -4
- package/extensions/ublock/_locales/nb/messages.json +16 -4
- package/extensions/ublock/_locales/nl/messages.json +16 -4
- package/extensions/ublock/_locales/no/messages.json +16 -4
- package/extensions/ublock/_locales/oc/messages.json +16 -4
- package/extensions/ublock/_locales/pa/messages.json +16 -4
- package/extensions/ublock/_locales/pl/messages.json +17 -5
- package/extensions/ublock/_locales/pt_BR/messages.json +16 -4
- package/extensions/ublock/_locales/pt_PT/messages.json +16 -4
- package/extensions/ublock/_locales/ro/messages.json +17 -5
- package/extensions/ublock/_locales/ru/messages.json +16 -4
- package/extensions/ublock/_locales/si/messages.json +16 -4
- package/extensions/ublock/_locales/sk/messages.json +16 -4
- package/extensions/ublock/_locales/sl/messages.json +16 -4
- package/extensions/ublock/_locales/so/messages.json +16 -4
- package/extensions/ublock/_locales/sq/messages.json +16 -4
- package/extensions/ublock/_locales/sr/messages.json +16 -4
- package/extensions/ublock/_locales/sv/messages.json +20 -8
- package/extensions/ublock/_locales/sw/messages.json +16 -4
- package/extensions/ublock/_locales/ta/messages.json +16 -4
- package/extensions/ublock/_locales/te/messages.json +16 -4
- package/extensions/ublock/_locales/th/messages.json +42 -30
- package/extensions/ublock/_locales/tr/messages.json +19 -7
- package/extensions/ublock/_locales/uk/messages.json +16 -4
- package/extensions/ublock/_locales/ur/messages.json +16 -4
- package/extensions/ublock/_locales/vi/messages.json +16 -4
- package/extensions/ublock/_locales/zh_CN/messages.json +16 -4
- package/extensions/ublock/_locales/zh_TW/messages.json +42 -30
- package/extensions/ublock/assets/assets.json +95 -78
- package/extensions/ublock/assets/resources/scriptlets.js +70 -24
- package/extensions/ublock/assets/thirdparties/easylist/easylist.txt +6258 -3453
- package/extensions/ublock/assets/thirdparties/easylist/easyprivacy.txt +277 -40
- package/extensions/ublock/assets/thirdparties/pgl.yoyo.org/as/serverlist +8 -32
- package/extensions/ublock/assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat +107 -12
- package/extensions/ublock/assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt +1160 -954
- package/extensions/ublock/assets/ublock/badlists.txt +1 -2
- package/extensions/ublock/assets/ublock/badware.min.txt +395 -270
- package/extensions/ublock/assets/ublock/filters.min.txt +1176 -1238
- package/extensions/ublock/assets/ublock/privacy.min.txt +32 -31
- package/extensions/ublock/assets/ublock/quick-fixes.min.txt +120 -110
- package/extensions/ublock/assets/ublock/unbreak.min.txt +75 -36
- package/extensions/ublock/css/1p-filters.css +2 -1
- package/extensions/ublock/css/3p-filters.css +1 -16
- package/extensions/ublock/css/advanced-settings.css +1 -0
- package/extensions/ublock/css/asset-viewer.css +1 -0
- package/extensions/ublock/css/code-viewer.css +1 -0
- package/extensions/ublock/css/codemirror.css +37 -10
- package/extensions/ublock/css/common.css +36 -2
- package/extensions/ublock/css/dashboard.css +9 -3
- package/extensions/ublock/css/devtools.css +1 -0
- package/extensions/ublock/css/document-blocked.css +3 -3
- package/extensions/ublock/css/dom-inspector.css +1 -0
- package/extensions/ublock/css/dyna-rules.css +1 -0
- package/extensions/ublock/css/epicker-ui.css +76 -66
- package/extensions/ublock/css/fa-icons.css +1 -0
- package/extensions/ublock/css/logger-ui.css +2 -0
- package/extensions/ublock/css/popup-fenix.css +1 -0
- package/extensions/ublock/css/whitelist.css +1 -0
- package/extensions/ublock/dashboard.html +20 -13
- package/extensions/ublock/devtools.html +2 -0
- package/extensions/ublock/dyna-rules.html +2 -2
- package/extensions/ublock/img/flags-of-the-world/np.png +0 -0
- package/extensions/ublock/img/fontawesome/fontawesome-defs.svg +1 -0
- package/extensions/ublock/js/1p-filters.js +72 -23
- package/extensions/ublock/js/3p-filters.js +71 -25
- package/extensions/ublock/js/asset-viewer.js +1 -0
- package/extensions/ublock/js/assets.js +83 -89
- package/extensions/ublock/js/background.js +20 -27
- package/extensions/ublock/js/base64-custom.js +1 -102
- package/extensions/ublock/js/benchmarks.js +36 -21
- package/extensions/ublock/js/biditrie.js +8 -23
- package/extensions/ublock/js/broadcast.js +2 -4
- package/extensions/ublock/js/cachestorage.js +594 -396
- package/extensions/ublock/js/codemirror/search.js +49 -37
- package/extensions/ublock/js/codemirror/ubo-static-filtering.js +233 -215
- package/extensions/ublock/js/contentscript-extra.js +31 -1
- package/extensions/ublock/js/cosmetic-filtering.js +35 -33
- package/extensions/ublock/js/dashboard.js +11 -7
- package/extensions/ublock/js/devtools.js +22 -0
- package/extensions/ublock/js/dom.js +2 -2
- package/extensions/ublock/js/dyna-rules.js +17 -16
- package/extensions/ublock/js/epicker-ui.js +41 -16
- package/extensions/ublock/js/fa-icons.js +1 -0
- package/extensions/ublock/js/hntrie.js +10 -25
- package/extensions/ublock/js/i18n.js +15 -15
- package/extensions/ublock/js/logger-ui.js +9 -6
- package/extensions/ublock/js/messaging.js +51 -26
- package/extensions/ublock/js/pagestore.js +21 -23
- package/extensions/ublock/js/popup-fenix.js +35 -22
- package/extensions/ublock/js/redirect-engine.js +15 -30
- package/extensions/ublock/js/reverselookup.js +1 -1
- package/extensions/ublock/js/s14e-serializer.js +1405 -0
- package/extensions/ublock/js/scriptlet-filtering-core.js +1 -1
- package/extensions/ublock/js/scriptlets/epicker.js +27 -18
- package/extensions/ublock/js/settings.js +32 -21
- package/extensions/ublock/js/start.js +121 -62
- package/extensions/ublock/js/static-ext-filtering-db.js +6 -6
- package/extensions/ublock/js/static-ext-filtering.js +17 -28
- package/extensions/ublock/js/static-filtering-parser.js +26 -4
- package/extensions/ublock/js/static-net-filtering.js +69 -168
- package/extensions/ublock/js/storage.js +178 -155
- package/extensions/ublock/js/traffic.js +11 -7
- package/extensions/ublock/js/vapi-background.js +49 -62
- package/extensions/ublock/js/vapi-client.js +13 -16
- package/extensions/ublock/js/webext.js +10 -2
- package/extensions/ublock/js/whitelist.js +27 -25
- package/extensions/ublock/lib/publicsuffixlist/publicsuffixlist.js +3 -7
- package/extensions/ublock/manifest.json +2 -1
- package/extensions/ublock/web_accessible_resources/epicker-ui.html +5 -8
- package/extensions/ublock/whitelist.html +3 -4
- package/package.json +13 -13
- package/src/config.ts +3 -4
- package/src/http.ts +1 -0
- package/src/routes/management/http/active.get.ts +30 -0
- package/src/routes/management/tests/management.spec.ts +13 -0
- package/src/server.ts +1 -1
- package/src/types.ts +2 -1
- package/static/docs/swagger.json +57 -11
- package/static/docs/swagger.min.json +56 -10
- package/static/function/client.js +4155 -3350
- package/extensions/ublock/_locales/ku/messages.json +0 -1294
|
@@ -21,8 +21,6 @@
|
|
|
21
21
|
|
|
22
22
|
/* global CodeMirror */
|
|
23
23
|
|
|
24
|
-
'use strict';
|
|
25
|
-
|
|
26
24
|
/******************************************************************************/
|
|
27
25
|
|
|
28
26
|
import * as sfp from '../static-filtering-parser.js';
|
|
@@ -39,10 +37,10 @@ let hintHelperRegistered = false;
|
|
|
39
37
|
|
|
40
38
|
/******************************************************************************/
|
|
41
39
|
|
|
42
|
-
CodeMirror.defineOption('trustedSource', false, (cm,
|
|
43
|
-
if ( typeof
|
|
40
|
+
CodeMirror.defineOption('trustedSource', false, (cm, trusted) => {
|
|
41
|
+
if ( typeof trusted !== 'boolean' ) { return; }
|
|
44
42
|
self.dispatchEvent(new CustomEvent('trustedSource', {
|
|
45
|
-
detail:
|
|
43
|
+
detail: { cm, trusted },
|
|
46
44
|
}));
|
|
47
45
|
});
|
|
48
46
|
|
|
@@ -56,220 +54,232 @@ CodeMirror.defineOption('trustedScriptletTokens', undefined, (cm, tokens) => {
|
|
|
56
54
|
|
|
57
55
|
/******************************************************************************/
|
|
58
56
|
|
|
59
|
-
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
nativeCssHas: vAPI.webextFlavor.env.includes('native_css_has'),
|
|
63
|
-
});
|
|
64
|
-
const astWalker = astParser.getWalker();
|
|
65
|
-
let currentWalkerNode = 0;
|
|
66
|
-
let lastNetOptionType = 0;
|
|
67
|
-
|
|
68
|
-
const redirectTokenStyle = node => {
|
|
69
|
-
const rawToken = astParser.getNodeString(node || currentWalkerNode);
|
|
57
|
+
const uBOStaticFilteringMode = (( ) => {
|
|
58
|
+
const redirectTokenStyle = (mode, node) => {
|
|
59
|
+
const rawToken = mode.astParser.getNodeString(node || mode.currentWalkerNode);
|
|
70
60
|
const { token } = sfp.parseRedirectValue(rawToken);
|
|
71
61
|
return redirectNames.has(token) ? 'value' : 'value warning';
|
|
72
62
|
};
|
|
73
63
|
|
|
74
|
-
const nodeHasError = node => {
|
|
75
|
-
return astParser.getNodeFlags(
|
|
76
|
-
node || currentWalkerNode, sfp.NODE_FLAG_ERROR
|
|
64
|
+
const nodeHasError = (mode, node) => {
|
|
65
|
+
return mode.astParser.getNodeFlags(
|
|
66
|
+
node || mode.currentWalkerNode, sfp.NODE_FLAG_ERROR
|
|
77
67
|
) !== 0;
|
|
78
68
|
};
|
|
79
69
|
|
|
80
|
-
const colorFromAstNode =
|
|
81
|
-
if ( astParser.nodeIsEmptyString(currentWalkerNode) ) { return '+'; }
|
|
82
|
-
if ( nodeHasError() ) { return 'error'; }
|
|
83
|
-
const nodeType = astParser.getNodeType(currentWalkerNode);
|
|
70
|
+
const colorFromAstNode = mode => {
|
|
71
|
+
if ( mode.astParser.nodeIsEmptyString(mode.currentWalkerNode) ) { return '+'; }
|
|
72
|
+
if ( nodeHasError(mode) ) { return 'error'; }
|
|
73
|
+
const nodeType = mode.astParser.getNodeType(mode.currentWalkerNode);
|
|
84
74
|
switch ( nodeType ) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
75
|
+
case sfp.NODE_TYPE_WHITESPACE:
|
|
76
|
+
return '';
|
|
77
|
+
case sfp.NODE_TYPE_COMMENT:
|
|
78
|
+
if ( mode.astWalker.canGoDown() ) { break; }
|
|
79
|
+
return 'comment';
|
|
80
|
+
case sfp.NODE_TYPE_COMMENT_URL:
|
|
81
|
+
return 'comment link';
|
|
82
|
+
case sfp.NODE_TYPE_IGNORE:
|
|
83
|
+
return 'comment';
|
|
84
|
+
case sfp.NODE_TYPE_PREPARSE_DIRECTIVE:
|
|
85
|
+
case sfp.NODE_TYPE_PREPARSE_DIRECTIVE_VALUE:
|
|
86
|
+
return 'directive';
|
|
87
|
+
case sfp.NODE_TYPE_PREPARSE_DIRECTIVE_IF_VALUE: {
|
|
88
|
+
const raw = mode.astParser.getNodeString(mode.currentWalkerNode);
|
|
89
|
+
const state = sfp.utils.preparser.evaluateExpr(raw, preparseDirectiveEnv);
|
|
90
|
+
return state ? 'positive strong' : 'negative strong';
|
|
91
|
+
}
|
|
92
|
+
case sfp.NODE_TYPE_EXT_OPTIONS_ANCHOR:
|
|
93
|
+
return mode.astParser.getFlags(sfp.AST_FLAG_IS_EXCEPTION)
|
|
94
|
+
? 'tag strong'
|
|
95
|
+
: 'def strong';
|
|
96
|
+
case sfp.NODE_TYPE_EXT_DECORATION:
|
|
97
|
+
return 'def';
|
|
98
|
+
case sfp.NODE_TYPE_EXT_PATTERN_RAW:
|
|
99
|
+
if ( mode.astWalker.canGoDown() ) { break; }
|
|
100
|
+
return 'variable';
|
|
101
|
+
case sfp.NODE_TYPE_EXT_PATTERN_COSMETIC:
|
|
102
|
+
case sfp.NODE_TYPE_EXT_PATTERN_HTML:
|
|
103
|
+
return 'variable';
|
|
104
|
+
case sfp.NODE_TYPE_EXT_PATTERN_RESPONSEHEADER:
|
|
105
|
+
case sfp.NODE_TYPE_EXT_PATTERN_SCRIPTLET:
|
|
106
|
+
if ( mode.astWalker.canGoDown() ) { break; }
|
|
107
|
+
return 'variable';
|
|
108
|
+
case sfp.NODE_TYPE_EXT_PATTERN_SCRIPTLET_TOKEN: {
|
|
109
|
+
const token = mode.astParser.getNodeString(mode.currentWalkerNode);
|
|
110
|
+
if ( scriptletNames.has(token) === false ) {
|
|
111
|
+
return 'warning';
|
|
101
112
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return 'variable';
|
|
114
|
-
case sfp.NODE_TYPE_EXT_PATTERN_RESPONSEHEADER:
|
|
115
|
-
case sfp.NODE_TYPE_EXT_PATTERN_SCRIPTLET:
|
|
116
|
-
if ( astWalker.canGoDown() ) { break; }
|
|
117
|
-
return 'variable';
|
|
118
|
-
case sfp.NODE_TYPE_EXT_PATTERN_SCRIPTLET_TOKEN: {
|
|
119
|
-
const token = astParser.getNodeString(currentWalkerNode);
|
|
120
|
-
if ( scriptletNames.has(token) === false ) {
|
|
121
|
-
return 'warning';
|
|
113
|
+
return 'variable';
|
|
114
|
+
}
|
|
115
|
+
case sfp.NODE_TYPE_EXT_PATTERN_SCRIPTLET_ARG:
|
|
116
|
+
return 'variable';
|
|
117
|
+
case sfp.NODE_TYPE_NET_EXCEPTION:
|
|
118
|
+
return 'tag strong';
|
|
119
|
+
case sfp.NODE_TYPE_NET_PATTERN:
|
|
120
|
+
if ( mode.astWalker.canGoDown() ) { break; }
|
|
121
|
+
if ( mode.astParser.isRegexPattern() ) {
|
|
122
|
+
if ( mode.astParser.getNodeFlags(mode.currentWalkerNode, sfp.NODE_FLAG_PATTERN_UNTOKENIZABLE) !== 0 ) {
|
|
123
|
+
return 'variable warning';
|
|
122
124
|
}
|
|
123
|
-
return 'variable';
|
|
125
|
+
return 'variable notice';
|
|
124
126
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
127
|
+
return 'variable';
|
|
128
|
+
case sfp.NODE_TYPE_NET_PATTERN_PART:
|
|
129
|
+
return 'variable';
|
|
130
|
+
case sfp.NODE_TYPE_NET_PATTERN_PART_SPECIAL:
|
|
131
|
+
return 'keyword strong';
|
|
132
|
+
case sfp.NODE_TYPE_NET_PATTERN_PART_UNICODE:
|
|
133
|
+
return 'variable unicode';
|
|
134
|
+
case sfp.NODE_TYPE_NET_PATTERN_LEFT_HNANCHOR:
|
|
135
|
+
case sfp.NODE_TYPE_NET_PATTERN_LEFT_ANCHOR:
|
|
136
|
+
case sfp.NODE_TYPE_NET_PATTERN_RIGHT_ANCHOR:
|
|
137
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_NOT:
|
|
138
|
+
return 'keyword strong';
|
|
139
|
+
case sfp.NODE_TYPE_NET_OPTIONS_ANCHOR:
|
|
140
|
+
case sfp.NODE_TYPE_NET_OPTION_SEPARATOR:
|
|
141
|
+
mode.lastNetOptionType = 0;
|
|
142
|
+
return 'def strong';
|
|
143
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_UNKNOWN:
|
|
144
|
+
mode.lastNetOptionType = 0;
|
|
145
|
+
return 'error';
|
|
146
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_1P:
|
|
147
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_STRICT1P:
|
|
148
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_3P:
|
|
149
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_STRICT3P:
|
|
150
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_ALL:
|
|
151
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_BADFILTER:
|
|
152
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_CNAME:
|
|
153
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_CSP:
|
|
154
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_CSS:
|
|
155
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_DENYALLOW:
|
|
156
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_DOC:
|
|
157
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_EHIDE:
|
|
158
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_EMPTY:
|
|
159
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_FONT:
|
|
160
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_FRAME:
|
|
161
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_FROM:
|
|
162
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_GENERICBLOCK:
|
|
163
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_GHIDE:
|
|
164
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_HEADER:
|
|
165
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_IMAGE:
|
|
166
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_IMPORTANT:
|
|
167
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_INLINEFONT:
|
|
168
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_INLINESCRIPT:
|
|
169
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_MATCHCASE:
|
|
170
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_MEDIA:
|
|
171
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_METHOD:
|
|
172
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_MP4:
|
|
173
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_NOOP:
|
|
174
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_OBJECT:
|
|
175
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_OTHER:
|
|
176
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_PING:
|
|
177
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_POPUNDER:
|
|
178
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_POPUP:
|
|
179
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECT:
|
|
180
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE:
|
|
181
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_REMOVEPARAM:
|
|
182
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_SCRIPT:
|
|
183
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_SHIDE:
|
|
184
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_TO:
|
|
185
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM:
|
|
186
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_XHR:
|
|
187
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_WEBRTC:
|
|
188
|
+
case sfp.NODE_TYPE_NET_OPTION_NAME_WEBSOCKET:
|
|
189
|
+
mode.lastNetOptionType = nodeType;
|
|
190
|
+
return 'def';
|
|
191
|
+
case sfp.NODE_TYPE_NET_OPTION_ASSIGN:
|
|
192
|
+
return 'def';
|
|
193
|
+
case sfp.NODE_TYPE_NET_OPTION_VALUE:
|
|
194
|
+
if ( mode.astWalker.canGoDown() ) { break; }
|
|
195
|
+
switch ( mode.lastNetOptionType ) {
|
|
189
196
|
case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECT:
|
|
190
197
|
case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE:
|
|
191
|
-
|
|
192
|
-
case sfp.NODE_TYPE_NET_OPTION_NAME_SCRIPT:
|
|
193
|
-
case sfp.NODE_TYPE_NET_OPTION_NAME_SHIDE:
|
|
194
|
-
case sfp.NODE_TYPE_NET_OPTION_NAME_TO:
|
|
195
|
-
case sfp.NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM:
|
|
196
|
-
case sfp.NODE_TYPE_NET_OPTION_NAME_XHR:
|
|
197
|
-
case sfp.NODE_TYPE_NET_OPTION_NAME_WEBRTC:
|
|
198
|
-
case sfp.NODE_TYPE_NET_OPTION_NAME_WEBSOCKET:
|
|
199
|
-
lastNetOptionType = nodeType;
|
|
200
|
-
return 'def';
|
|
201
|
-
case sfp.NODE_TYPE_NET_OPTION_ASSIGN:
|
|
202
|
-
return 'def';
|
|
203
|
-
case sfp.NODE_TYPE_NET_OPTION_VALUE:
|
|
204
|
-
if ( astWalker.canGoDown() ) { break; }
|
|
205
|
-
switch ( lastNetOptionType ) {
|
|
206
|
-
case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECT:
|
|
207
|
-
case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE:
|
|
208
|
-
return redirectTokenStyle();
|
|
209
|
-
default:
|
|
210
|
-
break;
|
|
211
|
-
}
|
|
212
|
-
return 'value';
|
|
213
|
-
case sfp.NODE_TYPE_OPTION_VALUE_NOT:
|
|
214
|
-
return 'keyword strong';
|
|
215
|
-
case sfp.NODE_TYPE_OPTION_VALUE_DOMAIN:
|
|
216
|
-
return 'value';
|
|
217
|
-
case sfp.NODE_TYPE_OPTION_VALUE_SEPARATOR:
|
|
218
|
-
return 'def';
|
|
198
|
+
return redirectTokenStyle(mode);
|
|
219
199
|
default:
|
|
220
200
|
break;
|
|
201
|
+
}
|
|
202
|
+
return 'value';
|
|
203
|
+
case sfp.NODE_TYPE_OPTION_VALUE_NOT:
|
|
204
|
+
return 'keyword strong';
|
|
205
|
+
case sfp.NODE_TYPE_OPTION_VALUE_DOMAIN:
|
|
206
|
+
return 'value';
|
|
207
|
+
case sfp.NODE_TYPE_OPTION_VALUE_SEPARATOR:
|
|
208
|
+
return 'def';
|
|
209
|
+
default:
|
|
210
|
+
break;
|
|
221
211
|
}
|
|
222
212
|
return '+';
|
|
223
213
|
};
|
|
224
214
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
215
|
+
class ModeState {
|
|
216
|
+
constructor() {
|
|
217
|
+
this.astParser = new sfp.AstFilterParser({
|
|
218
|
+
interactive: true,
|
|
219
|
+
nativeCssHas: vAPI.webextFlavor.env.includes('native_css_has'),
|
|
220
|
+
});
|
|
221
|
+
this.astWalker = this.astParser.getWalker();
|
|
222
|
+
this.currentWalkerNode = 0;
|
|
223
|
+
this.lastNetOptionType = 0;
|
|
224
|
+
self.addEventListener('trustedSource', ev => {
|
|
225
|
+
const { trusted } = ev.detail;
|
|
226
|
+
this.astParser.options.trustedSource = trusted;
|
|
227
|
+
});
|
|
228
|
+
self.addEventListener('trustedScriptletTokens', ev => {
|
|
229
|
+
this.astParser.options.trustedScriptletTokens = ev.detail;
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
}
|
|
232
233
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
234
|
+
return {
|
|
235
|
+
state: null,
|
|
236
|
+
startState() {
|
|
237
|
+
if ( this.state === null ) {
|
|
238
|
+
this.state = new ModeState();
|
|
239
|
+
}
|
|
240
|
+
return this.state;
|
|
241
|
+
},
|
|
242
|
+
copyState(other) {
|
|
243
|
+
return other;
|
|
244
|
+
},
|
|
245
|
+
token(stream, state) {
|
|
236
246
|
if ( stream.sol() ) {
|
|
237
|
-
astParser.parse(stream.string);
|
|
238
|
-
if ( astParser.getFlags(sfp.AST_FLAG_UNSUPPORTED) !== 0 ) {
|
|
247
|
+
state.astParser.parse(stream.string);
|
|
248
|
+
if ( state.astParser.getFlags(sfp.AST_FLAG_UNSUPPORTED) !== 0 ) {
|
|
239
249
|
stream.skipToEnd();
|
|
240
250
|
return 'error';
|
|
241
251
|
}
|
|
242
|
-
if ( astParser.getType() === sfp.AST_TYPE_NONE ) {
|
|
252
|
+
if ( state.astParser.getType() === sfp.AST_TYPE_NONE ) {
|
|
243
253
|
stream.skipToEnd();
|
|
244
254
|
return 'comment';
|
|
245
255
|
}
|
|
246
|
-
currentWalkerNode = astWalker.reset();
|
|
247
|
-
} else if ( nodeHasError() ) {
|
|
248
|
-
currentWalkerNode = astWalker.right();
|
|
256
|
+
state.currentWalkerNode = state.astWalker.reset();
|
|
257
|
+
} else if ( nodeHasError(state) ) {
|
|
258
|
+
state.currentWalkerNode = state.astWalker.right();
|
|
249
259
|
} else {
|
|
250
|
-
currentWalkerNode = astWalker.next();
|
|
260
|
+
state.currentWalkerNode = state.astWalker.next();
|
|
251
261
|
}
|
|
252
262
|
let style = '';
|
|
253
|
-
while ( currentWalkerNode !== 0 ) {
|
|
254
|
-
style = colorFromAstNode(stream);
|
|
263
|
+
while ( state.currentWalkerNode !== 0 ) {
|
|
264
|
+
style = colorFromAstNode(state, stream);
|
|
255
265
|
if ( style !== '+' ) { break; }
|
|
256
|
-
currentWalkerNode = astWalker.next();
|
|
266
|
+
state.currentWalkerNode = state.astWalker.next();
|
|
257
267
|
}
|
|
258
268
|
if ( style === '+' ) {
|
|
259
269
|
stream.skipToEnd();
|
|
260
270
|
return null;
|
|
261
271
|
}
|
|
262
|
-
stream.pos = astParser.getNodeStringEnd(currentWalkerNode);
|
|
263
|
-
if ( astParser.isNetworkFilter() ) {
|
|
272
|
+
stream.pos = state.astParser.getNodeStringEnd(state.currentWalkerNode);
|
|
273
|
+
if ( state.astParser.isNetworkFilter() ) {
|
|
264
274
|
return style ? `line-cm-net ${style}` : 'line-cm-net';
|
|
265
275
|
}
|
|
266
|
-
if ( astParser.isExtendedFilter() ) {
|
|
276
|
+
if ( state.astParser.isExtendedFilter() ) {
|
|
267
277
|
let flavor = '';
|
|
268
|
-
if ( astParser.isCosmeticFilter() ) {
|
|
278
|
+
if ( state.astParser.isCosmeticFilter() ) {
|
|
269
279
|
flavor = 'line-cm-ext-dom';
|
|
270
|
-
} else if ( astParser.isScriptletFilter() ) {
|
|
280
|
+
} else if ( state.astParser.isScriptletFilter() ) {
|
|
271
281
|
flavor = 'line-cm-ext-js';
|
|
272
|
-
} else if ( astParser.isHtmlFilter() ) {
|
|
282
|
+
} else if ( state.astParser.isHtmlFilter() ) {
|
|
273
283
|
flavor = 'line-cm-ext-html';
|
|
274
284
|
}
|
|
275
285
|
if ( flavor !== '' ) {
|
|
@@ -279,9 +289,11 @@ CodeMirror.defineMode('ubo-static-filtering', function() {
|
|
|
279
289
|
style = style.trim();
|
|
280
290
|
return style !== '' ? style : null;
|
|
281
291
|
},
|
|
282
|
-
|
|
292
|
+
lineComment: '!',
|
|
283
293
|
};
|
|
284
|
-
});
|
|
294
|
+
})();
|
|
295
|
+
|
|
296
|
+
CodeMirror.defineMode('ubo-static-filtering', ( ) => uBOStaticFilteringMode);
|
|
285
297
|
|
|
286
298
|
/******************************************************************************/
|
|
287
299
|
|
|
@@ -328,7 +340,7 @@ function initHints() {
|
|
|
328
340
|
});
|
|
329
341
|
const proceduralOperatorNames = new Map(
|
|
330
342
|
Array.from(sfp.proceduralOperatorTokens)
|
|
331
|
-
|
|
343
|
+
.filter(item => (item[1] & 0b01) !== 0)
|
|
332
344
|
);
|
|
333
345
|
const excludedHints = new Set([
|
|
334
346
|
'genericblock',
|
|
@@ -563,7 +575,7 @@ function initHints() {
|
|
|
563
575
|
|
|
564
576
|
const getExtScriptletHints = function(cursor, line) {
|
|
565
577
|
const beg = cursor.ch;
|
|
566
|
-
const matchLeft =
|
|
578
|
+
const matchLeft = /#\+js\(([^,]*)$/.exec(line.slice(0, beg));
|
|
567
579
|
const matchRight = /^([^,)]*)/.exec(line.slice(beg));
|
|
568
580
|
if ( matchLeft === null || matchRight === null ) { return; }
|
|
569
581
|
const hints = [];
|
|
@@ -710,38 +722,38 @@ CodeMirror.registerHelper('fold', 'ubo-static-filtering', (( ) => {
|
|
|
710
722
|
if ( astParser.hasError() ) {
|
|
711
723
|
let msg = 'Invalid filter';
|
|
712
724
|
switch ( astParser.astError ) {
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
725
|
+
case sfp.AST_ERROR_UNSUPPORTED:
|
|
726
|
+
msg = `${msg}: Unsupported filter syntax`;
|
|
727
|
+
break;
|
|
728
|
+
case sfp.AST_ERROR_REGEX:
|
|
729
|
+
msg = `${msg}: Bad regular expression`;
|
|
730
|
+
break;
|
|
731
|
+
case sfp.AST_ERROR_PATTERN:
|
|
732
|
+
msg = `${msg}: Bad pattern`;
|
|
733
|
+
break;
|
|
734
|
+
case sfp.AST_ERROR_DOMAIN_NAME:
|
|
735
|
+
msg = `${msg}: Bad domain name`;
|
|
736
|
+
break;
|
|
737
|
+
case sfp.AST_ERROR_OPTION_BADVALUE:
|
|
738
|
+
msg = `${msg}: Bad value assigned to a valid option`;
|
|
739
|
+
break;
|
|
740
|
+
case sfp.AST_ERROR_OPTION_DUPLICATE:
|
|
741
|
+
msg = `${msg}: Duplicate filter option`;
|
|
742
|
+
break;
|
|
743
|
+
case sfp.AST_ERROR_OPTION_UNKNOWN:
|
|
744
|
+
msg = `${msg}: Unsupported filter option`;
|
|
745
|
+
break;
|
|
746
|
+
case sfp.AST_ERROR_IF_TOKEN_UNKNOWN:
|
|
747
|
+
msg = `${msg}: Unknown preparsing token`;
|
|
748
|
+
break;
|
|
749
|
+
case sfp.AST_ERROR_UNTRUSTED_SOURCE:
|
|
750
|
+
msg = `${msg}: Filter requires trusted source`;
|
|
751
|
+
break;
|
|
752
|
+
default:
|
|
753
|
+
if ( astParser.isCosmeticFilter() && astParser.result.error ) {
|
|
754
|
+
msg = `${msg}: ${astParser.result.error}`;
|
|
755
|
+
}
|
|
756
|
+
break;
|
|
745
757
|
}
|
|
746
758
|
return { lint: 'error', msg };
|
|
747
759
|
}
|
|
@@ -878,6 +890,11 @@ CodeMirror.registerHelper('fold', 'ubo-static-filtering', (( ) => {
|
|
|
878
890
|
ifendifSet.add(lineHandle);
|
|
879
891
|
ifendifSetChanged = true;
|
|
880
892
|
}
|
|
893
|
+
} else if ( marker.dataset.lint === 'error' ) {
|
|
894
|
+
if ( marker.dataset.error !== 'y' ) {
|
|
895
|
+
marker.dataset.error = 'y';
|
|
896
|
+
errorCount += 1;
|
|
897
|
+
}
|
|
881
898
|
}
|
|
882
899
|
if ( typeof details.msg !== 'string' || details.msg === '' ) { return; }
|
|
883
900
|
const msgElem = qs$(marker, '.msg');
|
|
@@ -1084,7 +1101,8 @@ CodeMirror.registerHelper('fold', 'ubo-static-filtering', (( ) => {
|
|
|
1084
1101
|
};
|
|
1085
1102
|
|
|
1086
1103
|
self.addEventListener('trustedSource', ev => {
|
|
1087
|
-
|
|
1104
|
+
const { trusted } = ev.detail;
|
|
1105
|
+
astParser.options.trustedSource = trusted;
|
|
1088
1106
|
});
|
|
1089
1107
|
|
|
1090
1108
|
self.addEventListener('trustedScriptletTokens', ev => {
|
|
@@ -242,6 +242,36 @@ class PSelectorOthersTask extends PSelectorTask {
|
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
+
class PSelectorShadowTask extends PSelectorTask {
|
|
246
|
+
constructor(task) {
|
|
247
|
+
super();
|
|
248
|
+
this.selector = task[1];
|
|
249
|
+
}
|
|
250
|
+
transpose(node, output) {
|
|
251
|
+
const root = this.openOrClosedShadowRoot(node);
|
|
252
|
+
if ( root === null ) { return; }
|
|
253
|
+
const nodes = root.querySelectorAll(this.selector);
|
|
254
|
+
output.push(...nodes);
|
|
255
|
+
}
|
|
256
|
+
get openOrClosedShadowRoot() {
|
|
257
|
+
if ( PSelectorShadowTask.openOrClosedShadowRoot !== undefined ) {
|
|
258
|
+
return PSelectorShadowTask.openOrClosedShadowRoot;
|
|
259
|
+
}
|
|
260
|
+
if ( typeof chrome === 'object' && chrome !== null ) {
|
|
261
|
+
if ( chrome.dom instanceof Object ) {
|
|
262
|
+
if ( typeof chrome.dom.openOrClosedShadowRoot === 'function' ) {
|
|
263
|
+
PSelectorShadowTask.openOrClosedShadowRoot =
|
|
264
|
+
chrome.dom.openOrClosedShadowRoot;
|
|
265
|
+
return PSelectorShadowTask.openOrClosedShadowRoot;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
PSelectorShadowTask.openOrClosedShadowRoot = node =>
|
|
270
|
+
node.openOrClosedShadowRoot || null;
|
|
271
|
+
return PSelectorShadowTask.openOrClosedShadowRoot;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
245
275
|
// https://github.com/AdguardTeam/ExtendedCss/issues/31#issuecomment-302391277
|
|
246
276
|
// Prepend `:scope ` if needed.
|
|
247
277
|
class PSelectorSpathTask extends PSelectorTask {
|
|
@@ -366,7 +396,6 @@ class PSelectorXpathTask extends PSelectorTask {
|
|
|
366
396
|
|
|
367
397
|
class PSelector {
|
|
368
398
|
constructor(o) {
|
|
369
|
-
this.raw = o.raw;
|
|
370
399
|
this.selector = o.selector;
|
|
371
400
|
this.tasks = [];
|
|
372
401
|
const tasks = [];
|
|
@@ -437,6 +466,7 @@ PSelector.prototype.operatorToTaskMap = new Map([
|
|
|
437
466
|
[ 'min-text-length', PSelectorMinTextLengthTask ],
|
|
438
467
|
[ 'not', PSelectorIfNotTask ],
|
|
439
468
|
[ 'others', PSelectorOthersTask ],
|
|
469
|
+
[ 'shadow', PSelectorShadowTask ],
|
|
440
470
|
[ 'spath', PSelectorSpathTask ],
|
|
441
471
|
[ 'upward', PSelectorUpwardTask ],
|
|
442
472
|
[ 'watch-attr', PSelectorWatchAttrs ],
|