| OLD | NEW |
| 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" |
| 11 #include "base/path_service.h" | 11 #include "base/path_service.h" |
| 12 #include "base/stringprintf.h" | 12 #include "base/stringprintf.h" |
| 13 #include "base/string_number_conversions.h" | 13 #include "base/string_number_conversions.h" |
| 14 #include "base/utf_string_conversions.h" | 14 #include "base/utf_string_conversions.h" |
| 15 #include "chrome/common/chrome_paths.h" | 15 #include "chrome/common/chrome_paths.h" |
| 16 #include "chrome/common/extensions/command.h" | 16 #include "chrome/common/extensions/command.h" |
| 17 #include "chrome/common/extensions/extension_action.h" | 17 #include "chrome/common/extensions/extension_action.h" |
| 18 #include "chrome/common/extensions/extension_error_utils.h" | 18 #include "chrome/common/extensions/extension_error_utils.h" |
| 19 #include "chrome/common/extensions/extension_file_util.h" | 19 #include "chrome/common/extensions/extension_file_util.h" |
| 20 #include "chrome/common/extensions/extension_manifest_constants.h" | 20 #include "chrome/common/extensions/extension_manifest_constants.h" |
| 21 #include "chrome/common/extensions/extension_resource.h" | 21 #include "chrome/common/extensions/extension_resource.h" |
| 22 #include "chrome/common/extensions/permissions/permission_set.h" |
| 23 #include "chrome/common/extensions/permissions/api_permission.h" |
| 22 #include "chrome/common/url_constants.h" | 24 #include "chrome/common/url_constants.h" |
| 23 #include "googleurl/src/gurl.h" | 25 #include "googleurl/src/gurl.h" |
| 24 #include "net/base/mime_sniffer.h" | 26 #include "net/base/mime_sniffer.h" |
| 25 #include "skia/ext/image_operations.h" | 27 #include "skia/ext/image_operations.h" |
| 26 #include "net/base/mock_host_resolver.h" | 28 #include "net/base/mock_host_resolver.h" |
| 27 #include "testing/gtest/include/gtest/gtest.h" | 29 #include "testing/gtest/include/gtest/gtest.h" |
| 28 #include "third_party/skia/include/core/SkBitmap.h" | 30 #include "third_party/skia/include/core/SkBitmap.h" |
| 29 #include "ui/gfx/codec/png_codec.h" | 31 #include "ui/gfx/codec/png_codec.h" |
| 30 | 32 |
| 33 using extensions::APIPermissionSet; |
| 31 using extensions::Extension; | 34 using extensions::Extension; |
| 35 using extensions::PermissionSet; |
| 32 | 36 |
| 33 namespace keys = extension_manifest_keys; | 37 namespace keys = extension_manifest_keys; |
| 34 namespace values = extension_manifest_values; | 38 namespace values = extension_manifest_values; |
| 35 namespace errors = extension_manifest_errors; | 39 namespace errors = extension_manifest_errors; |
| 36 | 40 |
| 37 namespace { | 41 namespace { |
| 38 | 42 |
| 39 void CompareLists(const std::vector<std::string>& expected, | 43 void CompareLists(const std::vector<std::string>& expected, |
| 40 const std::vector<std::string>& actual) { | 44 const std::vector<std::string>& actual) { |
| 41 ASSERT_EQ(expected.size(), actual.size()); | 45 ASSERT_EQ(expected.size(), actual.size()); |
| (...skipping 821 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 863 EXPECT_TRUE(Blocked(extension, favicon_url)); | 867 EXPECT_TRUE(Blocked(extension, favicon_url)); |
| 864 EXPECT_TRUE(Blocked(extension, about_url)); | 868 EXPECT_TRUE(Blocked(extension, about_url)); |
| 865 EXPECT_TRUE(Blocked(extension, extension_url)); | 869 EXPECT_TRUE(Blocked(extension, extension_url)); |
| 866 EXPECT_FALSE(extension->HasHostPermission(settings_url)); | 870 EXPECT_FALSE(extension->HasHostPermission(settings_url)); |
| 867 } | 871 } |
| 868 | 872 |
| 869 TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecific) { | 873 TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecific) { |
| 870 scoped_refptr<Extension> extension = | 874 scoped_refptr<Extension> extension = |
| 871 LoadManifestStrict("script_and_capture", "tab_specific.json"); | 875 LoadManifestStrict("script_and_capture", "tab_specific.json"); |
| 872 | 876 |
| 873 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(0)); | 877 EXPECT_FALSE(extension->GetTabSpecificPermissions(0).get()); |
| 874 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(1)); | 878 EXPECT_FALSE(extension->GetTabSpecificPermissions(1).get()); |
| 875 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(2)); | 879 EXPECT_FALSE(extension->GetTabSpecificPermissions(2).get()); |
| 876 | 880 |
| 877 std::set<GURL> no_urls; | 881 std::set<GURL> no_urls; |
| 878 | 882 |
| 879 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0)); | 883 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0)); |
| 880 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1)); | 884 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1)); |
| 881 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | 885 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); |
| 882 | 886 |
| 883 URLPatternSet allowed_hosts; | 887 URLPatternSet allowed_hosts; |
| 884 allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL, | 888 allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL, |
| 885 http_url.spec())); | 889 http_url.spec())); |
| 886 std::set<GURL> allowed_urls; | 890 std::set<GURL> allowed_urls; |
| 887 allowed_urls.insert(http_url); | 891 allowed_urls.insert(http_url); |
| 888 // http_url_with_path() will also be allowed, because Extension should be | 892 // http_url_with_path() will also be allowed, because Extension should be |
| 889 // considering the security origin of the URL not the URL itself, and | 893 // considering the security origin of the URL not the URL itself, and |
| 890 // http_url is in allowed_hosts. | 894 // http_url is in allowed_hosts. |
| 891 allowed_urls.insert(http_url_with_path); | 895 allowed_urls.insert(http_url_with_path); |
| 892 | 896 |
| 893 extension->SetTabSpecificHostPermissions(0, allowed_hosts); | 897 { |
| 894 EXPECT_EQ(allowed_hosts, *extension->GetTabSpecificHostPermissions(0)); | 898 scoped_refptr<PermissionSet> permissions( |
| 899 new PermissionSet(APIPermissionSet(), allowed_hosts, URLPatternSet())); |
| 900 extension->UpdateTabSpecificPermissions(0, permissions); |
| 901 EXPECT_EQ(permissions->explicit_hosts(), |
| 902 extension->GetTabSpecificPermissions(0)->explicit_hosts()); |
| 903 } |
| 895 | 904 |
| 896 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, allowed_urls, 0)); | 905 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, allowed_urls, 0)); |
| 897 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1)); | 906 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1)); |
| 898 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | 907 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); |
| 899 | 908 |
| 900 extension->ClearTabSpecificHostPermissions(0); | 909 extension->ClearTabSpecificPermissions(0); |
| 901 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(0)); | 910 EXPECT_FALSE(extension->GetTabSpecificPermissions(0).get()); |
| 902 | 911 |
| 903 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0)); | 912 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0)); |
| 904 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1)); | 913 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1)); |
| 905 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | 914 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); |
| 906 | 915 |
| 907 std::set<GURL> more_allowed_urls = allowed_urls; | 916 std::set<GURL> more_allowed_urls = allowed_urls; |
| 908 more_allowed_urls.insert(https_url); | 917 more_allowed_urls.insert(https_url); |
| 909 URLPatternSet more_allowed_hosts = allowed_hosts; | 918 URLPatternSet more_allowed_hosts = allowed_hosts; |
| 910 more_allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL, | 919 more_allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL, |
| 911 https_url.spec())); | 920 https_url.spec())); |
| 912 | 921 |
| 913 extension->SetTabSpecificHostPermissions(0, allowed_hosts); | 922 { |
| 914 EXPECT_EQ(allowed_hosts, *extension->GetTabSpecificHostPermissions(0)); | 923 scoped_refptr<PermissionSet> permissions( |
| 915 extension->SetTabSpecificHostPermissions(1, more_allowed_hosts); | 924 new PermissionSet(APIPermissionSet(), allowed_hosts, URLPatternSet())); |
| 916 EXPECT_EQ(more_allowed_hosts, *extension->GetTabSpecificHostPermissions(1)); | 925 extension->UpdateTabSpecificPermissions(0, permissions); |
| 926 EXPECT_EQ(permissions->explicit_hosts(), |
| 927 extension->GetTabSpecificPermissions(0)->explicit_hosts()); |
| 928 |
| 929 permissions = new PermissionSet(APIPermissionSet(), |
| 930 more_allowed_hosts, |
| 931 URLPatternSet()); |
| 932 extension->UpdateTabSpecificPermissions(1, permissions); |
| 933 EXPECT_EQ(permissions->explicit_hosts(), |
| 934 extension->GetTabSpecificPermissions(1)->explicit_hosts()); |
| 935 } |
| 917 | 936 |
| 918 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, allowed_urls, 0)); | 937 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, allowed_urls, 0)); |
| 919 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, more_allowed_urls, 1)); | 938 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, more_allowed_urls, 1)); |
| 920 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | 939 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); |
| 921 | 940 |
| 922 extension->ClearTabSpecificHostPermissions(0); | 941 extension->ClearTabSpecificPermissions(0); |
| 923 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(0)); | 942 EXPECT_FALSE(extension->GetTabSpecificPermissions(0).get()); |
| 924 | 943 |
| 925 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0)); | 944 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0)); |
| 926 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, more_allowed_urls, 1)); | 945 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, more_allowed_urls, 1)); |
| 927 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | 946 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); |
| 928 | 947 |
| 929 extension->ClearTabSpecificHostPermissions(1); | 948 extension->ClearTabSpecificPermissions(1); |
| 930 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(1)); | 949 EXPECT_FALSE(extension->GetTabSpecificPermissions(1).get()); |
| 931 | 950 |
| 932 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0)); | 951 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0)); |
| 933 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1)); | 952 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1)); |
| 934 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | 953 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); |
| 935 } | 954 } |
| 936 | 955 |
| 937 TEST(ExtensionTest, GenerateId) { | 956 TEST(ExtensionTest, GenerateId) { |
| 938 std::string result; | 957 std::string result; |
| 939 EXPECT_TRUE(Extension::GenerateId("", &result)); | 958 EXPECT_TRUE(Extension::GenerateId("", &result)); |
| 940 | 959 |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1092 } | 1111 } |
| 1093 | 1112 |
| 1094 TEST(ExtensionTest, GetSyncTypeExtensionWithTwoPlugins) { | 1113 TEST(ExtensionTest, GetSyncTypeExtensionWithTwoPlugins) { |
| 1095 scoped_refptr<Extension> extension( | 1114 scoped_refptr<Extension> extension( |
| 1096 MakeSyncTestExtension(EXTENSION, GURL(), GURL(), | 1115 MakeSyncTestExtension(EXTENSION, GURL(), GURL(), |
| 1097 Extension::INTERNAL, 2, FilePath())); | 1116 Extension::INTERNAL, 2, FilePath())); |
| 1098 if (extension) | 1117 if (extension) |
| 1099 EXPECT_EQ(extension->GetSyncType(), Extension::SYNC_TYPE_NONE); | 1118 EXPECT_EQ(extension->GetSyncType(), Extension::SYNC_TYPE_NONE); |
| 1100 } | 1119 } |
| 1101 #endif // !defined(OS_CHROMEOS) | 1120 #endif // !defined(OS_CHROMEOS) |
| OLD | NEW |