1
0
mirror of https://github.com/gorhill/uBlock.git synced 2024-11-22 10:22:51 +01:00
Commit Graph

2011 Commits

Author SHA1 Message Date
Raymond Hill
b62aabda85
Import translation work from https://crowdin.com/project/ublock 2024-09-15 13:25:58 -04:00
Raymond Hill
93042eced4
Use dummy dns API when it's not present 2024-09-13 11:20:37 -04:00
Raymond Hill
73ee3ffe92
Code review of DNS-related code
Related commit:
6acf97bf51
2024-09-13 10:00:41 -04:00
Raymond Hill
8fadfb2c5e
Import translation work from https://crowdin.com/project/ublock 2024-09-12 15:40:24 -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
52dee35325
Properly reflect whether ipaddress= is supported 2024-09-09 10:54:47 -04:00
Raymond Hill
1b464f75cc
Fix spurious browser error at the console 2024-09-07 16:47:43 -04:00
Raymond Hill
bec5d53ce0
[mv3] Attempt at mitigation for when "internal error" occurs
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/199
2024-09-06 09:31:17 -04:00
Raymond Hill
0a048eb64e
Address eslint warnings 2024-08-22 12:36:31 -04:00
Raymond Hill
3360d3e3e1
[mv3] Remove unused file 2024-08-21 11:52:39 -04:00
Raymond Hill
520f81fcca
[mv3] Fix injection of scriptlets into embedded contexts 2024-08-20 08:18:03 -04:00
Raymond Hill
34047daa06
Import translation work from https://crowdin.com/project/ublock 2024-08-19 12:02:00 -04:00
Raymond Hill
e73eb23c90
[mv3] Don't filter out tabless requests in "logger" 2024-08-17 10:42:17 -04:00
Raymond Hill
1822d1503f
Import translation work from https://crowdin.com/project/ublock 2024-08-12 10:54:11 -04:00
Raymond Hill
665648ba97
[mv3] Re-word some text for accuracy 2024-08-07 10:03:03 -04:00
Raymond Hill
277977aa8a
[mv3] Remove useless arguments 2024-08-06 15:00:59 -04:00
Raymond Hill
ae6b53479d
[mv3] Minor change to debug output 2024-08-06 14:55:30 -04:00
Raymond Hill
fb037e97d0
[mv3] Improve remove-attr.js scriptlet
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/166
2024-08-06 14:47:03 -04:00
Raymond Hill
417dab538c
[mv3] Fix generating allowAllRequests rule when default mode is no-filtering 2024-08-04 11:59:16 -04:00
Raymond Hill
d42329a3a3
Rephrase more accurately
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/160
2024-08-03 12:03:56 -04:00
Raymond Hill
9562b19a93
Fall back to "Basic" when removing all-urls from "No filtering"
Related discussion:
https://github.com/uBlockOrigin/uBOL-home/issues/156#issuecomment-2254576670
2024-08-01 11:24:42 -04:00
Raymond Hill
a0de43aba9
Import translation work from https://crowdin.com/project/ublock 2024-07-29 16:05:15 -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
2bdbac1b84
Import translation work from https://crowdin.com/project/ublock 2024-07-09 13:16:17 -04:00
Raymond Hill
1d7feb83a2
[firefox] Add entry for 128px icon
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3285
2024-07-05 10:01:28 -04:00
Raymond Hill
57ed293760
[mv3] Fix bad test re. managed storage 2024-06-28 13:39:38 -04:00
Raymond Hill
88065d0091
[mv3] Bring procdural cosmetic filtering code up to date with uBO 2024-06-22 11:09:57 -04:00
Raymond Hill
5c69159b36
[mv3] Inject procedural cosmetic filtering script earlier
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/139
2024-06-22 11:06:19 -04:00
Raymond Hill
b24793bc02
Import translation work from Crowdin 2024-06-11 07:47:26 -04:00
Raymond Hill
91ee5bdeae
Improve prevent-addEventListener scriptlet
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3061#issuecomment-2159662039
2024-06-11 07:44:43 -04:00
Raymond Hill
ad77938f24
[mv3] Raise minimum chromium version to 118
This allows to drop the special handling of `isUrlFilterCaseSensitive`
for chromium-based browsers.
2024-05-29 09:57:09 -04:00
Raymond Hill
98977971db
[mv3] Improve generic cosmetic filtering surveyor 2024-05-28 22:08:24 -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
e738eaa447
Import translation work from https://crowdin.com/project/ublock 2024-05-12 15:51:46 -04:00
Raymond Hill
bb479b0a66
Catch exceptions in API calls for the sake of old Chromium versions
Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/issues/3217#issuecomment-2103628821
2024-05-09 21:29:24 -04:00
Raymond Hill
e7951c2114
Import translation work from https://crowdin.com/project/ublock 2024-04-08 08:23:48 -04:00
Raymond Hill
98a600698e
Remove letsblock.it as target for subscribe.js content script
Related discussion:
https://github.com/uBlockOrigin/uBlock-issues/discussions/3194
2024-04-03 10:51:39 -04:00
Raymond Hill
f9408415a5
Add missing alarms permissions in Thunderbird manifest
Possibly related:
https://old.reddit.com/r/uBlockOrigin/comments/1bquaw8/ublock_origin_157_announcement_thread_please/kxktycl/
2024-04-01 14:50:06 -04:00
Raymond Hill
7ca3855395
Import translation work from https://crowdin.com/project/ublock 2024-04-01 08:33:56 -04:00
Raymond Hill
d2ea9c1b2f
Fix eslint warnings 2024-03-30 13:24:27 -04:00
Raymond Hill
08b8b875ca
Import translation work from https://crowdin.com/project/ublock 2024-03-29 09:26:56 -04:00
Raymond Hill
d3fe073149
Import translation work from https://crowdin.com/project/ublock 2024-03-28 08:21:46 -04:00
Raymond Hill
27e0db1dd2
Import translation work from https://crowdin.com/project/ublock 2024-03-26 12:47:05 -04:00
Raymond Hill
c6019e755b
Import translation work from https://crowdin.com/project/ublock 2024-03-23 13:33:08 -04:00
Raymond Hill
47ae87724a
Import translation work from https://crowdin.com/project/ublock 2024-03-22 14:53:22 -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
d368747235
Import translation work from https://crowdin.com/project/ublock 2024-03-22 09:49:42 -04:00
Raymond Hill
0a7e2d2ae8
Import translation work from https://crowdin.com/project/ublock 2024-03-21 13:59:06 -04:00
Raymond Hill
764a1772ba
[mv3] Add option to disable toolbar icon badge
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/119
2024-03-21 13:57:50 -04:00
Raymond Hill
62965cd34f
Import translation work from https://crowdin.com/project/ublock 2024-03-21 13:55:53 -04:00
Raymond Hill
38b325ecce
Raise the limit for detection of stale content scripts 2024-03-17 13:03:19 -04:00
Raymond Hill
3f7374c1f1
Mind that tabs.sendMessage can throw 2024-03-17 09:34:05 -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
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
c8762945d9
Fix failure to create popup logger window sometimes
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/2249
2024-03-13 10:01:33 -04:00
Raymond Hill
710d8c6494
Import translation work from https://crowdin.com/project/ublock 2024-03-12 10:08:22 -04:00
Raymond Hill
2c9ab8ee04
Fix the salvaging of rule ids 2024-03-11 22:22:57 -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
0332bf163c
Import translation work from https://crowdin.com/project/ublock 2024-03-11 13:29:30 -04:00
Raymond Hill
d5c359d411
Import translation work from https://crowdin.com/project/ublock 2024-03-07 13:09:24 -05:00
Raymond Hill
8533fa74ee
[mv3] Use EasyList lists for "Annoyances" section 2024-03-07 09:14:30 -05:00
Raymond Hill
02966afb8c
[mv3] Do not pollute browser console in stable release versions 2024-03-06 12:46:12 -05:00
Raymond Hill
f18d62ee4c
Import translation work from https://crowdin.com/project/ublock 2024-03-05 08:11:39 -05:00
Raymond Hill
c7a9bcb7b2
Import translation work from https://crowdin.com/project/ublock 2024-03-04 11:38:55 -05:00
Raymond Hill
0a72745f9c
Import translation work from https://crowdin.com/project/ublock 2024-03-03 20:28:07 -05:00
Raymond Hill
aac88ac766
Import translation work from https://crowdin.com/project/ublock 2024-03-03 14:30:30 -05:00
Raymond Hill
c2c80be897
Forgot Chromium's alarms API is not promisified... 2024-02-29 20:29:36 -05:00
Raymond Hill
d8544dc047
Forgot to declarare "alarms" permmission in manifest for Chromium
Related commit:
https://github.com/gorhill/uBlock/commit/059e4e5e28
2024-02-29 13:18:33 -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
09bba3199e
Import translation work from https://crowdin.com/project/ublock 2024-02-29 09:48:01 -05:00
Raymond Hill
9862446b10
Various fine tuning code of recent commits 2024-02-28 13:32:24 -05:00
Raymond Hill
79ea85dbc4
More fine tuning of cache storage-related code 2024-02-27 21:47:06 -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
fcc77e7c92
[mv3] Add ability to manually add filters to a ruleset 2024-02-25 20:39:21 -05:00
Raymond Hill
4af57e3e60
Import translation work from https://crowdin.com/project/ublock 2024-02-17 09:34:41 -05:00
Raymond Hill
7e00046b8e
[mv3] Salvage rule ids for all rulesets 2024-02-15 08:02:46 -05:00
Raymond Hill
8d47eac6e6
[mv3] Indent rulesets with fewer rules 2024-02-14 15:48:59 -05:00
Raymond Hill
f2d7413a42
[mv3] Reuse rule ids across release where possible
This is to reduce the diff size of rulesets in new
releases. Beside smaller diff size, this also makes it
easier to investigate rule changes across releases.
2024-02-14 14:27:36 -05:00
Raymond Hill
a7786a0a32
Import translation work from https://crowdin.com/project/ublock 2024-02-13 15:36:10 -05:00
Raymond Hill
0e8ff10e92
[mv3] Mind service workers for sites in "no filtering" mode
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/114
2024-01-31 09:59:45 -05:00
Raymond Hill
be1f938c17
[mv3] Adjust as per changes in uBO base 2024-01-26 14:51:50 -05:00
Raymond Hill
c11db790ff
Import translation work from https://crowdin.com/project/ublock 2024-01-25 12:49:32 -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
101cef44d2
Import translation work from https://crowdin.com/project/ublock 2024-01-16 08:49:52 -05:00
Raymond Hill
a605f13e63
Import translation work from https://crowdin.com/project/ublock 2024-01-14 09:58:34 -05:00
Raymond Hill
1c2d21d91e
Add missing entries in manifest for new toggle-javascript command
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/692
2024-01-12 17:34:59 -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
c03c23d962
Import translation work from https://crowdin.com/project/ublock 2024-01-12 12:00:55 -05:00
Raymond Hill
010cd3f9e0
Import translation work from https://crowdin.com/project/ublock 2024-01-10 12:59:09 -05:00
Raymond Hill
1ea1ff7f4f
Import translation work from https://crowdin.com/project/ublock 2024-01-01 10:30:57 -05:00
Raymond Hill
38bde79146
Use CSS.supports() to detect support of native :has()
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/2480#issuecomment-1868595930
2023-12-25 09:06:42 -05:00
Raymond Hill
26f45e1fdf
Import translation work from https://crowdin.com/project/ublock 2023-12-23 17:45:36 -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
462e8fe917
Import translation work from https://crowdin.com/project/ublock 2023-12-19 12:04:22 -05:00
Raymond Hill
1a27f6a6cd
Import translation work from https://crowdin.com/translate/ublock 2023-12-14 10:36:18 -05:00
Raymond Hill
acc2950736
[mv3] Fine tuning ruleset output 2023-12-11 09:29:59 -05:00