Chromium Code Reviews| 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 OverlapsWith(const URLPattern& pattern1, |
|
Matt Perry
2013/02/12 19:07:17
nit: Overlap would be more accurate since it doesn
not at google - send to devlin
2013/02/12 19:56:20
Done.
| |
| 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 << " does not overlap " << pattern2; |
| 456 << pattern2.GetAsString() << ", " << pattern1.GetAsString(); | 458 } |
| 459 if (!pattern2.OverlapsWith(pattern1)) { | |
| 460 return testing::AssertionFailure() | |
| 461 << pattern2 << " does not overlap " << pattern1; | |
| 462 } | |
| 463 return testing::AssertionSuccess() | |
| 464 << pattern1 << " overlaps with " << pattern2; | |
| 457 } | 465 } |
| 458 | 466 |
| 459 TEST(ExtensionURLPatternTest, OverlapsWith) { | 467 TEST(ExtensionURLPatternTest, OverlapsWith) { |
| 460 URLPattern pattern1(kAllSchemes, "http://www.google.com/foo/*"); | 468 URLPattern pattern1(kAllSchemes, "http://www.google.com/foo/*"); |
| 461 URLPattern pattern2(kAllSchemes, "https://www.google.com/foo/*"); | 469 URLPattern pattern2(kAllSchemes, "https://www.google.com/foo/*"); |
| 462 URLPattern pattern3(kAllSchemes, "http://*.google.com/foo/*"); | 470 URLPattern pattern3(kAllSchemes, "http://*.google.com/foo/*"); |
| 463 URLPattern pattern4(kAllSchemes, "http://*.yahooo.com/foo/*"); | 471 URLPattern pattern4(kAllSchemes, "http://*.yahooo.com/foo/*"); |
| 464 URLPattern pattern5(kAllSchemes, "http://www.yahooo.com/bar/*"); | 472 URLPattern pattern5(kAllSchemes, "http://www.yahooo.com/bar/*"); |
| 465 URLPattern pattern6(kAllSchemes, | 473 URLPattern pattern6(kAllSchemes, |
| 466 "http://www.yahooo.com/bar/baz/*"); | 474 "http://www.yahooo.com/bar/baz/*"); |
| 467 URLPattern pattern7(kAllSchemes, "file:///*"); | 475 URLPattern pattern7(kAllSchemes, "file:///*"); |
| 468 URLPattern pattern8(kAllSchemes, "*://*/*"); | 476 URLPattern pattern8(kAllSchemes, "*://*/*"); |
| 469 URLPattern pattern9(URLPattern::SCHEME_HTTPS, "*://*/*"); | 477 URLPattern pattern9(URLPattern::SCHEME_HTTPS, "*://*/*"); |
| 470 URLPattern pattern10(kAllSchemes, "<all_urls>"); | 478 URLPattern pattern10(kAllSchemes, "<all_urls>"); |
| 471 | 479 |
| 472 TestPatternOverlap(pattern1, pattern1, true); | 480 EXPECT_TRUE(OverlapsWith(pattern1, pattern1)); |
| 473 TestPatternOverlap(pattern1, pattern2, false); | 481 EXPECT_FALSE(OverlapsWith(pattern1, pattern2)); |
| 474 TestPatternOverlap(pattern1, pattern3, true); | 482 EXPECT_TRUE(OverlapsWith(pattern1, pattern3)); |
| 475 TestPatternOverlap(pattern1, pattern4, false); | 483 EXPECT_FALSE(OverlapsWith(pattern1, pattern4)); |
| 476 TestPatternOverlap(pattern3, pattern4, false); | 484 EXPECT_FALSE(OverlapsWith(pattern3, pattern4)); |
| 477 TestPatternOverlap(pattern4, pattern5, false); | 485 EXPECT_FALSE(OverlapsWith(pattern4, pattern5)); |
| 478 TestPatternOverlap(pattern5, pattern6, true); | 486 EXPECT_TRUE(OverlapsWith(pattern5, pattern6)); |
| 479 | 487 |
| 480 // Test that scheme restrictions work. | 488 // Test that scheme restrictions work. |
| 481 TestPatternOverlap(pattern1, pattern8, true); | 489 EXPECT_TRUE(OverlapsWith(pattern1, pattern8)); |
| 482 TestPatternOverlap(pattern1, pattern9, false); | 490 EXPECT_FALSE(OverlapsWith(pattern1, pattern9)); |
| 483 TestPatternOverlap(pattern1, pattern10, true); | 491 EXPECT_TRUE(OverlapsWith(pattern1, pattern10)); |
| 484 | 492 |
| 485 // Test that '<all_urls>' includes file URLs, while scheme '*' does not. | 493 // Test that '<all_urls>' includes file URLs, while scheme '*' does not. |
| 486 TestPatternOverlap(pattern7, pattern8, false); | 494 EXPECT_FALSE(OverlapsWith(pattern7, pattern8)); |
| 487 TestPatternOverlap(pattern7, pattern10, true); | 495 EXPECT_TRUE(OverlapsWith(pattern7, pattern10)); |
| 488 | 496 |
| 489 // Test that wildcard schemes are handled correctly, especially when compared | 497 // Test that wildcard schemes are handled correctly, especially when compared |
| 490 // to each-other. | 498 // to each-other. |
| 491 URLPattern pattern11(kAllSchemes, "http://example.com/*"); | 499 URLPattern pattern11(kAllSchemes, "http://example.com/*"); |
| 492 URLPattern pattern12(kAllSchemes, "*://example.com/*"); | 500 URLPattern pattern12(kAllSchemes, "*://example.com/*"); |
| 493 URLPattern pattern13(kAllSchemes, "*://example.com/foo/*"); | 501 URLPattern pattern13(kAllSchemes, "*://example.com/foo/*"); |
| 494 URLPattern pattern14(kAllSchemes, "*://google.com/*"); | 502 URLPattern pattern14(kAllSchemes, "*://google.com/*"); |
| 495 TestPatternOverlap(pattern8, pattern12, true); | 503 EXPECT_TRUE(OverlapsWith(pattern8, pattern12)); |
| 496 TestPatternOverlap(pattern9, pattern12, true); | 504 EXPECT_TRUE(OverlapsWith(pattern9, pattern12)); |
| 497 TestPatternOverlap(pattern10, pattern12, true); | 505 EXPECT_TRUE(OverlapsWith(pattern10, pattern12)); |
| 498 TestPatternOverlap(pattern11, pattern12, true); | 506 EXPECT_TRUE(OverlapsWith(pattern11, pattern12)); |
| 499 TestPatternOverlap(pattern12, pattern13, true); | 507 EXPECT_TRUE(OverlapsWith(pattern12, pattern13)); |
| 500 TestPatternOverlap(pattern11, pattern13, true); | 508 EXPECT_TRUE(OverlapsWith(pattern11, pattern13)); |
| 501 TestPatternOverlap(pattern14, pattern12, false); | 509 EXPECT_FALSE(OverlapsWith(pattern14, pattern12)); |
| 502 TestPatternOverlap(pattern14, pattern13, false); | 510 EXPECT_FALSE(OverlapsWith(pattern14, pattern13)); |
| 503 } | 511 } |
| 504 | 512 |
| 505 TEST(ExtensionURLPatternTest, ConvertToExplicitSchemes) { | 513 TEST(ExtensionURLPatternTest, ConvertToExplicitSchemes) { |
| 506 URLPatternList all_urls(URLPattern( | 514 URLPatternList all_urls(URLPattern( |
| 507 kAllSchemes, | 515 kAllSchemes, |
| 508 "<all_urls>").ConvertToExplicitSchemes()); | 516 "<all_urls>").ConvertToExplicitSchemes()); |
| 509 | 517 |
| 510 URLPatternList all_schemes(URLPattern( | 518 URLPatternList all_schemes(URLPattern( |
| 511 kAllSchemes, | 519 kAllSchemes, |
| 512 "*://google.com/foo").ConvertToExplicitSchemes()); | 520 "*://google.com/foo").ConvertToExplicitSchemes()); |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 650 | 658 |
| 651 EXPECT_FALSE(pattern2.MatchesURL(GURL("http://bb.com/path"))); | 659 EXPECT_FALSE(pattern2.MatchesURL(GURL("http://bb.com/path"))); |
| 652 EXPECT_TRUE(pattern2.MatchesURL(GURL("http://aa.com/path"))); | 660 EXPECT_TRUE(pattern2.MatchesURL(GURL("http://aa.com/path"))); |
| 653 EXPECT_FALSE(pattern2.MatchesURL(GURL("http://sub.aa.com/path"))); | 661 EXPECT_FALSE(pattern2.MatchesURL(GURL("http://sub.aa.com/path"))); |
| 654 | 662 |
| 655 URLPattern pattern3(URLPattern::SCHEME_ALL, "http://aa.com/*"); | 663 URLPattern pattern3(URLPattern::SCHEME_ALL, "http://aa.com/*"); |
| 656 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern3.Parse("http://aa.com:88/*")); | 664 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern3.Parse("http://aa.com:88/*")); |
| 657 EXPECT_FALSE(pattern3.MatchesURL(GURL("http://aa.com/path"))); | 665 EXPECT_FALSE(pattern3.MatchesURL(GURL("http://aa.com/path"))); |
| 658 EXPECT_TRUE(pattern3.MatchesURL(GURL("http://aa.com:88/path"))); | 666 EXPECT_TRUE(pattern3.MatchesURL(GURL("http://aa.com:88/path"))); |
| 659 } | 667 } |
| 668 | |
| 669 // Returns success if neither |a| nor |b| encompasses the other. | |
| 670 testing::AssertionResult NeitherEncompasses(const URLPattern& a, | |
| 671 const URLPattern& b) { | |
| 672 if (a.Encompasses(b)) | |
| 673 return testing::AssertionFailure() << a << " encompasses " << b; | |
| 674 if (b.Encompasses(a)) | |
| 675 return testing::AssertionFailure() << b << " encompasses " << a; | |
| 676 return testing::AssertionSuccess() << | |
| 677 "Neither " << a << " nor " << b << " encompass the other"; | |
| 678 } | |
| 679 | |
| 680 // Returns success if |a| encompasses |b| but not the other way around. | |
| 681 testing::AssertionResult StrictlyEncompasses(const URLPattern& a, | |
| 682 const URLPattern& b) { | |
| 683 if (!a.Encompasses(b)) | |
| 684 return testing::AssertionFailure() << a << " does not encompass " << b; | |
| 685 if (b.Encompasses(a)) | |
| 686 return testing::AssertionFailure() << b << " encompasses " << a; | |
| 687 return testing::AssertionSuccess() << a << " strictly encompasses " << b; | |
| 688 } | |
| 689 | |
| 690 TEST(ExtensionURLPatternTest, Subset) { | |
| 691 URLPattern pattern1(kAllSchemes, "http://www.google.com/foo/*"); | |
| 692 URLPattern pattern2(kAllSchemes, "https://www.google.com/foo/*"); | |
| 693 URLPattern pattern3(kAllSchemes, "http://*.google.com/foo/*"); | |
| 694 URLPattern pattern4(kAllSchemes, "http://*.yahooo.com/foo/*"); | |
| 695 URLPattern pattern5(kAllSchemes, "http://www.yahooo.com/bar/*"); | |
| 696 URLPattern pattern6(kAllSchemes, "http://www.yahooo.com/bar/baz/*"); | |
| 697 URLPattern pattern7(kAllSchemes, "file:///*"); | |
| 698 URLPattern pattern8(kAllSchemes, "*://*/*"); | |
| 699 URLPattern pattern9(URLPattern::SCHEME_HTTPS, "*://*/*"); | |
| 700 URLPattern pattern10(kAllSchemes, "<all_urls>"); | |
| 701 URLPattern pattern11(kAllSchemes, "http://example.com/*"); | |
| 702 URLPattern pattern12(kAllSchemes, "*://example.com/*"); | |
| 703 URLPattern pattern13(kAllSchemes, "*://example.com/foo/*"); | |
| 704 | |
| 705 // All patterns should encompass themselves. | |
| 706 EXPECT_TRUE(pattern1.Encompasses(pattern1)); | |
| 707 EXPECT_TRUE(pattern2.Encompasses(pattern2)); | |
| 708 EXPECT_TRUE(pattern3.Encompasses(pattern3)); | |
| 709 EXPECT_TRUE(pattern4.Encompasses(pattern4)); | |
| 710 EXPECT_TRUE(pattern5.Encompasses(pattern5)); | |
| 711 EXPECT_TRUE(pattern6.Encompasses(pattern6)); | |
| 712 EXPECT_TRUE(pattern7.Encompasses(pattern7)); | |
| 713 EXPECT_TRUE(pattern8.Encompasses(pattern8)); | |
| 714 EXPECT_TRUE(pattern9.Encompasses(pattern9)); | |
| 715 EXPECT_TRUE(pattern10.Encompasses(pattern10)); | |
| 716 EXPECT_TRUE(pattern11.Encompasses(pattern11)); | |
| 717 EXPECT_TRUE(pattern12.Encompasses(pattern12)); | |
| 718 EXPECT_TRUE(pattern13.Encompasses(pattern13)); | |
| 719 | |
| 720 // pattern1's relationship to the other patterns. | |
| 721 EXPECT_TRUE(NeitherEncompasses(pattern1, pattern2)); | |
| 722 EXPECT_TRUE(StrictlyEncompasses(pattern3, pattern1)); | |
| 723 EXPECT_TRUE(NeitherEncompasses(pattern1, pattern4)); | |
| 724 EXPECT_TRUE(NeitherEncompasses(pattern1, pattern5)); | |
| 725 EXPECT_TRUE(NeitherEncompasses(pattern1, pattern6)); | |
| 726 EXPECT_TRUE(NeitherEncompasses(pattern1, pattern7)); | |
| 727 EXPECT_TRUE(StrictlyEncompasses(pattern8, pattern1)); | |
| 728 EXPECT_TRUE(NeitherEncompasses(pattern1, pattern9)); | |
| 729 EXPECT_TRUE(StrictlyEncompasses(pattern10, pattern1)); | |
| 730 EXPECT_TRUE(NeitherEncompasses(pattern1, pattern11)); | |
| 731 EXPECT_TRUE(NeitherEncompasses(pattern1, pattern12)); | |
| 732 EXPECT_TRUE(NeitherEncompasses(pattern1, pattern13)); | |
| 733 | |
| 734 // pattern2's relationship to the other patterns. | |
| 735 EXPECT_TRUE(NeitherEncompasses(pattern2, pattern3)); | |
| 736 EXPECT_TRUE(NeitherEncompasses(pattern2, pattern4)); | |
| 737 EXPECT_TRUE(NeitherEncompasses(pattern2, pattern5)); | |
| 738 EXPECT_TRUE(NeitherEncompasses(pattern2, pattern6)); | |
| 739 EXPECT_TRUE(NeitherEncompasses(pattern2, pattern7)); | |
| 740 EXPECT_TRUE(StrictlyEncompasses(pattern8, pattern2)); | |
| 741 EXPECT_TRUE(StrictlyEncompasses(pattern9, pattern2)); | |
| 742 EXPECT_TRUE(StrictlyEncompasses(pattern10, pattern2)); | |
| 743 EXPECT_TRUE(NeitherEncompasses(pattern2, pattern11)); | |
| 744 EXPECT_TRUE(NeitherEncompasses(pattern2, pattern12)); | |
| 745 EXPECT_TRUE(NeitherEncompasses(pattern2, pattern13)); | |
| 746 | |
| 747 // Specifically test file:// URLs. | |
| 748 EXPECT_TRUE(NeitherEncompasses(pattern7, pattern8)); | |
| 749 EXPECT_TRUE(NeitherEncompasses(pattern7, pattern9)); | |
| 750 EXPECT_TRUE(StrictlyEncompasses(pattern10, pattern7)); | |
| 751 | |
| 752 // <all_urls> encompasses everything. | |
| 753 EXPECT_TRUE(StrictlyEncompasses(pattern10, pattern1)); | |
| 754 EXPECT_TRUE(StrictlyEncompasses(pattern10, pattern2)); | |
| 755 EXPECT_TRUE(StrictlyEncompasses(pattern10, pattern3)); | |
| 756 EXPECT_TRUE(StrictlyEncompasses(pattern10, pattern4)); | |
| 757 EXPECT_TRUE(StrictlyEncompasses(pattern10, pattern5)); | |
| 758 EXPECT_TRUE(StrictlyEncompasses(pattern10, pattern6)); | |
| 759 EXPECT_TRUE(StrictlyEncompasses(pattern10, pattern7)); | |
| 760 EXPECT_TRUE(StrictlyEncompasses(pattern10, pattern8)); | |
| 761 EXPECT_TRUE(StrictlyEncompasses(pattern10, pattern9)); | |
| 762 EXPECT_TRUE(StrictlyEncompasses(pattern10, pattern11)); | |
| 763 EXPECT_TRUE(StrictlyEncompasses(pattern10, pattern12)); | |
| 764 EXPECT_TRUE(StrictlyEncompasses(pattern10, pattern13)); | |
| 765 | |
| 766 // More... | |
| 767 EXPECT_TRUE(StrictlyEncompasses(pattern12, pattern11)); | |
| 768 EXPECT_TRUE(NeitherEncompasses(pattern11, pattern13)); | |
| 769 EXPECT_TRUE(StrictlyEncompasses(pattern12, pattern13)); | |
| 770 } | |
| 771 | |
| 772 } // namespace | |
| OLD | NEW |