Falkon Adblock testpage results

I went to ABP Test Pages and checked how Falkon Adblock handles all the different rules. Many things are implemented but even more is not and some rules are misinterpreted (e.g. remove).

I always thought it works well enough (works for me) and with enough filters it even passes the Adblock Tester test page on 96 from 100 points.

I can talk about “what ifs” and complaining the whole day, but lets jump into the results.

Document History
  • 2025-01-18 - Mark “Popup” filters as done with a ling to the merge request
  • 2025-01-12 - Mark “Remove” filters as done with link to Merge Request
  • 2025-01-11 - Add comment to Third-party option

Blocking and Hiding

Blocking
  • Full Path
  • Partial Path
  • Wildcard
  • Dynamic
  • Deep subdomains
Element Hiding
  • ID Selector
  • ID Selector with double curly braces
  • Class Selector
  • Descendant Selector
  • Sibling Selector
  • Attribute Selector 1
  • Attribute Selector 2
  • Attribute Selector 3
  • Starts with Selector 1
  • Starts with Selector 2
  • Ends with Selector 1
  • Contains
Element Hiding Emulation / Extended Selectors
  • Basic :-abp-properties() usage
  • Basic :-abp-has() usage
  • Basic :has() usage
  • Basic :-abp-contains() usage
  • Basic :xpath() usage
  • Basic :has-text() usage
  • Chained extended selectors
  • Case insensitive extended selectors
  • Wildcard in extended selector
  • Regular expression in :-abp-properties()
  • Regular expression in :-abp-contains()
Block on DOM Mutation
  • input
  • aside
Element Hiding Emulation Inversion
  • Basic :not(:-abp-properties()) usage
  • Basic :not(:-abp-has()) usage
  • Basic :not(:-abp-contains()) usage
  • Chained extended selectors with not() selector
  • Case insensitive extended selectors with not() selector
  • Wildcard in extended selector combined with :not() selector
  • Regular expression in :not(:-abp-properties())
  • Regular expression in :not(:-abp-contains())

Remove

Implemented in the Merge Request 119.

Remove
  • Remove with ID selector
  • Remove with ID selector with double curly braces
  • Remove with class selector
  • Remove with descendant selector
  • Remove with sibling selector
  • Remove with attribute selector 1
  • Remove with attribute selector 2
  • Remove with attribute selector 3
  • Remove starts with selector 1
  • Remove starts with selector 2
  • Remove ends with selector 1
  • Remove contains
Remove with Extended Selectors
  • Basic :-abp-properties() usage with remove
  • Basic :-abp-has() usage with remove
  • Basic :has() usage with remove
  • Basic :-abp-contains() usage with remove
  • Basic :xpath() usage with remove
  • Basic :has-text() usage with remove
  • Chained extended selectors with remove
  • Case insensitive extended selectors with remove
  • Wildcard in extended selector with remove
  • Regular expression in :-abp-properties() with remove
  • Regular expression in :-abp-contains() with remove
Remove on DOM Mutation
  • input
Remove Inversion
  • Basic :not(:-abp-properties()) usage with remove
  • Basic :not(:-abp-has()) usage with remove
  • Basic :not(:-abp-contains()) usage with remove
  • Chained extended selectors with not() selector with remove
  • Case insensitive extended selectors with not() selector with remove
  • Wildcard in extended selector combined with :not() selector with remove
  • Regular expression in :not(:-abp-properties()) with remove
  • Regular expression in :not(:-abp-contains()) with remove

Inline CSS

Inline CSS
  • Inline CSS with ID selector
  • Inline CSS with ID selector with double curly braces
  • Inline CSS with class selector
  • Inline CSS with descendant selector
  • Inline CSS with sibling selector
  • Inline CSS with attribute selector 1
  • Inline CSS with attribute selector 2
  • Inline CSS with attribute selector 3
  • Inline CSS starts with selector 1
  • Inline CSS starts with selector 2
  • Inline CSS ends with selector 1
  • Inline CSS contains
Inline CSS with Extended Selectors
  • Basic :-abp-properties() usage with inline CSS
  • Basic :-abp-has() usage with inline CSS
  • Basic :has() usage with inline CSS
  • Basic :-abp-contains() usage with inline CSS
  • Basic :xpath() usage with inline CSS
  • Basic :has-text() usage with inline CSS
  • Chained extended selectors with inline CSS
  • Case insensitive extended selectors with inline CSS
  • Wildcard in extended selector with inline CSS
  • Regular expression in :-abp-properties() with inline CSS
  • Regular expression in :-abp-contains() with inline CSS
Inline CSS on DOM Mutation
  • span
Inline CSS Inversion
  • Basic :not(:-abp-properties()) usage with inline CSS
  • Basic :not(:-abp-has()) usage with inline CSS
  • Basic :not(:-abp-contains()) usage with inline CSS
  • Chained extended selectors with not() selector with inline CSS
  • Case insensitive extended selectors with not() selector with inline CSS
  • Wildcard in extended selector combined with :not() selector with inline CSS
  • Regular expression in :not(:-abp-properties()) with inline CSS
  • Regular expression in :not(:-abp-contains()) with inline CSS

Filter Options - Resource Types

Header

No support in QtWebEngine to check and modify reply header.

  • Script
  • Image
  • Comma
  • Stylesheet
Image
  • Static
  • Dynamic
Ping
  • Link based ping
    • No ping request was generated
  • Script based ping

Popup blocking implemented in the Merge Request 121.

Popup
  • Link based popup
  • Script based popup (tab)
  • Script based popup (window)
Script
  • Script
Stylesheet
  • Stylesheet
Subdocument
  • Subdocument
WebSocket
  • WebSocket
XMLHTTPRequest
  • XMLHTTPRequest

