Commit graph

3427 commits

Author SHA1 Message Date
Raymond Hill
ae4754415c
[mv3] Re-work dashboard: move list of rulesets in its own pane
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/229

Add "Filter lists" pane in dashboard

The DNR API now supports enabling 50 static rulesets put of a
maximum of 100 (instead of 10 out of 50 originally). Thus given
the potentially growing number of static rulesets, the available
stock rulesets has been moved to its own pane, with the following
improvements:
- Support sublists
- Support search

Aditionally, "RU AdList: Counter" has been added as a stock
ruleset.

Other changes:
- Do not re-evaluate regexes which failed validation
- Better reduce `removeparam` rules
2024-11-17 17:27:27 -05:00
Raymond Hill
947602d4fe
[mv3] Slightly mitigate DNR flaw re. removeparam filters
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/140

This will allow more specific `removeparam` filters to override
generic ones. This doesn't fix the related issue but should help
more specific `removeparam` filters to be applied.

Related webextensions issue:
https://github.com/w3c/webextensions/issues/468
2024-11-15 10:01:29 -05:00
Raymond Hill
4c299bfca9
Better handle unexpected conditions when deserializing
For example, when deserialzing from corrupted storage.
2024-11-14 10:32:15 -05:00
Raymond Hill
ff5fc61753
Add support for EasyList { remove: true } cosmetic filter syntax
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3451
2024-11-14 10:24:50 -05:00
Raymond Hill
335d947c10
Fix potential infinite async loop
Related issue:
https://bugzilla.mozilla.org/show_bug.cgi?id=1929326

As identified by @Rob--W:
https://bugzilla.mozilla.org/show_bug.cgi?id=1929326#c9

Truncated or otherwise corrupted asset content in extension storage
could lead to infinite async loop causing high CPU usage in uBO and
its workers.

Likely related to the issue of the asset content returned as
`undefined`:
652f178787/src/js/cachestorage.js (L98)
2024-11-11 15:17:19 -05:00
Raymond Hill
e5a088738d
Keep moving related scriptlets into separate files 2024-11-08 11:22:31 -05:00
Raymond Hill
34771d02d1
Fine tune visuals in document-blocked page
Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/issues/3206#issuecomment-2449415643
2024-10-31 11:18:42 -04:00
Raymond Hill
c07db7553d
Fix urlskip= with -blocked directive for blocked requests
Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/issues/3206#issuecomment-2441470631
2024-10-28 14:13:50 -04:00
Raymond Hill
20b54185fa
Offer ability to skip redirects in strict-blocked page
Related discussion:
https://github.com/uBlockOrigin/uBlock-issues/issues/3206#issuecomment-2439639215

If a strict-blocked page matches a `urlskip=` filter, the page
will show the user the destination URL as a result of applying the
`urlskip` filter should they choose to proceed with the
navigation.
2024-10-27 14:24:08 -04:00
Raymond Hill
d04dc4c767
Add -blocked directive to urlskip= option
Potentially breaking change:

`urlskip=` option will no longer apply by default to blocked network
requests, only network requests which are not blocked can be skipped
through a `urlskip=` filter.

The new `urlskip=` directive `-blocked` can be used to explicitly
allow a `urlskip=` filter to also apply to blocked network requests.

Example: given the filter `||example.com^`, the filter:

  ||example.com/path/to/tracker$urlskip=?url

Will not prevent strict-blocking when navigating to:

  https://example.com/path/to/tracker?url=https://example.org/

However, the filter:

  ||example.com/path/to/tracker$urlskip=-blocked ?url

Will cause the strict-blocking to be ignored and allow navigation
to proceed to the URL extracted as a result of applying the `urlskip=`
filter:

  https://example.org/

Related discussion:
https://github.com/uBlockOrigin/uBlock-issues/issues/3206#issuecomment-2439627386
2024-10-26 12:56:52 -04:00
Raymond Hill
2621c908c3
Remove 64:ff9b: as private network block
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3426
2024-10-22 19:49:29 -04:00
Raymond Hill
b3408a46d1
Fix spurious error message re. bootstrap() not being present
Need `?.` before parenthesis for optional chaining to apply on
method call.

Related commit:
https://github.com/gorhill/uBlock/commit/5133991f7e
2024-10-19 12:09:48 -04:00
Raymond Hill
d4f15ca635
[mv3] Fix regression in extended filtering with some lists
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/236

Regression from:
https://github.com/gorhill/uBlock/commit/58bfe4c846

Cosmetic- and scriptlet injection-based filters broke with filter
lists using AdGuard's `[$domain=/.../]` syntax.

Potentially affected filter lists:
- AdGuard Chinese
- AdGuard Turkish
2024-10-19 10:41:58 -04:00
Raymond Hill
32f27c5131
Ensure urlskip= redirects only to https: 2024-10-16 08:25:56 -04:00
Raymond Hill
ce9fc5dc14
Add support to urlskip= media resources
Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/issues/3206#issuecomment-2406777654
2024-10-12 08:52:05 -04:00
Raymond Hill
b8959dcca9
Comment 2024-10-11 09:04:23 -04:00
Raymond Hill
01eebffc1f
Add -uricomponent to urlskip= option
To unescape URI-encoded characters.

Related discussion:
https://github.com/uBlockOrigin/uBlock-issues/issues/3206#issuecomment-2406479971
2024-10-11 08:56:50 -04:00
Raymond Hill
e5d16a1883
Typo 2024-10-10 11:35:58 -04:00
Raymond Hill
9e3c978d55
Minor edit to comment 2024-10-10 11:31:57 -04:00
Raymond Hill
c86ed5287b
Add regex extraction transformation step to urlskip= option
Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/issues/3206#issuecomment-2403795984

The first capture group of the regex will be used as the result of the
transformation. Example:

||podtrac.com/pts/redirect.mp3/$urlskip=/podtrac\.com\/pts\/redirect\.mp3\/(.*?\.mp3\b)/ +https

If the regex is invalid, or if it fails to extract a first capture
group, no redirection will occur.
2024-10-10 11:11:07 -04:00
Raymond Hill
58bfe4c846
Add support to parse Adguard's [$domain=/.../] regex-based modifier
The modifier will be converted to one that is compatible with uBO, i.e.:

    [$domain=/^trgoals\d+\.xyz$/]##+js(set-constant, isShow, true)

Will parsed as equivalent of:

    /^trgoals\d+\.xyz$/##+js(set-constant, isShow, true)

Related issue:
https://github.com/AdguardTeam/FiltersCompiler/issues/204

Reference:
https://adguard.com/kb/general/ad-filtering/create-own-filters/#non-basic-domain-modifier
2024-10-08 19:19:08 -04:00
Raymond Hill
ec3852b745
Re-word: it's timing per request, not per call to SNFE.match()
A single request can require multiple calls to the static network
filtering engine (SNFE). The reported timing is the result of
going through *all* the required calls to SNFE. In effect, a
single call to SNFE.match() is a fraction of the reported timing.
2024-10-07 15:06:12 -04:00
Raymond Hill
c746633693
Validate result type of XPath expressions
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3403

