Commit Graph

1258 Commits

Author SHA1 Message Date
Raymond Hill d05ff8ffeb
Add support for diff-patching filter lists
Related discussion:
https://github.com/ameshkov/diffupdates

The benefits of diff-patching filter lists is much shorter update
schedule and significantly less bandwidth consumed.

At the moment, only default filter lists are subject to be
diff-patched.

External filter lists can make their lists diff-patchable by
following the specification link above.

Only filter lists fetched by the auto-updater are candidate for
diff-patching.

Forcing a manual update of the filter lists will prevent the
diff-patcher from kicking in until one or more lists are
auto-updated.

Some back-of-the-envelop calculations regarding the load on free
CDN solutions used by uBO to distribute its own filter lists:

Currently, for each CDN (with lists updating after days):
~560 M req/month, ~78 TB/month

With diff-patching lists on a 6-hour schedule:
~390 M req/month, 1 TB/month

Those estimates were done according to statistics shown by
jsDelivr, which is one of 4 CDNs picked randomly when a list
updates:
https://www.jsdelivr.com/package/gh/uBlockOrigin/uAssetsCDN?tab=stats
2023-10-30 12:30:46 -04:00
Raymond Hill c9aeb6a43b
Use minified version of badware list in package 2023-10-30 00:35:30 -04:00
Raymond Hill c378d55dfb
Minor 2023-10-29 23:44:43 -04:00
Fanboynz d51b393fdb
Add additional set-cookie names (#3902) 2023-10-29 11:01:32 -04:00
Raymond Hill 5244ad5baf
Do not use `bind` as a way to access native calls 2023-10-29 10:22:54 -04:00
Raymond Hill fc40393c81
Improve `trusted-prune-inbound-object` scriptlet
Trap incoming argument only if it matches the properties to
prune and matches. If there is no match, the inbound object
is passed through untouched.
2023-10-28 07:35:38 -04:00
Raymond Hill ed4b31931a
Prepare to ship minified lists in package 2023-10-26 13:38:24 -04:00
Raymond Hill d32204f984
Match `type` exactly in `prevent-addEventListener` scriptlet
Unless `type` is a regex of course.

Related feedback:
https://github.com/uBlockOrigin/uAssets/discussions/17907#discussioncomment-7362212
2023-10-23 21:15:00 -04:00
Raymond Hill 82c59b4b6e
Add `domain` vararg to `trusted-set-cookie`
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/2893
2023-10-22 18:19:18 -04:00
Raymond Hill 86f0d6dd97
Add `trusted-prune-outbound-object.js` scriptlet
Essentially a complement of `trusted-prune-inbound-object.js` added in
1c9da227d7

To perform object pruning on any object returned synchronously by
any given call.

The arguments for `trusted-prune-outbound-object` in order are:

- The name of the property to trap. Must be a function, and must
  exist when the scriptlet tries to install the trap.

- The properties to prune (as with `json-prune`)

- The properties which must all be present for pruning to occur
  (as with `json-prune`)

The scriptlets `json-prune.js` and `evaldata-prune.js` essentially
perform the same function, and will eventually be rewritten to
internally delegate to generic `trusted-prune-outbound-object.js`.
2023-10-22 12:35:49 -04:00
Raymond Hill 1c9da227d7
Add `trusted-prune-inbound-object` scriptlet
As per discussion with filter list maintainers.

To perform object pruning for any given call which has an object
as argument (hence "inbound").

Since `json-prune-stringify` scriptlet is a specific form of
pruning inbound objects, it has been removed.

The arguments for `trusted-prune-inbound-object` in order are:

- The name of the property to trap. Must be a function, and must
  exist when the scriptlet tries to install the trap.

- The position of the object to prune in the argument list when
  the trapped function is called. The position is 1-based and
  must be an integer greater than 0.

- The properties to prune (as with `json-prune`)

- The properties which must all be present for pruning to occur
  (as with `json-prune`)

- Varargs:
  - `, dontOverwrite, 1`: do not modify the target inbound object

Examples:

Remove `title` and `name` properties before passing the object to
`JSON.stringify` call:

  example.org##+js(trusted-prune-inbound-object, JSON.stringify, 1, title name)

Remove `status` property before passing the object to `Object.keys`
call but do not modify caller's instance of the object:

  example.org##+js(trusted-prune-inbound-object, Object.keys, 1, status, , dontOverwrite, 1)
2023-10-21 09:31:50 -04:00
Raymond Hill 607bba6eaf
Add `dontOverwrite` vararg to `(trusted-)set-cookie` scriptlet
When the vararg `, dontOverwrite, 1` is present, the scriptlet will
not modify the cookie if it already exists.

Related discussion:
https://github.com/uBlockOrigin/uAssets/issues/19976#issuecomment-1773466740
2023-10-20 21:38:54 -04:00
peace2000 eb66129fbf
Add "on" and "off" values to set-cookie (#3898)
* Add "on" and "off" values to set-cookie

Used on praxisplan.at.

0cd4612e18

* Update scriptlets.js
2023-10-20 20:43:52 -04:00
Raymond Hill 41d91ed080
Fine tune `set-local-storage-item` as per feedback
Related feedback:
- https://github.com/uBlockOrigin/uAssets/discussions/20194
- https://github.com/gorhill/uBlock/pull/3898
2023-10-20 20:10:35 -04:00
Raymond Hill f0cd93335e
Revert "Turns out `delay` does apply to first element"
This reverts commit 906c6eb430.
2023-10-19 17:23:05 -04:00
Raymond Hill 906c6eb430
Turns out `delay` does apply to first element
Regarding `trusted-click-element`, and as per documentation
and code:
- https://github.com/AdguardTeam/Scriptlets/blob/master/wiki/about-trusted-scriptlets.md#trusted-scriptlets
- https://github.com/AdguardTeam/Scriptlets/blob/master/src/scriptlets/trusted-click-element.js
2023-10-19 14:08:57 -04:00
Raymond Hill e873fd5378
Add `cdn.statically.io` as CDN for `ublock-quick-fixes` (dev build) 2023-10-18 11:38:00 -04:00
Raymond Hill 4dc396ff05
Fix typos in comments 2023-10-18 09:50:58 -04:00
Raymond Hill 9d3acd91b8
Support AdGuard's `[trusted-]set-cookie-reload` scriptlets
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/2881
2023-10-18 09:48:08 -04:00
Raymond Hill b0fe6d228a
Use `@latest` instead of `@main` for jsDelivr CDN 2023-10-17 23:25:06 -04:00
Raymond Hill 51359c6585
[experimental] Add `json-stringify` scriptlet
Will be evaluated this current dev cycle and as a result
might be removed before next stable.

Other changes to increase code consistency.
2023-10-17 17:33:49 -04:00
Raymond Hill f122ce7320
Add logging ability to `trusted-click-element`
If the vararg `, log, 1` is present, the scriptlet will log to
the console it's execution steps. Works only in dev build.
2023-10-16 19:53:48 -04:00
Raymond Hill 5a24fad8ad
Make fine-tuned `json-prune-[...]` scriptlets the default behavior
As discussed with filter list maintainers.
2023-10-16 19:36:16 -04:00
Raymond Hill 7c660b2aad
Remove stray tab 2023-10-15 16:40:35 -04:00
Raymond Hill c0d80ac510
Fine tune `trusted-click-element` scriptlet 2023-10-15 16:14:44 -04:00
Raymond Hill 7af88b025d
Add `trusted-click-element` scriptlet
Implemented as per AdGuard API documentation:
https://github.com/AdguardTeam/Scriptlets/blob/master/wiki/about-trusted-scriptlets.md#trusted-click-element

The current implementation in uBO does not support the `extraMatch`
argument. If the extraMatch argument is not empty, the scriptlet
will abort and do nothing.

As for the rest, it complies with the documentation.
2023-10-15 11:08:15 -04:00
Raymond Hill 17d30343c5
Use safe Array.from() in `no-xhr-if` scriptlet
Related issue:
https://github.com/uBlockOrigin/uAssets/issues/20063
2023-10-14 08:03:29 -04:00
Raymond Hill e5c1b63315
Fix overzealous matching in `(remove|replace)-node-text` scriptlets
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/2868
2023-10-13 21:51:13 -04:00
Raymond Hill 6f74df942d
Fix `no-xhr-if` scriptlet for Firefox
Related feedback:
https://github.com/uBlockOrigin/uAssets/issues/20063#issuecomment-1762157408
2023-10-13 21:24:21 -04:00
Raymond Hill 780383faef
Use safe versions of Math.floor/Math.random in scriptlets
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/78
2023-10-09 09:45:26 -04:00
Raymond Hill ad75b1bdba
Remove unreferenced dependencies
Related commit:
d4918c1d0a
2023-10-07 13:48:28 -04:00
Raymond Hill d4918c1d0a
Add `version` vararg to `[...]-fetch-response` scriptlets
If the `version` vararg is present and set to `2`, and if a
fetch Request argument is present, it will be cloned before
being matched to `propsToMatch` properties.

Additionally, created a `.fn` version of `[...]-fetch-response`
scriptlets to avoid redundant code in final injected scriptlets.
2023-10-07 11:49:17 -04:00
Raymond Hill 6b211f622c
Add `stackToMatch` vararg to json-prune-related scriptlets
As per discussion with filter list maintainers.
2023-10-05 11:24:35 -04:00
Raymond Hill d3b95c1c68
Add site-specific scriptlet
Related issue:
https://github.com/uBlockOrigin/uAssets/issues/19903
2023-09-29 12:51:44 -04:00
Raymond Hill 1ff3878a49
Add `prevent-canvas` scriptlet
Prevent usage of specific or all (default) canvas APIs.

Syntax

```text
example.com##+js(prevent-canvas [, contextType])
```

- `contextType`: A specific type of canvas API to prevent (default to all
  APIs). Can be a string or regex which will be matched against the type
  used in getContext() call. Prepend with `!` to test for no-match.

Examples

1. Prevent `example.com` from accessing all canvas APIs

```adblock
example.com##+js(prevent-canvas)
```

2. Prevent access to any flavor of WebGL API, everywhere

```adblock
*##+js(prevent-canvas, /webgl/)
```

3. Prevent `example.com` from accessing any flavor of canvas API except `2d`

```adblock
example.com##+js(prevent-canvas, !2d)
```

References

https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext
2023-09-28 11:26:45 -04:00
Raymond Hill 4e2aa3e384
Add scriptlet aliases for compatibility with AdGuard lists
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/2828
2023-09-28 10:07:03 -04:00
Raymond Hill c3cd596175
Remove unmaintained urlhaus PUP filter list
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/2844
2023-09-28 09:49:07 -04:00
Raymond Hill 402e2ebf57
Use AG version of urlhaus list
Related discussion:
https://github.com/uBlockOrigin/uAssets/issues/7636#issuecomment-1735697402
2023-09-26 16:20:01 -04:00
Raymond Hill cce3f3efc1
Minor code review of scriptlets 2023-09-22 09:33:02 -04:00
Daylin Cooper ce959164bb
Fix XHR hook partial response handling. 2023-09-18 23:39:17 -07:00
Raymond Hill 98e1b264de
Update scriptlets
Allow smaller multipliers in nano-sib/nano-stb
https://github.com/uBlockOrigin/uBlock-issues/issues/2808

Remove adfly-defuser, which is now unused.
2023-09-14 11:13:58 -04:00
Raymond Hill d5fb3c08a1
Remove broken content link for ROU list 2023-09-10 16:10:04 -04:00
Raymond Hill b2d8c9a0ba
Drop `cdn.statically.io` for quick-fixes for the time being 2023-09-08 09:35:19 -04:00
Raymond Hill 14d60ac5d3
Fix `json-prune-xhr-response` as per feedback
Related commit:
abe41034f6
2023-09-06 13:04:43 -04:00
Raymond Hill abe41034f6
Change approach to `...-xhr-response` scriptlets
Related commit:
3152896d42
2023-09-05 14:11:33 -04:00
Raymond Hill 3152896d42
Add `json-prune-xhr-response` and `trusted-replace-xhr-response` scriptlets
As discussed with filter list maintainers.

Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/2743
2023-09-04 14:54:57 -04:00
Raymond Hill 2282215e1c
Use `globalThis` instead of `self` in scriptlet helper
Related discussion:
https://github.com/uBlockOrigin/uBlock-issues/discussions/2768
2023-08-25 07:28:50 -04:00
Raymond Hill 4fc8eef1c1
Fix typo in last commit 2023-08-23 09:45:58 -04:00
Raymond Hill 749cec0f09
Add `json-prune-fetch-response` scriptlet
As per request from filter list maintainers.

Usage:

  ...##+js(json-prune-fetch-response, prune paths [, needle paths [, ...varargs ]])

See `json-prune` scriptlet for usage.

Possible variable arguments:

  ..., log, [match | nomatch | all]
  ..., propsToMatch, [see prevent-xhr]
2023-08-23 08:49:22 -04:00
Raymond Hill f407c28a00
Re-factor extra args for `set-constant` scriptlet
To prepare for better compatibility with AdGuard's own `set-constant`
scriptlet.

The 3rd position parameter which dictates how to set the value has
been converted into a vararg paramater, as follow:

  ..., as, function
  ..., as, callback
  ..., as, resolved
  ..., as, rejected

Similarly, the parameter used to dictate when the scriptlet
should become effective is now to be used as a vararg:

  ..., runAt, load

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

Ideally, AdGuard would support its `stack` parameter as a
vararg, to be discussed.
2023-08-22 10:12:08 -04:00