Filter Options - Resource Type Exceptions

Header Exception

No support in QtWebEngine to check and modify the reaply header.

  • Image header exception
Image Exception
  • Basic usage
  • Deep subdomain exception
Ping Exception
  • Basic usage
    • This example uses “link ping” which does not seem to work. By using the “script ping” example from “Filters - Ping” section, the Exception does not work.
    • My testing could be wrong.
Popup Exception
  • Link based popup exception
  • Script based popup exception (tab)
  • Script based popup exception (window)
Script Exception
  • Exception usage
Stylesheet Exception
  • Exception usage
Subdocument Exception
  • Exception usage
WebSocket Exception
  • Exception usage
XMLHTTPRequest Exception
  • Exception usage

Filter Options - Constraints

Domain
  • Static
  • Dynamic
Wildcard Domain
  • Element Hiding: Contains with Wildcards
  • Element Hiding with ID
  • Element Hiding: Attribute Selector
  • Element Hiding Emulation: Basic :-abp-properties() usage
  • Element Hiding Emulation: Basic :-abp-has() usage
  • Element Hiding Emulation Chained extended selectors
  • Element Hide Emulation: wildcard in extended selector and wildcard in domain
  • Element Hiding Emulation: Regular expression in :-abp-contains()
Match Case
  • Static
  • Dynamic
Other
  • Script
Third Party
  • Block Third Party
    • Nothing is blocked.
    • Falkon treats the example rule as a domain instead of ending filename, the rule should probably contain | at the end or Falkon implementation assumes different behaviour in this case.
  • Block First Party
    • Both images are blocked.

Filter Options - Exceptions

Document
  • Document
Elem Hide
  • Basic usage
  • iFrame
    • Does not seem to block the element properly.
Element Hiding Exception
  • Exception usage
Inline CSS Exception
  • Inline CSS with exception usage
Generic Block
  • Basic usage
Generic Hide
  • Basic usage
iFrame Exception
  • iFrame content rewritten by script
iFrame Subdomains Exception
  • iFrame subdomains exception
  • combined $subdocument and $document options in exception
Sitekey on MV2
  • Sitekey
Sitekey on MV3
  • Sitekey

Filter Options - Content Security Policy

CSP All scripts
  • All scripts
CSP Specific site
  • Specific site
  • frame-src
CSP Exception
  • Exception usage
CSP Generic Block Exception
  • Genericblock Exception usage

Filter Options - Rewrite

Implemented in the Merge Request 116.

Rewrite
  • Script
  • Stylesheet
  • Subdocument
  • Text
  • 1x1 GIF
  • 2x2 PNG
  • 3x2 PNG
  • 32x32 PNG
  • Audio
  • Video

Snippets

An initial implementation of snippets can be found in Merge Request 29 and it needs a full review to be merged. I do not want to include complicated code which I do not understand because I will have to maintain it.

abort-current-inline-script
  • Basic usage
  • Search usage
  • Regex usage
abort-on-property-read
  • Basic usage
  • Sub property
  • Function property
abort-on-property-write
  • Basic usage
  • Sub property
  • Function property
abort-on-iframe-property-read
  • Basic usage
  • Sub property
  • Multiple properties
abort-on-iframe-property-write
  • Basic usage
  • Sub property
  • Multiple properties
hide-if-contains
  • Static usage
  • Dynamic usage
  • Search usage
  • Regex usage
  • Frame usage
hide-if-contains-and-matches-style
  • Static usage
  • Dynamic usage
hide-if-contains-image
  • Basic usage
hide-if-contains-similar-text
  • Basic usage
hide-if-contains-visible-text
  • Basic usage
  • ::content usage
hide-if-has-and-matches-style
  • Basic usage
  • Legit elements
hide-if-labelled-by
  • Basic usage
hide-if-matches-computed-xpath
  • Hide when class changes dynamically based on a string found in another element
  • Hide when class matches regex group
hide-if-matches-xpath
  • Basic static usage
  • Class Usage
  • Hide if Id starts with
hide-if-matches-xpath3
  • Hide if class matches regex
  • Normalize and join strings
  • Cast to number
hide-if-shadow-contains
  • Basic usage
  • Regex usage
JSON override
  • json-override
JSON prune
  • json-prune
Override Property Read
  • override-property-read
simulate-mouse-event
  • simulate-mouse-event
skip-video
  • skip-video
strip-fetch-query-parameter
  • Basic usage
  • Other usage

Circumvention

Anonymous frame document.write()
  • Anonymous frame document.write()
    • Partial, works on Top frame but not on Sub frames.
Inline Style !important
  • Inline style !important

Service Worker

Blocking a service worker script
  • Blocking a service worker script
  • Allowing a service worker script by an exception filter
Blocking a request from a service worker scrip
  • Blocking a request from a service worker script
  • Allowing a request from a service worker script by an exception filter

Articles from blogs I follow:

What if one of your online friends dies unexpectedly?

A lot of people experience online friends "vanishing" without notice. A new nonprofit project tries to help prevent this issue.

via unixdigest.com January 10, 2025

Calamares towards 3.3.11

I’m going to change up the Calamares release process a little. It’s been slow going as a community-maintained project – which isn’t to say that that is a bad thing. Just slow. I’ve decided to make releases marginally more predictable than “when [ade] has …

via [bobulate] October 24, 2024

Signing Android Apps Using a YubiKey (on NixOS)

In my spare time, I currently develop two Android apps using Flutter: AniTrack, a simple anime and manga tracker based on my own needs, and Moxxy, a modern XMPP client. While I don't provide release builds for AniTrack, I do for Moxxy. Those are signed u…

via PapaTutuWawa's Blog July 24, 2023

Generated by openring