To ensure XPath expressions not meant to return a nodeset are
discarded at compile time.
2024-10-06 14:27:55 -04:00
Raymond Hill
818cb2d801
Fix npm test suite
Related commits:
- https://github.com/gorhill/uBlock/commit/02cba63331
- https://github.com/gorhill/uBlock/commit/41693407b2
2024-10-06 11:15:08 -04:00
Raymond Hill
64b2086ba4
Add ability to lookup parameter name in urlskip=
Relate case:
https://github.com/uBlockOrigin/uBlock-issues/issues/3206#issuecomment-2395121619

Newly supported step: `&i`, meant to lookup a parameter's name at
position `i` (1-based). The parameter name will be used as the
URL (whereas `?` is meant to lookup a parameter's value).
2024-10-05 14:59:43 -04:00
Raymond Hill
02cba63331
Partially revert 4169340 2024-10-05 14:51:38 -04:00
Raymond Hill
6d2b3375f8
Mind that BroadcastChannel contructor can throw in Firefox
BroadcastChannel constructor throws in Firefox when Enhanced
Tracking Protection is set to "strict".

This behavior could cause scriptlet injection to wholly break
when uBO's logger was opened, as BroadcastChannel() is used
by scriptlets to report information to the logger.

This commit ensures that exceptions from BroadcastChannel
constructor are properly handled.

The scriptlets will fall back to report at the console should
they be unable to report to the logger through BroadcastChannel.
2024-10-05 12:42:30 -04:00
Raymond Hill
41693407b2
Fix npm test suite
Ensure serialization returns copy of data rather than live
references to data. This allows to immediately deserialize() the
result of serialize().

Also, adjust code to modified behavior of filterQuery().
2024-10-05 11:32:59 -04:00
Raymond Hill
5133991f7e
Fix spurious error in content script
No guarantee vAPI.bootstrap will still be present when callback
executes.
2024-10-04 08:57:10 -04:00
Ilya (Marshal)
9f4123a4e2
Fix AdGuard Knowledge Base URLs 2024-10-04 11:27:24 +02:00
Raymond Hill
73ce4e6bcf
Blocking large media elements also prevents autoplay, regardless of size
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3394

When the "No large media elements" per-site switch is toggled on,
it will also act to prevent autoplay of video/audio media, regardless
of their size. This also works for xhr-based media streaming.

If blocking by size is not desirable while blocking autoplay is
desired, one can toggle on "No large media elements" switch while
setting "Block media elements larger than ..." to a very high value.
2024-10-02 13:39:36 -04:00
Raymond Hill
6cac645830
Do not discard !#else block for unknown preprocessor tokens
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3393
2024-09-30 10:16:48 -04:00
Raymond Hill
e81e70937f
Add ability to decode base64 in urlskip=
Related case:
https://github.com/uBlockOrigin/uAssets/issues/25467

New step: `-base64`
Purpose: to decode base64-encoded output of previous step
2024-09-29 10:51:56 -04:00
Raymond Hill
aec0bd39e3
Fix images not properly downloading on click
Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/issues/1670#issuecomment-2372048056

The issue affected images supporting `srcset` attribute without
the presence of `src` attribute. This commit takes add fallback
onto `srcset` attribute when the `src` attribute is not present.
2024-09-26 13:27:06 -04:00
Raymond Hill
bd6d9c3296
Fix benchmark quirk related to new ipaddress option 2024-09-22 11:16:57 -04:00
Raymond Hill
e7c783cefa
Code review for new DNS cache code
Prevent discarding DNS cache entries looked up during a passive
read. Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/discussions/3376#discussioncomment-10711948

Add advanced setting `dnsCacheTTL` to control the TLL (in
seconds) of DNS cache entries. Default to 600 (10 minutes).
2024-09-22 10:02:45 -04:00
Raymond Hill
1c97ca10fc
Minor code review
Use class fields to declare/initialize instance and static
properties.
2024-09-21 12:41:57 -04:00
Raymond Hill
59487b189c
Add +https directive to urlskip= option
When present, the `+https` directive will force the protocol of the
resulting URL to be `https:`.

Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/issues/3206#issuecomment-2363392357
2024-09-20 08:15:31 -04:00
Raymond Hill
4f181b0bc5
Support matching against list of IP addresses
Related commit:
6acf97bf51
2024-09-20 07:20:55 -04:00
Raymond Hill
760b2ffce6
Add advanced setting dnsResolveEnabled
Default to `true`.

Set to `false` to wholly disable calls to `dns.resolve()` (Firefox-
only). Disabling calls to `dns.resolve()` will prevent cname-uncloaking
and will limit ability to enforce `ipaddress` filter option.
2024-09-19 08:43:54 -04:00
Raymond Hill
e98fdeb0a5
Mind urlskip= in built-in benchmark 2024-09-18 12:24:04 -04:00
Raymond Hill
0a6dc47a72
Fix contextual menu quirks
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3382
2024-09-18 11:33:31 -04:00
Raymond Hill
62d74d4f1d
Add trailing wildcard syntax to ipaddress= option
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3381
2024-09-18 09:56:46 -04:00
Raymond Hill
266ec4894b
New static network filter option urlskip=
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3206

The main purpose is to bypass URLs designed to track whether a user
visited a specific URL, typically used in click-tracking links.

The `urlskip=` option ...

- ... is valid only when used in a trusted filter list
- ... is enforced only on top documents
- ... is enforced on both blocked and non-blocked documents
- ... is a modifier, i.e. it cannot be used along with other
      modifier options in a single filter

The syntax is `urlskip=[steps]`, where steps is a space-separated
list of extraction directives detailing what action to perform on
the current URL.

The only supported directive in this first commit is `?name`,
which purpose is to extract the value of a named URL parameter
and use the result as the new URL. Example:

  ||example.com/path/to/tracker$urlskip=?url

The above filter will cause navigation to

  https://example.com/path/to/tracker?url=https://example.org/

to automatically bypass navigation to `example.com` and navigate
directly to

  https://example.org/

It is possible to recursively extract URL parameters by using
more than one directive, example:

  ||example.com/path/to/tracker$urlskip=?url ?to

More extraction capabilities may be added in the future.
2024-09-15 09:17:19 -04:00
Raymond Hill
4b285c0593
Dynamically load DNR conversion module on-demand
DNR conversion module is a dev tool, no point loading it by
default. This was done this way because in a distant past uBO
had to be compatible with browsers not supporting dynamically
loaded modules.

Currently all supported browser versions support dynamically
loaded modules.
2024-09-14 12:13:47 -04:00
Raymond Hill
c265e849e0
Fetch and cache cname of collated hostnames in page store
Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/discussions/3376
2024-09-14 11:50:10 -04:00
Raymond Hill
f936dfa648
Fix potential failure to unregister scriptlet
In Firefox-specific contentScripts API used to register
scriptlets. This could potentially occurs when there are
registrations pending during a reload of filter lists.
2024-09-14 09:32:37 -04:00
Raymond Hill
41d49921c8
Minor code review 2024-09-14 09:20:54 -04:00
Raymond Hill
5e6f78a902
Fix regression re. mp4 filter option
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3375
2024-09-14 00:10:34 -04:00
Raymond Hill
6acf97bf51
Rewrite cname uncloaking code to account for new ipaddress= option
This commit makes the DNS resolution code better suited for both
filtering on cname and ip address. The change allows early availability
of ip address so that `ipaddress=` option can be matched at
onBeforeRequest time.

As a result, it is now possible to block root document using
`ipaddress=` option -- so long as an ip address can be extracted
before first onBeforeRequest() call.

Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/2792

Caveat
------

the ip address used is the first one among the list of ip
addresses returned by dns.resolve() method. There is no way for uBO
to know which exact ip address will be used by the browser when
sending the request, so this is at most a best guess. The exact IP
address used by the browser is available at onHeadersReceived time,
and uBO will also filter according to this value, but by then the
network request has already been sent to the remote server.

Possibly a future improvement would make available the whole list
of ip addresses to the filtering engine, but even then it's impossible
to know with certainty which ip address will ultimately be used by the
browser -- it is entirely possible that the ip address used by the
browser might not be in the list received through dns.resolve().
2024-09-12 11:19:57 -04:00
Raymond Hill
099b9852cd
Code review for ipaddress= filter option
If an IP address can be extracted from the hostname portion of
a URL, the IP address matching will be performed at onBeforeRequest()
time.

Regardless, IP address matching will subsequently always be performed
at onHeadersReceived() time as the request details at that point
contain a reliable IP address value on supported platforms (Firefox-
only as of now).

The `cap_ipaddress` now evaluates to `true` in Chromium-based
browsers. Even though these browsers are unable to provide reliable
IP address value at onHeadersReceived() time, they can still
perform IP address matching for IP address extracted from hostname
portion of a URL.
2024-09-11 09:56:44 -04:00
Raymond Hill
d5f14ffa32
Avoid using dns.resolve() for proxied DNS resolution
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/1743
2024-09-10 14:58:40 -04:00
Raymond Hill
401d2e8ea9
[mv3] Mind unsupported header=/ipaddress options in DNR API
Properly report unsupported `header=` and `ipaddress=` option in
log file.

`header=` support may become possible soon with Chromium 128
introducing blocking according to response headers content.
2024-09-10 11:50:09 -04:00
Raymond Hill
030d7334e4
Add support for lan/loopback values to ipaddress= option
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/1070
2024-09-10 11:11:11 -04:00
Raymond Hill
c6dedd253f
New static network filter option ipaddress=
The purpose is to block according to the ip address of a network
request. In the current implementation, the filter option can only
be enforced at onHeadersReceived time.

The new filter option cannot be enforced in Chromium-based browsers
since the ip address of network requests is available only at
onResponseStarted time, which is not blocking.

The value assigned to `ipaddress` can either be a plain string which
must match exactly a given ip address, or a regex which will be
matched against the ip address.

The `ipaddress` option can only be enforced when the extension
framework does provide a valid ip address in a onHeadersReceived
listener. For instance, cached resources do not have a valid ip
address and thus can't be a match to `ipaddress` option.

Example:

  *$script,ipaddress=93.184.215.14
2024-09-09 09:35:23 -04:00
Raymond Hill
20115697e5
Add ability to quote static network option values
For the sake of convenience for filter list maintainers, this commit
add ability to quote static network option values, so as to avoid the
need to escape commas when parser ambiguity arises.

The quotes can be `"`, `'`, or backticks.

Example, the following filter requires escaping commas:

  example.com$xhr,replace=/"loremIpsum.*?([A-Z]"\}|"\}{2\,4})\}\]\,//,1p

