Index: components/subresource_filter/core/common/indexed_ruleset_unittest.cc |
diff --git a/components/subresource_filter/core/common/indexed_ruleset_unittest.cc b/components/subresource_filter/core/common/indexed_ruleset_unittest.cc |
index 4dd8079b53362512c2775967e55772c1d01f3a00..d9a3ff48f29b7ac30cbe1f398591ef4f41058b9c 100644 |
--- a/components/subresource_filter/core/common/indexed_ruleset_unittest.cc |
+++ b/components/subresource_filter/core/common/indexed_ruleset_unittest.cc |
@@ -44,7 +44,18 @@ class IndexedRulesetTest : public testing::Test { |
proto::ElementType element_type = proto::ELEMENT_TYPE_OTHER) const { |
DCHECK_NE(matcher_.get(), nullptr); |
url::Origin origin = GetOrigin(initiator); |
- return matcher_->IsAllowed(GURL(url), origin, element_type); |
+ return !matcher_->ShouldDisallowResourceLoad(GURL(url), origin, |
+ element_type); |
+ } |
+ |
+ bool ShouldDeactivate(const char* document_url, |
+ const char* initiator = nullptr, |
+ proto::ActivationType activation_type = |
+ proto::ACTIVATION_TYPE_UNSPECIFIED) const { |
+ DCHECK(matcher_); |
+ url::Origin origin = GetOrigin(initiator); |
+ return matcher_->ShouldDisableFilteringForDocument(GURL(document_url), |
+ origin, activation_type); |
} |
proto::UrlRule CreateRule(const UrlPattern& url_pattern, |
@@ -82,6 +93,14 @@ class IndexedRulesetTest : public testing::Test { |
indexer_.AddUrlRule(rule); |
} |
+ void AddWhitelistRuleWithActivationTypes(const UrlPattern& url_pattern, |
+ int32_t activation_types) { |
+ proto::UrlRule rule = CreateRule(url_pattern, kAnyParty, true); |
+ rule.set_element_types(proto::ELEMENT_TYPE_UNSPECIFIED); |
+ rule.set_activation_types(activation_types); |
+ indexer_.AddUrlRule(rule); |
+ } |
+ |
void AddBlacklistRule(const UrlPattern& url_pattern, |
const std::vector<std::string>& domains) { |
proto::UrlRule rule = CreateRule(url_pattern, kAnyParty, false); |
@@ -472,6 +491,55 @@ TEST_F(IndexedRulesetTest, OneRuleWithElementTypes) { |
} |
} |
+TEST_F(IndexedRulesetTest, OneRuleWithActivationTypes) { |
+ constexpr proto::ActivationType kNone = proto::ACTIVATION_TYPE_UNSPECIFIED; |
+ constexpr proto::ActivationType kDocument = proto::ACTIVATION_TYPE_DOCUMENT; |
+ |
+ const struct { |
+ const char* url_pattern; |
+ int32_t activation_types; |
+ |
+ const char* document_url; |
+ proto::ActivationType activation_type; |
+ bool expect_disabled; |
+ } kTestCases[] = { |
+ {"example.com", kDocument, "http://example.com", kDocument, true}, |
+ {"xample.com", kDocument, "http://example.com", kDocument, true}, |
+ {"exampl.com", kDocument, "http://example.com", kDocument, false}, |
+ |
+ {"example.com", kNone, "http://example.com", kDocument, false}, |
+ {"example.com", kDocument, "http://example.com", kNone, false}, |
+ {"example.com", kNone, "http://example.com", kNone, false}, |
+ |
+ // Invalid GURL. |
+ {"example.com", kDocument, "http;//example.com", kDocument, false}, |
+ }; |
+ |
+ for (const auto& test_case : kTestCases) { |
+ SCOPED_TRACE(testing::Message() |
+ << "Rule: " << test_case.url_pattern |
+ << "; ActivationTypes: " << (int)test_case.activation_types |
+ << "; DocURL: " << test_case.document_url |
+ << "; ActivationType: " << (int)test_case.activation_type); |
+ |
+ AddWhitelistRuleWithActivationTypes( |
+ UrlPattern(test_case.url_pattern, kSubstring), |
+ test_case.activation_types); |
+ Finish(); |
+ |
+ EXPECT_EQ(test_case.expect_disabled, |
+ ShouldDeactivate(test_case.document_url, nullptr /* initiator */, |
+ test_case.activation_type)); |
+ EXPECT_EQ(test_case.expect_disabled, |
+ ShouldDeactivate(test_case.document_url, "http://example.com/", |
+ test_case.activation_type)); |
+ EXPECT_EQ(test_case.expect_disabled, |
+ ShouldDeactivate(test_case.document_url, "http://xmpl.com/", |
+ test_case.activation_type)); |
+ Reset(); |
+ } |
+} |
+ |
TEST_F(IndexedRulesetTest, EmptyRuleset) { |
Finish(); |
EXPECT_TRUE(ShouldAllow("http://example.com")); |
@@ -513,4 +581,18 @@ TEST_F(IndexedRulesetTest, BlacklistWhitelist) { |
EXPECT_FALSE(ShouldAllow("http://blacklisted.com?filter=on")); |
} |
+TEST_F(IndexedRulesetTest, BlacklistAndActivationType) { |
+ const auto kDocument = proto::ACTIVATION_TYPE_DOCUMENT; |
+ |
+ AddSimpleRule(UrlPattern("example.com", kSubstring), false); |
+ AddWhitelistRuleWithActivationTypes(UrlPattern("example.com", kSubstring), |
+ kDocument); |
+ Finish(); |
+ |
+ EXPECT_TRUE(ShouldDeactivate("https://example.com", nullptr, kDocument)); |
+ EXPECT_FALSE(ShouldDeactivate("https://xample.com", nullptr, kDocument)); |
+ EXPECT_FALSE(ShouldAllow("https://example.com")); |
+ EXPECT_TRUE(ShouldAllow("https://xample.com")); |
+} |
+ |
} // namespace subresource_filter |