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 |