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

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: a unit test 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 public:
693 ExtensionScriptAndCaptureVisibleTest() { 693 ExtensionScriptAndCaptureVisibleTest() {
694 PathService::Get(chrome::DIR_TEST_DATA, &dirpath_); 694 PathService::Get(chrome::DIR_TEST_DATA, &dirpath_);
695 } 695 }
696 696
697 bool Allowed(const Extension* extension, const GURL& url) { 697 bool Allowed(const Extension* extension, const GURL& url) {
698 return (extension->CanExecuteScriptOnPage(url, NULL, NULL) && 698 return Allowed(extension, url, -1);
699 extension->CanCaptureVisiblePage(url, NULL)); 699 }
700
701 bool Allowed(const Extension* extension, const GURL& url, int tab_id) {
702 return (extension->CanExecuteScriptOnPage(url, tab_id, NULL, NULL) &&
703 extension->CanCaptureVisiblePage(url, tab_id, NULL));
700 } 704 }
701 705
702 bool CaptureOnly(const Extension* extension, const GURL& url) { 706 bool CaptureOnly(const Extension* extension, const GURL& url) {
703 return !extension->CanExecuteScriptOnPage(url, NULL, NULL) && 707 return CaptureOnly(extension, url, -1);
704 extension->CanCaptureVisiblePage(url, NULL); 708 }
709
710 bool CaptureOnly(const Extension* extension, const GURL& url, int tab_id) {
711 return !extension->CanExecuteScriptOnPage(url, tab_id, NULL, NULL) &&
712 extension->CanCaptureVisiblePage(url, tab_id, NULL);
705 } 713 }
706 714
707 bool Blocked(const Extension* extension, const GURL& url) { 715 bool Blocked(const Extension* extension, const GURL& url) {
708 return !(extension->CanExecuteScriptOnPage(url, NULL, NULL) || 716 return Blocked(extension, url, -1);
709 extension->CanCaptureVisiblePage(url, NULL)); 717 }
718
719 bool Blocked(const Extension* extension, const GURL& url, int tab_id) {
720 return !(extension->CanExecuteScriptOnPage(url, tab_id, NULL, NULL) ||
721 extension->CanCaptureVisiblePage(url, tab_id, NULL));
710 } 722 }
711 723
712 protected: 724 protected:
713 FilePath dirpath_; 725 FilePath dirpath_;
714 }; 726 };
715 727
716 TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) { 728 TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) {
717 scoped_refptr<Extension> extension; 729 scoped_refptr<Extension> extension;
718 // URLs that are "safe" to provide scripting and capture visible tab access 730 // URLs that are "safe" to provide scripting and capture visible tab access
719 // to if the permissions allow it. 731 // to if the permissions allow it.
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 EXPECT_TRUE(Allowed(extension, http_url)); 815 EXPECT_TRUE(Allowed(extension, http_url));
804 EXPECT_TRUE(Blocked(extension, https_url)); 816 EXPECT_TRUE(Blocked(extension, https_url));
805 EXPECT_TRUE(Blocked(extension, file_url)); 817 EXPECT_TRUE(Blocked(extension, file_url));
806 EXPECT_TRUE(Blocked(extension, settings_url)); 818 EXPECT_TRUE(Blocked(extension, settings_url));
807 EXPECT_TRUE(Blocked(extension, favicon_url)); 819 EXPECT_TRUE(Blocked(extension, favicon_url));
808 EXPECT_TRUE(Blocked(extension, about_url)); 820 EXPECT_TRUE(Blocked(extension, about_url));
809 EXPECT_TRUE(Blocked(extension, extension_url)); 821 EXPECT_TRUE(Blocked(extension, extension_url));
810 EXPECT_FALSE(extension->HasHostPermission(settings_url)); 822 EXPECT_FALSE(extension->HasHostPermission(settings_url));
811 } 823 }
812 824
825 TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecific) {
826 // TODO: these tests in progress. hastily assembled late at night.
827 scoped_refptr<Extension> extension =
828 LoadManifestStrict("script_and_capture", "tab_specific.json");
829
830 GURL http_url("http://www.google.com");
831 GURL https_url("https://www.google.com");
832 GURL file_url("file:///foo/bar");
833 GURL favicon_url("chrome://favicon/http://www.google.com");
834 GURL extension_url("chrome-extension://monkey");
835 GURL settings_url("chrome://settings");
836 GURL about_url("about:flags");
837
838 const GURL urls[] = {
839 http_url, https_url, file_url, favicon_url,
840 extension_url, settings_url, about_url,
841 };
842
843 // Shouldn't have access to any URLs on any tabs.
844 for (size_t i = 0; i < arraysize(urls); ++i) {
845 GURL url = urls[i];
846 EXPECT_TRUE(Blocked(extension, url, 0));
847 EXPECT_TRUE(Blocked(extension, url, 1));
848 EXPECT_TRUE(Blocked(extension, url, 2));
849 }
850
851 // TODO: GetEffectiveHostPermissions?
852
853 // Grant access to http_url on tab 0.
854 {
855 URLPatternSet hosts;
856 hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL, http_url.spec()));
857
858 extension->SetTabSpecificHostPermissions(0, hosts);
859 for (size_t i = 0; i < arraysize(urls); ++i) {
860 GURL url = urls[i];
861 if (url == http_url)
862 EXPECT_TRUE(Allowed(extension, url, 0));
863 else
864 EXPECT_TRUE(Blocked(extension, url, 0));
865 EXPECT_TRUE(Blocked(extension, url, 1));
866 EXPECT_TRUE(Blocked(extension, url, 2));
867 }
868
869 extension->ClearTabSpecificHostPermissions(0);
870 for (size_t i = 0; i < arraysize(urls); ++i) {
871 GURL url = urls[i];
872 EXPECT_TRUE(Blocked(extension, url, 0));
873 EXPECT_TRUE(Blocked(extension, url, 1));
874 EXPECT_TRUE(Blocked(extension, url, 2));
875 }
876
877 extension->SetTabSpecificHostPermissions(0, hosts);
878 extension->SetTabSpecificHostPermissions(1, hosts);
879 for (size_t i = 0; i < arraysize(urls); ++i) {
880 GURL url = urls[i];
881 if (url == http_url) {
882 EXPECT_TRUE(Allowed(extension, url, 0));
883 EXPECT_TRUE(Allowed(extension, url, 1));
884 } else {
885 EXPECT_TRUE(Blocked(extension, url, 0));
886 EXPECT_TRUE(Blocked(extension, url, 1));
887 }
888 EXPECT_TRUE(Blocked(extension, url, 2));
889 }
890
891 extension->ClearTabSpecificHostPermissions(0);
892 for (size_t i = 0; i < arraysize(urls); ++i) {
893 GURL url = urls[i];
894 EXPECT_TRUE(Blocked(extension, url, 0));
895 if (url == http_url)
896 EXPECT_TRUE(Allowed(extension, url, 1));
897 else
898 EXPECT_TRUE(Blocked(extension, url, 1));
899 EXPECT_TRUE(Blocked(extension, url, 2));
900 }
901
902 extension->ClearTabSpecificHostPermissions(1);
903 for (size_t i = 0; i < arraysize(urls); ++i) {
904 GURL url = urls[i];
905 EXPECT_TRUE(Blocked(extension, url, 0));
906 EXPECT_TRUE(Blocked(extension, url, 1));
907 EXPECT_TRUE(Blocked(extension, url, 2));
908 }
909 }
910 }
911
813 TEST(ExtensionTest, GenerateId) { 912 TEST(ExtensionTest, GenerateId) {
814 std::string result; 913 std::string result;
815 EXPECT_TRUE(Extension::GenerateId("", &result)); 914 EXPECT_TRUE(Extension::GenerateId("", &result));
816 915
817 EXPECT_TRUE(Extension::GenerateId("test", &result)); 916 EXPECT_TRUE(Extension::GenerateId("test", &result));
818 EXPECT_EQ(result, "jpignaibiiemhngfjkcpokkamffknabf"); 917 EXPECT_EQ(result, "jpignaibiiemhngfjkcpokkamffknabf");
819 918
820 EXPECT_TRUE(Extension::GenerateId("_", &result)); 919 EXPECT_TRUE(Extension::GenerateId("_", &result));
821 EXPECT_EQ(result, "ncocknphbhhlhkikpnnlmbcnbgdempcd"); 920 EXPECT_EQ(result, "ncocknphbhhlhkikpnnlmbcnbgdempcd");
822 921
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
968 } 1067 }
969 1068
970 TEST(ExtensionTest, GetSyncTypeExtensionWithTwoPlugins) { 1069 TEST(ExtensionTest, GetSyncTypeExtensionWithTwoPlugins) {
971 scoped_refptr<Extension> extension( 1070 scoped_refptr<Extension> extension(
972 MakeSyncTestExtension(EXTENSION, GURL(), GURL(), 1071 MakeSyncTestExtension(EXTENSION, GURL(), GURL(),
973 Extension::INTERNAL, 2, FilePath())); 1072 Extension::INTERNAL, 2, FilePath()));
974 if (extension) 1073 if (extension)
975 EXPECT_EQ(extension->GetSyncType(), Extension::SYNC_TYPE_NONE); 1074 EXPECT_EQ(extension->GetSyncType(), Extension::SYNC_TYPE_NONE);
976 } 1075 }
977 #endif // !defined(OS_CHROMEOS) 1076 #endif // !defined(OS_CHROMEOS)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698