OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |