OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/common/extensions/matcher/url_matcher.h" | 5 #include "chrome/common/extensions/matcher/url_matcher.h" |
6 | 6 |
7 #include "base/string_util.h" | 7 #include "base/string_util.h" |
8 #include "googleurl/src/gurl.h" | 8 #include "googleurl/src/gurl.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
11 namespace extensions { | 11 namespace extensions { |
12 | 12 |
13 // | 13 // |
14 // URLMatcherCondition | 14 // URLMatcherCondition |
15 // | 15 // |
16 | 16 |
17 TEST(URLMatcherConditionTest, Constructors) { | 17 TEST(URLMatcherConditionTest, Constructors) { |
18 SubstringPattern pattern("example.com", 1); | 18 StringPattern pattern("example.com", 1); |
19 URLMatcherCondition m1(URLMatcherCondition::HOST_SUFFIX, &pattern); | 19 URLMatcherCondition m1(URLMatcherCondition::HOST_SUFFIX, &pattern); |
20 EXPECT_EQ(URLMatcherCondition::HOST_SUFFIX, m1.criterion()); | 20 EXPECT_EQ(URLMatcherCondition::HOST_SUFFIX, m1.criterion()); |
21 EXPECT_EQ(&pattern, m1.substring_pattern()); | 21 EXPECT_EQ(&pattern, m1.string_pattern()); |
22 | 22 |
23 URLMatcherCondition m2; | 23 URLMatcherCondition m2; |
24 m2 = m1; | 24 m2 = m1; |
25 EXPECT_EQ(URLMatcherCondition::HOST_SUFFIX, m2.criterion()); | 25 EXPECT_EQ(URLMatcherCondition::HOST_SUFFIX, m2.criterion()); |
26 EXPECT_EQ(&pattern, m2.substring_pattern()); | 26 EXPECT_EQ(&pattern, m2.string_pattern()); |
27 | 27 |
28 URLMatcherCondition m3(m1); | 28 URLMatcherCondition m3(m1); |
29 EXPECT_EQ(URLMatcherCondition::HOST_SUFFIX, m3.criterion()); | 29 EXPECT_EQ(URLMatcherCondition::HOST_SUFFIX, m3.criterion()); |
30 EXPECT_EQ(&pattern, m3.substring_pattern()); | 30 EXPECT_EQ(&pattern, m3.string_pattern()); |
31 } | 31 } |
32 | 32 |
33 TEST(URLMatcherSchemeFilter, TestMatching) { | 33 TEST(URLMatcherSchemeFilter, TestMatching) { |
34 URLMatcherSchemeFilter filter1("https"); | 34 URLMatcherSchemeFilter filter1("https"); |
35 std::vector<std::string> filter2_content; | 35 std::vector<std::string> filter2_content; |
36 filter2_content.push_back("http"); | 36 filter2_content.push_back("http"); |
37 filter2_content.push_back("https"); | 37 filter2_content.push_back("https"); |
38 URLMatcherSchemeFilter filter2(filter2_content); | 38 URLMatcherSchemeFilter filter2(filter2_content); |
39 | 39 |
40 GURL matching_url("https://www.foobar.com"); | 40 GURL matching_url("https://www.foobar.com"); |
(...skipping 13 matching lines...) Expand all Loading... |
54 EXPECT_TRUE(filter.IsMatch(GURL("http://www.example.com:80"))); | 54 EXPECT_TRUE(filter.IsMatch(GURL("http://www.example.com:80"))); |
55 EXPECT_TRUE(filter.IsMatch(GURL("http://www.example.com:81"))); | 55 EXPECT_TRUE(filter.IsMatch(GURL("http://www.example.com:81"))); |
56 EXPECT_TRUE(filter.IsMatch(GURL("http://www.example.com:90"))); | 56 EXPECT_TRUE(filter.IsMatch(GURL("http://www.example.com:90"))); |
57 EXPECT_TRUE(filter.IsMatch(GURL("http://www.example.com:8080"))); | 57 EXPECT_TRUE(filter.IsMatch(GURL("http://www.example.com:8080"))); |
58 EXPECT_FALSE(filter.IsMatch(GURL("http://www.example.com:79"))); | 58 EXPECT_FALSE(filter.IsMatch(GURL("http://www.example.com:79"))); |
59 EXPECT_FALSE(filter.IsMatch(GURL("http://www.example.com:91"))); | 59 EXPECT_FALSE(filter.IsMatch(GURL("http://www.example.com:91"))); |
60 EXPECT_FALSE(filter.IsMatch(GURL("https://www.example.com"))); | 60 EXPECT_FALSE(filter.IsMatch(GURL("https://www.example.com"))); |
61 } | 61 } |
62 | 62 |
63 TEST(URLMatcherConditionTest, IsFullURLCondition) { | 63 TEST(URLMatcherConditionTest, IsFullURLCondition) { |
64 SubstringPattern pattern("example.com", 1); | 64 StringPattern pattern("example.com", 1); |
65 EXPECT_FALSE(URLMatcherCondition(URLMatcherCondition::HOST_SUFFIX, | 65 EXPECT_FALSE(URLMatcherCondition(URLMatcherCondition::HOST_SUFFIX, |
66 &pattern).IsFullURLCondition()); | 66 &pattern).IsFullURLCondition()); |
67 | 67 |
68 EXPECT_TRUE(URLMatcherCondition(URLMatcherCondition::HOST_CONTAINS, | 68 EXPECT_TRUE(URLMatcherCondition(URLMatcherCondition::HOST_CONTAINS, |
69 &pattern).IsFullURLCondition()); | 69 &pattern).IsFullURLCondition()); |
70 EXPECT_TRUE(URLMatcherCondition(URLMatcherCondition::PATH_CONTAINS, | 70 EXPECT_TRUE(URLMatcherCondition(URLMatcherCondition::PATH_CONTAINS, |
71 &pattern).IsFullURLCondition()); | 71 &pattern).IsFullURLCondition()); |
72 EXPECT_TRUE(URLMatcherCondition(URLMatcherCondition::QUERY_CONTAINS, | 72 EXPECT_TRUE(URLMatcherCondition(URLMatcherCondition::QUERY_CONTAINS, |
73 &pattern).IsFullURLCondition()); | 73 &pattern).IsFullURLCondition()); |
74 | 74 |
75 EXPECT_TRUE(URLMatcherCondition(URLMatcherCondition::URL_PREFIX, | 75 EXPECT_TRUE(URLMatcherCondition(URLMatcherCondition::URL_PREFIX, |
76 &pattern).IsFullURLCondition()); | 76 &pattern).IsFullURLCondition()); |
77 EXPECT_TRUE(URLMatcherCondition(URLMatcherCondition::URL_SUFFIX, | 77 EXPECT_TRUE(URLMatcherCondition(URLMatcherCondition::URL_SUFFIX, |
78 &pattern).IsFullURLCondition()); | 78 &pattern).IsFullURLCondition()); |
79 EXPECT_TRUE(URLMatcherCondition(URLMatcherCondition::URL_CONTAINS, | 79 EXPECT_TRUE(URLMatcherCondition(URLMatcherCondition::URL_CONTAINS, |
80 &pattern).IsFullURLCondition()); | 80 &pattern).IsFullURLCondition()); |
81 EXPECT_TRUE(URLMatcherCondition(URLMatcherCondition::URL_EQUALS, | 81 EXPECT_TRUE(URLMatcherCondition(URLMatcherCondition::URL_EQUALS, |
82 &pattern).IsFullURLCondition()); | 82 &pattern).IsFullURLCondition()); |
83 } | 83 } |
84 | 84 |
85 TEST(URLMatcherConditionTest, IsMatch) { | 85 TEST(URLMatcherConditionTest, IsMatch) { |
86 GURL url1("http://www.example.com/www.foobar.com/index.html"); | 86 GURL url1("http://www.example.com/www.foobar.com/index.html"); |
87 GURL url2("http://www.foobar.com/example.com/index.html"); | 87 GURL url2("http://www.foobar.com/example.com/index.html"); |
88 | 88 |
89 SubstringPattern pattern("example.com", 1); | 89 StringPattern pattern("example.com", 1); |
90 URLMatcherCondition m1(URLMatcherCondition::HOST_SUFFIX, &pattern); | 90 URLMatcherCondition m1(URLMatcherCondition::HOST_SUFFIX, &pattern); |
91 | 91 |
92 std::set<SubstringPattern::ID> matching_substring_patterns; | 92 std::set<StringPattern::ID> matching_patterns; |
93 | 93 |
94 // matches = {0} --> matcher did not indicate that m1 was a match. | 94 // matches = {0} --> matcher did not indicate that m1 was a match. |
95 matching_substring_patterns.insert(0); | 95 matching_patterns.insert(0); |
96 EXPECT_FALSE(m1.IsMatch(matching_substring_patterns, url1)); | 96 EXPECT_FALSE(m1.IsMatch(matching_patterns, url1)); |
97 | 97 |
98 // matches = {0, 1} --> matcher did indicate that m1 was a match. | 98 // matches = {0, 1} --> matcher did indicate that m1 was a match. |
99 matching_substring_patterns.insert(1); | 99 matching_patterns.insert(1); |
100 EXPECT_TRUE(m1.IsMatch(matching_substring_patterns, url1)); | 100 EXPECT_TRUE(m1.IsMatch(matching_patterns, url1)); |
101 | 101 |
102 // For m2 we use a HOST_CONTAINS test, which requires a post-validation | 102 // For m2 we use a HOST_CONTAINS test, which requires a post-validation |
103 // whether the match reported by the SubstringSetMatcher occurs really | 103 // whether the match reported by the SubstringSetMatcher occurs really |
104 // in the correct url component. | 104 // in the correct url component. |
105 URLMatcherCondition m2(URLMatcherCondition::HOST_CONTAINS, &pattern); | 105 URLMatcherCondition m2(URLMatcherCondition::HOST_CONTAINS, &pattern); |
106 EXPECT_TRUE(m2.IsMatch(matching_substring_patterns, url1)); | 106 EXPECT_TRUE(m2.IsMatch(matching_patterns, url1)); |
107 EXPECT_FALSE(m2.IsMatch(matching_substring_patterns, url2)); | 107 EXPECT_FALSE(m2.IsMatch(matching_patterns, url2)); |
108 } | 108 } |
109 | 109 |
110 TEST(URLMatcherConditionTest, Comparison) { | 110 TEST(URLMatcherConditionTest, Comparison) { |
111 SubstringPattern p1("foobar.com", 1); | 111 StringPattern p1("foobar.com", 1); |
112 SubstringPattern p2("foobar.com", 2); | 112 StringPattern p2("foobar.com", 2); |
113 // The first component of each test is expected to be < than the second. | 113 // The first component of each test is expected to be < than the second. |
114 URLMatcherCondition test_smaller[][2] = { | 114 URLMatcherCondition test_smaller[][2] = { |
115 {URLMatcherCondition(URLMatcherCondition::HOST_PREFIX, &p1), | 115 {URLMatcherCondition(URLMatcherCondition::HOST_PREFIX, &p1), |
116 URLMatcherCondition(URLMatcherCondition::HOST_SUFFIX, &p1)}, | 116 URLMatcherCondition(URLMatcherCondition::HOST_SUFFIX, &p1)}, |
117 {URLMatcherCondition(URLMatcherCondition::HOST_PREFIX, &p1), | 117 {URLMatcherCondition(URLMatcherCondition::HOST_PREFIX, &p1), |
118 URLMatcherCondition(URLMatcherCondition::HOST_PREFIX, &p2)}, | 118 URLMatcherCondition(URLMatcherCondition::HOST_PREFIX, &p2)}, |
119 {URLMatcherCondition(URLMatcherCondition::HOST_PREFIX, NULL), | 119 {URLMatcherCondition(URLMatcherCondition::HOST_PREFIX, NULL), |
120 URLMatcherCondition(URLMatcherCondition::HOST_PREFIX, &p2)}, | 120 URLMatcherCondition(URLMatcherCondition::HOST_PREFIX, &p2)}, |
121 {URLMatcherCondition(URLMatcherCondition::HOST_PREFIX, &p1), | 121 {URLMatcherCondition(URLMatcherCondition::HOST_PREFIX, &p1), |
122 URLMatcherCondition(URLMatcherCondition::HOST_SUFFIX, NULL)}, | 122 URLMatcherCondition(URLMatcherCondition::HOST_SUFFIX, NULL)}, |
(...skipping 18 matching lines...) Expand all Loading... |
141 } | 141 } |
142 } | 142 } |
143 | 143 |
144 // | 144 // |
145 // URLMatcherConditionFactory | 145 // URLMatcherConditionFactory |
146 // | 146 // |
147 | 147 |
148 namespace { | 148 namespace { |
149 | 149 |
150 bool Matches(const URLMatcherCondition& condition, std::string text) { | 150 bool Matches(const URLMatcherCondition& condition, std::string text) { |
151 return text.find(condition.substring_pattern()->pattern()) != | 151 return text.find(condition.string_pattern()->pattern()) != |
152 std::string::npos; | 152 std::string::npos; |
153 } | 153 } |
154 | 154 |
155 } // namespace | 155 } // namespace |
156 | 156 |
157 TEST(URLMatcherConditionFactoryTest, GURLCharacterSet) { | 157 TEST(URLMatcherConditionFactoryTest, GURLCharacterSet) { |
158 // GURL guarantees that neither domain, nor path, nor query may contain | 158 // GURL guarantees that neither domain, nor path, nor query may contain |
159 // non ASCII-7 characters. We test this here, because a change to this | 159 // non ASCII-7 characters. We test this here, because a change to this |
160 // guarantee breaks this implementation horribly. | 160 // guarantee breaks this implementation horribly. |
161 GURL url("http://www.föö.com/föö?föö#föö"); | 161 GURL url("http://www.föö.com/föö?föö#föö"); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 factory.CreateHostEqualsPathPrefixCondition("foo", | 198 factory.CreateHostEqualsPathPrefixCondition("foo", |
199 "bar").criterion()); | 199 "bar").criterion()); |
200 EXPECT_EQ(URLMatcherCondition::URL_PREFIX, | 200 EXPECT_EQ(URLMatcherCondition::URL_PREFIX, |
201 factory.CreateURLPrefixCondition("foo").criterion()); | 201 factory.CreateURLPrefixCondition("foo").criterion()); |
202 EXPECT_EQ(URLMatcherCondition::URL_SUFFIX, | 202 EXPECT_EQ(URLMatcherCondition::URL_SUFFIX, |
203 factory.CreateURLSuffixCondition("foo").criterion()); | 203 factory.CreateURLSuffixCondition("foo").criterion()); |
204 EXPECT_EQ(URLMatcherCondition::URL_CONTAINS, | 204 EXPECT_EQ(URLMatcherCondition::URL_CONTAINS, |
205 factory.CreateURLContainsCondition("foo").criterion()); | 205 factory.CreateURLContainsCondition("foo").criterion()); |
206 EXPECT_EQ(URLMatcherCondition::URL_EQUALS, | 206 EXPECT_EQ(URLMatcherCondition::URL_EQUALS, |
207 factory.CreateURLEqualsCondition("foo").criterion()); | 207 factory.CreateURLEqualsCondition("foo").criterion()); |
| 208 EXPECT_EQ(URLMatcherCondition::URL_MATCHES, |
| 209 factory.CreateURLMatchesCondition("foo").criterion()); |
208 } | 210 } |
209 | 211 |
210 TEST(URLMatcherConditionFactoryTest, TestSingletonProperty) { | 212 TEST(URLMatcherConditionFactoryTest, TestSingletonProperty) { |
211 URLMatcherConditionFactory factory; | 213 URLMatcherConditionFactory factory; |
212 URLMatcherCondition c1 = factory.CreateHostEqualsCondition("www.google.com"); | 214 URLMatcherCondition c1 = factory.CreateHostEqualsCondition("www.google.com"); |
213 URLMatcherCondition c2 = factory.CreateHostEqualsCondition("www.google.com"); | 215 URLMatcherCondition c2 = factory.CreateHostEqualsCondition("www.google.com"); |
214 EXPECT_EQ(c1.criterion(), c2.criterion()); | 216 EXPECT_EQ(c1.criterion(), c2.criterion()); |
215 EXPECT_EQ(c1.substring_pattern(), c2.substring_pattern()); | 217 EXPECT_EQ(c1.string_pattern(), c2.string_pattern()); |
216 URLMatcherCondition c3 = factory.CreateHostEqualsCondition("www.google.de"); | 218 URLMatcherCondition c3 = factory.CreateHostEqualsCondition("www.google.de"); |
217 EXPECT_EQ(c2.criterion(), c3.criterion()); | 219 EXPECT_EQ(c2.criterion(), c3.criterion()); |
218 EXPECT_NE(c2.substring_pattern(), c3.substring_pattern()); | 220 EXPECT_NE(c2.string_pattern(), c3.string_pattern()); |
219 EXPECT_NE(c2.substring_pattern()->id(), c3.substring_pattern()->id()); | 221 EXPECT_NE(c2.string_pattern()->id(), c3.string_pattern()->id()); |
220 EXPECT_NE(c2.substring_pattern()->pattern(), | 222 EXPECT_NE(c2.string_pattern()->pattern(), |
221 c3.substring_pattern()->pattern()); | 223 c3.string_pattern()->pattern()); |
| 224 URLMatcherCondition c4 = factory.CreateURLMatchesCondition("www.google.com"); |
| 225 URLMatcherCondition c5 = factory.CreateURLContainsCondition("www.google.com"); |
| 226 // Regex patterns and substring patterns do not share IDs. |
| 227 EXPECT_EQ(c5.string_pattern()->pattern(), c4.string_pattern()->pattern()); |
| 228 EXPECT_NE(c5.string_pattern(), c4.string_pattern()); |
| 229 EXPECT_NE(c5.string_pattern()->id(), c4.string_pattern()->id()); |
222 | 230 |
223 // Check that all SubstringPattern singletons are freed if we call | 231 // Check that all StringPattern singletons are freed if we call |
224 // ForgetUnusedPatterns. | 232 // ForgetUnusedPatterns. |
225 SubstringPattern::ID old_id_1 = c1.substring_pattern()->id(); | 233 StringPattern::ID old_id_1 = c1.string_pattern()->id(); |
226 factory.ForgetUnusedPatterns(std::set<SubstringPattern::ID>()); | 234 StringPattern::ID old_id_4 = c4.string_pattern()->id(); |
| 235 factory.ForgetUnusedPatterns(std::set<StringPattern::ID>()); |
227 EXPECT_TRUE(factory.IsEmpty()); | 236 EXPECT_TRUE(factory.IsEmpty()); |
228 URLMatcherCondition c4 = factory.CreateHostEqualsCondition("www.google.com"); | 237 URLMatcherCondition c6 = factory.CreateHostEqualsCondition("www.google.com"); |
229 EXPECT_NE(old_id_1, c4.substring_pattern()->id()); | 238 EXPECT_NE(old_id_1, c6.string_pattern()->id()); |
| 239 URLMatcherCondition c7 = factory.CreateURLMatchesCondition("www.google.com"); |
| 240 EXPECT_NE(old_id_4, c7.string_pattern()->id()); |
230 } | 241 } |
231 | 242 |
232 TEST(URLMatcherConditionFactoryTest, TestComponentSearches) { | 243 TEST(URLMatcherConditionFactoryTest, TestComponentSearches) { |
233 GURL gurl("https://www.google.com:1234/webhp?sourceid=chrome-instant&ie=UTF-8" | 244 GURL gurl("https://www.google.com:1234/webhp?sourceid=chrome-instant&ie=UTF-8" |
234 "&ion=1#hl=en&output=search&sclient=psy-ab&q=chrome%20is%20awesome"); | 245 "&ion=1#hl=en&output=search&sclient=psy-ab&q=chrome%20is%20awesome"); |
235 URLMatcherConditionFactory factory; | 246 URLMatcherConditionFactory factory; |
236 std::string url = factory.CanonicalizeURLForComponentSearches(gurl); | 247 std::string url = factory.CanonicalizeURLForComponentSearches(gurl); |
237 | 248 |
238 // Test host component. | 249 // Test host component. |
239 EXPECT_TRUE(Matches(factory.CreateHostPrefixCondition(""), url)); | 250 EXPECT_TRUE(Matches(factory.CreateHostPrefixCondition(""), url)); |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
367 // Same as above but this time with a non-standard port. | 378 // Same as above but this time with a non-standard port. |
368 gurl = GURL("https://www.google.com:1234/webhp?sourceid=chrome-instant&" | 379 gurl = GURL("https://www.google.com:1234/webhp?sourceid=chrome-instant&" |
369 "ie=UTF-8&ion=1#hl=en&output=search&sclient=psy-ab&q=chrome%20is%20" | 380 "ie=UTF-8&ion=1#hl=en&output=search&sclient=psy-ab&q=chrome%20is%20" |
370 "awesome"); | 381 "awesome"); |
371 url = factory.CanonicalizeURLForFullSearches(gurl); | 382 url = factory.CanonicalizeURLForFullSearches(gurl); |
372 EXPECT_TRUE(Matches(factory.CreateURLPrefixCondition( | 383 EXPECT_TRUE(Matches(factory.CreateURLPrefixCondition( |
373 "https://www.google.com:1234/webhp?"), url)); | 384 "https://www.google.com:1234/webhp?"), url)); |
374 EXPECT_TRUE(Matches(factory.CreateURLContainsCondition(":1234"), url)); | 385 EXPECT_TRUE(Matches(factory.CreateURLContainsCondition(":1234"), url)); |
375 } | 386 } |
376 | 387 |
377 | |
378 // | 388 // |
379 // URLMatcherConditionSet | 389 // URLMatcherConditionSet |
380 // | 390 // |
381 | 391 |
382 TEST(URLMatcherConditionSetTest, Constructor) { | 392 TEST(URLMatcherConditionSetTest, Constructor) { |
383 URLMatcherConditionFactory factory; | 393 URLMatcherConditionFactory factory; |
384 URLMatcherCondition m1 = factory.CreateHostSuffixCondition("example.com"); | 394 URLMatcherCondition m1 = factory.CreateHostSuffixCondition("example.com"); |
385 URLMatcherCondition m2 = factory.CreatePathContainsCondition("foo"); | 395 URLMatcherCondition m2 = factory.CreatePathContainsCondition("foo"); |
386 | 396 |
387 std::set<URLMatcherCondition> conditions; | 397 std::set<URLMatcherCondition> conditions; |
(...skipping 18 matching lines...) Expand all Loading... |
406 | 416 |
407 std::set<URLMatcherCondition> conditions; | 417 std::set<URLMatcherCondition> conditions; |
408 conditions.insert(m1); | 418 conditions.insert(m1); |
409 conditions.insert(m2); | 419 conditions.insert(m2); |
410 | 420 |
411 scoped_refptr<URLMatcherConditionSet> condition_set( | 421 scoped_refptr<URLMatcherConditionSet> condition_set( |
412 new URLMatcherConditionSet(1, conditions)); | 422 new URLMatcherConditionSet(1, conditions)); |
413 EXPECT_EQ(1, condition_set->id()); | 423 EXPECT_EQ(1, condition_set->id()); |
414 EXPECT_EQ(2u, condition_set->conditions().size()); | 424 EXPECT_EQ(2u, condition_set->conditions().size()); |
415 | 425 |
416 std::set<SubstringPattern::ID> matching_substring_patterns; | 426 std::set<StringPattern::ID> matching_patterns; |
417 matching_substring_patterns.insert(m1.substring_pattern()->id()); | 427 matching_patterns.insert(m1.string_pattern()->id()); |
418 EXPECT_FALSE(condition_set->IsMatch(matching_substring_patterns, url1)); | 428 EXPECT_FALSE(condition_set->IsMatch(matching_patterns, url1)); |
419 | 429 |
420 matching_substring_patterns.insert(m2.substring_pattern()->id()); | 430 matching_patterns.insert(m2.string_pattern()->id()); |
421 EXPECT_TRUE(condition_set->IsMatch(matching_substring_patterns, url1)); | 431 EXPECT_TRUE(condition_set->IsMatch(matching_patterns, url1)); |
422 EXPECT_FALSE(condition_set->IsMatch(matching_substring_patterns, url2)); | 432 EXPECT_FALSE(condition_set->IsMatch(matching_patterns, url2)); |
423 | 433 |
424 // Test scheme filters. | 434 // Test scheme filters. |
425 scoped_refptr<URLMatcherConditionSet> condition_set2( | 435 scoped_refptr<URLMatcherConditionSet> condition_set2( |
426 new URLMatcherConditionSet(1, conditions, | 436 new URLMatcherConditionSet(1, conditions, |
427 scoped_ptr<URLMatcherSchemeFilter>( | 437 scoped_ptr<URLMatcherSchemeFilter>( |
428 new URLMatcherSchemeFilter("https")), | 438 new URLMatcherSchemeFilter("https")), |
429 scoped_ptr<URLMatcherPortFilter>(NULL))); | 439 scoped_ptr<URLMatcherPortFilter>(NULL))); |
430 EXPECT_FALSE(condition_set2->IsMatch(matching_substring_patterns, url1)); | 440 EXPECT_FALSE(condition_set2->IsMatch(matching_patterns, url1)); |
431 scoped_refptr<URLMatcherConditionSet> condition_set3( | 441 scoped_refptr<URLMatcherConditionSet> condition_set3( |
432 new URLMatcherConditionSet(1, conditions, | 442 new URLMatcherConditionSet(1, conditions, |
433 scoped_ptr<URLMatcherSchemeFilter>( | 443 scoped_ptr<URLMatcherSchemeFilter>( |
434 new URLMatcherSchemeFilter("http")), | 444 new URLMatcherSchemeFilter("http")), |
435 scoped_ptr<URLMatcherPortFilter>(NULL))); | 445 scoped_ptr<URLMatcherPortFilter>(NULL))); |
436 EXPECT_TRUE(condition_set3->IsMatch(matching_substring_patterns, url1)); | 446 EXPECT_TRUE(condition_set3->IsMatch(matching_patterns, url1)); |
437 | 447 |
438 // Test port filters. | 448 // Test port filters. |
439 std::vector<URLMatcherPortFilter::Range> ranges; | 449 std::vector<URLMatcherPortFilter::Range> ranges; |
440 ranges.push_back(URLMatcherPortFilter::CreateRange(80)); | 450 ranges.push_back(URLMatcherPortFilter::CreateRange(80)); |
441 scoped_ptr<URLMatcherPortFilter> filter(new URLMatcherPortFilter(ranges)); | 451 scoped_ptr<URLMatcherPortFilter> filter(new URLMatcherPortFilter(ranges)); |
442 scoped_refptr<URLMatcherConditionSet> condition_set4( | 452 scoped_refptr<URLMatcherConditionSet> condition_set4( |
443 new URLMatcherConditionSet(1, conditions, | 453 new URLMatcherConditionSet(1, conditions, |
444 scoped_ptr<URLMatcherSchemeFilter>(NULL), filter.Pass())); | 454 scoped_ptr<URLMatcherSchemeFilter>(NULL), filter.Pass())); |
445 EXPECT_TRUE(condition_set4->IsMatch(matching_substring_patterns, url1)); | 455 EXPECT_TRUE(condition_set4->IsMatch(matching_patterns, url1)); |
446 EXPECT_TRUE(condition_set4->IsMatch(matching_substring_patterns, url3)); | 456 EXPECT_TRUE(condition_set4->IsMatch(matching_patterns, url3)); |
447 EXPECT_FALSE(condition_set4->IsMatch(matching_substring_patterns, url4)); | 457 EXPECT_FALSE(condition_set4->IsMatch(matching_patterns, url4)); |
| 458 |
| 459 // Test regex patterns. |
| 460 matching_patterns.clear(); |
| 461 URLMatcherCondition r1 = factory.CreateURLMatchesCondition("/fo?oo"); |
| 462 std::set<URLMatcherCondition> regex_conditions; |
| 463 regex_conditions.insert(r1); |
| 464 scoped_refptr<URLMatcherConditionSet> condition_set5( |
| 465 new URLMatcherConditionSet(1, regex_conditions)); |
| 466 EXPECT_FALSE(condition_set5->IsMatch(matching_patterns, url1)); |
| 467 matching_patterns.insert(r1.string_pattern()->id()); |
| 468 EXPECT_TRUE(condition_set5->IsMatch(matching_patterns, url1)); |
| 469 |
| 470 regex_conditions.insert(m1); |
| 471 scoped_refptr<URLMatcherConditionSet> condition_set6( |
| 472 new URLMatcherConditionSet(1, regex_conditions)); |
| 473 EXPECT_FALSE(condition_set6->IsMatch(matching_patterns, url1)); |
| 474 matching_patterns.insert(m1.string_pattern()->id()); |
| 475 EXPECT_TRUE(condition_set6->IsMatch(matching_patterns, url1)); |
448 } | 476 } |
449 | 477 |
450 | 478 |
451 // | 479 // |
452 // URLMatcher | 480 // URLMatcher |
453 // | 481 // |
454 | 482 |
455 TEST(URLMatcherTest, FullTest) { | 483 TEST(URLMatcherTest, FullTest) { |
456 GURL url1("http://www.example.com/foo?bar=1"); | 484 GURL url1("http://www.example.com/foo?bar=1"); |
457 GURL url2("http://foo.example.com/index.html"); | 485 GURL url2("http://foo.example.com/index.html"); |
(...skipping 21 matching lines...) Expand all Loading... |
479 const int kConditionSetId2 = 2; | 507 const int kConditionSetId2 = 2; |
480 URLMatcherConditionSet::Vector insert2; | 508 URLMatcherConditionSet::Vector insert2; |
481 insert2.push_back(make_scoped_refptr( | 509 insert2.push_back(make_scoped_refptr( |
482 new URLMatcherConditionSet(kConditionSetId2, conditions2))); | 510 new URLMatcherConditionSet(kConditionSetId2, conditions2))); |
483 matcher.AddConditionSets(insert2); | 511 matcher.AddConditionSets(insert2); |
484 EXPECT_EQ(2u, matcher.MatchURL(url1).size()); | 512 EXPECT_EQ(2u, matcher.MatchURL(url1).size()); |
485 EXPECT_EQ(1u, matcher.MatchURL(url2).size()); | 513 EXPECT_EQ(1u, matcher.MatchURL(url2).size()); |
486 | 514 |
487 // This should be the cached singleton. | 515 // This should be the cached singleton. |
488 int patternId1 = factory->CreateHostSuffixCondition( | 516 int patternId1 = factory->CreateHostSuffixCondition( |
489 "example.com").substring_pattern()->id(); | 517 "example.com").string_pattern()->id(); |
490 | 518 |
491 // Removal of last insert. | 519 // Third insert. |
| 520 URLMatcherConditionSet::Conditions conditions3; |
| 521 conditions3.insert(factory->CreateHostSuffixCondition("example.com")); |
| 522 conditions3.insert(factory->CreateURLMatchesCondition("x.*[0-9]")); |
| 523 |
| 524 const int kConditionSetId3 = 3; |
| 525 URLMatcherConditionSet::Vector insert3; |
| 526 insert3.push_back(make_scoped_refptr( |
| 527 new URLMatcherConditionSet(kConditionSetId3, conditions3))); |
| 528 matcher.AddConditionSets(insert3); |
| 529 EXPECT_EQ(3u, matcher.MatchURL(url1).size()); |
| 530 EXPECT_EQ(1u, matcher.MatchURL(url2).size()); |
| 531 |
| 532 // Removal of third insert. |
| 533 std::vector<URLMatcherConditionSet::ID> remove3; |
| 534 remove3.push_back(kConditionSetId3); |
| 535 matcher.RemoveConditionSets(remove3); |
| 536 EXPECT_EQ(2u, matcher.MatchURL(url1).size()); |
| 537 EXPECT_EQ(1u, matcher.MatchURL(url2).size()); |
| 538 |
| 539 // Removal of second insert. |
492 std::vector<URLMatcherConditionSet::ID> remove2; | 540 std::vector<URLMatcherConditionSet::ID> remove2; |
493 remove2.push_back(kConditionSetId2); | 541 remove2.push_back(kConditionSetId2); |
494 matcher.RemoveConditionSets(remove2); | 542 matcher.RemoveConditionSets(remove2); |
495 EXPECT_EQ(1u, matcher.MatchURL(url1).size()); | 543 EXPECT_EQ(1u, matcher.MatchURL(url1).size()); |
496 EXPECT_EQ(0u, matcher.MatchURL(url2).size()); | 544 EXPECT_EQ(0u, matcher.MatchURL(url2).size()); |
497 | 545 |
498 // Removal of first insert. | 546 // Removal of first insert. |
499 std::vector<URLMatcherConditionSet::ID> remove1; | 547 std::vector<URLMatcherConditionSet::ID> remove1; |
500 remove1.push_back(kConditionSetId1); | 548 remove1.push_back(kConditionSetId1); |
501 matcher.RemoveConditionSets(remove1); | 549 matcher.RemoveConditionSets(remove1); |
502 EXPECT_EQ(0u, matcher.MatchURL(url1).size()); | 550 EXPECT_EQ(0u, matcher.MatchURL(url1).size()); |
503 EXPECT_EQ(0u, matcher.MatchURL(url2).size()); | 551 EXPECT_EQ(0u, matcher.MatchURL(url2).size()); |
504 | 552 |
505 EXPECT_TRUE(matcher.IsEmpty()); | 553 EXPECT_TRUE(matcher.IsEmpty()); |
506 | 554 |
507 // The cached singleton in matcher.condition_factory_ should be destroyed to | 555 // The cached singleton in matcher.condition_factory_ should be destroyed to |
508 // free memory. | 556 // free memory. |
509 int patternId2 = factory->CreateHostSuffixCondition( | 557 int patternId2 = factory->CreateHostSuffixCondition( |
510 "example.com").substring_pattern()->id(); | 558 "example.com").string_pattern()->id(); |
511 // If patternId1 and patternId2 are different that indicates that | 559 // If patternId1 and patternId2 are different that indicates that |
512 // matcher.condition_factory_ does not leak memory. | 560 // matcher.condition_factory_ does not leak memory by holding onto |
| 561 // unused patterns. |
513 EXPECT_NE(patternId1, patternId2); | 562 EXPECT_NE(patternId1, patternId2); |
514 } | 563 } |
515 | 564 |
516 } // namespace extensions | 565 } // namespace extensions |
OLD | NEW |