Skip to content

Commit 9c7942b

Browse files
Oleg Labudkoartemiv4nov
Oleg Labudko
authored andcommitted
Pull request #86: AG-17604 Allow search ads and the self-promotion of websites option doesn't unblock search ads
Merge in ADGUARD-IOS/safari-converter from fix/AG-17604 to master * commit 'f70551ca7033479dd8b89ff43c3d32d8b3a01053': fixed applying exception domains and added tests
2 parents d22fa6e + f70551c commit 9c7942b

File tree

2 files changed

+133
-1
lines changed

2 files changed

+133
-1
lines changed

Sources/ContentBlockerConverter/Compiler/Compiler.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ class Compiler {
165165
// First check that domain is not redundant
166166
let applicable = domainsList?.firstIndex(of: domain) != nil;
167167
if (!applicable) {
168-
return;
168+
continue
169169
}
170170

171171
// remove exception domain

Tests/ContentBlockerConverterTests/ContentBlockerConverterTests.swift

+132
Original file line numberDiff line numberDiff line change
@@ -2330,6 +2330,136 @@ final class ContentBlockerConverterTests: XCTestCase {
23302330
XCTAssertEqual(decoded[1].action.type, "css-extended")
23312331
XCTAssertEqual(decoded[1].action.css, ":xpath(//div[@id='stream_pagelet'])")
23322332
}
2333+
2334+
func testApplyMultidomainCosmeticExclusions() {
2335+
var rules = [
2336+
"test.com,example.org###banner",
2337+
"example.org#@##banner",
2338+
]
2339+
var result = converter.convertArray(rules: rules, safariVersion: .safari15)
2340+
XCTAssertEqual(result.convertedCount, 1)
2341+
XCTAssertEqual(result.totalConvertedCount, 1)
2342+
XCTAssertEqual(result.errorsCount, 0)
2343+
2344+
var decoded = try! parseJsonString(json: result.converted)
2345+
XCTAssertEqual(decoded.count, 1)
2346+
XCTAssertEqual(decoded[0].trigger.ifDomain, ["*test.com"])
2347+
XCTAssertEqual(decoded[0].action.type, "css-display-none")
2348+
XCTAssertEqual(decoded[0].action.selector, "#banner")
2349+
2350+
rules = [
2351+
"test.com,example.org###banner",
2352+
"example.com,example.org#@##banner",
2353+
]
2354+
result = converter.convertArray(rules: rules, safariVersion: .safari15)
2355+
XCTAssertEqual(result.convertedCount, 1)
2356+
XCTAssertEqual(result.totalConvertedCount, 1)
2357+
XCTAssertEqual(result.errorsCount, 0)
2358+
2359+
decoded = try! parseJsonString(json: result.converted)
2360+
XCTAssertEqual(decoded.count, 1)
2361+
XCTAssertEqual(decoded[0].trigger.ifDomain, ["*test.com"])
2362+
XCTAssertEqual(decoded[0].action.type, "css-display-none")
2363+
XCTAssertEqual(decoded[0].action.selector, "#banner")
2364+
2365+
rules = [
2366+
"test1.com,example.org,test2.com###banner",
2367+
"example.com,example.org,test1.com#@##banner",
2368+
]
2369+
result = converter.convertArray(rules: rules, safariVersion: .safari15)
2370+
XCTAssertEqual(result.convertedCount, 1)
2371+
XCTAssertEqual(result.totalConvertedCount, 1)
2372+
XCTAssertEqual(result.errorsCount, 0)
2373+
2374+
decoded = try! parseJsonString(json: result.converted)
2375+
XCTAssertEqual(decoded.count, 1)
2376+
XCTAssertEqual(decoded[0].trigger.ifDomain, ["*test2.com"])
2377+
XCTAssertEqual(decoded[0].action.type, "css-display-none")
2378+
XCTAssertEqual(decoded[0].action.selector, "#banner")
2379+
2380+
rules = [
2381+
"test1.com,test2.com,test3.com###banner",
2382+
"example1.org,example2.org###banner",
2383+
"test1.com,example2.org#@##banner",
2384+
"test2.com,example1.org#@##banner",
2385+
]
2386+
result = converter.convertArray(rules: rules, safariVersion: .safari15)
2387+
XCTAssertEqual(result.convertedCount, 1)
2388+
XCTAssertEqual(result.totalConvertedCount, 1)
2389+
XCTAssertEqual(result.errorsCount, 0)
2390+
2391+
decoded = try! parseJsonString(json: result.converted)
2392+
XCTAssertEqual(decoded.count, 1)
2393+
XCTAssertEqual(decoded[0].trigger.ifDomain, ["*test3.com"])
2394+
XCTAssertEqual(decoded[0].action.type, "css-display-none")
2395+
XCTAssertEqual(decoded[0].action.selector, "#banner")
2396+
}
2397+
2398+
func testApplyMultidomainAdvancedExclusions() {
2399+
var rules = [
2400+
"example.com,test.com#$##adv{visibility:hidden;}",
2401+
"test.com#@$##adv{visibility:hidden;}",
2402+
]
2403+
var result = converter.convertArray(rules: rules, safariVersion: .safari15, advancedBlocking: true)
2404+
XCTAssertEqual(result.convertedCount, 0)
2405+
XCTAssertEqual(result.advancedBlockingConvertedCount, 1)
2406+
XCTAssertEqual(result.totalConvertedCount, 1)
2407+
XCTAssertEqual(result.errorsCount, 0)
2408+
2409+
var decoded = try! parseJsonString(json: result.advancedBlocking!)
2410+
XCTAssertEqual(decoded.count, 1)
2411+
XCTAssertEqual(decoded[0].trigger.ifDomain, ["*example.com"])
2412+
XCTAssertEqual(decoded[0].action.type, "css-inject")
2413+
XCTAssertEqual(decoded[0].action.css, "#adv{visibility:hidden;}")
2414+
2415+
rules = [
2416+
"test.com,example.org#$##adv{visibility:hidden;}",
2417+
"example.com,example.org#@$##adv{visibility:hidden;}",
2418+
]
2419+
result = converter.convertArray(rules: rules, safariVersion: .safari15, advancedBlocking: true)
2420+
XCTAssertEqual(result.convertedCount, 0)
2421+
XCTAssertEqual(result.advancedBlockingConvertedCount, 1)
2422+
XCTAssertEqual(result.totalConvertedCount, 1)
2423+
XCTAssertEqual(result.errorsCount, 0)
2424+
2425+
decoded = try! parseJsonString(json: result.advancedBlocking!)
2426+
XCTAssertEqual(decoded.count, 1)
2427+
XCTAssertEqual(decoded[0].trigger.ifDomain, ["*test.com"])
2428+
XCTAssertEqual(decoded[0].action.type, "css-inject")
2429+
XCTAssertEqual(decoded[0].action.css, "#adv{visibility:hidden;}")
2430+
2431+
rules = [
2432+
"test.com,example.org#?#div:has(> a[target='_blank'])",
2433+
"example.com,example.org#@?#div:has(> a[target='_blank'])",
2434+
]
2435+
result = converter.convertArray(rules: rules, safariVersion: .safari15, advancedBlocking: true)
2436+
XCTAssertEqual(result.convertedCount, 0)
2437+
XCTAssertEqual(result.advancedBlockingConvertedCount, 1)
2438+
XCTAssertEqual(result.totalConvertedCount, 1)
2439+
XCTAssertEqual(result.errorsCount, 0)
2440+
2441+
decoded = try! parseJsonString(json: result.advancedBlocking!)
2442+
XCTAssertEqual(decoded.count, 1)
2443+
XCTAssertEqual(decoded[0].trigger.ifDomain, ["*test.com"])
2444+
XCTAssertEqual(decoded[0].action.type, "css-extended")
2445+
XCTAssertEqual(decoded[0].action.css, "div:has(> a[target='_blank'])")
2446+
2447+
rules = [
2448+
"example.org,test1.com,test2.com#%#window.adv_id = null;",
2449+
"example.com,example.org,test1.com#@%#window.adv_id = null;",
2450+
]
2451+
result = converter.convertArray(rules: rules, safariVersion: .safari15, advancedBlocking: true)
2452+
XCTAssertEqual(result.convertedCount, 0)
2453+
XCTAssertEqual(result.advancedBlockingConvertedCount, 1)
2454+
XCTAssertEqual(result.totalConvertedCount, 1)
2455+
XCTAssertEqual(result.errorsCount, 0)
2456+
2457+
decoded = try! parseJsonString(json: result.advancedBlocking!)
2458+
XCTAssertEqual(decoded.count, 1)
2459+
XCTAssertEqual(decoded[0].trigger.ifDomain, ["*test2.com"])
2460+
XCTAssertEqual(decoded[0].action.type, "script")
2461+
XCTAssertEqual(decoded[0].action.script, "window.adv_id = null;")
2462+
}
23332463

23342464
static var allTests = [
23352465
("testEmpty", testEmpty),
@@ -2391,5 +2521,7 @@ final class ContentBlockerConverterTests: XCTestCase {
23912521
("testBlockingRulesWithNonAsciiCharacters", testBlockingRulesWithNonAsciiCharacters),
23922522
("testConvertRulesWithPseudoClassHas", testConvertRulesWithPseudoClassHas),
23932523
("testXpathRules", testXpathRules),
2524+
("testApplyMultidomainCosmeticExclusions", testApplyMultidomainCosmeticExclusions),
2525+
("testApplyMultidomainAdvancedExclusions", testApplyMultidomainAdvancedExclusions),
23942526
]
23952527
}

0 commit comments

Comments
 (0)