Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4279)

Unified Diff: chrome/common/extensions/matcher/url_matcher_unittest.cc

Issue 10910179: Event matching by regular expression matching on URLs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ascii artiste Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/matcher/url_matcher_unittest.cc
diff --git a/chrome/common/extensions/matcher/url_matcher_unittest.cc b/chrome/common/extensions/matcher/url_matcher_unittest.cc
index acf414fc6ce19ebb7a937d06d2918c6c3f8ceffb..661dc50668ca4401f46ad8a152d8274fc4ee0234 100644
--- a/chrome/common/extensions/matcher/url_matcher_unittest.cc
+++ b/chrome/common/extensions/matcher/url_matcher_unittest.cc
@@ -15,19 +15,19 @@ namespace extensions {
//
TEST(URLMatcherConditionTest, Constructors) {
- SubstringPattern pattern("example.com", 1);
+ StringPattern pattern("example.com", 1);
URLMatcherCondition m1(URLMatcherCondition::HOST_SUFFIX, &pattern);
EXPECT_EQ(URLMatcherCondition::HOST_SUFFIX, m1.criterion());
- EXPECT_EQ(&pattern, m1.substring_pattern());
+ EXPECT_EQ(&pattern, m1.string_pattern());
URLMatcherCondition m2;
m2 = m1;
EXPECT_EQ(URLMatcherCondition::HOST_SUFFIX, m2.criterion());
- EXPECT_EQ(&pattern, m2.substring_pattern());
+ EXPECT_EQ(&pattern, m2.string_pattern());
URLMatcherCondition m3(m1);
EXPECT_EQ(URLMatcherCondition::HOST_SUFFIX, m3.criterion());
- EXPECT_EQ(&pattern, m3.substring_pattern());
+ EXPECT_EQ(&pattern, m3.string_pattern());
}
TEST(URLMatcherSchemeFilter, TestMatching) {
@@ -61,7 +61,7 @@ TEST(URLMatcherPortFilter, TestMatching) {
}
TEST(URLMatcherConditionTest, IsFullURLCondition) {
- SubstringPattern pattern("example.com", 1);
+ StringPattern pattern("example.com", 1);
EXPECT_FALSE(URLMatcherCondition(URLMatcherCondition::HOST_SUFFIX,
&pattern).IsFullURLCondition());
@@ -86,30 +86,30 @@ TEST(URLMatcherConditionTest, IsMatch) {
GURL url1("http://www.example.com/www.foobar.com/index.html");
GURL url2("http://www.foobar.com/example.com/index.html");
- SubstringPattern pattern("example.com", 1);
+ StringPattern pattern("example.com", 1);
URLMatcherCondition m1(URLMatcherCondition::HOST_SUFFIX, &pattern);
- std::set<SubstringPattern::ID> matching_substring_patterns;
+ std::set<StringPattern::ID> matching_patterns;
// matches = {0} --> matcher did not indicate that m1 was a match.
- matching_substring_patterns.insert(0);
- EXPECT_FALSE(m1.IsMatch(matching_substring_patterns, url1));
+ matching_patterns.insert(0);
+ EXPECT_FALSE(m1.IsMatch(matching_patterns, url1));
// matches = {0, 1} --> matcher did indicate that m1 was a match.
- matching_substring_patterns.insert(1);
- EXPECT_TRUE(m1.IsMatch(matching_substring_patterns, url1));
+ matching_patterns.insert(1);
+ EXPECT_TRUE(m1.IsMatch(matching_patterns, url1));
// For m2 we use a HOST_CONTAINS test, which requires a post-validation
// whether the match reported by the SubstringSetMatcher occurs really
// in the correct url component.
URLMatcherCondition m2(URLMatcherCondition::HOST_CONTAINS, &pattern);
- EXPECT_TRUE(m2.IsMatch(matching_substring_patterns, url1));
- EXPECT_FALSE(m2.IsMatch(matching_substring_patterns, url2));
+ EXPECT_TRUE(m2.IsMatch(matching_patterns, url1));
+ EXPECT_FALSE(m2.IsMatch(matching_patterns, url2));
}
TEST(URLMatcherConditionTest, Comparison) {
- SubstringPattern p1("foobar.com", 1);
- SubstringPattern p2("foobar.com", 2);
+ StringPattern p1("foobar.com", 1);
+ StringPattern p2("foobar.com", 2);
// The first component of each test is expected to be < than the second.
URLMatcherCondition test_smaller[][2] = {
{URLMatcherCondition(URLMatcherCondition::HOST_PREFIX, &p1),
@@ -148,7 +148,7 @@ TEST(URLMatcherConditionTest, Comparison) {
namespace {
bool Matches(const URLMatcherCondition& condition, std::string text) {
- return text.find(condition.substring_pattern()->pattern()) !=
+ return text.find(condition.string_pattern()->pattern()) !=
std::string::npos;
}
@@ -205,6 +205,8 @@ TEST(URLMatcherConditionFactoryTest, Criteria) {
factory.CreateURLContainsCondition("foo").criterion());
EXPECT_EQ(URLMatcherCondition::URL_EQUALS,
factory.CreateURLEqualsCondition("foo").criterion());
+ EXPECT_EQ(URLMatcherCondition::URL_MATCHES,
+ factory.CreateURLMatchesCondition("foo").criterion());
}
TEST(URLMatcherConditionFactoryTest, TestSingletonProperty) {
@@ -212,21 +214,30 @@ TEST(URLMatcherConditionFactoryTest, TestSingletonProperty) {
URLMatcherCondition c1 = factory.CreateHostEqualsCondition("www.google.com");
URLMatcherCondition c2 = factory.CreateHostEqualsCondition("www.google.com");
EXPECT_EQ(c1.criterion(), c2.criterion());
- EXPECT_EQ(c1.substring_pattern(), c2.substring_pattern());
+ EXPECT_EQ(c1.string_pattern(), c2.string_pattern());
URLMatcherCondition c3 = factory.CreateHostEqualsCondition("www.google.de");
EXPECT_EQ(c2.criterion(), c3.criterion());
- EXPECT_NE(c2.substring_pattern(), c3.substring_pattern());
- EXPECT_NE(c2.substring_pattern()->id(), c3.substring_pattern()->id());
- EXPECT_NE(c2.substring_pattern()->pattern(),
- c3.substring_pattern()->pattern());
-
- // Check that all SubstringPattern singletons are freed if we call
+ EXPECT_NE(c2.string_pattern(), c3.string_pattern());
+ EXPECT_NE(c2.string_pattern()->id(), c3.string_pattern()->id());
+ EXPECT_NE(c2.string_pattern()->pattern(),
+ c3.string_pattern()->pattern());
+ URLMatcherCondition c4 = factory.CreateURLMatchesCondition("www.google.com");
+ URLMatcherCondition c5 = factory.CreateURLContainsCondition("www.google.com");
+ // Regex patterns and substring patterns do not share IDs.
+ EXPECT_EQ(c5.string_pattern()->pattern(), c4.string_pattern()->pattern());
+ EXPECT_NE(c5.string_pattern(), c4.string_pattern());
+ EXPECT_NE(c5.string_pattern()->id(), c4.string_pattern()->id());
+
+ // Check that all StringPattern singletons are freed if we call
// ForgetUnusedPatterns.
- SubstringPattern::ID old_id_1 = c1.substring_pattern()->id();
- factory.ForgetUnusedPatterns(std::set<SubstringPattern::ID>());
+ StringPattern::ID old_id_1 = c1.string_pattern()->id();
+ StringPattern::ID old_id_4 = c4.string_pattern()->id();
+ factory.ForgetUnusedPatterns(std::set<StringPattern::ID>());
EXPECT_TRUE(factory.IsEmpty());
- URLMatcherCondition c4 = factory.CreateHostEqualsCondition("www.google.com");
- EXPECT_NE(old_id_1, c4.substring_pattern()->id());
+ URLMatcherCondition c6 = factory.CreateHostEqualsCondition("www.google.com");
+ EXPECT_NE(old_id_1, c6.string_pattern()->id());
+ URLMatcherCondition c7 = factory.CreateURLMatchesCondition("www.google.com");
+ EXPECT_NE(old_id_4, c7.string_pattern()->id());
}
TEST(URLMatcherConditionFactoryTest, TestComponentSearches) {
@@ -374,7 +385,6 @@ TEST(URLMatcherConditionFactoryTest, TestFullSearches) {
EXPECT_TRUE(Matches(factory.CreateURLContainsCondition(":1234"), url));
}
-
//
// URLMatcherConditionSet
//
@@ -413,13 +423,13 @@ TEST(URLMatcherConditionSetTest, Matching) {
EXPECT_EQ(1, condition_set->id());
EXPECT_EQ(2u, condition_set->conditions().size());
- std::set<SubstringPattern::ID> matching_substring_patterns;
- matching_substring_patterns.insert(m1.substring_pattern()->id());
- EXPECT_FALSE(condition_set->IsMatch(matching_substring_patterns, url1));
+ std::set<StringPattern::ID> matching_patterns;
+ matching_patterns.insert(m1.string_pattern()->id());
+ EXPECT_FALSE(condition_set->IsMatch(matching_patterns, url1));
- matching_substring_patterns.insert(m2.substring_pattern()->id());
- EXPECT_TRUE(condition_set->IsMatch(matching_substring_patterns, url1));
- EXPECT_FALSE(condition_set->IsMatch(matching_substring_patterns, url2));
+ matching_patterns.insert(m2.string_pattern()->id());
+ EXPECT_TRUE(condition_set->IsMatch(matching_patterns, url1));
+ EXPECT_FALSE(condition_set->IsMatch(matching_patterns, url2));
// Test scheme filters.
scoped_refptr<URLMatcherConditionSet> condition_set2(
@@ -427,13 +437,13 @@ TEST(URLMatcherConditionSetTest, Matching) {
scoped_ptr<URLMatcherSchemeFilter>(
new URLMatcherSchemeFilter("https")),
scoped_ptr<URLMatcherPortFilter>(NULL)));
- EXPECT_FALSE(condition_set2->IsMatch(matching_substring_patterns, url1));
+ EXPECT_FALSE(condition_set2->IsMatch(matching_patterns, url1));
scoped_refptr<URLMatcherConditionSet> condition_set3(
new URLMatcherConditionSet(1, conditions,
scoped_ptr<URLMatcherSchemeFilter>(
new URLMatcherSchemeFilter("http")),
scoped_ptr<URLMatcherPortFilter>(NULL)));
- EXPECT_TRUE(condition_set3->IsMatch(matching_substring_patterns, url1));
+ EXPECT_TRUE(condition_set3->IsMatch(matching_patterns, url1));
// Test port filters.
std::vector<URLMatcherPortFilter::Range> ranges;
@@ -442,9 +452,27 @@ TEST(URLMatcherConditionSetTest, Matching) {
scoped_refptr<URLMatcherConditionSet> condition_set4(
new URLMatcherConditionSet(1, conditions,
scoped_ptr<URLMatcherSchemeFilter>(NULL), filter.Pass()));
- EXPECT_TRUE(condition_set4->IsMatch(matching_substring_patterns, url1));
- EXPECT_TRUE(condition_set4->IsMatch(matching_substring_patterns, url3));
- EXPECT_FALSE(condition_set4->IsMatch(matching_substring_patterns, url4));
+ EXPECT_TRUE(condition_set4->IsMatch(matching_patterns, url1));
+ EXPECT_TRUE(condition_set4->IsMatch(matching_patterns, url3));
+ EXPECT_FALSE(condition_set4->IsMatch(matching_patterns, url4));
+
+ // Test regex patterns.
+ matching_patterns.clear();
+ URLMatcherCondition r1 = factory.CreateURLMatchesCondition("/fo?oo");
+ std::set<URLMatcherCondition> regex_conditions;
+ regex_conditions.insert(r1);
+ scoped_refptr<URLMatcherConditionSet> condition_set5(
+ new URLMatcherConditionSet(1, regex_conditions));
+ EXPECT_FALSE(condition_set5->IsMatch(matching_patterns, url1));
+ matching_patterns.insert(r1.string_pattern()->id());
+ EXPECT_TRUE(condition_set5->IsMatch(matching_patterns, url1));
+
+ regex_conditions.insert(m1);
+ scoped_refptr<URLMatcherConditionSet> condition_set6(
+ new URLMatcherConditionSet(1, regex_conditions));
+ EXPECT_FALSE(condition_set6->IsMatch(matching_patterns, url1));
+ matching_patterns.insert(m1.string_pattern()->id());
+ EXPECT_TRUE(condition_set6->IsMatch(matching_patterns, url1));
}
@@ -486,9 +514,29 @@ TEST(URLMatcherTest, FullTest) {
// This should be the cached singleton.
int patternId1 = factory->CreateHostSuffixCondition(
- "example.com").substring_pattern()->id();
+ "example.com").string_pattern()->id();
+
+ // Third insert.
+ URLMatcherConditionSet::Conditions conditions3;
+ conditions3.insert(factory->CreateHostSuffixCondition("example.com"));
+ conditions3.insert(factory->CreateURLMatchesCondition("x.*[0-9]"));
+
+ const int kConditionSetId3 = 3;
+ URLMatcherConditionSet::Vector insert3;
+ insert3.push_back(make_scoped_refptr(
+ new URLMatcherConditionSet(kConditionSetId3, conditions3)));
+ matcher.AddConditionSets(insert3);
+ EXPECT_EQ(3u, matcher.MatchURL(url1).size());
+ EXPECT_EQ(1u, matcher.MatchURL(url2).size());
+
+ // Removal of third insert.
+ std::vector<URLMatcherConditionSet::ID> remove3;
+ remove3.push_back(kConditionSetId3);
+ matcher.RemoveConditionSets(remove3);
+ EXPECT_EQ(2u, matcher.MatchURL(url1).size());
+ EXPECT_EQ(1u, matcher.MatchURL(url2).size());
- // Removal of last insert.
+ // Removal of second insert.
std::vector<URLMatcherConditionSet::ID> remove2;
remove2.push_back(kConditionSetId2);
matcher.RemoveConditionSets(remove2);
@@ -507,9 +555,10 @@ TEST(URLMatcherTest, FullTest) {
// The cached singleton in matcher.condition_factory_ should be destroyed to
// free memory.
int patternId2 = factory->CreateHostSuffixCondition(
- "example.com").substring_pattern()->id();
+ "example.com").string_pattern()->id();
// If patternId1 and patternId2 are different that indicates that
- // matcher.condition_factory_ does not leak memory.
+ // matcher.condition_factory_ does not leak memory by holding onto
+ // unused patterns.
EXPECT_NE(patternId1, patternId2);
}

Powered by Google App Engine
This is Rietveld 408576698