- Improve
trusted-replace-outbound-text
scriptlet - Classify generic cosmetic filters with comma as highly generic
- Raise max buffer size for response body filtering
- Trim end of class tokens in generic cosmetic filtering's surveyor
- Improve
trusted-set-cookie
scriptlet
- Fallback to
requestAnimationFrame
whenrequestIdleCallback
is not available - Improve
trusted-click-element
scriptlet - Replace EasyDutch with AdGuard Dutch
- Add checksum validation when loading trie buffers in selfie
- Catch exceptions in API calls for the sake of old Chromium versions
- Add
accept
/reject
toset-local-storage-item
(by @ryanbr) - Use raw string for regex patterns in python scripts
- Improve
noeval-if
scriptlet - Improve
trusted-set-local-storage-item
scriptlet - Fix potential corruption when reading serialized data
- Improve
remove-[attr|class]
scriptlets - Improve dashboard layout at high zoom factor
- Add a console pane to the logger
- Improve
spoof-css
scriptlet - Fix bad date computation in auto-comment feature
- Fix regression breaking import of
file://
lists - Add
trusted-replace-outbound-text
scriptlet - Improve
[trusted-]set-cookie
scriptlets
- Do not block large media resources when loaded as top-level document
- Properly manage cache storage regarding managed user filters
- Improve
[trusted-]set-cookie
scriptlets - Fixed Belgian and Nepali flags for Windows Chromium users (by @DandelionSprout)
- Mind that
tabs.sendMessage
can throw - Improve
set-cookie
scriptlet - Append wildcard character only when filter starts & ends with
/
- Fix failure to create popup logger window sometimes
- Improve json-prune-related scriptlets
- Support maximizing editor to viewport size
- Add advanced setting to force popup panel orientation
- Add checkboxes to "My filters" pane
- Assume UTF-8 when no encoding can be looked up
- Fix issue with "My filters" pane on mobile
- Support aborting "Pick" mode in element picker
- Remove sections with no lists in "Filter lists" pane
- Add "Social widgets", "Cookie notices" sections in "Filter lists" pane
- No longer disable generic cosmetic filters by default on mobile
- Improve
spoof-css
scriptlet - Make asset updater compatible with non-persistent background page
- Move dragbar to the top of element picker dialog
- Add advanced setting
requestStatsDisabled
- First lookup matching stock lists when importing URLs
- Reset filter lists in worker when creating filters via "Block element"
- Remove trusted-source requirement when using
badfilter
- Redesign cache storage
- Don't match network filter-derived regexes against non-network URIs
- Remove obsolete trusted directives
- Support logging details of calls to
json-prune-fetch-response
- Escape special whitespace characters in attribute values
- Mind that multiple
uritransform
may apply to a single request - Fix incorrect built-in filtering expression in logger
- Fix improper invalidation of valid
uritransform
exception filters - Improve
prevent-addEventListener
scriptlet - Fix Chartbeat flicker control
div
's (by @ryanbr) - Fix potential exfiltration of browsing history by a rogue list author through
permissions=
- Ignore event handler-related attributes in
set-attr
scriptlet (suggested by @distinctmondaylilac) - Fix potential exfiltration of browsing history by a rogue list author through
csp=
(reported by @distinctmondaylilac) - Output scriptlet logging information to the logger
- Fix decompiling of scriptlet parameters
- Add support for
extraMatch
intrusted-click-element
scriptlet - Remove minimum height constraint from "My filters" pane
- Unregister all scriptlets when disabling uBO on a specific site
- Allow
uritransform
to process the hash part of a URL - Remember presentation state of "My rules" pane
- Fix improperly assembled
!#include
sublists - Mark procedural filters with pseudo-elements selector as invalid
- Prevent access to picker when "My filters" is not enabled
- Provide visual feedback when applying changes in "Filter lists" pane
- Empty query parameters must still use
=
- Add support to toggle no-scripting switch with keyboard shortcut
- Do not exceed rate-limited calls to
handlerBehaviorChanged()
- Shield some code paths against potentially tampered global properties (in scriptlets)
- Do not prevent applying changes when lists are updating
- Add
elements
vararg toprevent-addEventListener
scriptlet - Do not use tab character as field separator (in logger)
- Prevent
:others()
from hidinghtml
tag
- Discard repeating adjacent entries in the logger
- Mind drop events in filter expression field of logger
- Improve
xml-prune
scriptlet - Fix message entries overflowing in logger
- Add support for
application/x-javascript
inreplace=
option - Extend support for differential updates to imported lists
- Add detection of mismatched
!#if
-!#endif
in linter - Support links to update lists which are differential update-friendly
- Remove "Purge all caches" button from "Filter lists" pane
- Add support for
all
list token in updater-link feature - Fix logging of broad exception filter
#@#+js()
- Improve
no-xhr-if
scriptlet - Ensure cache storage backend is selected before access
- Fix popup panel rendering when embedded in logger
- Add visual hint in support information re. differential update
- Remove obsolete web accessible resources
- Rename
urltransform
touritransform
- Vertically expand/collapse in steps in dom inspector
- Reset the DOM inspector when URL in top context changes
- Support shadow-piercing combinator
>>>
intrusted-click-element
- Isolate DOM inspector layers from page context
- Refactoring: Replace DOM events with broadcast channels
- Support non-default sticky lists
- Add enableLazyLoad function (by @spazmodius )
- Change frequency of save-to-storage blocking stats
- Improve
prevent-fetch
scriptlet - Catch cases of
! Expires:
field with no value
Differential update of filter lists, as a result of discussions at AdguardTeam/FiltersCompiler#192. Resulting spec is here.
The goal is to NOT be ranked among the "most popular projects" by bandwidth usage (as per jsDelivr's public stats):
It is expected that differential updates will lower both requests and bandwidth usage.
To benefit the much shorter update period enabled by differential updates, you must let uBO auto-update the filter lists. Forcing a manual update will prevent differential updates until the next time a list auto-update.
- Enable path for native
has()
selector in Firefox - Allow scriptlets to be injected in
about:blank
- Fix faulty
as
vararg inset-constant
scriptlet - Add support to redirect to
noop.json
- More improvements to the
google-ima
shim script (by @kzar) - All exceptions filters are exempt from requiring a trusted source
- Add
trusted-set-session-storage-item
scriptlet - Allow the use of quotes in
set-cookie
scriptlet - Allow the use of quotes in
set-(local|session)-storage-item
- Add ability to trigger cookie removal on specific events
- Ensure CSSTree does not hold a reference onto last parsed string
- Lower minimum Expires value to 4h
- Properly reset needle length in unserialized buffer
- Add additional flags to regional lists (by @DandelionSprout)
- Harden scriptlets which need to serialize function code into string
- Reset
g
regexes before use inrmnt
/rpnt
scriptlets - Apply response filtering according to mime type
- Add t/f to set-cookie (by @ryanbr)
- Have
urltransform=
use the same syntax asreplace=
- Implement network filter option
replace=
(Firefox only because filterResponseData) - Prevent evaluating the SNFE until fully loaded
- Add support for differential update of filter lists