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

Side by Side Diff: chrome/common/extensions/extension_unittest.cc

Issue 10443105: Take 2 at implementing activeTab. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: uninstall, tests, aa Created 8 years, 6 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 "chrome/common/extensions/extension.h" 5 #include "chrome/common/extensions/extension.h"
6 6
7 #include "base/format_macros.h" 7 #include "base/format_macros.h"
8 #include "base/file_path.h" 8 #include "base/file_path.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/json/json_file_value_serializer.h" 10 #include "base/json/json_file_value_serializer.h"
(...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after
608 #endif 608 #endif
609 } 609 }
610 610
611 TEST(ExtensionTest, WantsFileAccess) { 611 TEST(ExtensionTest, WantsFileAccess) {
612 scoped_refptr<Extension> extension; 612 scoped_refptr<Extension> extension;
613 GURL file_url("file:///etc/passwd"); 613 GURL file_url("file:///etc/passwd");
614 614
615 // <all_urls> permission 615 // <all_urls> permission
616 extension = LoadManifest("permissions", "permissions_all_urls.json"); 616 extension = LoadManifest("permissions", "permissions_all_urls.json");
617 EXPECT_TRUE(extension->wants_file_access()); 617 EXPECT_TRUE(extension->wants_file_access());
618 EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); 618 EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL));
619 extension = LoadManifest( 619 extension = LoadManifest(
620 "permissions", "permissions_all_urls.json", Extension::ALLOW_FILE_ACCESS); 620 "permissions", "permissions_all_urls.json", Extension::ALLOW_FILE_ACCESS);
621 EXPECT_TRUE(extension->wants_file_access()); 621 EXPECT_TRUE(extension->wants_file_access());
622 EXPECT_TRUE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); 622 EXPECT_TRUE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL));
623 623
624 // file:///* permission 624 // file:///* permission
625 extension = LoadManifest("permissions", "permissions_file_scheme.json"); 625 extension = LoadManifest("permissions", "permissions_file_scheme.json");
626 EXPECT_TRUE(extension->wants_file_access()); 626 EXPECT_TRUE(extension->wants_file_access());
627 EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); 627 EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL));
628 extension = LoadManifest("permissions", "permissions_file_scheme.json", 628 extension = LoadManifest("permissions", "permissions_file_scheme.json",
629 Extension::ALLOW_FILE_ACCESS); 629 Extension::ALLOW_FILE_ACCESS);
630 EXPECT_TRUE(extension->wants_file_access()); 630 EXPECT_TRUE(extension->wants_file_access());
631 EXPECT_TRUE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); 631 EXPECT_TRUE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL));
632 632
633 // http://* permission 633 // http://* permission
634 extension = LoadManifest("permissions", "permissions_http_scheme.json"); 634 extension = LoadManifest("permissions", "permissions_http_scheme.json");
635 EXPECT_FALSE(extension->wants_file_access()); 635 EXPECT_FALSE(extension->wants_file_access());
636 EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); 636 EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL));
637 extension = LoadManifest("permissions", "permissions_http_scheme.json", 637 extension = LoadManifest("permissions", "permissions_http_scheme.json",
638 Extension::ALLOW_FILE_ACCESS); 638 Extension::ALLOW_FILE_ACCESS);
639 EXPECT_FALSE(extension->wants_file_access()); 639 EXPECT_FALSE(extension->wants_file_access());
640 EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); 640 EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL));
641 641
642 // <all_urls> content script match 642 // <all_urls> content script match
643 extension = LoadManifest("permissions", "content_script_all_urls.json"); 643 extension = LoadManifest("permissions", "content_script_all_urls.json");
644 EXPECT_TRUE(extension->wants_file_access()); 644 EXPECT_TRUE(extension->wants_file_access());
645 EXPECT_FALSE(extension->CanExecuteScriptOnPage( 645 EXPECT_FALSE(extension->CanExecuteScriptOnPage(
646 file_url, &extension->content_scripts()[0], NULL)); 646 file_url, -1, &extension->content_scripts()[0], NULL));
647 extension = LoadManifest("permissions", "content_script_all_urls.json", 647 extension = LoadManifest("permissions", "content_script_all_urls.json",
648 Extension::ALLOW_FILE_ACCESS); 648 Extension::ALLOW_FILE_ACCESS);
649 EXPECT_TRUE(extension->wants_file_access()); 649 EXPECT_TRUE(extension->wants_file_access());
650 EXPECT_TRUE(extension->CanExecuteScriptOnPage( 650 EXPECT_TRUE(extension->CanExecuteScriptOnPage(
651 file_url, &extension->content_scripts()[0], NULL)); 651 file_url, -1, &extension->content_scripts()[0], NULL));
652 652
653 // file:///* content script match 653 // file:///* content script match
654 extension = LoadManifest("permissions", "content_script_file_scheme.json"); 654 extension = LoadManifest("permissions", "content_script_file_scheme.json");
655 EXPECT_TRUE(extension->wants_file_access()); 655 EXPECT_TRUE(extension->wants_file_access());
656 EXPECT_FALSE(extension->CanExecuteScriptOnPage( 656 EXPECT_FALSE(extension->CanExecuteScriptOnPage(
657 file_url, &extension->content_scripts()[0], NULL)); 657 file_url, -1, &extension->content_scripts()[0], NULL));
658 extension = LoadManifest("permissions", "content_script_file_scheme.json", 658 extension = LoadManifest("permissions", "content_script_file_scheme.json",
659 Extension::ALLOW_FILE_ACCESS); 659 Extension::ALLOW_FILE_ACCESS);
660 EXPECT_TRUE(extension->wants_file_access()); 660 EXPECT_TRUE(extension->wants_file_access());
661 EXPECT_TRUE(extension->CanExecuteScriptOnPage( 661 EXPECT_TRUE(extension->CanExecuteScriptOnPage(
662 file_url, &extension->content_scripts()[0], NULL)); 662 file_url, -1, &extension->content_scripts()[0], NULL));
663 663
664 // http://* content script match 664 // http://* content script match
665 extension = LoadManifest("permissions", "content_script_http_scheme.json"); 665 extension = LoadManifest("permissions", "content_script_http_scheme.json");
666 EXPECT_FALSE(extension->wants_file_access()); 666 EXPECT_FALSE(extension->wants_file_access());
667 EXPECT_FALSE(extension->CanExecuteScriptOnPage( 667 EXPECT_FALSE(extension->CanExecuteScriptOnPage(
668 file_url, &extension->content_scripts()[0], NULL)); 668 file_url, -1, &extension->content_scripts()[0], NULL));
669 extension = LoadManifest("permissions", "content_script_http_scheme.json", 669 extension = LoadManifest("permissions", "content_script_http_scheme.json",
670 Extension::ALLOW_FILE_ACCESS); 670 Extension::ALLOW_FILE_ACCESS);
671 EXPECT_FALSE(extension->wants_file_access()); 671 EXPECT_FALSE(extension->wants_file_access());
672 EXPECT_FALSE(extension->CanExecuteScriptOnPage( 672 EXPECT_FALSE(extension->CanExecuteScriptOnPage(
673 file_url, &extension->content_scripts()[0], NULL)); 673 file_url, -1, &extension->content_scripts()[0], NULL));
674 } 674 }
675 675
676 TEST(ExtensionTest, ExtraFlags) { 676 TEST(ExtensionTest, ExtraFlags) {
677 scoped_refptr<Extension> extension; 677 scoped_refptr<Extension> extension;
678 extension = LoadManifest("app", "manifest.json", Extension::FROM_WEBSTORE); 678 extension = LoadManifest("app", "manifest.json", Extension::FROM_WEBSTORE);
679 EXPECT_TRUE(extension->from_webstore()); 679 EXPECT_TRUE(extension->from_webstore());
680 680
681 extension = LoadManifest("app", "manifest.json", Extension::FROM_BOOKMARK); 681 extension = LoadManifest("app", "manifest.json", Extension::FROM_BOOKMARK);
682 EXPECT_TRUE(extension->from_bookmark()); 682 EXPECT_TRUE(extension->from_bookmark());
683 683
684 extension = LoadManifest("app", "manifest.json", Extension::NO_FLAGS); 684 extension = LoadManifest("app", "manifest.json", Extension::NO_FLAGS);
685 EXPECT_FALSE(extension->from_bookmark()); 685 EXPECT_FALSE(extension->from_bookmark());
686 EXPECT_FALSE(extension->from_webstore()); 686 EXPECT_FALSE(extension->from_webstore());
687 } 687 }
688 688
689 // Base class for testing the CanExecuteScriptOnPage and CanCaptureVisiblePage 689 // Base class for testing the CanExecuteScriptOnPage and CanCaptureVisiblePage
690 // methods of Extension for extensions with various permissions. 690 // methods of Extension for extensions with various permissions.
691 class ExtensionScriptAndCaptureVisibleTest : public testing::Test { 691 class ExtensionScriptAndCaptureVisibleTest : public testing::Test {
692 public: 692 protected:
693 ExtensionScriptAndCaptureVisibleTest() { 693 ExtensionScriptAndCaptureVisibleTest()
694 PathService::Get(chrome::DIR_TEST_DATA, &dirpath_); 694 : http_url_("http://www.google.com"),
695 http_url_with_path_("http://www.google.com/index.html"),
696 https_url_("https://www.google.com"),
697 file_url_("file:///foo/bar"),
698 favicon_url_("chrome://favicon/http://www.google.com"),
699 extension_url_("chrome-extension://" +
700 Extension::GenerateIdForPath(FilePath(FILE_PATH_LITERAL("foo")))),
701 settings_url_("chrome://settings"),
702 about_url_("about:flags") {
703 urls_.insert(http_url_);
704 urls_.insert(http_url_with_path_);
705 urls_.insert(https_url_);
706 urls_.insert(file_url_);
707 urls_.insert(favicon_url_);
708 urls_.insert(extension_url_);
709 urls_.insert(settings_url_);
710 urls_.insert(about_url_);
695 } 711 }
696 712
697 bool Allowed(const Extension* extension, const GURL& url) { 713 bool Allowed(const Extension* extension, const GURL& url) {
698 return (extension->CanExecuteScriptOnPage(url, NULL, NULL) && 714 return Allowed(extension, url, -1);
699 extension->CanCaptureVisiblePage(url, NULL)); 715 }
716
717 bool Allowed(const Extension* extension, const GURL& url, int tab_id) {
718 return (extension->CanExecuteScriptOnPage(url, tab_id, NULL, NULL) &&
719 extension->CanCaptureVisiblePage(url, tab_id, NULL));
700 } 720 }
701 721
702 bool CaptureOnly(const Extension* extension, const GURL& url) { 722 bool CaptureOnly(const Extension* extension, const GURL& url) {
703 return !extension->CanExecuteScriptOnPage(url, NULL, NULL) && 723 return CaptureOnly(extension, url, -1);
704 extension->CanCaptureVisiblePage(url, NULL); 724 }
725
726 bool CaptureOnly(const Extension* extension, const GURL& url, int tab_id) {
727 return !extension->CanExecuteScriptOnPage(url, tab_id, NULL, NULL) &&
728 extension->CanCaptureVisiblePage(url, tab_id, NULL);
705 } 729 }
706 730
707 bool Blocked(const Extension* extension, const GURL& url) { 731 bool Blocked(const Extension* extension, const GURL& url) {
708 return !(extension->CanExecuteScriptOnPage(url, NULL, NULL) || 732 return Blocked(extension, url, -1);
709 extension->CanCaptureVisiblePage(url, NULL));
710 } 733 }
711 734
712 protected: 735 bool Blocked(const Extension* extension, const GURL& url, int tab_id) {
713 FilePath dirpath_; 736 return !(extension->CanExecuteScriptOnPage(url, tab_id, NULL, NULL) ||
737 extension->CanCaptureVisiblePage(url, tab_id, NULL));
738 }
739
740 bool AllowedExclusivelyOnTab(
741 const Extension* extension,
742 const std::set<GURL>& allowed_urls,
743 int tab_id) {
744 bool result = true;
745 for (std::set<GURL>::iterator it = urls_.begin(); it != urls_.end(); ++it) {
746 const GURL& url = *it;
747 if (allowed_urls.count(url))
748 result &= Allowed(extension, url, tab_id);
749 else
750 result &= Blocked(extension, url, tab_id);
751 }
752 return result;
753 }
754
755 const GURL& http_url() { return http_url_; }
756 const GURL& http_url_with_path() { return http_url_with_path_; }
757 const GURL& https_url() { return https_url_; }
758 const GURL& file_url() { return file_url_; }
759 const GURL& favicon_url() { return favicon_url_; }
760 const GURL& extension_url() { return extension_url_; }
761 const GURL& settings_url() { return settings_url_; }
762 const GURL& about_url() { return about_url_; }
763
764 const std::set<GURL> urls() { return urls_; }
765
766 private:
767 // URLs that are "safe" to provide scripting and capture visible tab access
768 // to if the permissions allow it.
769 GURL http_url_;
770 GURL http_url_with_path_;
771 GURL https_url_;
772 GURL file_url_;
773
774 // We should allow host permission but not scripting permission for favicon
775 // urls.
776 GURL favicon_url_;
777
778 // URLs that regular extensions should never get access to.
779 GURL extension_url_;
780 GURL settings_url_;
781 GURL about_url_;
782
783 // The set of all URLs above.
784 std::set<GURL> urls_;
714 }; 785 };
715 786
716 TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) { 787 TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) {
717 scoped_refptr<Extension> extension; 788 scoped_refptr<Extension> extension;
718 // URLs that are "safe" to provide scripting and capture visible tab access
719 // to if the permissions allow it.
720 GURL http_url("http://www.google.com");
721 GURL https_url("https://www.google.com");
722 GURL file_url("file:///foo/bar");
723 789
724 // We should allow host permission but not scripting permission for favicon
725 // urls.
726 GURL favicon_url("chrome://favicon/http://www.google.com");
727
728 std::string dummy_id =
729 Extension::GenerateIdForPath(FilePath(FILE_PATH_LITERAL("whatever")));
730
731 // URLs that regular extensions should never get access to.
732 GURL extension_url("chrome-extension://" + dummy_id);
733 GURL settings_url("chrome://settings");
734 GURL about_url("about:flags");
735 790
736 // Test <all_urls> for regular extensions. 791 // Test <all_urls> for regular extensions.
737 extension = LoadManifestStrict("script_and_capture", 792 extension = LoadManifestStrict("script_and_capture",
738 "extension_regular_all.json"); 793 "extension_regular_all.json");
739 EXPECT_TRUE(Allowed(extension, http_url)); 794 EXPECT_TRUE(Allowed(extension, http_url()));
740 EXPECT_TRUE(Allowed(extension, https_url)); 795 EXPECT_TRUE(Allowed(extension, https_url()));
741 EXPECT_TRUE(Blocked(extension, file_url)); 796 EXPECT_TRUE(Blocked(extension, file_url()));
742 EXPECT_TRUE(Blocked(extension, settings_url)); 797 EXPECT_TRUE(Blocked(extension, settings_url()));
743 EXPECT_TRUE(CaptureOnly(extension, favicon_url)); 798 EXPECT_TRUE(CaptureOnly(extension, favicon_url()));
744 EXPECT_TRUE(Blocked(extension, about_url)); 799 EXPECT_TRUE(Blocked(extension, about_url()));
745 EXPECT_TRUE(Blocked(extension, extension_url)); 800 EXPECT_TRUE(Blocked(extension, extension_url()));
746 801
747 EXPECT_FALSE(extension->HasHostPermission(settings_url)); 802 EXPECT_FALSE(extension->HasHostPermission(settings_url()));
748 EXPECT_FALSE(extension->HasHostPermission(about_url)); 803 EXPECT_FALSE(extension->HasHostPermission(about_url()));
749 EXPECT_TRUE(extension->HasHostPermission(favicon_url)); 804 EXPECT_TRUE(extension->HasHostPermission(favicon_url()));
750 805
751 // Test * for scheme, which implies just the http/https schemes. 806 // Test * for scheme, which implies just the http/https schemes.
752 extension = LoadManifestStrict("script_and_capture", 807 extension = LoadManifestStrict("script_and_capture",
753 "extension_wildcard.json"); 808 "extension_wildcard.json");
754 EXPECT_TRUE(Allowed(extension, http_url)); 809 EXPECT_TRUE(Allowed(extension, http_url()));
755 EXPECT_TRUE(Allowed(extension, https_url)); 810 EXPECT_TRUE(Allowed(extension, https_url()));
756 EXPECT_TRUE(Blocked(extension, settings_url)); 811 EXPECT_TRUE(Blocked(extension, settings_url()));
757 EXPECT_TRUE(Blocked(extension, about_url)); 812 EXPECT_TRUE(Blocked(extension, about_url()));
758 EXPECT_TRUE(Blocked(extension, file_url)); 813 EXPECT_TRUE(Blocked(extension, file_url()));
759 EXPECT_TRUE(Blocked(extension, favicon_url)); 814 EXPECT_TRUE(Blocked(extension, favicon_url()));
760 extension = LoadManifest("script_and_capture", 815 extension = LoadManifest("script_and_capture",
761 "extension_wildcard_settings.json"); 816 "extension_wildcard_settings.json");
762 EXPECT_TRUE(Blocked(extension, settings_url)); 817 EXPECT_TRUE(Blocked(extension, settings_url()));
763 818
764 // Having chrome://*/ should not work for regular extensions. Note that 819 // Having chrome://*/ should not work for regular extensions. Note that
765 // for favicon access, we require the explicit pattern chrome://favicon/*. 820 // for favicon access, we require the explicit pattern chrome://favicon/*.
766 std::string error; 821 std::string error;
767 extension = LoadManifestUnchecked("script_and_capture", 822 extension = LoadManifestUnchecked("script_and_capture",
768 "extension_wildcard_chrome.json", 823 "extension_wildcard_chrome.json",
769 Extension::INTERNAL, Extension::NO_FLAGS, 824 Extension::INTERNAL, Extension::NO_FLAGS,
770 &error); 825 &error);
771 EXPECT_TRUE(extension == NULL); 826 EXPECT_TRUE(extension == NULL);
772 EXPECT_EQ(ExtensionErrorUtils::FormatErrorMessage( 827 EXPECT_EQ(ExtensionErrorUtils::FormatErrorMessage(
773 errors::kInvalidPermissionScheme, base::IntToString(1)), error); 828 errors::kInvalidPermissionScheme, base::IntToString(1)), error);
774 829
775 // Having chrome://favicon/* should not give you chrome://* 830 // Having chrome://favicon/* should not give you chrome://*
776 extension = LoadManifestStrict("script_and_capture", 831 extension = LoadManifestStrict("script_and_capture",
777 "extension_chrome_favicon_wildcard.json"); 832 "extension_chrome_favicon_wildcard.json");
778 EXPECT_TRUE(Blocked(extension, settings_url)); 833 EXPECT_TRUE(Blocked(extension, settings_url()));
779 EXPECT_TRUE(CaptureOnly(extension, favicon_url)); 834 EXPECT_TRUE(CaptureOnly(extension, favicon_url()));
780 EXPECT_TRUE(Blocked(extension, about_url)); 835 EXPECT_TRUE(Blocked(extension, about_url()));
781 EXPECT_TRUE(extension->HasHostPermission(favicon_url)); 836 EXPECT_TRUE(extension->HasHostPermission(favicon_url()));
782 837
783 // Having http://favicon should not give you chrome://favicon 838 // Having http://favicon should not give you chrome://favicon
784 extension = LoadManifestStrict("script_and_capture", 839 extension = LoadManifestStrict("script_and_capture",
785 "extension_http_favicon.json"); 840 "extension_http_favicon.json");
786 EXPECT_TRUE(Blocked(extension, settings_url)); 841 EXPECT_TRUE(Blocked(extension, settings_url()));
787 EXPECT_TRUE(Blocked(extension, favicon_url)); 842 EXPECT_TRUE(Blocked(extension, favicon_url()));
788 843
789 // Component extensions with <all_urls> should get everything. 844 // Component extensions with <all_urls> should get everything.
790 extension = LoadManifest("script_and_capture", "extension_component_all.json", 845 extension = LoadManifest("script_and_capture", "extension_component_all.json",
791 Extension::COMPONENT, Extension::NO_FLAGS); 846 Extension::COMPONENT, Extension::NO_FLAGS);
792 EXPECT_TRUE(Allowed(extension, http_url)); 847 EXPECT_TRUE(Allowed(extension, http_url()));
793 EXPECT_TRUE(Allowed(extension, https_url)); 848 EXPECT_TRUE(Allowed(extension, https_url()));
794 EXPECT_TRUE(Allowed(extension, settings_url)); 849 EXPECT_TRUE(Allowed(extension, settings_url()));
795 EXPECT_TRUE(Allowed(extension, about_url)); 850 EXPECT_TRUE(Allowed(extension, about_url()));
796 EXPECT_TRUE(Allowed(extension, favicon_url)); 851 EXPECT_TRUE(Allowed(extension, favicon_url()));
797 EXPECT_TRUE(extension->HasHostPermission(favicon_url)); 852 EXPECT_TRUE(extension->HasHostPermission(favicon_url()));
798 853
799 // Component extensions should only get access to what they ask for. 854 // Component extensions should only get access to what they ask for.
800 extension = LoadManifest("script_and_capture", 855 extension = LoadManifest("script_and_capture",
801 "extension_component_google.json", Extension::COMPONENT, 856 "extension_component_google.json", Extension::COMPONENT,
802 Extension::NO_FLAGS); 857 Extension::NO_FLAGS);
803 EXPECT_TRUE(Allowed(extension, http_url)); 858 EXPECT_TRUE(Allowed(extension, http_url()));
804 EXPECT_TRUE(Blocked(extension, https_url)); 859 EXPECT_TRUE(Blocked(extension, https_url()));
805 EXPECT_TRUE(Blocked(extension, file_url)); 860 EXPECT_TRUE(Blocked(extension, file_url()));
806 EXPECT_TRUE(Blocked(extension, settings_url)); 861 EXPECT_TRUE(Blocked(extension, settings_url()));
807 EXPECT_TRUE(Blocked(extension, favicon_url)); 862 EXPECT_TRUE(Blocked(extension, favicon_url()));
808 EXPECT_TRUE(Blocked(extension, about_url)); 863 EXPECT_TRUE(Blocked(extension, about_url()));
809 EXPECT_TRUE(Blocked(extension, extension_url)); 864 EXPECT_TRUE(Blocked(extension, extension_url()));
810 EXPECT_FALSE(extension->HasHostPermission(settings_url)); 865 EXPECT_FALSE(extension->HasHostPermission(settings_url()));
not at google - send to devlin 2012/06/06 07:38:40 Looking at the damage I made here, I should revert
866 }
867
868 TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecific) {
869 scoped_refptr<Extension> extension =
870 LoadManifestStrict("script_and_capture", "tab_specific.json");
871
872 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(0));
873 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(1));
874 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(2));
875
876 std::set<GURL> no_urls;
877
878 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0));
879 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1));
880 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2));
881
882 URLPatternSet allowed_hosts;
883 allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL,
884 http_url().spec()));
885 std::set<GURL> allowed_urls;
886 allowed_urls.insert(http_url());
887 // http_url_with_path() will also be allowed, because Extension should be
888 // considering the security origin of the URL not the URL itself, and
889 // http_url() is in allowed_hosts.
890 allowed_urls.insert(http_url_with_path());
891
892 extension->SetTabSpecificHostPermissions(0, allowed_hosts);
893 EXPECT_EQ(allowed_hosts, *extension->GetTabSpecificHostPermissions(0));
894
895 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, allowed_urls, 0));
896 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1));
897 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2));
898
899 extension->ClearTabSpecificHostPermissions(0);
900 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(0));
901
902 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0));
903 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1));
904 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2));
905
906 std::set<GURL> more_allowed_urls = allowed_urls;
907 more_allowed_urls.insert(https_url());
908 URLPatternSet more_allowed_hosts = allowed_hosts;
909 more_allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL,
910 https_url().spec()));
911
912 extension->SetTabSpecificHostPermissions(0, allowed_hosts);
913 EXPECT_EQ(allowed_hosts, *extension->GetTabSpecificHostPermissions(0));
914 extension->SetTabSpecificHostPermissions(1, more_allowed_hosts);
915 EXPECT_EQ(more_allowed_hosts, *extension->GetTabSpecificHostPermissions(1));
916
917 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, allowed_urls, 0));
918 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, more_allowed_urls, 1));
919 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2));
920
921 extension->ClearTabSpecificHostPermissions(0);
922 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(0));
923
924 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0));
925 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, more_allowed_urls, 1));
926 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2));
927
928 extension->ClearTabSpecificHostPermissions(1);
929 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(1));
930
931 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0));
932 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1));
933 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2));
934 }
935
936 TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecificActiveHostPermissions) {
937 // - no active permissions.
938 // - no tab specific permissions
939 // - changing active permissions.
940 // - changing tab specific permissions.
941 // - lots of tab specific permissions (test merge algorithm).
811 } 942 }
812 943
813 TEST(ExtensionTest, GenerateId) { 944 TEST(ExtensionTest, GenerateId) {
814 std::string result; 945 std::string result;
815 EXPECT_TRUE(Extension::GenerateId("", &result)); 946 EXPECT_TRUE(Extension::GenerateId("", &result));
816 947
817 EXPECT_TRUE(Extension::GenerateId("test", &result)); 948 EXPECT_TRUE(Extension::GenerateId("test", &result));
818 EXPECT_EQ(result, "jpignaibiiemhngfjkcpokkamffknabf"); 949 EXPECT_EQ(result, "jpignaibiiemhngfjkcpokkamffknabf");
819 950
820 EXPECT_TRUE(Extension::GenerateId("_", &result)); 951 EXPECT_TRUE(Extension::GenerateId("_", &result));
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
968 } 1099 }
969 1100
970 TEST(ExtensionTest, GetSyncTypeExtensionWithTwoPlugins) { 1101 TEST(ExtensionTest, GetSyncTypeExtensionWithTwoPlugins) {
971 scoped_refptr<Extension> extension( 1102 scoped_refptr<Extension> extension(
972 MakeSyncTestExtension(EXTENSION, GURL(), GURL(), 1103 MakeSyncTestExtension(EXTENSION, GURL(), GURL(),
973 Extension::INTERNAL, 2, FilePath())); 1104 Extension::INTERNAL, 2, FilePath()));
974 if (extension) 1105 if (extension)
975 EXPECT_EQ(extension->GetSyncType(), Extension::SYNC_TYPE_NONE); 1106 EXPECT_EQ(extension->GetSyncType(), Extension::SYNC_TYPE_NONE);
976 } 1107 }
977 #endif // !defined(OS_CHROMEOS) 1108 #endif // !defined(OS_CHROMEOS)
OLDNEW
« no previous file with comments | « chrome/common/extensions/extension_messages.cc ('k') | chrome/common/extensions/url_pattern_set.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698