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 "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
6 #include "extensions/common/url_pattern.h" | 6 #include "extensions/common/url_pattern.h" |
7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
8 #include "googleurl/src/gurl.h" | 8 #include "googleurl/src/gurl.h" |
9 | 9 |
| 10 namespace { |
| 11 |
10 // See url_pattern.h for examples of valid and invalid patterns. | 12 // See url_pattern.h for examples of valid and invalid patterns. |
11 | 13 |
12 static const int kAllSchemes = | 14 static const int kAllSchemes = |
13 URLPattern::SCHEME_HTTP | | 15 URLPattern::SCHEME_HTTP | |
14 URLPattern::SCHEME_HTTPS | | 16 URLPattern::SCHEME_HTTPS | |
15 URLPattern::SCHEME_FILE | | 17 URLPattern::SCHEME_FILE | |
16 URLPattern::SCHEME_FTP | | 18 URLPattern::SCHEME_FTP | |
17 URLPattern::SCHEME_CHROMEUI | | 19 URLPattern::SCHEME_CHROMEUI | |
18 URLPattern::SCHEME_EXTENSION | | 20 URLPattern::SCHEME_EXTENSION | |
19 URLPattern::SCHEME_FILESYSTEM; | 21 URLPattern::SCHEME_FILESYSTEM; |
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
441 for (size_t i = 0; i < arraysize(kGetAsStringTestCases); ++i) { | 443 for (size_t i = 0; i < arraysize(kGetAsStringTestCases); ++i) { |
442 URLPattern pattern(URLPattern::SCHEME_ALL); | 444 URLPattern pattern(URLPattern::SCHEME_ALL); |
443 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 445 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
444 pattern.Parse(kGetAsStringTestCases[i].pattern)) | 446 pattern.Parse(kGetAsStringTestCases[i].pattern)) |
445 << "Error parsing " << kGetAsStringTestCases[i].pattern; | 447 << "Error parsing " << kGetAsStringTestCases[i].pattern; |
446 EXPECT_EQ(kGetAsStringTestCases[i].pattern, | 448 EXPECT_EQ(kGetAsStringTestCases[i].pattern, |
447 pattern.GetAsString()); | 449 pattern.GetAsString()); |
448 } | 450 } |
449 } | 451 } |
450 | 452 |
451 void TestPatternOverlap(const URLPattern& pattern1, const URLPattern& pattern2, | 453 testing::AssertionResult Overlaps(const URLPattern& pattern1, |
452 bool expect_overlap) { | 454 const URLPattern& pattern2) { |
453 EXPECT_EQ(expect_overlap, pattern1.OverlapsWith(pattern2)) | 455 if (!pattern1.OverlapsWith(pattern2)) { |
454 << pattern1.GetAsString() << ", " << pattern2.GetAsString(); | 456 return testing::AssertionFailure() |
455 EXPECT_EQ(expect_overlap, pattern2.OverlapsWith(pattern1)) | 457 << pattern1.GetAsString() << " does not overlap " << |
456 << pattern2.GetAsString() << ", " << pattern1.GetAsString(); | 458 pattern2.GetAsString(); |
| 459 } |
| 460 if (!pattern2.OverlapsWith(pattern1)) { |
| 461 return testing::AssertionFailure() |
| 462 << pattern2.GetAsString() << " does not overlap " << |
| 463 pattern1.GetAsString(); |
| 464 } |
| 465 return testing::AssertionSuccess() |
| 466 << pattern1.GetAsString() << " overlaps with " << pattern2.GetAsString(); |
457 } | 467 } |
458 | 468 |
459 TEST(ExtensionURLPatternTest, OverlapsWith) { | 469 TEST(ExtensionURLPatternTest, Overlaps) { |
460 URLPattern pattern1(kAllSchemes, "http://www.google.com/foo/*"); | 470 URLPattern pattern1(kAllSchemes, "http://www.google.com/foo/*"); |
461 URLPattern pattern2(kAllSchemes, "https://www.google.com/foo/*"); | 471 URLPattern pattern2(kAllSchemes, "https://www.google.com/foo/*"); |
462 URLPattern pattern3(kAllSchemes, "http://*.google.com/foo/*"); | 472 URLPattern pattern3(kAllSchemes, "http://*.google.com/foo/*"); |
463 URLPattern pattern4(kAllSchemes, "http://*.yahooo.com/foo/*"); | 473 URLPattern pattern4(kAllSchemes, "http://*.yahooo.com/foo/*"); |
464 URLPattern pattern5(kAllSchemes, "http://www.yahooo.com/bar/*"); | 474 URLPattern pattern5(kAllSchemes, "http://www.yahooo.com/bar/*"); |
465 URLPattern pattern6(kAllSchemes, | 475 URLPattern pattern6(kAllSchemes, |
466 "http://www.yahooo.com/bar/baz/*"); | 476 "http://www.yahooo.com/bar/baz/*"); |
467 URLPattern pattern7(kAllSchemes, "file:///*"); | 477 URLPattern pattern7(kAllSchemes, "file:///*"); |
468 URLPattern pattern8(kAllSchemes, "*://*/*"); | 478 URLPattern pattern8(kAllSchemes, "*://*/*"); |
469 URLPattern pattern9(URLPattern::SCHEME_HTTPS, "*://*/*"); | 479 URLPattern pattern9(URLPattern::SCHEME_HTTPS, "*://*/*"); |
470 URLPattern pattern10(kAllSchemes, "<all_urls>"); | 480 URLPattern pattern10(kAllSchemes, "<all_urls>"); |
471 | 481 |
472 TestPatternOverlap(pattern1, pattern1, true); | 482 EXPECT_TRUE(Overlaps(pattern1, pattern1)); |
473 TestPatternOverlap(pattern1, pattern2, false); | 483 EXPECT_FALSE(Overlaps(pattern1, pattern2)); |
474 TestPatternOverlap(pattern1, pattern3, true); | 484 EXPECT_TRUE(Overlaps(pattern1, pattern3)); |
475 TestPatternOverlap(pattern1, pattern4, false); | 485 EXPECT_FALSE(Overlaps(pattern1, pattern4)); |
476 TestPatternOverlap(pattern3, pattern4, false); | 486 EXPECT_FALSE(Overlaps(pattern3, pattern4)); |
477 TestPatternOverlap(pattern4, pattern5, false); | 487 EXPECT_FALSE(Overlaps(pattern4, pattern5)); |
478 TestPatternOverlap(pattern5, pattern6, true); | 488 EXPECT_TRUE(Overlaps(pattern5, pattern6)); |
479 | 489 |
480 // Test that scheme restrictions work. | 490 // Test that scheme restrictions work. |
481 TestPatternOverlap(pattern1, pattern8, true); | 491 EXPECT_TRUE(Overlaps(pattern1, pattern8)); |
482 TestPatternOverlap(pattern1, pattern9, false); | 492 EXPECT_FALSE(Overlaps(pattern1, pattern9)); |
483 TestPatternOverlap(pattern1, pattern10, true); | 493 EXPECT_TRUE(Overlaps(pattern1, pattern10)); |
484 | 494 |
485 // Test that '<all_urls>' includes file URLs, while scheme '*' does not. | 495 // Test that '<all_urls>' includes file URLs, while scheme '*' does not. |
486 TestPatternOverlap(pattern7, pattern8, false); | 496 EXPECT_FALSE(Overlaps(pattern7, pattern8)); |
487 TestPatternOverlap(pattern7, pattern10, true); | 497 EXPECT_TRUE(Overlaps(pattern7, pattern10)); |
488 | 498 |
489 // Test that wildcard schemes are handled correctly, especially when compared | 499 // Test that wildcard schemes are handled correctly, especially when compared |
490 // to each-other. | 500 // to each-other. |
491 URLPattern pattern11(kAllSchemes, "http://example.com/*"); | 501 URLPattern pattern11(kAllSchemes, "http://example.com/*"); |
492 URLPattern pattern12(kAllSchemes, "*://example.com/*"); | 502 URLPattern pattern12(kAllSchemes, "*://example.com/*"); |
493 URLPattern pattern13(kAllSchemes, "*://example.com/foo/*"); | 503 URLPattern pattern13(kAllSchemes, "*://example.com/foo/*"); |
494 URLPattern pattern14(kAllSchemes, "*://google.com/*"); | 504 URLPattern pattern14(kAllSchemes, "*://google.com/*"); |
495 TestPatternOverlap(pattern8, pattern12, true); | 505 EXPECT_TRUE(Overlaps(pattern8, pattern12)); |
496 TestPatternOverlap(pattern9, pattern12, true); | 506 EXPECT_TRUE(Overlaps(pattern9, pattern12)); |
497 TestPatternOverlap(pattern10, pattern12, true); | 507 EXPECT_TRUE(Overlaps(pattern10, pattern12)); |
498 TestPatternOverlap(pattern11, pattern12, true); | 508 EXPECT_TRUE(Overlaps(pattern11, pattern12)); |
499 TestPatternOverlap(pattern12, pattern13, true); | 509 EXPECT_TRUE(Overlaps(pattern12, pattern13)); |
500 TestPatternOverlap(pattern11, pattern13, true); | 510 EXPECT_TRUE(Overlaps(pattern11, pattern13)); |
501 TestPatternOverlap(pattern14, pattern12, false); | 511 EXPECT_FALSE(Overlaps(pattern14, pattern12)); |
502 TestPatternOverlap(pattern14, pattern13, false); | 512 EXPECT_FALSE(Overlaps(pattern14, pattern13)); |
503 } | 513 } |
504 | 514 |
505 TEST(ExtensionURLPatternTest, ConvertToExplicitSchemes) { | 515 TEST(ExtensionURLPatternTest, ConvertToExplicitSchemes) { |
506 URLPatternList all_urls(URLPattern( | 516 URLPatternList all_urls(URLPattern( |
507 kAllSchemes, | 517 kAllSchemes, |
508 "<all_urls>").ConvertToExplicitSchemes()); | 518 "<all_urls>").ConvertToExplicitSchemes()); |
509 | 519 |
510 URLPatternList all_schemes(URLPattern( | 520 URLPatternList all_schemes(URLPattern( |
511 kAllSchemes, | 521 kAllSchemes, |
512 "*://google.com/foo").ConvertToExplicitSchemes()); | 522 "*://google.com/foo").ConvertToExplicitSchemes()); |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
650 | 660 |
651 EXPECT_FALSE(pattern2.MatchesURL(GURL("http://bb.com/path"))); | 661 EXPECT_FALSE(pattern2.MatchesURL(GURL("http://bb.com/path"))); |
652 EXPECT_TRUE(pattern2.MatchesURL(GURL("http://aa.com/path"))); | 662 EXPECT_TRUE(pattern2.MatchesURL(GURL("http://aa.com/path"))); |
653 EXPECT_FALSE(pattern2.MatchesURL(GURL("http://sub.aa.com/path"))); | 663 EXPECT_FALSE(pattern2.MatchesURL(GURL("http://sub.aa.com/path"))); |
654 | 664 |
655 URLPattern pattern3(URLPattern::SCHEME_ALL, "http://aa.com/*"); | 665 URLPattern pattern3(URLPattern::SCHEME_ALL, "http://aa.com/*"); |
656 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern3.Parse("http://aa.com:88/*")); | 666 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern3.Parse("http://aa.com:88/*")); |
657 EXPECT_FALSE(pattern3.MatchesURL(GURL("http://aa.com/path"))); | 667 EXPECT_FALSE(pattern3.MatchesURL(GURL("http://aa.com/path"))); |
658 EXPECT_TRUE(pattern3.MatchesURL(GURL("http://aa.com:88/path"))); | 668 EXPECT_TRUE(pattern3.MatchesURL(GURL("http://aa.com:88/path"))); |
659 } | 669 } |
| 670 |
| 671 // Returns success if neither |a| nor |b| encompasses the other. |
| 672 testing::AssertionResult NeitherContains(const URLPattern& a, |
| 673 const URLPattern& b) { |
| 674 if (a.Contains(b)) |
| 675 return testing::AssertionFailure() << a.GetAsString() << " encompasses " << |
| 676 b.GetAsString(); |
| 677 if (b.Contains(a)) |
| 678 return testing::AssertionFailure() << b.GetAsString() << " encompasses " << |
| 679 a.GetAsString(); |
| 680 return testing::AssertionSuccess() << |
| 681 "Neither " << a.GetAsString() << " nor " << b.GetAsString() << |
| 682 " encompass the other"; |
| 683 } |
| 684 |
| 685 // Returns success if |a| encompasses |b| but not the other way around. |
| 686 testing::AssertionResult StrictlyContains(const URLPattern& a, |
| 687 const URLPattern& b) { |
| 688 if (!a.Contains(b)) |
| 689 return testing::AssertionFailure() << a.GetAsString() << |
| 690 " does not encompass " << |
| 691 b.GetAsString(); |
| 692 if (b.Contains(a)) |
| 693 return testing::AssertionFailure() << b.GetAsString() << " encompasses " << |
| 694 a.GetAsString(); |
| 695 return testing::AssertionSuccess() << a.GetAsString() << |
| 696 " strictly encompasses " << |
| 697 b.GetAsString(); |
| 698 } |
| 699 |
| 700 TEST(ExtensionURLPatternTest, Subset) { |
| 701 URLPattern pattern1(kAllSchemes, "http://www.google.com/foo/*"); |
| 702 URLPattern pattern2(kAllSchemes, "https://www.google.com/foo/*"); |
| 703 URLPattern pattern3(kAllSchemes, "http://*.google.com/foo/*"); |
| 704 URLPattern pattern4(kAllSchemes, "http://*.yahooo.com/foo/*"); |
| 705 URLPattern pattern5(kAllSchemes, "http://www.yahooo.com/bar/*"); |
| 706 URLPattern pattern6(kAllSchemes, "http://www.yahooo.com/bar/baz/*"); |
| 707 URLPattern pattern7(kAllSchemes, "file:///*"); |
| 708 URLPattern pattern8(kAllSchemes, "*://*/*"); |
| 709 URLPattern pattern9(URLPattern::SCHEME_HTTPS, "*://*/*"); |
| 710 URLPattern pattern10(kAllSchemes, "<all_urls>"); |
| 711 URLPattern pattern11(kAllSchemes, "http://example.com/*"); |
| 712 URLPattern pattern12(kAllSchemes, "*://example.com/*"); |
| 713 URLPattern pattern13(kAllSchemes, "*://example.com/foo/*"); |
| 714 |
| 715 // All patterns should encompass themselves. |
| 716 EXPECT_TRUE(pattern1.Contains(pattern1)); |
| 717 EXPECT_TRUE(pattern2.Contains(pattern2)); |
| 718 EXPECT_TRUE(pattern3.Contains(pattern3)); |
| 719 EXPECT_TRUE(pattern4.Contains(pattern4)); |
| 720 EXPECT_TRUE(pattern5.Contains(pattern5)); |
| 721 EXPECT_TRUE(pattern6.Contains(pattern6)); |
| 722 EXPECT_TRUE(pattern7.Contains(pattern7)); |
| 723 EXPECT_TRUE(pattern8.Contains(pattern8)); |
| 724 EXPECT_TRUE(pattern9.Contains(pattern9)); |
| 725 EXPECT_TRUE(pattern10.Contains(pattern10)); |
| 726 EXPECT_TRUE(pattern11.Contains(pattern11)); |
| 727 EXPECT_TRUE(pattern12.Contains(pattern12)); |
| 728 EXPECT_TRUE(pattern13.Contains(pattern13)); |
| 729 |
| 730 // pattern1's relationship to the other patterns. |
| 731 EXPECT_TRUE(NeitherContains(pattern1, pattern2)); |
| 732 EXPECT_TRUE(StrictlyContains(pattern3, pattern1)); |
| 733 EXPECT_TRUE(NeitherContains(pattern1, pattern4)); |
| 734 EXPECT_TRUE(NeitherContains(pattern1, pattern5)); |
| 735 EXPECT_TRUE(NeitherContains(pattern1, pattern6)); |
| 736 EXPECT_TRUE(NeitherContains(pattern1, pattern7)); |
| 737 EXPECT_TRUE(StrictlyContains(pattern8, pattern1)); |
| 738 EXPECT_TRUE(NeitherContains(pattern1, pattern9)); |
| 739 EXPECT_TRUE(StrictlyContains(pattern10, pattern1)); |
| 740 EXPECT_TRUE(NeitherContains(pattern1, pattern11)); |
| 741 EXPECT_TRUE(NeitherContains(pattern1, pattern12)); |
| 742 EXPECT_TRUE(NeitherContains(pattern1, pattern13)); |
| 743 |
| 744 // pattern2's relationship to the other patterns. |
| 745 EXPECT_TRUE(NeitherContains(pattern2, pattern3)); |
| 746 EXPECT_TRUE(NeitherContains(pattern2, pattern4)); |
| 747 EXPECT_TRUE(NeitherContains(pattern2, pattern5)); |
| 748 EXPECT_TRUE(NeitherContains(pattern2, pattern6)); |
| 749 EXPECT_TRUE(NeitherContains(pattern2, pattern7)); |
| 750 EXPECT_TRUE(StrictlyContains(pattern8, pattern2)); |
| 751 EXPECT_TRUE(StrictlyContains(pattern9, pattern2)); |
| 752 EXPECT_TRUE(StrictlyContains(pattern10, pattern2)); |
| 753 EXPECT_TRUE(NeitherContains(pattern2, pattern11)); |
| 754 EXPECT_TRUE(NeitherContains(pattern2, pattern12)); |
| 755 EXPECT_TRUE(NeitherContains(pattern2, pattern13)); |
| 756 |
| 757 // Specifically test file:// URLs. |
| 758 EXPECT_TRUE(NeitherContains(pattern7, pattern8)); |
| 759 EXPECT_TRUE(NeitherContains(pattern7, pattern9)); |
| 760 EXPECT_TRUE(StrictlyContains(pattern10, pattern7)); |
| 761 |
| 762 // <all_urls> encompasses everything. |
| 763 EXPECT_TRUE(StrictlyContains(pattern10, pattern1)); |
| 764 EXPECT_TRUE(StrictlyContains(pattern10, pattern2)); |
| 765 EXPECT_TRUE(StrictlyContains(pattern10, pattern3)); |
| 766 EXPECT_TRUE(StrictlyContains(pattern10, pattern4)); |
| 767 EXPECT_TRUE(StrictlyContains(pattern10, pattern5)); |
| 768 EXPECT_TRUE(StrictlyContains(pattern10, pattern6)); |
| 769 EXPECT_TRUE(StrictlyContains(pattern10, pattern7)); |
| 770 EXPECT_TRUE(StrictlyContains(pattern10, pattern8)); |
| 771 EXPECT_TRUE(StrictlyContains(pattern10, pattern9)); |
| 772 EXPECT_TRUE(StrictlyContains(pattern10, pattern11)); |
| 773 EXPECT_TRUE(StrictlyContains(pattern10, pattern12)); |
| 774 EXPECT_TRUE(StrictlyContains(pattern10, pattern13)); |
| 775 |
| 776 // More... |
| 777 EXPECT_TRUE(StrictlyContains(pattern12, pattern11)); |
| 778 EXPECT_TRUE(NeitherContains(pattern11, pattern13)); |
| 779 EXPECT_TRUE(StrictlyContains(pattern12, pattern13)); |
| 780 } |
| 781 |
| 782 } // namespace |
OLD | NEW |