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

Side by Side Diff: extensions/common/url_pattern_unittest.cc

Issue 12209094: Support requesting subsets of host permissions using the permissions API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix urlpatternsettest Created 7 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
OLDNEW
« extensions/common/url_pattern.h ('K') | « extensions/common/url_pattern_set_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698