Can be now rewritten with no need to escape when using quotes:

  example.com$xhr,replace='/"loremIpsum.*?([A-Z]"\}|"\}{2,4})\}\],//',1p
2024-09-08 10:01:13 -04:00
Raymond Hill
89f02098fd
Apply CSP/PP injections to object resources
Related feedback:
https://old.reddit.com/r/uBlockOrigin/comments/1f84tc5/
2024-09-04 11:28:45 -04:00
Raymond Hill
91125d29cf
Add support for application/dash+xml in replace= option
Related feedback:
https://github.com/uBlockOrigin/uAssets/issues/25164#issuecomment-2326358453
2024-09-03 10:14:15 -04:00
Raymond Hill
b7ed3b45ed
Add ability to directly evaluate static network filtering engine
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3362

There used to be a way to test URL against the network filtering engine,
but this was removed in a distant past during refactoring.

The ability has been brought back through uBO's own developer tools,
accessible through the _More_ button in the _Support_ pane in the
dashboard.

To query the static network filtering engine, enter the following
in the text editor:

snfe?url-to-test [type] [url-of-context]

`snfe?` is a prompt indicating the intent to query the static network
filtering engine.

At a minimum there must be a URL to test.

Optionally the type of the resource to match, default to `xhr` if
none specified. Also optionally, the context from within which the
request is made. Example:

Enter:
snfe?https://www.google-analytics.com/analytics.js

Result:
url: https://www.google-analytics.com/analytics.js
blocked: ||google-analytics.com^

Enter:
snfe?https://www.google-analytics.com/analytics.js script

Result:
url: https://www.google-analytics.com/analytics.js
type: script
blocked: ||google-analytics.com^
modified: ||google-analytics.com/analytics.js$script,redirect-rule=google-analytics_analytics.js:5

Enter:
snfe?https://example.com/

Result:
url: https://example.com/
not blocked

Enter:
snfe?https://example.com/ ping

Result:
url: https://example.com/
type: ping
blocked: *$ping,3p
2024-09-02 19:32:56 -04:00
Raymond Hill
59a9a43a83
Add noop resources for redirect purpose
Related discussion:
https://github.com/uBlockOrigin/uAssets/issues/25014#issuecomment-2307982886
2024-08-24 12:11:35 -04:00
Raymond Hill
09fef54959
[mv3] Ensure redirect has priority overblock
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/187#issuecomment-2301450418
2024-08-21 10:56:18 -04:00
Raymond Hill
6891037758
[mv3] Fix exception filters not overriding redirect filters
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/185
2024-08-17 11:00:42 -04:00
Raymond Hill
1cb660b94e
Fix plain exceptions not overriding block filters using header= option
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3347
2024-08-17 10:11:18 -04:00
Raymond Hill
c7b54af0a2
[mv3] Add minimal ability to diagnose ruleset issue
A new icon has been added to the popup panel, to open a popup
window with a terse list of DNR events for the current tab, in
reverse chronological order (most recent DNR event appears at
the top).

The new ability is available only when the extension is sideloaded,
as per `declarativeNetRequestFeedback` documentation. Ref:
https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest#event-onRuleMatchedDebug

Purposefully minimal, so as to have something rather than nothing
when having to diagnose filtering issue with the DNR API. Example:
https://github.com/uBlockOrigin/uBOL-home/issues/156

The content of the popup window does not dynamically update, force
a refresh (F5) to get the most recent DNR events. This might be
improved in the future.

The DNR event buffer is not persisted, so the buffer is empty when
service worker is restarted. This might be improved in the future
by using session storage API.

There is no output filtering ability in this first draft. This
might be improved in the future.

DNR rules are reported. The filter from which a DNR rule
originates is not reported. Given that the rulesets are optimized
after conversion from original filter lists to reduce the DNR rule
count, this is unlikely to ever be possible.
2024-07-29 14:54:46 -04:00
Raymond Hill
c90f4933df
Fix CSP/PP header injection in non-document resources
Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/issues/229#issuecomment-2220354261
https://old.reddit.com/r/uBlockOrigin/comments/1dz6du7/

Regression from:
https://github.com/gorhill/uBlock/commit/7c3e060c01
2024-07-10 11:41:55 -04:00
Raymond Hill
b98ef8141a
Fix CSP injection in non-document resources
Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/issues/229#issuecomment-2220354261
https://old.reddit.com/r/uBlockOrigin/comments/1dz6du7/

Regression from:
https://github.com/gorhill/uBlock/commit/7c3e060c01
2024-07-10 10:09:59 -04:00
Raymond Hill
9569969b55
Fix distance calculation in picker
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3279
2024-07-05 10:20:33 -04:00
Raymond Hill
c154aaa69c
Fix bad serialization of Date objects
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3283
2024-06-28 13:40:19 -04:00
Raymond Hill
896737d098
Fix race condition when loading redirect/scriptlet resources
Related feedback:
https://github.com/uBlockOrigin/uAssets/issues/23806#issuecomment-2190491767
2024-06-26 11:00:50 -04:00
Raymond Hill
47b985a056
Fix :matches-prop() operator when no value provided 2024-06-20 09:21:43 -04:00
Raymond Hill
aca7674bac
Add :matches-prop() pseudo CSS operator
`subject:matches-prop(arg)`

Description: Allows to select an element by a property name (or chain of
properties), and optionally the property value.

Chainable: Yes.

`subject`: Can be a plain CSS selector, or a procedural cosmetic filter.

`arg`: A declaration in the form `chain=value`, where `chain` is a dot-
  separated string for the target property, and `value` is the optional
  property value to match. `value` can be literal text or literal regular
  expression. When no `value` is declared, the operator only tests for
  the presence of the target property

Example:

  example.org##div:matches-prop(imanad)
  example.org##img:matches-prop(naturalWidth=160)
2024-06-19 19:06:53 -04:00
Raymond Hill
d5208ee5dd
Add isodate as available placeholder for auto-comment
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3265
2024-06-07 08:52:30 -04:00
Raymond Hill
8f81833efc
Classify generic cosmetic filters with comma as highly generic
Related discussion:
https://old.reddit.com/r/uBlockOrigin/comments/1d3ezoy/
2024-06-01 10:46:18 -04:00
Raymond Hill
82a3992896
Raise max buffer size for response body filtering
Related discussion:
https://github.com/uBlockOrigin/uBlock-discussions/discussions/891
2024-06-01 10:42:14 -04:00
Raymond Hill
8ea1bac80b
Trim end of class tokens in generic cosmetic filtering's surveyor
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3257
2024-05-28 18:42:06 -04:00
Raymond Hill
3e7eca364b
Make logger console filter expression case-insensitive 2024-05-14 11:58:53 -04:00
Raymond Hill
0e6d607484
Add checksum validation when loading trie buffers in selfie
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3217#issuecomment-2103048654
2024-05-09 21:29:24 -04:00
Raymond Hill
c098eb8625
Fix potential corruption when reading serialized data
Corrpution would occur when reading back serialized data which
contained multiple references to same instance of an object.

The issue could manifest when reading cache storage-related
data from the browser storage API, since the serializer is not
used when reading from indexedDB. Private/incognito mode
fall back on using browser storage API as cache storage.

Off the top of my head, I think the following conditions all
together could result in high likelihood of malfunction caused
by improperly deserializing data at launch time:

- Load from a selfie
- Selfie created after uBO ran for a while
- Selfie loaded from browser storage API (not the case by
  default)

Possibly related to reports of uBO malfunctioning:
https://github.com/uBlockOrigin/uBlock-issues/issues/3217#event-12686416838
2024-05-02 20:21:47 -04:00
Raymond Hill
e891465775
Add more console logging for cache storage code 2024-05-02 20:15:46 -04:00
Raymond Hill
4c530b732f
Adjust element picker visuals
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3220
2024-04-22 06:08:49 -04:00
Raymond Hill
539938969d
Ensure reading last data written
Related discussion:
https://github.com/uBlockOrigin/uBlock-discussions/discussions/888
2024-04-13 16:03:17 -04:00
Raymond Hill
6e61a13e40
Open details pane only when clicking non-interactive elements
Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/discussions/3202
2024-04-11 11:12:37 -04:00
Raymond Hill
3b4f02db21
Add a console pane to the logger
The console pane will report logging information reported by
scriptlets.

Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/discussions/3096#discussioncomment-8748932

Plus other changes.
2024-04-10 11:27:40 -04:00
Raymond Hill
c0b56cffab
Improve suggested candidate filters in element picker
Additionally, fix eslint warnings.
2024-04-10 10:28:11 -04:00
Raymond Hill
581c2824d0
Minor code review 2024-04-09 20:05:53 -04:00
Raymond Hill
a5f6c35bb0
Fix bad date computation in auto-comment feature
Related feedback:
https://old.reddit.com/r/uBlockOrigin/comments/1bxz6oi/
2024-04-09 12:15:03 -04:00
Raymond Hill
c223a8cd39
Fix regression breaking import of file:// lists
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3199
2024-04-08 20:48:58 -04:00
Raymond Hill
defd68ef7d
Fix stray lists in redesigned cache storage
Related issue:
https://old.reddit.com/r/uBlockOrigin/comments/1bxzwf9/

These stray filter lists prevents uBO from properly updating
those filter lists.
2024-04-07 18:21:37 -04:00
Raymond Hill
4533f0e37e
Fix eslint warnings 2024-04-03 10:22:57 -04:00
Raymond Hill
08aa3ebe10
Fix eslint warnings 2024-03-31 13:35:11 -04:00
Raymond Hill
3919a16bb8
Do not block large media resources when loaded as top-level document
Related issues:
- https://github.com/uBlockOrigin/uBlock-issues/issues/1201
- https://github.com/uBlockOrigin/uBlock-issues/issues/3184

