Skip to content

Commit 72b4e45

Browse files
committed
update engine behavior for part 2 of redirect/important fixes
1 parent ae9d734 commit 72b4e45

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

src/blocker.rs

+4-7
Original file line numberDiff line numberDiff line change
@@ -181,16 +181,13 @@ impl Blocker {
181181
.importants
182182
.check(request, &request_tokens, &NO_TAGS);
183183

184+
let redirect_filter = self.redirects.check(request, &request_tokens, &NO_TAGS);
185+
184186
// only check the rest of the rules if not previously matched
185187
let filter = if important_filter.is_none() && !matched_rule {
186188
#[cfg(feature = "metrics")]
187189
print!("tagged\t");
188190
self.filters_tagged.check(request, &request_tokens, &self.tags_enabled)
189-
.or_else(|| {
190-
#[cfg(feature = "metrics")]
191-
print!("redirects\t");
192-
self.redirects.check(request, &request_tokens, &NO_TAGS)
193-
})
194191
.or_else(|| {
195192
#[cfg(feature = "metrics")]
196193
print!("filters\t");
@@ -229,7 +226,7 @@ impl Blocker {
229226
println!();
230227

231228
// only match redirects if we have them set up
232-
let redirect: Option<String> = filter.as_ref().and_then(|f| {
229+
let redirect: Option<String> = redirect_filter.as_ref().and_then(|f| {
233230
// Filter redirect option is set
234231
if let Some(redirect) = f.redirect.as_ref() {
235232
// And we have a matching redirect resource
@@ -248,7 +245,7 @@ impl Blocker {
248245
});
249246

250247
// If something has already matched before but we don't know what, still return a match
251-
let matched = exception.is_none() && (filter.is_some() || matched_rule);
248+
let matched = exception.is_none() && (filter.is_some() || redirect_filter.is_some() || matched_rule);
252249
BlockerResult {
253250
matched,
254251
explicit_cancel: matched && filter.is_some() && filter.as_ref().map(|f| f.is_explicit_cancel()).unwrap_or_else(|| false),

src/engine.rs

+21
Original file line numberDiff line numberDiff line change
@@ -556,4 +556,25 @@ mod tests {
556556
assert_eq!(result.generichide, expected_generichide);
557557
});
558558
}
559+
560+
#[test]
561+
fn important_redirect() {
562+
let mut filter_set = FilterSet::new(true);
563+
filter_set.add_filters(&vec![
564+
"||addthis.com^$important,3p,domain=~missingkids.com|~missingkids.org|~sainsburys.jobs|~sitecore.com|~amd.com".to_string(),
565+
"||addthis.com/*/addthis_widget.js$script,redirect=addthis.com/addthis_widget.js".to_string(),
566+
], FilterFormat::Standard);
567+
let mut engine = Engine::from_filter_set(filter_set, false);
568+
569+
engine.add_resource(Resource {
570+
name: "addthis.com/addthis_widget.js".to_owned(),
571+
aliases: vec![],
572+
kind: ResourceType::Mime(MimeType::ApplicationJavascript),
573+
content: "window.addthis = undefined".to_string(),
574+
});
575+
576+
let result = engine.check_network_urls("https://s7.addthis.com/js/250/addthis_widget.js?pub=resto", "https://www.rhmodern.com/catalog/product/product.jsp?productId=prod14970086&categoryId=cat7150028", "script");
577+
578+
assert!(result.redirect.is_some());
579+
}
559580
}

0 commit comments

Comments
 (0)