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

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

Issue 12792005: Allow extensions on chrome:// URLs, when flag is set and permission is explicitly requested (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Reinstate original pickle order; add scripts clause to content_script_chrome_url_invalid.json to av… Created 7 years, 9 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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/command_line.h"
7 #include "base/file_util.h" 8 #include "base/file_util.h"
8 #include "base/files/file_path.h" 9 #include "base/files/file_path.h"
9 #include "base/format_macros.h" 10 #include "base/format_macros.h"
10 #include "base/json/json_file_value_serializer.h" 11 #include "base/json/json_file_value_serializer.h"
11 #include "base/path_service.h" 12 #include "base/path_service.h"
12 #include "base/stringprintf.h" 13 #include "base/stringprintf.h"
13 #include "base/strings/string_number_conversions.h" 14 #include "base/strings/string_number_conversions.h"
14 #include "base/utf_string_conversions.h" 15 #include "base/utf_string_conversions.h"
15 #include "chrome/common/chrome_paths.h" 16 #include "chrome/common/chrome_paths.h"
17 #include "chrome/common/chrome_switches.h"
16 #include "chrome/common/extensions/api/commands/commands_handler.h" 18 #include "chrome/common/extensions/api/commands/commands_handler.h"
17 #include "chrome/common/extensions/api/plugins/plugins_handler.h" 19 #include "chrome/common/extensions/api/plugins/plugins_handler.h"
18 #include "chrome/common/extensions/background_info.h" 20 #include "chrome/common/extensions/background_info.h"
19 #include "chrome/common/extensions/command.h" 21 #include "chrome/common/extensions/command.h"
20 #include "chrome/common/extensions/extension_file_util.h" 22 #include "chrome/common/extensions/extension_file_util.h"
21 #include "chrome/common/extensions/extension_manifest_constants.h" 23 #include "chrome/common/extensions/extension_manifest_constants.h"
22 #include "chrome/common/extensions/extension_resource.h" 24 #include "chrome/common/extensions/extension_resource.h"
23 #include "chrome/common/extensions/features/feature.h" 25 #include "chrome/common/extensions/features/feature.h"
24 #include "chrome/common/extensions/manifest.h" 26 #include "chrome/common/extensions/manifest.h"
25 #include "chrome/common/extensions/manifest_handler.h" 27 #include "chrome/common/extensions/manifest_handler.h"
(...skipping 624 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 const GURL extension_url; 652 const GURL extension_url;
651 const GURL settings_url; 653 const GURL settings_url;
652 const GURL about_url; 654 const GURL about_url;
653 655
654 private: 656 private:
655 // The set of all URLs above. 657 // The set of all URLs above.
656 std::set<GURL> urls_; 658 std::set<GURL> urls_;
657 }; 659 };
658 660
659 TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) { 661 TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) {
660 scoped_refptr<Extension> extension; 662 // Test <all_urls> for regular extensions.
663 scoped_refptr<Extension> extension = LoadManifestStrict("script_and_capture",
664 "extension_regular_all.json");
661 665
662 // Test <all_urls> for regular extensions.
663 extension = LoadManifestStrict("script_and_capture",
664 "extension_regular_all.json");
665 EXPECT_TRUE(Allowed(extension, http_url)); 666 EXPECT_TRUE(Allowed(extension, http_url));
666 EXPECT_TRUE(Allowed(extension, https_url)); 667 EXPECT_TRUE(Allowed(extension, https_url));
667 EXPECT_TRUE(Blocked(extension, file_url)); 668 EXPECT_TRUE(Blocked(extension, file_url));
668 EXPECT_TRUE(Blocked(extension, settings_url)); 669 EXPECT_TRUE(Blocked(extension, settings_url));
669 EXPECT_TRUE(CaptureOnly(extension, favicon_url)); 670 EXPECT_TRUE(CaptureOnly(extension, favicon_url));
670 EXPECT_TRUE(Blocked(extension, about_url)); 671 EXPECT_TRUE(Blocked(extension, about_url));
671 EXPECT_TRUE(Blocked(extension, extension_url)); 672 EXPECT_TRUE(Blocked(extension, extension_url));
672 673
673 // Test access to iframed content. 674 // Test access to iframed content.
674 GURL within_extension_url = extension->GetResourceURL("page.html"); 675 GURL within_extension_url = extension->GetResourceURL("page.html");
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 EXPECT_TRUE(Allowed(extension, http_url)); 739 EXPECT_TRUE(Allowed(extension, http_url));
739 EXPECT_TRUE(Blocked(extension, https_url)); 740 EXPECT_TRUE(Blocked(extension, https_url));
740 EXPECT_TRUE(Blocked(extension, file_url)); 741 EXPECT_TRUE(Blocked(extension, file_url));
741 EXPECT_TRUE(Blocked(extension, settings_url)); 742 EXPECT_TRUE(Blocked(extension, settings_url));
742 EXPECT_TRUE(Blocked(extension, favicon_url)); 743 EXPECT_TRUE(Blocked(extension, favicon_url));
743 EXPECT_TRUE(Blocked(extension, about_url)); 744 EXPECT_TRUE(Blocked(extension, about_url));
744 EXPECT_TRUE(Blocked(extension, extension_url)); 745 EXPECT_TRUE(Blocked(extension, extension_url));
745 EXPECT_FALSE(extension->HasHostPermission(settings_url)); 746 EXPECT_FALSE(extension->HasHostPermission(settings_url));
746 } 747 }
747 748
749
750 TEST_F(ExtensionScriptAndCaptureVisibleTest, PermissionsWithChromeURLsEnabled) {
751 CommandLine::ForCurrentProcess()->AppendSwitch(
752 switches::kExtensionsOnChromeURLs);
753
754 scoped_refptr<Extension> extension;
755
756 // Test <all_urls> for regular extensions.
757 extension = LoadManifestStrict("script_and_capture",
758 "extension_regular_all.json");
759 EXPECT_TRUE(Allowed(extension, http_url));
760 EXPECT_TRUE(Allowed(extension, https_url));
761 EXPECT_TRUE(Blocked(extension, file_url));
762 EXPECT_TRUE(Blocked(extension, settings_url));
763 EXPECT_TRUE(Allowed(extension, favicon_url)); // chrome:// requested
764 EXPECT_TRUE(Blocked(extension, about_url));
765 EXPECT_TRUE(Blocked(extension, extension_url));
766
767 // Test access to iframed content.
768 GURL within_extension_url = extension->GetResourceURL("page.html");
769 EXPECT_TRUE(AllowedScript(extension, http_url, http_url_with_path));
770 EXPECT_TRUE(AllowedScript(extension, https_url, http_url_with_path));
771 EXPECT_TRUE(AllowedScript(extension, http_url, within_extension_url));
772 EXPECT_TRUE(AllowedScript(extension, https_url, within_extension_url));
773 EXPECT_TRUE(BlockedScript(extension, http_url, extension_url));
774 EXPECT_TRUE(BlockedScript(extension, https_url, extension_url));
775
776 EXPECT_FALSE(extension->HasHostPermission(settings_url));
777 EXPECT_FALSE(extension->HasHostPermission(about_url));
778 EXPECT_TRUE(extension->HasHostPermission(favicon_url));
779
780 // Test * for scheme, which implies just the http/https schemes.
781 extension = LoadManifestStrict("script_and_capture",
782 "extension_wildcard.json");
783 EXPECT_TRUE(Allowed(extension, http_url));
784 EXPECT_TRUE(Allowed(extension, https_url));
785 EXPECT_TRUE(Blocked(extension, settings_url));
786 EXPECT_TRUE(Blocked(extension, about_url));
787 EXPECT_TRUE(Blocked(extension, file_url));
788 EXPECT_TRUE(Blocked(extension, favicon_url));
789 extension = LoadManifest("script_and_capture",
790 "extension_wildcard_settings.json");
791 EXPECT_TRUE(Blocked(extension, settings_url));
792
793 // Having chrome://*/ should work for regular extensions with the flag
794 // enabled.
795 std::string error;
796 extension = LoadManifestUnchecked("script_and_capture",
797 "extension_wildcard_chrome.json",
798 Manifest::INTERNAL, Extension::NO_FLAGS,
799 &error);
800 EXPECT_FALSE(extension == NULL);
801 EXPECT_TRUE(Blocked(extension, http_url));
802 EXPECT_TRUE(Blocked(extension, https_url));
803 EXPECT_TRUE(Allowed(extension, settings_url));
804 EXPECT_TRUE(Blocked(extension, about_url));
805 EXPECT_TRUE(Blocked(extension, file_url));
806 EXPECT_TRUE(Allowed(extension, favicon_url)); // chrome:// requested
807
808 // Having chrome://favicon/* should not give you chrome://*
809 extension = LoadManifestStrict("script_and_capture",
810 "extension_chrome_favicon_wildcard.json");
811 EXPECT_TRUE(Blocked(extension, settings_url));
812 EXPECT_TRUE(Allowed(extension, favicon_url)); // chrome:// requested
813 EXPECT_TRUE(Blocked(extension, about_url));
814 EXPECT_TRUE(extension->HasHostPermission(favicon_url));
815
816 // Having http://favicon should not give you chrome://favicon
817 extension = LoadManifestStrict("script_and_capture",
818 "extension_http_favicon.json");
819 EXPECT_TRUE(Blocked(extension, settings_url));
820 EXPECT_TRUE(Blocked(extension, favicon_url));
821
822 // Component extensions with <all_urls> should get everything.
823 extension = LoadManifest("script_and_capture", "extension_component_all.json",
824 Manifest::COMPONENT, Extension::NO_FLAGS);
825 EXPECT_TRUE(Allowed(extension, http_url));
826 EXPECT_TRUE(Allowed(extension, https_url));
827 EXPECT_TRUE(Allowed(extension, settings_url));
828 EXPECT_TRUE(Allowed(extension, about_url));
829 EXPECT_TRUE(Allowed(extension, favicon_url));
830 EXPECT_TRUE(extension->HasHostPermission(favicon_url));
831
832 // Component extensions should only get access to what they ask for.
833 extension = LoadManifest("script_and_capture",
834 "extension_component_google.json", Manifest::COMPONENT,
835 Extension::NO_FLAGS);
836 EXPECT_TRUE(Allowed(extension, http_url));
837 EXPECT_TRUE(Blocked(extension, https_url));
838 EXPECT_TRUE(Blocked(extension, file_url));
839 EXPECT_TRUE(Blocked(extension, settings_url));
840 EXPECT_TRUE(Blocked(extension, favicon_url));
841 EXPECT_TRUE(Blocked(extension, about_url));
842 EXPECT_TRUE(Blocked(extension, extension_url));
843 EXPECT_FALSE(extension->HasHostPermission(settings_url));
844 }
845
748 TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecific) { 846 TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecific) {
749 scoped_refptr<Extension> extension = 847 scoped_refptr<Extension> extension =
750 LoadManifestStrict("script_and_capture", "tab_specific.json"); 848 LoadManifestStrict("script_and_capture", "tab_specific.json");
751 849
752 EXPECT_FALSE(extension->GetTabSpecificPermissions(0).get()); 850 EXPECT_FALSE(extension->GetTabSpecificPermissions(0).get());
753 EXPECT_FALSE(extension->GetTabSpecificPermissions(1).get()); 851 EXPECT_FALSE(extension->GetTabSpecificPermissions(1).get());
754 EXPECT_FALSE(extension->GetTabSpecificPermissions(2).get()); 852 EXPECT_FALSE(extension->GetTabSpecificPermissions(2).get());
755 853
756 std::set<GURL> no_urls; 854 std::set<GURL> no_urls;
757 855
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
1088 scoped_refptr<Extension> extension( 1186 scoped_refptr<Extension> extension(
1089 MakeSyncTestExtension(EXTENSION, GURL(), GURL(), 1187 MakeSyncTestExtension(EXTENSION, GURL(), GURL(),
1090 Manifest::INTERNAL, 2, base::FilePath(), 1188 Manifest::INTERNAL, 2, base::FilePath(),
1091 Extension::NO_FLAGS)); 1189 Extension::NO_FLAGS));
1092 if (extension) 1190 if (extension)
1093 EXPECT_EQ(extension->GetSyncType(), Extension::SYNC_TYPE_NONE); 1191 EXPECT_EQ(extension->GetSyncType(), Extension::SYNC_TYPE_NONE);
1094 } 1192 }
1095 #endif // !defined(OS_CHROMEOS) 1193 #endif // !defined(OS_CHROMEOS)
1096 1194
1097 } // namespace extensions 1195 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698