From 5459095925c15b21590d0d2d3773d564b274eaac Mon Sep 17 00:00:00 2001 From: Anton Lazarev Date: Thu, 15 May 2025 17:01:02 -0700 Subject: [PATCH] support `$all` this won't include `popup`, `inline-script`, or `inline-font` for now due to lack of support for the individual options, but we may as well convert `$all` into all supported types. --- src/engine.rs | 8 ++++++++ src/filters/network.rs | 9 ++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/engine.rs b/src/engine.rs index cabedded..6c9947b0 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -572,6 +572,14 @@ mod tests { } } + #[test] + fn explicit_all() { + let engine = Engine::from_rules_debug(["*$all,domain=rarvinzp.click|ytrqcxat.click"], Default::default()); + for content_type in ["script", "document", "subdocument", "font", "xmlhttprequest"] { + assert!(engine.check_network_request(&Request::new("https://example.com", "https://rarvinzp.click", content_type).unwrap()).matched); + } + } + #[test] fn generichide() { let filters = [ diff --git a/src/filters/network.rs b/src/filters/network.rs index 6dd2e822..074f6f3b 100644 --- a/src/filters/network.rs +++ b/src/filters/network.rs @@ -42,6 +42,8 @@ pub enum NetworkFilterError { NegatedGenericHide, #[error("negated document")] NegatedDocument, + #[error("negated all")] + NegatedAll, #[error("generichide without exception")] GenericHideWithoutException, #[error("empty redirection")] @@ -283,6 +285,7 @@ enum NetworkFilterOption { XmlHttpRequest(bool), Websocket(bool), Font(bool), + All, } impl NetworkFilterOption { @@ -298,7 +301,8 @@ impl NetworkFilterOption { | Self::Subdocument(..) | Self::XmlHttpRequest(..) | Self::Websocket(..) - | Self::Font(..)) + | Self::Font(..) + | Self::All) } pub fn is_redirection(&self) -> bool { @@ -457,6 +461,8 @@ fn parse_filter_options(raw_options: &str) -> Result, N ("xmlhttprequest", negated) | ("xhr", negated) => NetworkFilterOption::XmlHttpRequest(!negated), ("websocket", negated) => NetworkFilterOption::Websocket(!negated), ("font", negated) => NetworkFilterOption::Font(!negated), + ("all", true) => return Err(NetworkFilterError::NegatedAll), + ("all", false) => NetworkFilterOption::All, (_, _) => return Err(NetworkFilterError::UnrecognisedOption), }); } @@ -639,6 +645,7 @@ impl NetworkFilter { NetworkFilterOption::XmlHttpRequest(enabled) => apply_content_type!(FROM_XMLHTTPREQUEST, enabled), NetworkFilterOption::Websocket(enabled) => apply_content_type!(FROM_WEBSOCKET, enabled), NetworkFilterOption::Font(enabled) => apply_content_type!(FROM_FONT, enabled), + NetworkFilterOption::All => apply_content_type!(FROM_ALL_TYPES, true), } }); }