| 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/json/json_file_value_serializer.h" | 6 #include "base/json/json_file_value_serializer.h" |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "chrome/common/chrome_paths.h" | 10 #include "chrome/common/chrome_paths.h" |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 info->GetByName("unlimited_storage")->id()); | 126 info->GetByName("unlimited_storage")->id()); |
| 127 } | 127 } |
| 128 | 128 |
| 129 TEST(PermissionsTest, EffectiveHostPermissions) { | 129 TEST(PermissionsTest, EffectiveHostPermissions) { |
| 130 scoped_refptr<Extension> extension; | 130 scoped_refptr<Extension> extension; |
| 131 scoped_refptr<const PermissionSet> permissions; | 131 scoped_refptr<const PermissionSet> permissions; |
| 132 | 132 |
| 133 extension = LoadManifest("effective_host_permissions", "empty.json"); | 133 extension = LoadManifest("effective_host_permissions", "empty.json"); |
| 134 permissions = extension->GetActivePermissions(); | 134 permissions = extension->GetActivePermissions(); |
| 135 EXPECT_EQ(0u, | 135 EXPECT_EQ(0u, |
| 136 PermissionsData::GetEffectiveHostPermissions(extension.get()) | 136 PermissionsData::ForExtension(extension) |
| 137 .patterns().size()); | 137 ->GetEffectiveHostPermissions() |
| 138 .patterns() |
| 139 .size()); |
| 138 EXPECT_FALSE( | 140 EXPECT_FALSE( |
| 139 permissions->HasEffectiveAccessToURL(GURL("http://www.google.com"))); | 141 permissions->HasEffectiveAccessToURL(GURL("http://www.google.com"))); |
| 140 EXPECT_FALSE(permissions->HasEffectiveAccessToAllHosts()); | 142 EXPECT_FALSE(permissions->HasEffectiveAccessToAllHosts()); |
| 141 | 143 |
| 142 extension = LoadManifest("effective_host_permissions", "one_host.json"); | 144 extension = LoadManifest("effective_host_permissions", "one_host.json"); |
| 143 permissions = extension->GetActivePermissions(); | 145 permissions = extension->GetActivePermissions(); |
| 144 EXPECT_TRUE(permissions->HasEffectiveAccessToURL( | 146 EXPECT_TRUE(permissions->HasEffectiveAccessToURL( |
| 145 GURL("http://www.google.com"))); | 147 GURL("http://www.google.com"))); |
| 146 EXPECT_FALSE(permissions->HasEffectiveAccessToURL( | 148 EXPECT_FALSE(permissions->HasEffectiveAccessToURL( |
| 147 GURL("https://www.google.com"))); | 149 GURL("https://www.google.com"))); |
| (...skipping 757 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 905 EXPECT_TRUE(provider->IsPrivilegeIncrease(directory_permissions, | 907 EXPECT_TRUE(provider->IsPrivilegeIncrease(directory_permissions, |
| 906 write_directory_permissions, | 908 write_directory_permissions, |
| 907 Manifest::TYPE_PLATFORM_APP)); | 909 Manifest::TYPE_PLATFORM_APP)); |
| 908 } | 910 } |
| 909 | 911 |
| 910 TEST(PermissionsTest, GetWarningMessages_ManyHosts) { | 912 TEST(PermissionsTest, GetWarningMessages_ManyHosts) { |
| 911 scoped_refptr<Extension> extension; | 913 scoped_refptr<Extension> extension; |
| 912 | 914 |
| 913 extension = LoadManifest("permissions", "many-hosts.json"); | 915 extension = LoadManifest("permissions", "many-hosts.json"); |
| 914 std::vector<base::string16> warnings = | 916 std::vector<base::string16> warnings = |
| 915 PermissionsData::GetPermissionMessageStrings(extension.get()); | 917 PermissionsData::ForExtension(extension)->GetPermissionMessageStrings(); |
| 916 ASSERT_EQ(1u, warnings.size()); | 918 ASSERT_EQ(1u, warnings.size()); |
| 917 EXPECT_EQ( | 919 EXPECT_EQ( |
| 918 "Read and modify your data on encrypted.google.com and " | 920 "Read and modify your data on encrypted.google.com and " |
| 919 "www.google.com", | 921 "www.google.com", |
| 920 base::UTF16ToUTF8(warnings[0])); | 922 base::UTF16ToUTF8(warnings[0])); |
| 921 } | 923 } |
| 922 | 924 |
| 923 TEST(PermissionsTest, GetWarningMessages_Plugins) { | 925 TEST(PermissionsTest, GetWarningMessages_Plugins) { |
| 924 scoped_refptr<Extension> extension; | 926 scoped_refptr<Extension> extension; |
| 925 scoped_refptr<PermissionSet> permissions; | 927 scoped_refptr<PermissionSet> permissions; |
| 926 | 928 |
| 927 extension = LoadManifest("permissions", "plugins.json"); | 929 extension = LoadManifest("permissions", "plugins.json"); |
| 928 std::vector<base::string16> warnings = | 930 std::vector<base::string16> warnings = |
| 929 PermissionsData::GetPermissionMessageStrings(extension.get()); | 931 PermissionsData::ForExtension(extension)->GetPermissionMessageStrings(); |
| 930 // We don't parse the plugins key on Chrome OS, so it should not ask for any | 932 // We don't parse the plugins key on Chrome OS, so it should not ask for any |
| 931 // permissions. | 933 // permissions. |
| 932 #if defined(OS_CHROMEOS) | 934 #if defined(OS_CHROMEOS) |
| 933 ASSERT_EQ(0u, warnings.size()); | 935 ASSERT_EQ(0u, warnings.size()); |
| 934 #else | 936 #else |
| 935 ASSERT_EQ(1u, warnings.size()); | 937 ASSERT_EQ(1u, warnings.size()); |
| 936 EXPECT_EQ( | 938 EXPECT_EQ( |
| 937 "Read and modify all your data on your computer and the websites " | 939 "Read and modify all your data on your computer and the websites " |
| 938 "you visit", | 940 "you visit", |
| 939 base::UTF16ToUTF8(warnings[0])); | 941 base::UTF16ToUTF8(warnings[0])); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1007 warnings, "Read and modify all your data on the websites you visit")); | 1009 warnings, "Read and modify all your data on the websites you visit")); |
| 1008 } | 1010 } |
| 1009 | 1011 |
| 1010 TEST(PermissionsTest, GetWarningMessages_Serial) { | 1012 TEST(PermissionsTest, GetWarningMessages_Serial) { |
| 1011 scoped_refptr<Extension> extension = | 1013 scoped_refptr<Extension> extension = |
| 1012 LoadManifest("permissions", "serial.json"); | 1014 LoadManifest("permissions", "serial.json"); |
| 1013 | 1015 |
| 1014 EXPECT_TRUE(extension->is_platform_app()); | 1016 EXPECT_TRUE(extension->is_platform_app()); |
| 1015 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSerial)); | 1017 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSerial)); |
| 1016 std::vector<base::string16> warnings = | 1018 std::vector<base::string16> warnings = |
| 1017 PermissionsData::GetPermissionMessageStrings(extension.get()); | 1019 PermissionsData::ForExtension(extension)->GetPermissionMessageStrings(); |
| 1018 EXPECT_TRUE( | 1020 EXPECT_TRUE( |
| 1019 Contains(warnings, "Use serial devices attached to your computer")); | 1021 Contains(warnings, "Use serial devices attached to your computer")); |
| 1020 ASSERT_EQ(1u, warnings.size()); | 1022 ASSERT_EQ(1u, warnings.size()); |
| 1021 } | 1023 } |
| 1022 | 1024 |
| 1023 TEST(PermissionsTest, GetWarningMessages_Socket_AnyHost) { | 1025 TEST(PermissionsTest, GetWarningMessages_Socket_AnyHost) { |
| 1024 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV); | 1026 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV); |
| 1025 | 1027 |
| 1026 scoped_refptr<Extension> extension = | 1028 scoped_refptr<Extension> extension = |
| 1027 LoadManifest("permissions", "socket_any_host.json"); | 1029 LoadManifest("permissions", "socket_any_host.json"); |
| 1028 EXPECT_TRUE(extension->is_platform_app()); | 1030 EXPECT_TRUE(extension->is_platform_app()); |
| 1029 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSocket)); | 1031 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSocket)); |
| 1030 std::vector<base::string16> warnings = | 1032 std::vector<base::string16> warnings = |
| 1031 PermissionsData::GetPermissionMessageStrings(extension.get()); | 1033 PermissionsData::ForExtension(extension)->GetPermissionMessageStrings(); |
| 1032 EXPECT_EQ(1u, warnings.size()); | 1034 EXPECT_EQ(1u, warnings.size()); |
| 1033 EXPECT_TRUE(Contains(warnings, "Exchange data with any computer " | 1035 EXPECT_TRUE(Contains(warnings, "Exchange data with any computer " |
| 1034 "on the local network or internet")); | 1036 "on the local network or internet")); |
| 1035 } | 1037 } |
| 1036 | 1038 |
| 1037 TEST(PermissionsTest, GetWarningMessages_Socket_OneDomainTwoHostnames) { | 1039 TEST(PermissionsTest, GetWarningMessages_Socket_OneDomainTwoHostnames) { |
| 1038 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV); | 1040 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV); |
| 1039 | 1041 |
| 1040 scoped_refptr<Extension> extension = | 1042 scoped_refptr<Extension> extension = |
| 1041 LoadManifest("permissions", "socket_one_domain_two_hostnames.json"); | 1043 LoadManifest("permissions", "socket_one_domain_two_hostnames.json"); |
| 1042 EXPECT_TRUE(extension->is_platform_app()); | 1044 EXPECT_TRUE(extension->is_platform_app()); |
| 1043 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSocket)); | 1045 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSocket)); |
| 1044 std::vector<base::string16> warnings = | 1046 std::vector<base::string16> warnings = |
| 1045 PermissionsData::GetPermissionMessageStrings(extension.get()); | 1047 PermissionsData::ForExtension(extension)->GetPermissionMessageStrings(); |
| 1046 | 1048 |
| 1047 // Verify the warnings, including support for unicode characters, the fact | 1049 // Verify the warnings, including support for unicode characters, the fact |
| 1048 // that domain host warnings come before specific host warnings, and the fact | 1050 // that domain host warnings come before specific host warnings, and the fact |
| 1049 // that domains and hostnames are in alphabetical order regardless of the | 1051 // that domains and hostnames are in alphabetical order regardless of the |
| 1050 // order in the manifest file. | 1052 // order in the manifest file. |
| 1051 EXPECT_EQ(2u, warnings.size()); | 1053 EXPECT_EQ(2u, warnings.size()); |
| 1052 if (warnings.size() > 0) | 1054 if (warnings.size() > 0) |
| 1053 EXPECT_EQ(warnings[0], | 1055 EXPECT_EQ(warnings[0], |
| 1054 base::UTF8ToUTF16("Exchange data with any computer in the domain " | 1056 base::UTF8ToUTF16("Exchange data with any computer in the domain " |
| 1055 "example.org")); | 1057 "example.org")); |
| 1056 if (warnings.size() > 1) | 1058 if (warnings.size() > 1) |
| 1057 EXPECT_EQ(warnings[1], | 1059 EXPECT_EQ(warnings[1], |
| 1058 base::UTF8ToUTF16("Exchange data with the computers named: " | 1060 base::UTF8ToUTF16("Exchange data with the computers named: " |
| 1059 "b\xC3\xA5r.example.com foo.example.com")); | 1061 "b\xC3\xA5r.example.com foo.example.com")); |
| 1060 // "\xC3\xA5" = UTF-8 for lowercase A with ring above | 1062 // "\xC3\xA5" = UTF-8 for lowercase A with ring above |
| 1061 } | 1063 } |
| 1062 | 1064 |
| 1063 TEST(PermissionsTest, GetWarningMessages_Socket_TwoDomainsOneHostname) { | 1065 TEST(PermissionsTest, GetWarningMessages_Socket_TwoDomainsOneHostname) { |
| 1064 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV); | 1066 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV); |
| 1065 | 1067 |
| 1066 scoped_refptr<Extension> extension = | 1068 scoped_refptr<Extension> extension = |
| 1067 LoadManifest("permissions", "socket_two_domains_one_hostname.json"); | 1069 LoadManifest("permissions", "socket_two_domains_one_hostname.json"); |
| 1068 EXPECT_TRUE(extension->is_platform_app()); | 1070 EXPECT_TRUE(extension->is_platform_app()); |
| 1069 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSocket)); | 1071 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSocket)); |
| 1070 std::vector<base::string16> warnings = | 1072 std::vector<base::string16> warnings = |
| 1071 PermissionsData::GetPermissionMessageStrings(extension.get()); | 1073 PermissionsData::ForExtension(extension)->GetPermissionMessageStrings(); |
| 1072 | 1074 |
| 1073 // Verify the warnings, including the fact that domain host warnings come | 1075 // Verify the warnings, including the fact that domain host warnings come |
| 1074 // before specific host warnings and the fact that domains and hostnames are | 1076 // before specific host warnings and the fact that domains and hostnames are |
| 1075 // in alphabetical order regardless of the order in the manifest file. | 1077 // in alphabetical order regardless of the order in the manifest file. |
| 1076 EXPECT_EQ(2u, warnings.size()); | 1078 EXPECT_EQ(2u, warnings.size()); |
| 1077 if (warnings.size() > 0) | 1079 if (warnings.size() > 0) |
| 1078 EXPECT_EQ(warnings[0], | 1080 EXPECT_EQ(warnings[0], |
| 1079 base::UTF8ToUTF16("Exchange data with any computer in the " | 1081 base::UTF8ToUTF16("Exchange data with any computer in the " |
| 1080 "domains: example.com foo.example.org")); | 1082 "domains: example.com foo.example.org")); |
| 1081 if (warnings.size() > 1) | 1083 if (warnings.size() > 1) |
| 1082 EXPECT_EQ(warnings[1], | 1084 EXPECT_EQ(warnings[1], |
| 1083 base::UTF8ToUTF16("Exchange data with the computer named " | 1085 base::UTF8ToUTF16("Exchange data with the computer named " |
| 1084 "bar.example.org")); | 1086 "bar.example.org")); |
| 1085 } | 1087 } |
| 1086 | 1088 |
| 1087 TEST(PermissionsTest, GetWarningMessages_PlatformApppHosts) { | 1089 TEST(PermissionsTest, GetWarningMessages_PlatformApppHosts) { |
| 1088 scoped_refptr<Extension> extension; | 1090 scoped_refptr<Extension> extension; |
| 1089 | 1091 |
| 1090 extension = LoadManifest("permissions", "platform_app_hosts.json"); | 1092 extension = LoadManifest("permissions", "platform_app_hosts.json"); |
| 1091 EXPECT_TRUE(extension->is_platform_app()); | 1093 EXPECT_TRUE(extension->is_platform_app()); |
| 1092 std::vector<base::string16> warnings = | 1094 std::vector<base::string16> warnings = |
| 1093 PermissionsData::GetPermissionMessageStrings(extension.get()); | 1095 PermissionsData::ForExtension(extension)->GetPermissionMessageStrings(); |
| 1094 ASSERT_EQ(0u, warnings.size()); | 1096 ASSERT_EQ(0u, warnings.size()); |
| 1095 | 1097 |
| 1096 extension = LoadManifest("permissions", "platform_app_all_urls.json"); | 1098 extension = LoadManifest("permissions", "platform_app_all_urls.json"); |
| 1097 EXPECT_TRUE(extension->is_platform_app()); | 1099 EXPECT_TRUE(extension->is_platform_app()); |
| 1098 warnings = PermissionsData::GetPermissionMessageStrings(extension.get()); | 1100 warnings = |
| 1101 PermissionsData::ForExtension(extension)->GetPermissionMessageStrings(); |
| 1099 ASSERT_EQ(0u, warnings.size()); | 1102 ASSERT_EQ(0u, warnings.size()); |
| 1100 } | 1103 } |
| 1101 | 1104 |
| 1102 bool ShowsAllHostsWarning(const std::string& pattern) { | 1105 bool ShowsAllHostsWarning(const std::string& pattern) { |
| 1103 scoped_refptr<Extension> extension = | 1106 scoped_refptr<Extension> extension = |
| 1104 ExtensionBuilder() | 1107 ExtensionBuilder() |
| 1105 .SetManifest(DictionaryBuilder() | 1108 .SetManifest(DictionaryBuilder() |
| 1106 .Set("name", "TLDWildCardTest") | 1109 .Set("name", "TLDWildCardTest") |
| 1107 .Set("version", "0.1.0") | 1110 .Set("version", "0.1.0") |
| 1108 .Set("permissions", ListBuilder().Append(pattern)) | 1111 .Set("permissions", ListBuilder().Append(pattern)) |
| 1109 .Build()) | 1112 .Build()) |
| 1110 .Build(); | 1113 .Build(); |
| 1111 | 1114 |
| 1112 std::vector<base::string16> warnings = | 1115 std::vector<base::string16> warnings = |
| 1113 PermissionsData::GetPermissionMessageStrings(extension); | 1116 PermissionsData::ForExtension(extension)->GetPermissionMessageStrings(); |
| 1114 | 1117 |
| 1115 if (warnings.empty()) | 1118 if (warnings.empty()) |
| 1116 return false; | 1119 return false; |
| 1117 | 1120 |
| 1118 if (warnings[0] != | 1121 if (warnings[0] != |
| 1119 l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_ALL_HOSTS)) { | 1122 l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_ALL_HOSTS)) { |
| 1120 return false; | 1123 return false; |
| 1121 } | 1124 } |
| 1122 | 1125 |
| 1123 return true; | 1126 return true; |
| (...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1536 } | 1539 } |
| 1537 | 1540 |
| 1538 TEST(PermissionsTest, SyncFileSystemPermission) { | 1541 TEST(PermissionsTest, SyncFileSystemPermission) { |
| 1539 scoped_refptr<Extension> extension = LoadManifest( | 1542 scoped_refptr<Extension> extension = LoadManifest( |
| 1540 "permissions", "sync_file_system.json"); | 1543 "permissions", "sync_file_system.json"); |
| 1541 APIPermissionSet apis; | 1544 APIPermissionSet apis; |
| 1542 apis.insert(APIPermission::kSyncFileSystem); | 1545 apis.insert(APIPermission::kSyncFileSystem); |
| 1543 EXPECT_TRUE(extension->is_platform_app()); | 1546 EXPECT_TRUE(extension->is_platform_app()); |
| 1544 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSyncFileSystem)); | 1547 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSyncFileSystem)); |
| 1545 std::vector<base::string16> warnings = | 1548 std::vector<base::string16> warnings = |
| 1546 PermissionsData::GetPermissionMessageStrings(extension.get()); | 1549 PermissionsData::ForExtension(extension)->GetPermissionMessageStrings(); |
| 1547 EXPECT_TRUE(Contains(warnings, "Store data in your Google Drive account")); | 1550 EXPECT_TRUE(Contains(warnings, "Store data in your Google Drive account")); |
| 1548 ASSERT_EQ(1u, warnings.size()); | 1551 ASSERT_EQ(1u, warnings.size()); |
| 1549 } | 1552 } |
| 1550 | 1553 |
| 1551 // Make sure that we don't crash when we're trying to show the permissions | 1554 // Make sure that we don't crash when we're trying to show the permissions |
| 1552 // even though chrome://thumb (and everything that's not chrome://favicon with | 1555 // even though chrome://thumb (and everything that's not chrome://favicon with |
| 1553 // a chrome:// scheme) is not a valid permission. | 1556 // a chrome:// scheme) is not a valid permission. |
| 1554 // More details here: crbug/246314. | 1557 // More details here: crbug/246314. |
| 1555 TEST(PermissionsTest, ChromeURLs) { | 1558 TEST(PermissionsTest, ChromeURLs) { |
| 1556 URLPatternSet allowed_hosts; | 1559 URLPatternSet allowed_hosts; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1578 scoped_refptr<const PermissionSet> permissions_dwr( | 1581 scoped_refptr<const PermissionSet> permissions_dwr( |
| 1579 extension_dwr->GetActivePermissions()); | 1582 extension_dwr->GetActivePermissions()); |
| 1580 | 1583 |
| 1581 EXPECT_FALSE(PermissionMessageProvider::Get()-> | 1584 EXPECT_FALSE(PermissionMessageProvider::Get()-> |
| 1582 IsPrivilegeIncrease(permissions.get(), | 1585 IsPrivilegeIncrease(permissions.get(), |
| 1583 permissions_dwr.get(), | 1586 permissions_dwr.get(), |
| 1584 extension->GetType())); | 1587 extension->GetType())); |
| 1585 } | 1588 } |
| 1586 | 1589 |
| 1587 } // namespace extensions | 1590 } // namespace extensions |
| OLD | NEW |