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

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: are you happy yet?!?!? 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
« no previous file with comments | « extensions/common/url_pattern_set_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 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
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
OLDNEW
« no previous file with comments | « 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