Top-level media resources are not meant to be blocked, see:
https://github.com/gorhill/uBlock/issues/2813#issuecomment-317177212
2024-03-26 12:44:08 -04:00
Raymond Hill
90ab1a76ab
Properly manage cache storage regarding managed user filters
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3177
2024-03-23 13:28:18 -04:00
Raymond Hill
5d60df4b1b
Fix bad eslint rule + minor code review
`webext.js` module needs to be explicitly imported.

Added time-based heuristic to decide when a webpage loses
communication with background process.
2024-03-22 14:46:57 -04:00
Raymond Hill
61e916901b
Add concept of "preferred" lists
Preferred lists will be visually listed above other lists.
2024-03-19 11:51:03 -04:00
Raymond Hill
0cb6170584
Fix various quirks with "My filters" trust-related checkbox
Simplify code to force syntax highlighter and linter to reprocess
the content when toggling trust-related checkbox.

Fix issue with using `mousedown` on searchbar widgets, related
feedback:
https://github.com/uBlockOrigin/uBlock-issues/issues/3161#issuecomment-2002112770

Fix issues reported by eslint.
2024-03-19 10:59:15 -04:00
Imre Kristoffer Eilertsen
499c80bd8a
Fixed Belgian and Nepali flags for Windows Chromium users (#3914)
* Added flagcode matching for Belgium specifically

* Added a transparent Nepal flag
2024-03-17 10:42:20 -04:00
Raymond Hill
94de4e266e
Fix popup panel when embedded in logger
Regression from commit:
https://github.com/gorhill/uBlock/commit/0d77ccded7

Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/discussions/2419#discussioncomment-8759449
2024-03-17 09:36:39 -04:00
Raymond Hill
3f7374c1f1
Mind that tabs.sendMessage can throw 2024-03-17 09:34:05 -04:00
Raymond Hill
1cb190e102
Append wildcard character only when filter starts & ends with /
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/1088
2024-03-14 13:32:36 -04:00
Raymond Hill
65b6753c69
Simpler to use an extra property than to use a new assets.json 2024-03-14 10:20:25 -04:00
Raymond Hill
8165067b9b
Act on default mouse button 2024-03-14 09:14:15 -04:00
Raymond Hill
52b46eb98b
Add procedural operator :shadow() -- status is experimental
For internal use by filter list maintainers, do not open issues
about this. Left undocumented on purpose.

This new procedural operator allows to target elements in the
shadow root of an element.

subject:shadow(arg)

- Description: Look-up matching elements inside the shadow root (if
  present) of _subject_.
- Chainable: Yes
- _subject_: Can be a plain or procedural selector.
- _arg_: A plain or a procedural selector for the elements to target
  inside the shadowroot.

Example:

..##body > div:not([class]):shadow(div[style]):has(:shadow([data-i18n^="#ad"]))
2024-03-13 14:28:53 -04:00
Raymond Hill
6f54317bdf
Keep search input field visuals consistent
Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/issues/3161#issuecomment-1992340127
2024-03-13 10:57:56 -04:00
Raymond Hill
df5a6d1fcc
Constant name consistency 2024-03-13 10:03:05 -04:00
Raymond Hill
664dd95700
Support maximizing editor to viewport size
Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/issues/3161#issuecomment-1991066618
2024-03-12 11:25:50 -04:00
Raymond Hill
633135745f
Need new assets.son file for next release
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3154
2024-03-11 18:41:18 -04:00
Raymond Hill
461810d93c
Rename scuo- to s14e- 2024-03-11 15:40:50 -04:00
Raymond Hill
0d77ccded7
Add advanced setting to force popup panel orientation
Related discussion:
https://github.com/uBlockOrigin/uBlock-issues/discussions/2419#discussioncomment-8746679

Name: `popupPanelOrientation`

Supported values:
- `unset` (default): uBO decides whichever mode is best
- `landscape`: force popup panel to landscape mode
- `portrait`: force popup panel to portrait mode
2024-03-11 13:01:51 -04:00
Raymond Hill
46ea5519c1
Add checkboxes to "My filters" pane
Related issues:
- https://github.com/uBlockOrigin/uBlock-issues/issues/3161
- https://github.com/uBlockOrigin/uBlock-issues/discussions/2895#discussioncomment-8504374

Two checkboxes have been added to the "My filters "pane:

1. A checkbox to wholly disable/enable "My filters". This is equivalent
   to the checkbox for "My filters" in "Filter lists" pane.

2. A checkbox to enable/disable the trustworthiness of the content
   of "My filters". Default to untrusted.

Since toggling these checkboxes requires reloading all filter lists,
their new state must be committed through the "Apply changes" button.

Additionally: a "book" icon has been added to the top-right of the
dashboard, which is a link to the wiki according to whichever pane is
currently active.
2024-03-11 11:39:31 -04:00
Raymond Hill
4f6fa840c3
Use 100svh everywhere 100vh is used
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3058
2024-03-06 08:45:49 -05:00
Raymond Hill
63acdcbdeb
Assume UTF-8 when no encoding can be looked up.
This will make HTML filtering and `replace=` filter option less
likely to be bypassed by uBO, as the body response filterer
previously required an encoding to be expressly declared before
acting on the response body.

UTF-8 usage is currently reported as ~98.2%:
https://w3techs.com/technologies/history_overview/character_encoding
2024-03-05 11:11:42 -05:00
Raymond Hill
04fead8d8a
Group lists with unknown group to special section
Related issue:
https://old.reddit.com/r/uBlockOrigin/comments/1b6tad0
2024-03-05 08:02:55 -05:00
Raymond Hill
395fa7197b
Reduce TTL of serializer workers 2024-03-05 07:27:02 -05:00
Raymond Hill
238724eed1
Fix looking-up unexisting sections in "Filter lists" pane
Related feedback:
https://old.reddit.com/r/uBlockOrigin/comments/1b6tad0/i_updated_to_the_new_dev_build_1561b10_and_now/
2024-03-04 23:57:47 -05:00
Raymond Hill
a557f62112
Support aborting "Pick" mode in element picker
This allows a user to go back to the previous selection after
entering interactive "Pick" mode.
2024-03-03 20:08:15 -05:00
Raymond Hill
0f4e50db07
Remove sections with no lists in "Filter lists" pane
Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/issues/3154#issuecomment-1975413427
2024-03-03 20:05:45 -05:00
Raymond Hill
21a76e32a1
Add "Social widgets", "Cookie notices" sections in "Filter lists" pane
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3154
2024-03-03 15:29:38 -05:00
Raymond Hill
270040d466
Fix disabled state of new benchmark buttons 2024-03-03 13:46:29 -05:00
Raymond Hill
7f68c62f23
Remove obsolete built-in trusted directives
Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/issues/3101#issuecomment-1974922229
2024-03-02 18:02:43 -05:00
Raymond Hill
6266c4718d
Move "Quit" button to top bar in element picker
Additionally:

- Removed auto fade out of dialog when mouse does not hover the
  dialog.
- Added a minimize/maximize button in top bar

Related issue:
- https://github.com/uBlockOrigin/uBlock-issues/issues/55
2024-03-02 16:45:03 -05:00
Raymond Hill
a0a6ae0d0c
Rename module-scoped classes for better distinction in profiling data 2024-03-02 09:41:12 -05:00
Raymond Hill
7ab7104a54
Clicking again currently inspected row will close the dialog 2024-03-02 09:37:15 -05:00
Raymond Hill
7a768e7b1a
No longer disable generic cosmetic filters by default on mobile
As discussed with filter list maintainers.
2024-03-02 08:52:42 -05:00
Raymond Hill
96704f2fda
Make asset updater compatible with non-persistent background page
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/2969

Additionally, modified default timing values for asset updater and
selfie creation.
2024-03-01 19:52:55 -05:00
Raymond Hill
80b66c849a
Add more benchmark tools to devtool page 2024-03-01 17:26:21 -05:00
Raymond Hill
e02ea69c86
Add advanced setting requestStatsDisabled
To disable collating global blocked/allowed counts.

Boolean, default to `false`.

Setting to `true` will prevent uBO from loading/saving global
blocked/allowed counts, and in such case the "Blocked since
install" count instead reflects the count since uBO launched.

Setting back to `false` will cause the counts to resume from
last time they were saved.

Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3100
2024-02-29 19:53:06 -05:00
Raymond Hill
801d6500b0
Fix idbStorage.keys()
Related commit:
https://github.com/gorhill/uBlock/commit/d4efaf020b
2024-02-29 13:28:04 -05:00
Raymond Hill
059e4e5e28
Imrpove saving request stats for non-persistent background page
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/2969

Related previous commit:
https://github.com/gorhill/uBlock/commit/5a338b7210

The save-to-storage period is back to being around ~4 minutes, but
now browser.storage.session API is used to keep track of request
stats should the extension be suspended before the period elapse.
2024-02-29 11:43:51 -05:00
Raymond Hill
d7154de9e9
Minor renaming of variables 2024-02-29 09:18:07 -05:00
Raymond Hill
ba95d2bc49
Minor code review of last commit
Related commit:
https://github.com/gorhill/uBlock/commit/2b16a10b82
2024-02-29 08:37:44 -05:00
Raymond Hill
2b16a10b82
First lookup matching stock lists when importing URLs
Related discussion:
https://github.com/MasterKia/PersianBlocker/discussions/224
2024-02-29 07:51:08 -05:00
Raymond Hill
b0067b79d5
Reset filter lists in worker when creating filters via "Block element"
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/968
2024-02-28 18:53:27 -05:00
Raymond Hill
d4efaf020b
Make indexedDB to default fast cache by default
Turns out it's currently the fastest among the three currently
implemented (Cache, browser.storage.session, indexedDB). Possibly
because indexedDB can natively persist structure-cloneable data,
something uBO can now benefit with the work on abstracting away
the limitations of various storages being limited to persist only
text or JSON data.

Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/2969
2024-02-28 17:31:29 -05:00
Raymond Hill
9862446b10
Various fine tuning code of recent commits 2024-02-28 13:32:24 -05:00
Raymond Hill
3c299b8632
Remove trusted-source requireement when using badfilter
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3136
2024-02-28 12:14:59 -05:00
Raymond Hill
79ea85dbc4
More fine tuning of cache storage-related code 2024-02-27 21:47:06 -05:00
Raymond Hill
b0fc5d3d21
Fix race condition when saving cache registry
Related to new cache storage code.
2024-02-27 18:41:10 -05:00
Raymond Hill
7590c0711d
Fine-tune cache storage related-code
Related discussion:
https://github.com/uBlockOrigin/uBlock-discussions/discussions/876

Related commit:
086766a924
2024-02-27 15:04:05 -05:00
Raymond Hill
086766a924
Redesign cache storage
In uBO, the "cache storage" is used to save resources which can
be safely discarded, though at the cost of having to fetch or
recompute them again.

Extension storage (browser.storage.local) is now always used as
cache storage backend. This has always been the default for
Chromium-based browsers.

For Firefox-based browsers, IndexedDB was used as backend for
cache storage, with fallback to extension storage when using
Firefox in private mode by default.

Extension storage is reliable since it works in all contexts,
though it may not be the most performant one.

To speed-up loading of resources from extension storage, uBO will
now make use of Cache API storage, which will mirror content of
key assets saved to extension storage. Typically loading resources
from Cache API is faster than loading the same resources from
the extension storage.

Only resources which must be loaded in memory as fast as possible
will make use of the Cache API storage layered on top of the
extension storage.

Compiled filter lists and memory snapshot of filtering engines
(aka "selfies") will be mirrored to the Cache API storage, since
these must be loaded into memory as fast as possible, and reloading
filter lists from their compiled counterpart is a common
operation.

This new design makes it now seamless to work in permanent private
mode for Firefox-based browsers, since extension storage now
always contains cache-related assets.

Support for IndexedDB is removed for the time being, except to
support migration of cached assets the first time uBO runs with
the new cache storage design.

In order to easily support all choices of storage, a new serializer
has been introduced, which is capable of serializing/deserializing
structure-cloneable data to/from a JS string.

Because of this new serializer, JS data structures can be stored
directly from their native representation, and deserialized
directly to their native representation from uBO's point of view,
since the serialization occurs (if needed) only at the storage
interface level.

This new serializer simplifies many code paths where data
structures such as Set, Map, TypedArray, RegExp, etc. had to be
converted in a disparate manner to be able to persist them to
extension storage.

The new serializer supports workers and LZ4 compression. These
can be configured through advanced settings.

With this new layered design, it's possible to introduce more
storage layers if measured as beneficial (i.e. maybe
browser.storage.session)

References:
- https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/local
- https://developer.mozilla.org/en-US/docs/Web/API/Cache
- https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm
2024-02-26 16:50:11 -05:00
Raymond Hill
2262a129ec
Don't match network filter-derived regexes against non-network URIs
Context: element picker

Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3142
2024-02-26 16:08:12 -05:00
Raymond Hill
439a059cca
Remove obsolete trusted directives
All supported browsers now have the concept of priviledged
pages, there is no need for these extra trusted-site directives.

Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3101
2024-02-19 11:06:39 -05:00
Raymond Hill
9666eeb9cf
Do not treat selectors as "common" when char 0x09-0x0D are in attr value 2024-02-17 20:25:41 -05:00
Raymond Hill
be3e366019
Escape special whitespace characters in attribute values
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3127

Reference:
https://mathiasbynens.be/notes/css-escapes
2024-02-17 19:57:44 -05:00
Raymond Hill
2a5a444482
Mind that multiple uritransform may apply to a single request
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3125
2024-02-15 14:34:50 -05:00
Raymond Hill
41511726dc
Further improve detection of forbidden report-xxx usage in filters
As per feedback from https://github.com/distinctmondaylila

Related commit:
https://github.com/gorhill/uBlock/commit/db5656f607
2024-02-14 14:48:31 -05:00
Raymond Hill
21ec5a277c
Fix improper invalidation of valid uritransform exception filters
Related feedback:
https://github.com/uBlockOrigin/uBlock-discussions/discussions/831#discussioncomment-8461847
2024-02-14 14:30:05 -05:00
Raymond Hill
7b138b58c6
Fix potential exfiltration of browsing history by a rogue list author through permissions=
As with `csp=` option, reporting capabilities need to be taken
into account with `permissions=` option.

Reference:
https://github.com/w3c/webappsec-permissions-policy/blob/main/reporting.md

This commit ensures that `permissions=` option using `report-to` are
marked as invalid.
2024-02-13 15:09:38 -05:00
Raymond Hill
db5656f607
Fix potential exfiltration of browsing history by a rogue list author through csp=
As reported internally to ubo-security by https://github.com/distinctmondaylila

One issue is a regression from the rewriting of the static filtering
parser in version 1.47.0, specifically the following commit:
https://github.com/gorhill/uBlock/commit/8ea3b0f64c
The existing regex was no longer suitable to properly detect
some usage of `report-xxx` in the rwritten parser.

Another issue which predates 1.47.0 is that the regex used for
validation was case-sensititive, while the `report-uri` directive
can be written using uppercase letters, i.e. `Report-uri`.
2024-02-13 14:35:08 -05:00
Raymond Hill
28e1424058
Fall back to console if log info can't be relayed to logger 2024-02-02 09:24:24 -05:00
Raymond Hill
b0122bb9fc
Do not rely on vAPI presence in logger broadcast code
Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/discussions/3096#discussioncomment-8339494
2024-02-02 09:15:09 -05:00
Raymond Hill
59d46ecd78
Postprocess selections only from from logger entries
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3097
2024-01-28 11:17:36 -05:00
Raymond Hill
030072c324
Output more information to dev console when loading filter lists
Related discussion:
https://github.com/uBlockOrigin/uBlock-issues/discussions/2993#discussioncomment-8265914
2024-01-27 18:23:04 -05:00
Raymond Hill
fa162e2a31
Fix type
Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/discussions/3096#discussioncomment-8265304
2024-01-27 08:56:00 -05:00
Raymond Hill
9d1d5f9839
Support 'week' unit in ! Expires: directive 2024-01-27 07:36:58 -05:00
Raymond Hill
f200bbf5d5
Add trace information to console 2024-01-27 07:22:32 -05:00
Raymond Hill
cb6ff38f86
Fix error when site has only exception scriptlet filters
Cause by recent refactoring of scriptlet-related code.
2024-01-26 20:57:26 -05:00
Raymond Hill
94ec65b7db
Fix regression in response body filtering 2024-01-26 13:52:17 -05:00
Raymond Hill
34da372d7a
Ensure scriptlet logging information make it to destination
Avoid race conditions between isolated world-side broadcast channel
and main-side broadcast channel, so as to not lose logging
information if the isolated world-side is not yet ready to
receive through its broadcast channel.

Additionally, added new scriptlet: `trusted-replace-argument`.

[...]##+js(trusted-replace-argument, fn, argpos, argval [,condition, pattern])

Where:

- `fn` is the function we want to proxy through an `apply` handler.
  This can also be a class, in which case the scriptlet will proxy
  through `construct` handler. At the moment, `fn` must exist at the
  time the scriptlet executes.

- `argpos` is the 0-based position of the argument we want to change

- `argval` is the value we want to have for the argument -- the value
  is interpreted the same way the value for `set-constant` is
  interpreted.

- `condition, pattern` is a vararg which tells the scriptlet to act
  only if `pattern` is found in the argument to overwrite.

Example of usage:

    alliptvlinks.com##+js(trusted-replace-argument, MutationObserver, 0, noopFunc)
2024-01-26 12:18:30 -05:00
Raymond Hill
55e4cee6e8
Discard repeating adjacent entries in the logger 2024-01-26 09:24:10 -05:00
Raymond Hill
567508f619
Fix regression in looking up scriptlets for entity
Related feedback:
https://www.reddit.com/r/uBlockOrigin/comments/19fihsu/
2024-01-26 06:46:21 -05:00
Raymond Hill
49a6dc868f
Fix verbose mode not applying to newly injected scriptlets
Related commit:
869a653fdf
2024-01-25 13:30:41 -05:00
Raymond Hill
869a653fdf
Output scriptlet logging information to the logger
This commit brings the following changes to the logger:

All logging output generated by injected scriptlets are now sent to
the logger, the developer console will no longer be used to log
scriptlet logging information.

When the logger is not opened, the scriplets will not output any
logging information.

The goal with this new approach is to allow filter authors to
more easily assess the working of scriptlets without having to
go through scriptlet parameters to enable logging.

Consequently all the previous ways to tell scriptlets to log
information are now obsolete: if the logger is opened, the
scriptlets will log information to the logger.

Another benefit of this approach is that the dev tools do not
need to be open to obtain scriptlets logging information.

Accordingly, new filter expressions have been added to the logger:
"info" and "error". Selecting the "scriptlet" expression will also
keep the logging information from scriptlets.

A new button has been added to the logger (not yet i18n-ed): a
"volume" icon, which allows to enable verbose mode. When verbose
mode is enabled, the scriptlets may choose to output more
information regarding their inner working.

The entries in the logger will automatically expand on mouse hover.
This allows to scroll through entries which text does not fit into
a single row.

Clicking anywhere on an entry in the logger will open the detailed
view when applicable.

Generic information/errors will now be rendered regardless of which
tab is currently selected in the logger (similar to how tabless
entries are already being rendered).
2024-01-25 12:20:38 -05:00
Raymond Hill
f1889b02ee
[mv3] Fix conversion of :xpath procedural filters
Procedural filters with `:xpath` operator were silently rejected
at conversion time because the parser was failing to evaluate the
xpath expression due to the absence of a `document` object in
nodejs.

If `document` object is not present, the parser will assume the
xpath expression is valid.
2024-01-22 10:57:48 -05:00
Raymond Hill
3d576603c4
[mv3] uritransform cannot be converted to DNR 2024-01-21 14:32:14 -05:00
Raymond Hill
49dd68ef3d
Code review recent commit re. quoting parameters
Related commit:
fa3a290ad4
2024-01-21 09:26:17 -05:00
Raymond Hill
fa3a290ad4
Fix decompiling of scriptlet parameters
Scriptlets parameters which are quoted must be re-quoted when
output to the logger to be sure they can be properly looked up
in the list, and that they can be used through copy-paste
operations.
2024-01-20 21:46:12 -05:00
Raymond Hill
13dcd844a7
Unregister all scriptlets when disabling uBO on a specific site
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3083

This will not completely eliminate the issue but it should
lower the likelihood it will occur -- so at least uBO can
still benefit from reliable scriptlet execution in Firefox.
2024-01-19 11:00:07 -05:00
Raymond Hill
b19094339f
Allow uritransform to process the hash part of a URL
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3084
2024-01-18 11:36:40 -05:00
Raymond Hill
3d1b100646
Remember presentation state of "My rules" pane
Related feedback:
https://old.reddit.com/r/uBlockOrigin/comments/198ohgi/
2024-01-17 10:36:23 -05:00
Raymond Hill
0e00010b91
Fix improperly assembled !#include sublists
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3077
2024-01-16 10:04:21 -05:00
Raymond Hill
757b8be9cd
Mark procedural filters with pseudo-elements selector as invalid
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/2786
2024-01-16 09:25:22 -05:00
Raymond Hill
bc641fc024
Prevent access to picker when "My filters" is not enabled
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3076
2024-01-16 08:31:46 -05:00
Raymond Hill
3e6333d02b
Further fine tune visual as per feedback
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3066#issuecomment-1891023881
2024-01-14 13:29:58 -05:00
Raymond Hill
1cac61a9a4
Empty query parameters must still use =
Related issue:
https://github.com/uBlockOrigin/uAssets/commit/453b544f31
2024-01-14 08:03:03 -05:00
Raymond Hill
936444883f
Add support to toggle no-scripting switch with keyboard shortcut
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/692
2024-01-12 12:01:23 -05:00
Raymond Hill
63fe18a761
Do not exceed rate-limited calls to handlerBehaviorChanged()
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3063

To prevent spurious performance warnings by chromium-based browsers.
2024-01-11 13:25:19 -05:00
Raymond Hill
a9eb9630cf
Do not use tab character as field separator
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/2730#issuecomment-1881821674

Character `\x1F` is now used instead.
2024-01-09 14:31:00 -05:00
Raymond Hill
4234faafc4
Use arrow function 2024-01-04 11:01:51 -05:00
Raymond Hill
9a104bcbd2
Prevent :others() from hiding html tag
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3060
2024-01-04 10:57:27 -05:00
Raymond Hill
00fb5f18b2
Add to error message 2023-12-26 11:32:08 -05:00
Raymond Hill
f81d71c6e8
Mind type of drop event items
Related feedback:
https://github.com/gorhill/uBlock/commit/c8b7d1a526#commitcomment-135590810
2023-12-22 11:45:35 -05:00
Raymond Hill
c8b7d1a526
Mind drop events in filter expression field of logger
Related discussion:
https://github.com/uBlockOrigin/uBlock-issues/issues/3036#issuecomment-1867497436
2023-12-22 10:45:43 -05:00
Raymond Hill
49c8310e22
Fix message entry overflowing in logger
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3021
2023-12-21 12:02:57 -05:00
Raymond Hill
826bc7d457
It's ok for toLogger() to be in derived class
Related commit:
aa7f77aaad
2023-12-21 11:14:33 -05:00
Raymond Hill
aa7f77aaad
Split scriptlet filtering engine into lo- and hi-level classes
The idea is to remove as many dependencies as possible for
low-level ScriptletFilteringEngine in order to make it easier
to reuse the module outside uBO itself.

The high-level derived class takes care of caching and
injection of scriptlets into documents, which requires
more knowledge about the environment in which scriptlets
are to be used.

Also improve scriptlet cache usage to minimize overhead of
retrieving scriptlets.
2023-12-21 10:48:01 -05:00
Raymond Hill
abeadf18eb
Add support for application/x-javascript in replace= option
Related issue:
https://github.com/uBlockOrigin/uAssets/issues/5090
2023-12-21 10:43:14 -05:00
Raymond Hill
9a8dd66517
Fix having picker & inspector active at the same time
Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/issues/3004#issuecomment-1863610146
2023-12-20 11:23:25 -05:00
Raymond Hill
7f2703acd6
Only filter lists are diff-updatable 2023-12-19 11:51:20 -05:00
Raymond Hill
443c1f81e1
Extend support for differential updates to imported lists
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3028
2023-12-19 11:01:40 -05:00
Raymond Hill
24ab492b77
Fix overlooking whether auto-update is disabled
Related feedback:
https://old.reddit.com/r/uBlockOrigin/comments/18ktpd5/
2023-12-18 10:41:48 -05:00
Raymond Hill
ebd9d93666
Prevent element picker from throwing when targeting html/body
Occurred when element picker was launched from context menu
as a result of clicking on `html` or `body` elements.
2023-12-16 11:23:58 -05:00
Raymond Hill
9f4b31a96f
Add detection of mismatched!#if-!#endif in linter
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/1712
2023-12-15 16:57:49 -05:00
Raymond Hill
d56468b4ec
Fix launch of auto update shortly after launch
Regression from:
https://github.com/gorhill/uBlock/commit/bd7ce41224
2023-12-15 09:59:56 -05:00
Raymond Hill
a2caa7da78
Fix heuristic to verify whether a resource on a remote server is stale
Related discussion:
https://github.com/uBlockOrigin/uBlock-issues/discussions/3022
2023-12-14 16:51:28 -05:00
Raymond Hill
5e3f9695b4
Support links to update lists which are differential update-friendly
If the `manual` parameter is assigned a date in the form of
`YYMMDD`, this will tell uBO to update lists from origin sources
when the current time is within the range of the specified date,
otherwise lists will be updated from CDNs. Updating from CDNs
is always strongly recommended since this enables differential
updates.

For the time being, `manual=1` will always cause to update lists
from origin, but this form will be deprecated once next stable
release is widespread. The idea is to not leave behind stale
and obsolete links which would be detrimental to differential
updates should someone click on one of these old links left
behind.
2023-12-14 09:50:11 -05:00
Raymond Hill
bd7ce41224
Remove "Purge all caches" button from "Filter lists" pane
Purging all the lists from cache storage is detrimental to
differential update, and cause filter lists to be updated less
often and consequently to be less up to date then when letting
differential updater do its work.
2023-12-13 21:01:51 -05:00
Raymond Hill
14926913f7
Add support for all list token in updater-link feature
Using `listkeys=all` will cause all enabled lists to be updated.
2023-12-12 11:04:16 -05:00
Raymond Hill
4305ea9c0c
Fix logging of broad exception filter #@#+js()
Related feedback:
https://github.com/uBlockOrigin/uBlock-discussions/discussions/843

Regression from:
https://github.com/gorhill/uBlock/commit/1a863a877d
2023-12-12 08:21:47 -05:00
Raymond Hill
a3e3cd9216
Ensure cache storage backend is selected before use
Related commit:
bfa28b960e
2023-12-11 12:17:25 -05:00
Raymond Hill
bfa28b960e
Ensure cache storage is selected before access
Possibly related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/2136

Also reported internally, steps to reproduce the issue fixed here:

- Open uBO's dashboard through 3-dot > Add-ons > uBO > Settings
- Bring forth "Filter lists" pane
  We want the tab to be already opened at next launch
- Quit Firefox for Android
- Launch Firefox for Android

Result:

Very long launch time, lists marked as out of date.
2023-12-10 12:33:51 -05:00