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

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

Issue 309533007: Refactor PermissionsData pt1 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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) 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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698