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

Side by Side Diff: chrome/common/extensions/permissions/permission_set_unittest.cc

Issue 980353003: Extensions: Switch to new permission message system, part I (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review Created 5 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
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 "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/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/common/chrome_paths.h" 9 #include "chrome/common/chrome_paths.h"
10 #include "chrome/common/chrome_switches.h" 10 #include "chrome/common/chrome_switches.h"
11 #include "chrome/common/extensions/extension_test_util.h" 11 #include "chrome/common/extensions/extension_test_util.h"
12 #include "chrome/common/extensions/features/feature_channel.h" 12 #include "chrome/common/extensions/features/feature_channel.h"
13 #include "chrome/common/extensions/permissions/chrome_permission_message_provide r.h" 13 #include "chrome/common/extensions/permissions/chrome_permission_message_provide r.h"
14 #include "chrome/grit/generated_resources.h" 14 #include "chrome/grit/generated_resources.h"
15 #include "extensions/common/error_utils.h" 15 #include "extensions/common/error_utils.h"
16 #include "extensions/common/extension.h" 16 #include "extensions/common/extension.h"
17 #include "extensions/common/extension_builder.h" 17 #include "extensions/common/extension_builder.h"
18 #include "extensions/common/permissions/permission_message_provider.h" 18 #include "extensions/common/permissions/permission_message_provider.h"
19 #include "extensions/common/permissions/permission_message_test_util.h"
19 #include "extensions/common/permissions/permission_message_util.h" 20 #include "extensions/common/permissions/permission_message_util.h"
20 #include "extensions/common/permissions/permission_set.h" 21 #include "extensions/common/permissions/permission_set.h"
21 #include "extensions/common/permissions/permissions_data.h" 22 #include "extensions/common/permissions/permissions_data.h"
22 #include "extensions/common/permissions/permissions_info.h" 23 #include "extensions/common/permissions/permissions_info.h"
23 #include "extensions/common/permissions/socket_permission.h" 24 #include "extensions/common/permissions/socket_permission.h"
24 #include "extensions/common/value_builder.h" 25 #include "extensions/common/value_builder.h"
25 #include "extensions/strings/grit/extensions_strings.h" 26 #include "extensions/strings/grit/extensions_strings.h"
26 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
27 #include "ui/base/l10n/l10n_util.h" 28 #include "ui/base/l10n/l10n_util.h"
28 29
29 using extension_test_util::LoadManifest; 30 using extension_test_util::LoadManifest;
30 31
31 namespace extensions { 32 namespace extensions {
32 33
33 namespace { 34 namespace {
34 35
35 static void AddPattern(URLPatternSet* extent, const std::string& pattern) { 36 static void AddPattern(URLPatternSet* extent, const std::string& pattern) {
36 int schemes = URLPattern::SCHEME_ALL; 37 int schemes = URLPattern::SCHEME_ALL;
37 extent->AddPattern(URLPattern(schemes, pattern)); 38 extent->AddPattern(URLPattern(schemes, pattern));
38 } 39 }
39 40
40 size_t IndexOf(const std::vector<base::string16>& warnings, 41 size_t IndexOf(const PermissionMessageStrings& warnings,
41 const std::string& warning) { 42 const std::string& warning) {
42 for (size_t i = 0; i < warnings.size(); ++i) { 43 for (size_t i = 0; i < warnings.size(); ++i) {
43 if (warnings[i] == base::ASCIIToUTF16(warning)) 44 if (warnings[i].message == base::ASCIIToUTF16(warning))
44 return i; 45 return i;
45 } 46 }
46 47
47 return warnings.size(); 48 return warnings.size();
48 } 49 }
49 50
50 bool Contains(const std::vector<base::string16>& warnings,
51 const std::string& warning) {
52 return IndexOf(warnings, warning) != warnings.size();
53 }
54
55 } // namespace 51 } // namespace
56 52
57 // Tests GetByID. 53 // Tests GetByID.
58 TEST(PermissionsTest, GetByID) { 54 TEST(PermissionsTest, GetByID) {
59 PermissionsInfo* info = PermissionsInfo::GetInstance(); 55 PermissionsInfo* info = PermissionsInfo::GetInstance();
60 APIPermissionSet apis = info->GetAll(); 56 APIPermissionSet apis = info->GetAll();
61 for (APIPermissionSet::const_iterator i = apis.begin(); 57 for (APIPermissionSet::const_iterator i = apis.begin();
62 i != apis.end(); ++i) { 58 i != apis.end(); ++i) {
63 EXPECT_EQ(i->id(), i->info()->id()); 59 EXPECT_EQ(i->id(), i->info()->id());
64 } 60 }
(...skipping 903 matching lines...) Expand 10 before | Expand all | Expand 10 after
968 964
969 TEST(PermissionsTest, AccessToDevicesMessages) { 965 TEST(PermissionsTest, AccessToDevicesMessages) {
970 { 966 {
971 APIPermissionSet api_permissions; 967 APIPermissionSet api_permissions;
972 api_permissions.insert(APIPermission::kSerial); 968 api_permissions.insert(APIPermission::kSerial);
973 scoped_refptr<PermissionSet> permissions( 969 scoped_refptr<PermissionSet> permissions(
974 new PermissionSet(api_permissions, 970 new PermissionSet(api_permissions,
975 ManifestPermissionSet(), 971 ManifestPermissionSet(),
976 URLPatternSet(), 972 URLPatternSet(),
977 URLPatternSet())); 973 URLPatternSet()));
978 std::vector<base::string16> messages = 974 VerifyOnePermissionMessage(
979 PermissionMessageProvider::Get()->GetLegacyWarningMessages( 975 permissions.get(), Manifest::TYPE_EXTENSION,
980 permissions.get(), Manifest::TYPE_EXTENSION); 976 l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_SERIAL));
981 EXPECT_EQ(1u, messages.size());
982 EXPECT_EQ(l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_SERIAL),
983 messages[0]);
984 } 977 }
985 { 978 {
986 // Testing that multiple permissions will show the one message. 979 // Testing that multiple permissions will show the one message.
987 APIPermissionSet api_permissions; 980 APIPermissionSet api_permissions;
988 api_permissions.insert(APIPermission::kSerial); 981 api_permissions.insert(APIPermission::kSerial);
989 api_permissions.insert(APIPermission::kSerial); 982 api_permissions.insert(APIPermission::kSerial);
990 scoped_refptr<PermissionSet> permissions( 983 scoped_refptr<PermissionSet> permissions(
991 new PermissionSet(api_permissions, 984 new PermissionSet(api_permissions,
992 ManifestPermissionSet(), 985 ManifestPermissionSet(),
993 URLPatternSet(), 986 URLPatternSet(),
994 URLPatternSet())); 987 URLPatternSet()));
995 std::vector<base::string16> messages = 988 VerifyOnePermissionMessage(
996 PermissionMessageProvider::Get()->GetLegacyWarningMessages( 989 permissions.get(), Manifest::TYPE_EXTENSION,
997 permissions.get(), Manifest::TYPE_EXTENSION); 990 l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_SERIAL));
998 EXPECT_EQ(1u, messages.size());
999 EXPECT_EQ(l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_SERIAL),
1000 messages[0]);
1001 } 991 }
1002 { 992 {
1003 scoped_refptr<Extension> extension = 993 scoped_refptr<Extension> extension =
1004 LoadManifest("permissions", "access_to_devices_bluetooth.json"); 994 LoadManifest("permissions", "access_to_devices_bluetooth.json");
1005 const PermissionMessageProvider* provider =
1006 PermissionMessageProvider::Get();
1007 PermissionSet* set = const_cast<PermissionSet*>( 995 PermissionSet* set = const_cast<PermissionSet*>(
1008 extension->permissions_data()->active_permissions().get()); 996 extension->permissions_data()->active_permissions().get());
1009 std::vector<base::string16> warnings = 997 VerifyOnePermissionMessage(
1010 provider->GetLegacyWarningMessages(set, extension->GetType()); 998 set, extension->GetType(),
1011 EXPECT_EQ(1u, warnings.size()); 999 l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH));
1012 EXPECT_EQ(l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH),
1013 warnings[0]);
1014 1000
1015 // Test Bluetooth and Serial 1001 // Test Bluetooth and Serial
1016 set->apis_.insert(APIPermission::kSerial); 1002 set->apis_.insert(APIPermission::kSerial);
1017 warnings = provider->GetLegacyWarningMessages(set, extension->GetType()); 1003 VerifyOnePermissionMessage(
1018 EXPECT_EQ(1u, warnings.size()); 1004 set, extension->GetType(),
1019 EXPECT_EQ(l10n_util::GetStringUTF16( 1005 l10n_util::GetStringUTF16(
1020 IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH_SERIAL), 1006 IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH_SERIAL));
1021 warnings[0]);
1022 set->apis_.erase(APIPermission::kSerial);
1023 } 1007 }
1024 } 1008 }
1025 1009
1026 TEST(PermissionsTest, MergedFileSystemPermissionComparison) { 1010 TEST(PermissionsTest, MergedFileSystemPermissionComparison) {
1027 APIPermissionSet write_api_permissions; 1011 APIPermissionSet write_api_permissions;
1028 write_api_permissions.insert(APIPermission::kFileSystemWrite); 1012 write_api_permissions.insert(APIPermission::kFileSystemWrite);
1029 scoped_refptr<PermissionSet> write_permissions( 1013 scoped_refptr<PermissionSet> write_permissions(
1030 new PermissionSet(write_api_permissions, ManifestPermissionSet(), 1014 new PermissionSet(write_api_permissions, ManifestPermissionSet(),
1031 URLPatternSet(), URLPatternSet())); 1015 URLPatternSet(), URLPatternSet()));
1032 1016
(...skipping 28 matching lines...) Expand all
1061 EXPECT_FALSE(provider->IsPrivilegeIncrease(directory_permissions.get(), 1045 EXPECT_FALSE(provider->IsPrivilegeIncrease(directory_permissions.get(),
1062 write_permissions.get(), 1046 write_permissions.get(),
1063 Manifest::TYPE_PLATFORM_APP)); 1047 Manifest::TYPE_PLATFORM_APP));
1064 EXPECT_TRUE(provider->IsPrivilegeIncrease(directory_permissions.get(), 1048 EXPECT_TRUE(provider->IsPrivilegeIncrease(directory_permissions.get(),
1065 write_directory_permissions.get(), 1049 write_directory_permissions.get(),
1066 Manifest::TYPE_PLATFORM_APP)); 1050 Manifest::TYPE_PLATFORM_APP));
1067 } 1051 }
1068 1052
1069 TEST(PermissionsTest, GetWarningMessages_ManyHosts) { 1053 TEST(PermissionsTest, GetWarningMessages_ManyHosts) {
1070 scoped_refptr<Extension> extension; 1054 scoped_refptr<Extension> extension;
1071
1072 extension = LoadManifest("permissions", "many-hosts.json"); 1055 extension = LoadManifest("permissions", "many-hosts.json");
1073 std::vector<base::string16> warnings = 1056 EXPECT_TRUE(VerifyOnePermissionMessage(
1074 extension->permissions_data()->GetPermissionMessageStrings(); 1057 extension->permissions_data(),
1075 ASSERT_EQ(1u, warnings.size()); 1058 "Read and change your data on encrypted.google.com and www.google.com"));
1076 EXPECT_EQ(
1077 "Read and change your data on encrypted.google.com and "
1078 "www.google.com",
1079 base::UTF16ToUTF8(warnings[0]));
1080 } 1059 }
1081 1060
1082 TEST(PermissionsTest, GetWarningMessages_Plugins) { 1061 TEST(PermissionsTest, GetWarningMessages_Plugins) {
1083 scoped_refptr<Extension> extension; 1062 scoped_refptr<Extension> extension;
1084 scoped_refptr<PermissionSet> permissions;
1085
1086 extension = LoadManifest("permissions", "plugins.json"); 1063 extension = LoadManifest("permissions", "plugins.json");
1087 std::vector<base::string16> warnings =
1088 extension->permissions_data()->GetPermissionMessageStrings();
1089 // We don't parse the plugins key on Chrome OS, so it should not ask for any 1064 // We don't parse the plugins key on Chrome OS, so it should not ask for any
1090 // permissions. 1065 // permissions.
1091 #if defined(OS_CHROMEOS) 1066 #if defined(OS_CHROMEOS)
1092 ASSERT_EQ(0u, warnings.size()); 1067 EXPECT_TRUE(VerifyNoPermissionMessages(extension->permissions_data()));
1093 #else 1068 #else
1094 ASSERT_EQ(1u, warnings.size()); 1069 EXPECT_TRUE(VerifyOnePermissionMessage(
1095 EXPECT_EQ( 1070 extension->permissions_data(),
1096 "Read and change all your data on your computer and the websites " 1071 "Read and change all your data on your computer and the websites you "
1097 "you visit", 1072 "visit"));
1098 base::UTF16ToUTF8(warnings[0]));
1099 #endif 1073 #endif
1100 } 1074 }
1101 1075
1102 TEST(PermissionsTest, GetWarningMessages_AudioVideo) { 1076 TEST(PermissionsTest, GetWarningMessages_AudioVideo) {
1103 // Both audio and video present. 1077 // Both audio and video present.
1104 scoped_refptr<Extension> extension = 1078 scoped_refptr<Extension> extension =
1105 LoadManifest("permissions", "audio-video.json"); 1079 LoadManifest("permissions", "audio-video.json");
1106 const PermissionMessageProvider* provider = PermissionMessageProvider::Get(); 1080 const PermissionMessageProvider* provider = PermissionMessageProvider::Get();
1107 PermissionSet* set = const_cast<PermissionSet*>( 1081 PermissionSet* set = const_cast<PermissionSet*>(
1108 extension->permissions_data()->active_permissions().get()); 1082 extension->permissions_data()->active_permissions().get());
1109 std::vector<base::string16> warnings = 1083 EXPECT_FALSE(VerifyHasPermissionMessage(set, extension->GetType(),
1110 provider->GetLegacyWarningMessages(set, extension->GetType()); 1084 "Use your microphone"));
1111 EXPECT_FALSE(Contains(warnings, "Use your microphone")); 1085 EXPECT_FALSE(
1112 EXPECT_FALSE(Contains(warnings, "Use your camera")); 1086 VerifyHasPermissionMessage(set, extension->GetType(), "Use your camera"));
1113 EXPECT_TRUE(Contains(warnings, "Use your microphone and camera")); 1087 EXPECT_TRUE(VerifyHasPermissionMessage(set, extension->GetType(),
1088 "Use your microphone and camera"));
1089 PermissionMessageStrings warnings =
1090 provider->GetPermissionMessageStrings(set, extension->GetType());
1114 size_t combined_index = IndexOf(warnings, "Use your microphone and camera"); 1091 size_t combined_index = IndexOf(warnings, "Use your microphone and camera");
1115 size_t combined_size = warnings.size(); 1092 size_t combined_size = warnings.size();
1116 1093
1117 // Just audio present. 1094 // Just audio present.
1118 set->apis_.erase(APIPermission::kVideoCapture); 1095 set->apis_.erase(APIPermission::kVideoCapture);
1119 warnings = provider->GetLegacyWarningMessages(set, extension->GetType()); 1096 EXPECT_TRUE(VerifyHasPermissionMessage(set, extension->GetType(),
1097 "Use your microphone"));
1098 EXPECT_FALSE(
1099 VerifyHasPermissionMessage(set, extension->GetType(), "Use your camera"));
1100 EXPECT_FALSE(VerifyHasPermissionMessage(set, extension->GetType(),
1101 "Use your microphone and camera"));
1102 warnings = provider->GetPermissionMessageStrings(set, extension->GetType());
1120 EXPECT_EQ(combined_size, warnings.size()); 1103 EXPECT_EQ(combined_size, warnings.size());
1121 EXPECT_EQ(combined_index, IndexOf(warnings, "Use your microphone")); 1104 EXPECT_EQ(combined_index, IndexOf(warnings, "Use your microphone"));
1122 EXPECT_FALSE(Contains(warnings, "Use your camera"));
1123 EXPECT_FALSE(Contains(warnings, "Use your microphone and camera"));
1124 1105
1125 // Just video present. 1106 // Just video present.
1126 set->apis_.erase(APIPermission::kAudioCapture); 1107 set->apis_.erase(APIPermission::kAudioCapture);
1127 set->apis_.insert(APIPermission::kVideoCapture); 1108 set->apis_.insert(APIPermission::kVideoCapture);
1128 warnings = provider->GetLegacyWarningMessages(set, extension->GetType()); 1109 EXPECT_FALSE(VerifyHasPermissionMessage(set, extension->GetType(),
1110 "Use your microphone"));
1111 EXPECT_TRUE(
1112 VerifyHasPermissionMessage(set, extension->GetType(), "Use your camera"));
1113 EXPECT_FALSE(VerifyHasPermissionMessage(set, extension->GetType(),
1114 "Use your microphone and camera"));
1115 warnings = provider->GetPermissionMessageStrings(set, extension->GetType());
1129 EXPECT_EQ(combined_size, warnings.size()); 1116 EXPECT_EQ(combined_size, warnings.size());
1130 EXPECT_FALSE(Contains(warnings, "Use your microphone"));
1131 EXPECT_FALSE(Contains(warnings, "Use your microphone and camera"));
1132 EXPECT_TRUE(Contains(warnings, "Use your camera"));
1133 } 1117 }
1134 1118
1135 TEST(PermissionsTest, GetWarningMessages_CombinedSessions) { 1119 TEST(PermissionsTest, GetWarningMessages_CombinedSessions) {
1136 { 1120 {
1137 APIPermissionSet api_permissions; 1121 APIPermissionSet api_permissions;
1138 api_permissions.insert(APIPermission::kTab); 1122 api_permissions.insert(APIPermission::kTab);
1139 api_permissions.insert(APIPermission::kTopSites); 1123 api_permissions.insert(APIPermission::kTopSites);
1140 api_permissions.insert(APIPermission::kProcesses); 1124 api_permissions.insert(APIPermission::kProcesses);
1141 api_permissions.insert(APIPermission::kWebNavigation); 1125 api_permissions.insert(APIPermission::kWebNavigation);
1142 api_permissions.insert(APIPermission::kSessions); 1126 api_permissions.insert(APIPermission::kSessions);
1143 scoped_refptr<PermissionSet> permissions( 1127 scoped_refptr<PermissionSet> permissions(
1144 new PermissionSet(api_permissions, ManifestPermissionSet(), 1128 new PermissionSet(api_permissions, ManifestPermissionSet(),
1145 URLPatternSet(), URLPatternSet())); 1129 URLPatternSet(), URLPatternSet()));
1146 std::vector<base::string16> messages = 1130 EXPECT_TRUE(VerifyOnePermissionMessage(
1147 PermissionMessageProvider::Get()->GetLegacyWarningMessages( 1131 permissions.get(), Manifest::TYPE_EXTENSION,
1148 permissions.get(), Manifest::TYPE_EXTENSION); 1132 l10n_util::GetStringUTF16(
1149 EXPECT_EQ(1u, messages.size()); 1133 IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ_AND_SESSIONS)));
1150 EXPECT_EQ(l10n_util::GetStringUTF16(
1151 IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ_AND_SESSIONS),
1152 messages[0]);
1153 } 1134 }
1154 { 1135 {
1155 APIPermissionSet api_permissions; 1136 APIPermissionSet api_permissions;
1156 api_permissions.insert(APIPermission::kHistory); 1137 api_permissions.insert(APIPermission::kHistory);
1157 api_permissions.insert(APIPermission::kTab); 1138 api_permissions.insert(APIPermission::kTab);
1158 api_permissions.insert(APIPermission::kTopSites); 1139 api_permissions.insert(APIPermission::kTopSites);
1159 api_permissions.insert(APIPermission::kProcesses); 1140 api_permissions.insert(APIPermission::kProcesses);
1160 api_permissions.insert(APIPermission::kWebNavigation); 1141 api_permissions.insert(APIPermission::kWebNavigation);
1161 api_permissions.insert(APIPermission::kSessions); 1142 api_permissions.insert(APIPermission::kSessions);
1162 scoped_refptr<PermissionSet> permissions( 1143 scoped_refptr<PermissionSet> permissions(
1163 new PermissionSet(api_permissions, ManifestPermissionSet(), 1144 new PermissionSet(api_permissions, ManifestPermissionSet(),
1164 URLPatternSet(), URLPatternSet())); 1145 URLPatternSet(), URLPatternSet()));
1165 std::vector<base::string16> messages = 1146 EXPECT_TRUE(VerifyOnePermissionMessage(
1166 PermissionMessageProvider::Get()->GetLegacyWarningMessages( 1147 permissions.get(), Manifest::TYPE_EXTENSION,
1167 permissions.get(), Manifest::TYPE_EXTENSION); 1148 l10n_util::GetStringUTF16(
1168 EXPECT_EQ(1u, messages.size()); 1149 IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE_AND_SESSIONS)));
1169 EXPECT_EQ(l10n_util::GetStringUTF16(
1170 IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE_AND_SESSIONS),
1171 messages[0]);
1172 } 1150 }
1173 } 1151 }
1174 1152
1175 TEST(PermissionsTest, GetWarningMessages_DeclarativeWebRequest) { 1153 TEST(PermissionsTest, GetWarningMessages_DeclarativeWebRequest) {
1176 // Test that if the declarativeWebRequest permission is present 1154 // Test that if the declarativeWebRequest permission is present
1177 // in combination with all hosts permission, then only the warning 1155 // in combination with all hosts permission, then only the warning
1178 // for host permissions is shown, because that covers the use of 1156 // for host permissions is shown, because that covers the use of
1179 // declarativeWebRequest. 1157 // declarativeWebRequest.
1180 1158
1181 // Until Declarative Web Request is in stable, let's make sure it is enabled 1159 // Until Declarative Web Request is in stable, let's make sure it is enabled
1182 // on the current channel. 1160 // on the current channel.
1183 ScopedCurrentChannel sc(chrome::VersionInfo::CHANNEL_CANARY); 1161 ScopedCurrentChannel sc(chrome::VersionInfo::CHANNEL_CANARY);
1184 1162
1185 // First verify that declarativeWebRequest produces a message when host 1163 // First verify that declarativeWebRequest produces a message when host
1186 // permissions do not cover all hosts. 1164 // permissions do not cover all hosts.
1187 scoped_refptr<Extension> extension = 1165 scoped_refptr<Extension> extension =
1188 LoadManifest("permissions", "web_request_not_all_host_permissions.json"); 1166 LoadManifest("permissions", "web_request_not_all_host_permissions.json");
1189 const PermissionMessageProvider* provider = PermissionMessageProvider::Get();
1190 const PermissionSet* set = 1167 const PermissionSet* set =
1191 extension->permissions_data()->active_permissions().get(); 1168 extension->permissions_data()->active_permissions().get();
1192 std::vector<base::string16> warnings = 1169 EXPECT_TRUE(VerifyHasPermissionMessage(set, extension->GetType(),
1193 provider->GetLegacyWarningMessages(set, extension->GetType()); 1170 "Block parts of web pages"));
1194 EXPECT_TRUE(Contains(warnings, "Block parts of web pages")); 1171 EXPECT_FALSE(VerifyHasPermissionMessage(
1195 EXPECT_FALSE(Contains( 1172 set, extension->GetType(),
1196 warnings, "Read and change all your data on the websites you visit")); 1173 "Read and change all your data on the websites you visit"));
1197 1174
1198 // Now verify that declarativeWebRequest does not produce a message when host 1175 // Now verify that declarativeWebRequest does not produce a message when host
1199 // permissions do cover all hosts. 1176 // permissions do cover all hosts.
1200 extension = 1177 extension =
1201 LoadManifest("permissions", "web_request_all_host_permissions.json"); 1178 LoadManifest("permissions", "web_request_all_host_permissions.json");
1202 set = extension->permissions_data()->active_permissions().get(); 1179 set = extension->permissions_data()->active_permissions().get();
1203 warnings = provider->GetLegacyWarningMessages(set, extension->GetType()); 1180 EXPECT_FALSE(VerifyHasPermissionMessage(set, extension->GetType(),
1204 EXPECT_FALSE(Contains(warnings, "Block parts of web pages")); 1181 "Block parts of web pages"));
1205 EXPECT_TRUE(Contains( 1182 EXPECT_TRUE(VerifyHasPermissionMessage(
1206 warnings, "Read and change all your data on the websites you visit")); 1183 set, extension->GetType(),
1184 "Read and change all your data on the websites you visit"));
1207 } 1185 }
1208 1186
1209 TEST(PermissionsTest, GetWarningMessages_Serial) { 1187 TEST(PermissionsTest, GetWarningMessages_Serial) {
1210 scoped_refptr<Extension> extension = 1188 scoped_refptr<Extension> extension =
1211 LoadManifest("permissions", "serial.json"); 1189 LoadManifest("permissions", "serial.json");
1212 1190
1213 EXPECT_TRUE(extension->is_platform_app()); 1191 EXPECT_TRUE(extension->is_platform_app());
1214 EXPECT_TRUE( 1192 EXPECT_TRUE(
1215 extension->permissions_data()->HasAPIPermission(APIPermission::kSerial)); 1193 extension->permissions_data()->HasAPIPermission(APIPermission::kSerial));
1216 std::vector<base::string16> warnings = 1194 EXPECT_TRUE(VerifyOnePermissionMessage(extension->permissions_data(),
1217 extension->permissions_data()->GetPermissionMessageStrings(); 1195 "Access your serial devices"));
1218 EXPECT_TRUE(Contains(warnings, "Access your serial devices"));
1219 ASSERT_EQ(1u, warnings.size());
1220 } 1196 }
1221 1197
1222 TEST(PermissionsTest, GetWarningMessages_Socket_AnyHost) { 1198 TEST(PermissionsTest, GetWarningMessages_Socket_AnyHost) {
1223 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV); 1199 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV);
1224 1200
1225 scoped_refptr<Extension> extension = 1201 scoped_refptr<Extension> extension =
1226 LoadManifest("permissions", "socket_any_host.json"); 1202 LoadManifest("permissions", "socket_any_host.json");
1227 EXPECT_TRUE(extension->is_platform_app()); 1203 EXPECT_TRUE(extension->is_platform_app());
1228 EXPECT_TRUE( 1204 EXPECT_TRUE(
1229 extension->permissions_data()->HasAPIPermission(APIPermission::kSocket)); 1205 extension->permissions_data()->HasAPIPermission(APIPermission::kSocket));
1230 std::vector<base::string16> warnings = 1206 EXPECT_TRUE(VerifyOnePermissionMessage(
1231 extension->permissions_data()->GetPermissionMessageStrings(); 1207 extension->permissions_data(),
1232 EXPECT_EQ(1u, warnings.size()); 1208 "Exchange data with any computer on the local network or internet"));
1233 EXPECT_TRUE(Contains(warnings, "Exchange data with any computer "
1234 "on the local network or internet"));
1235 } 1209 }
1236 1210
1237 TEST(PermissionsTest, GetWarningMessages_Socket_OneDomainTwoHostnames) { 1211 TEST(PermissionsTest, GetWarningMessages_Socket_OneDomainTwoHostnames) {
1238 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV); 1212 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV);
1239 1213
1240 scoped_refptr<Extension> extension = 1214 scoped_refptr<Extension> extension =
1241 LoadManifest("permissions", "socket_one_domain_two_hostnames.json"); 1215 LoadManifest("permissions", "socket_one_domain_two_hostnames.json");
1242 EXPECT_TRUE(extension->is_platform_app()); 1216 EXPECT_TRUE(extension->is_platform_app());
1243 EXPECT_TRUE( 1217 EXPECT_TRUE(
1244 extension->permissions_data()->HasAPIPermission(APIPermission::kSocket)); 1218 extension->permissions_data()->HasAPIPermission(APIPermission::kSocket));
1245 std::vector<base::string16> warnings =
1246 extension->permissions_data()->GetPermissionMessageStrings();
1247 1219
1248 // Verify the warnings, including support for unicode characters, the fact 1220 // Verify the warnings, including support for unicode characters, the fact
1249 // that domain host warnings come before specific host warnings, and the fact 1221 // that domain host warnings come before specific host warnings, and the fact
1250 // that domains and hostnames are in alphabetical order regardless of the 1222 // that domains and hostnames are in alphabetical order regardless of the
1251 // order in the manifest file. 1223 // order in the manifest file.
1252 EXPECT_EQ(2u, warnings.size()); 1224 EXPECT_TRUE(VerifyTwoPermissionMessages(
1253 if (warnings.size() > 0) 1225 extension->permissions_data(),
1254 EXPECT_EQ(warnings[0], 1226 "Exchange data with any computer in the domain example.org",
1255 base::UTF8ToUTF16("Exchange data with any computer in the domain " 1227 "Exchange data with the computers named: "
1256 "example.org")); 1228 "b\xC3\xA5r.example.com foo.example.com",
1257 if (warnings.size() > 1) 1229 // "\xC3\xA5" = UTF-8 for lowercase A with ring above
1258 EXPECT_EQ(warnings[1], 1230 true));
1259 base::UTF8ToUTF16("Exchange data with the computers named: "
1260 "b\xC3\xA5r.example.com foo.example.com"));
1261 // "\xC3\xA5" = UTF-8 for lowercase A with ring above
1262 } 1231 }
1263 1232
1264 TEST(PermissionsTest, GetWarningMessages_Socket_TwoDomainsOneHostname) { 1233 TEST(PermissionsTest, GetWarningMessages_Socket_TwoDomainsOneHostname) {
1265 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV); 1234 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV);
1266 1235
1267 scoped_refptr<Extension> extension = 1236 scoped_refptr<Extension> extension =
1268 LoadManifest("permissions", "socket_two_domains_one_hostname.json"); 1237 LoadManifest("permissions", "socket_two_domains_one_hostname.json");
1269 EXPECT_TRUE(extension->is_platform_app()); 1238 EXPECT_TRUE(extension->is_platform_app());
1270 EXPECT_TRUE( 1239 EXPECT_TRUE(
1271 extension->permissions_data()->HasAPIPermission(APIPermission::kSocket)); 1240 extension->permissions_data()->HasAPIPermission(APIPermission::kSocket));
1272 std::vector<base::string16> warnings =
1273 extension->permissions_data()->GetPermissionMessageStrings();
1274 1241
1275 // Verify the warnings, including the fact that domain host warnings come 1242 // Verify the warnings, including the fact that domain host warnings come
1276 // before specific host warnings and the fact that domains and hostnames are 1243 // before specific host warnings and the fact that domains and hostnames are
1277 // in alphabetical order regardless of the order in the manifest file. 1244 // in alphabetical order regardless of the order in the manifest file.
1278 EXPECT_EQ(2u, warnings.size()); 1245 EXPECT_TRUE(VerifyTwoPermissionMessages(
1279 if (warnings.size() > 0) 1246 extension->permissions_data(),
1280 EXPECT_EQ(warnings[0], 1247 "Exchange data with any computer in the domains: "
1281 base::UTF8ToUTF16("Exchange data with any computer in the " 1248 "example.com foo.example.org",
1282 "domains: example.com foo.example.org")); 1249 "Exchange data with the computer named bar.example.org", true));
1283 if (warnings.size() > 1)
1284 EXPECT_EQ(warnings[1],
1285 base::UTF8ToUTF16("Exchange data with the computer named "
1286 "bar.example.org"));
1287 } 1250 }
1288 1251
1289 TEST(PermissionsTest, GetWarningMessages_PlatformApppHosts) { 1252 // Since platform apps always use isolated storage, they can't (silently)
1253 // access user data on other domains, so there's no need to prompt about host
1254 // permissions. See crbug.com/255229.
1255 TEST(PermissionsTest, GetWarningMessages_PlatformAppHosts) {
1290 scoped_refptr<Extension> extension; 1256 scoped_refptr<Extension> extension;
1291 1257
1292 extension = LoadManifest("permissions", "platform_app_hosts.json"); 1258 extension = LoadManifest("permissions", "platform_app_hosts.json");
1293 EXPECT_TRUE(extension->is_platform_app()); 1259 EXPECT_TRUE(extension->is_platform_app());
1294 std::vector<base::string16> warnings = 1260 EXPECT_TRUE(VerifyNoPermissionMessages(extension->permissions_data()));
1295 extension->permissions_data()->GetPermissionMessageStrings();
1296 ASSERT_EQ(0u, warnings.size());
1297 1261
1298 extension = LoadManifest("permissions", "platform_app_all_urls.json"); 1262 extension = LoadManifest("permissions", "platform_app_all_urls.json");
1299 EXPECT_TRUE(extension->is_platform_app()); 1263 EXPECT_TRUE(extension->is_platform_app());
1300 warnings = extension->permissions_data()->GetPermissionMessageStrings(); 1264 EXPECT_TRUE(VerifyNoPermissionMessages(extension->permissions_data()));
1301 ASSERT_EQ(0u, warnings.size());
1302 } 1265 }
1303 1266
1304 bool ShowsAllHostsWarning(const std::string& pattern) { 1267 testing::AssertionResult ShowsAllHostsWarning(const std::string& pattern) {
1305 scoped_refptr<Extension> extension = 1268 scoped_refptr<Extension> extension =
1306 ExtensionBuilder() 1269 ExtensionBuilder()
1307 .SetManifest(DictionaryBuilder() 1270 .SetManifest(DictionaryBuilder()
1308 .Set("name", "TLDWildCardTest") 1271 .Set("name", "TLDWildCardTest")
1309 .Set("version", "0.1.0") 1272 .Set("version", "0.1.0")
1310 .Set("permissions", ListBuilder().Append(pattern)) 1273 .Set("permissions", ListBuilder().Append(pattern))
1311 .Build()) 1274 .Build())
1312 .Build(); 1275 .Build();
1313 1276
1314 std::vector<base::string16> warnings = 1277 return VerifyHasPermissionMessage(
1315 extension->permissions_data()->GetPermissionMessageStrings(); 1278 extension->permissions_data(),
1316 1279 l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_ALL_HOSTS));
1317 if (warnings.empty())
1318 return false;
1319
1320 if (warnings[0] !=
1321 l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_ALL_HOSTS)) {
1322 return false;
1323 }
1324
1325 return true;
1326 } 1280 }
1327 1281
1328 TEST(PermissionsTest, GetWarningMessages_TLDWildcardTreatedAsAllHosts) { 1282 TEST(PermissionsTest, GetWarningMessages_TLDWildcardTreatedAsAllHosts) {
1329 EXPECT_TRUE(ShowsAllHostsWarning("http://*.com/*")); // most popular. 1283 EXPECT_TRUE(ShowsAllHostsWarning("http://*.com/*")); // most popular.
1330 EXPECT_TRUE(ShowsAllHostsWarning("http://*.org/*")); // sanity check. 1284 EXPECT_TRUE(ShowsAllHostsWarning("http://*.org/*")); // sanity check.
1331 EXPECT_TRUE(ShowsAllHostsWarning("http://*.co.uk/*")); // eTLD. 1285 EXPECT_TRUE(ShowsAllHostsWarning("http://*.co.uk/*")); // eTLD.
1332 EXPECT_TRUE(ShowsAllHostsWarning("http://*.de/*")); // foreign country tld. 1286 EXPECT_TRUE(ShowsAllHostsWarning("http://*.de/*")); // foreign country tld.
1333 1287
1334 // We should still show the normal permissions (i.e., "Can access your data on 1288 // We should still show the normal permissions (i.e., "Can access your data on
1335 // *.rdcronin.com") for things that are not TLDs. 1289 // *.rdcronin.com") for things that are not TLDs.
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
1738 } 1692 }
1739 1693
1740 TEST(PermissionsTest, SyncFileSystemPermission) { 1694 TEST(PermissionsTest, SyncFileSystemPermission) {
1741 scoped_refptr<Extension> extension = LoadManifest( 1695 scoped_refptr<Extension> extension = LoadManifest(
1742 "permissions", "sync_file_system.json"); 1696 "permissions", "sync_file_system.json");
1743 APIPermissionSet apis; 1697 APIPermissionSet apis;
1744 apis.insert(APIPermission::kSyncFileSystem); 1698 apis.insert(APIPermission::kSyncFileSystem);
1745 EXPECT_TRUE(extension->is_platform_app()); 1699 EXPECT_TRUE(extension->is_platform_app());
1746 EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( 1700 EXPECT_TRUE(extension->permissions_data()->HasAPIPermission(
1747 APIPermission::kSyncFileSystem)); 1701 APIPermission::kSyncFileSystem));
1748 std::vector<base::string16> warnings = 1702 EXPECT_TRUE(
1749 extension->permissions_data()->GetPermissionMessageStrings(); 1703 VerifyOnePermissionMessage(extension->permissions_data(),
1750 EXPECT_TRUE(Contains(warnings, "Store data in your Google Drive account")); 1704 "Store data in your Google Drive account"));
1751 ASSERT_EQ(1u, warnings.size());
1752 } 1705 }
1753 1706
1754 // Make sure that we don't crash when we're trying to show the permissions 1707 // Make sure that we don't crash when we're trying to show the permissions
1755 // even though chrome://thumb (and everything that's not chrome://favicon with 1708 // even though chrome://thumb (and everything that's not chrome://favicon with
1756 // a chrome:// scheme) is not a valid permission. 1709 // a chrome:// scheme) is not a valid permission.
1757 // More details here: crbug/246314. 1710 // More details here: crbug/246314.
1758 TEST(PermissionsTest, ChromeURLs) { 1711 TEST(PermissionsTest, ChromeURLs) {
1759 URLPatternSet allowed_hosts; 1712 URLPatternSet allowed_hosts;
1760 allowed_hosts.AddPattern( 1713 allowed_hosts.AddPattern(
1761 URLPattern(URLPattern::SCHEME_ALL, "http://www.google.com/")); 1714 URLPattern(URLPattern::SCHEME_ALL, "http://www.google.com/"));
(...skipping 19 matching lines...) Expand all
1781 scoped_refptr<const PermissionSet> permissions_dwr( 1734 scoped_refptr<const PermissionSet> permissions_dwr(
1782 extension_dwr->permissions_data()->active_permissions()); 1735 extension_dwr->permissions_data()->active_permissions());
1783 1736
1784 EXPECT_FALSE(PermissionMessageProvider::Get()-> 1737 EXPECT_FALSE(PermissionMessageProvider::Get()->
1785 IsPrivilegeIncrease(permissions.get(), 1738 IsPrivilegeIncrease(permissions.get(),
1786 permissions_dwr.get(), 1739 permissions_dwr.get(),
1787 extension->GetType())); 1740 extension->GetType()));
1788 } 1741 }
1789 1742
1790 } // namespace extensions 1743 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698