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