OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <algorithm> | 5 #include <algorithm> |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/prefs/pref_registry_simple.h" | 8 #include "base/prefs/pref_registry_simple.h" |
9 #include "base/prefs/testing_pref_service.h" | 9 #include "base/prefs/testing_pref_service.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
11 #include "chrome/browser/extensions/extension_management.h" | 11 #include "chrome/browser/extensions/extension_management.h" |
12 #include "chrome/browser/extensions/external_policy_loader.h" | 12 #include "chrome/browser/extensions/external_policy_loader.h" |
13 #include "extensions/browser/pref_names.h" | 13 #include "extensions/browser/pref_names.h" |
| 14 #include "extensions/common/manifest_constants.h" |
14 #include "extensions/common/url_pattern.h" | 15 #include "extensions/common/url_pattern.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
16 | 17 |
17 namespace extensions { | 18 namespace extensions { |
18 | 19 |
19 namespace { | 20 namespace { |
20 const char kTargetExtension[] = "abcdefghijklmnopabcdefghijklmnop"; | 21 const char kTargetExtension[] = "abcdefghijklmnopabcdefghijklmnop"; |
21 const char kOtherExtension[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; | 22 const char kOtherExtension[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; |
22 const char kExampleUpdateUrl[] = "http://example.com/update_url"; | 23 const char kExampleUpdateUrl[] = "http://example.com/update_url"; |
23 } // namespace | 24 } // namespace |
24 | 25 |
25 class ExtensionManagementTest : public testing::Test { | 26 class ExtensionManagementTest : public testing::Test { |
26 public: | 27 public: |
27 ExtensionManagementTest() {} | 28 ExtensionManagementTest() {} |
28 virtual ~ExtensionManagementTest() {} | 29 virtual ~ExtensionManagementTest() {} |
29 | 30 |
30 // testing::Test: | 31 // testing::Test: |
31 virtual void SetUp() OVERRIDE { | 32 virtual void SetUp() OVERRIDE { |
| 33 InitPrefService(); |
| 34 } |
| 35 |
| 36 void InitPrefService() { |
| 37 extension_management_.reset(); |
32 pref_service_.reset(new TestingPrefServiceSimple()); | 38 pref_service_.reset(new TestingPrefServiceSimple()); |
33 pref_service_->registry()->RegisterListPref( | 39 pref_service_->registry()->RegisterListPref( |
34 pref_names::kAllowedInstallSites); | 40 pref_names::kAllowedInstallSites); |
35 pref_service_->registry()->RegisterListPref(pref_names::kAllowedTypes); | 41 pref_service_->registry()->RegisterListPref(pref_names::kAllowedTypes); |
36 pref_service_->registry()->RegisterListPref(pref_names::kInstallDenyList); | 42 pref_service_->registry()->RegisterListPref(pref_names::kInstallDenyList); |
37 pref_service_->registry()->RegisterListPref(pref_names::kInstallAllowList); | 43 pref_service_->registry()->RegisterListPref(pref_names::kInstallAllowList); |
38 pref_service_->registry()->RegisterDictionaryPref( | 44 pref_service_->registry()->RegisterDictionaryPref( |
39 pref_names::kInstallForceList); | 45 pref_names::kInstallForceList); |
40 extension_management_.reset(new ExtensionManagement(pref_service_.get())); | 46 extension_management_.reset(new ExtensionManagement(pref_service_.get())); |
41 } | 47 } |
42 | 48 |
43 void SetPref(bool managed, const char* path, base::Value* value) { | 49 void SetPref(bool managed, const char* path, base::Value* value) { |
44 if (managed) | 50 if (managed) |
45 pref_service_->SetManagedPref(path, value); | 51 pref_service_->SetManagedPref(path, value); |
46 else | 52 else |
47 pref_service_->SetUserPref(path, value); | 53 pref_service_->SetUserPref(path, value); |
48 } | 54 } |
49 | 55 |
50 void RemovePref(bool managed, const char* path) { | 56 void RemovePref(bool managed, const char* path) { |
51 if (managed) | 57 if (managed) |
52 pref_service_->RemoveManagedPref(path); | 58 pref_service_->RemoveManagedPref(path); |
53 else | 59 else |
54 pref_service_->RemoveUserPref(path); | 60 pref_service_->RemoveUserPref(path); |
55 } | 61 } |
56 | 62 |
57 void Refresh() { | |
58 extension_management_->Refresh(); | |
59 } | |
60 | |
61 protected: | 63 protected: |
62 scoped_ptr<TestingPrefServiceSimple> pref_service_; | 64 scoped_ptr<TestingPrefServiceSimple> pref_service_; |
63 scoped_ptr<ExtensionManagement> extension_management_; | 65 scoped_ptr<ExtensionManagement> extension_management_; |
64 }; | 66 }; |
65 | 67 |
| 68 class ExtensionAdminPolicyTest : public ExtensionManagementTest { |
| 69 public: |
| 70 ExtensionAdminPolicyTest() {} |
| 71 virtual ~ExtensionAdminPolicyTest() {} |
| 72 |
| 73 void CreateExtension(Manifest::Location location) { |
| 74 base::DictionaryValue values; |
| 75 CreateExtensionFromValues(location, &values); |
| 76 } |
| 77 |
| 78 void CreateHostedApp(Manifest::Location location) { |
| 79 base::DictionaryValue values; |
| 80 values.Set(extensions::manifest_keys::kWebURLs, new base::ListValue()); |
| 81 values.SetString(extensions::manifest_keys::kLaunchWebURL, |
| 82 "http://www.example.com"); |
| 83 CreateExtensionFromValues(location, &values); |
| 84 } |
| 85 |
| 86 void CreateExtensionFromValues(Manifest::Location location, |
| 87 base::DictionaryValue* values) { |
| 88 values->SetString(extensions::manifest_keys::kName, "test"); |
| 89 values->SetString(extensions::manifest_keys::kVersion, "0.1"); |
| 90 std::string error; |
| 91 extension_ = Extension::Create(base::FilePath(), location, *values, |
| 92 Extension::NO_FLAGS, &error); |
| 93 ASSERT_TRUE(extension_.get()); |
| 94 } |
| 95 |
| 96 // Wrappers for legacy admin policy functions, for testing purpose only. |
| 97 bool BlacklistedByDefault(const base::ListValue* blacklist); |
| 98 bool UserMayLoad(const base::ListValue* blacklist, |
| 99 const base::ListValue* whitelist, |
| 100 const base::DictionaryValue* forcelist, |
| 101 const base::ListValue* allowed_types, |
| 102 const Extension* extension, |
| 103 base::string16* error); |
| 104 bool UserMayModifySettings(const Extension* extension, base::string16* error); |
| 105 bool MustRemainEnabled(const Extension* extension, base::string16* error); |
| 106 |
| 107 protected: |
| 108 scoped_refptr<Extension> extension_; |
| 109 }; |
| 110 |
| 111 bool ExtensionAdminPolicyTest::BlacklistedByDefault( |
| 112 const base::ListValue* blacklist) { |
| 113 InitPrefService(); |
| 114 if (blacklist) |
| 115 SetPref(true, pref_names::kInstallDenyList, blacklist->DeepCopy()); |
| 116 return extension_management_->BlacklistedByDefault(); |
| 117 } |
| 118 |
| 119 bool ExtensionAdminPolicyTest::UserMayLoad( |
| 120 const base::ListValue* blacklist, |
| 121 const base::ListValue* whitelist, |
| 122 const base::DictionaryValue* forcelist, |
| 123 const base::ListValue* allowed_types, |
| 124 const Extension* extension, |
| 125 base::string16* error) { |
| 126 InitPrefService(); |
| 127 if (blacklist) |
| 128 SetPref(true, pref_names::kInstallDenyList, blacklist->DeepCopy()); |
| 129 if (whitelist) |
| 130 SetPref(true, pref_names::kInstallAllowList, whitelist->DeepCopy()); |
| 131 if (forcelist) |
| 132 SetPref(true, pref_names::kInstallForceList, forcelist->DeepCopy()); |
| 133 if (allowed_types) |
| 134 SetPref(true, pref_names::kAllowedTypes, allowed_types->DeepCopy()); |
| 135 return extension_management_->GetProvider()->UserMayLoad(extension, error); |
| 136 } |
| 137 |
| 138 bool ExtensionAdminPolicyTest::UserMayModifySettings(const Extension* extension, |
| 139 base::string16* error) { |
| 140 InitPrefService(); |
| 141 return extension_management_->GetProvider()->UserMayModifySettings(extension, |
| 142 error); |
| 143 } |
| 144 |
| 145 bool ExtensionAdminPolicyTest::MustRemainEnabled(const Extension* extension, |
| 146 base::string16* error) { |
| 147 InitPrefService(); |
| 148 return extension_management_->GetProvider()->MustRemainEnabled(extension, |
| 149 error); |
| 150 } |
| 151 |
66 // Verify that preference controlled by legacy ExtensionInstallSources policy is | 152 // Verify that preference controlled by legacy ExtensionInstallSources policy is |
67 // handled well. | 153 // handled well. |
68 TEST_F(ExtensionManagementTest, LegacyInstallSources) { | 154 TEST_F(ExtensionManagementTest, LegacyInstallSources) { |
69 base::ListValue allowed_sites_pref; | 155 base::ListValue allowed_sites_pref; |
70 allowed_sites_pref.AppendString("https://www.example.com/foo"); | 156 allowed_sites_pref.AppendString("https://www.example.com/foo"); |
71 allowed_sites_pref.AppendString("https://corp.mycompany.com/*"); | 157 allowed_sites_pref.AppendString("https://corp.mycompany.com/*"); |
72 SetPref( | 158 SetPref( |
73 true, pref_names::kAllowedInstallSites, allowed_sites_pref.DeepCopy()); | 159 true, pref_names::kAllowedInstallSites, allowed_sites_pref.DeepCopy()); |
74 Refresh(); | |
75 const URLPatternSet& allowed_sites = | 160 const URLPatternSet& allowed_sites = |
76 extension_management_->ReadGlobalSettings().install_sources; | 161 extension_management_->ReadGlobalSettings().install_sources; |
77 ASSERT_TRUE(extension_management_->ReadGlobalSettings() | 162 ASSERT_TRUE(extension_management_->ReadGlobalSettings() |
78 .has_restricted_install_sources); | 163 .has_restricted_install_sources); |
79 EXPECT_FALSE(allowed_sites.is_empty()); | 164 EXPECT_FALSE(allowed_sites.is_empty()); |
80 EXPECT_TRUE(allowed_sites.MatchesURL(GURL("https://www.example.com/foo"))); | 165 EXPECT_TRUE(allowed_sites.MatchesURL(GURL("https://www.example.com/foo"))); |
81 EXPECT_FALSE(allowed_sites.MatchesURL(GURL("https://www.example.com/bar"))); | 166 EXPECT_FALSE(allowed_sites.MatchesURL(GURL("https://www.example.com/bar"))); |
82 EXPECT_TRUE( | 167 EXPECT_TRUE( |
83 allowed_sites.MatchesURL(GURL("https://corp.mycompany.com/entry"))); | 168 allowed_sites.MatchesURL(GURL("https://corp.mycompany.com/entry"))); |
84 EXPECT_FALSE( | 169 EXPECT_FALSE( |
85 allowed_sites.MatchesURL(GURL("https://www.mycompany.com/entry"))); | 170 allowed_sites.MatchesURL(GURL("https://www.mycompany.com/entry"))); |
86 } | 171 } |
87 | 172 |
88 // Verify that preference controlled by legacy ExtensionAllowedTypes policy is | 173 // Verify that preference controlled by legacy ExtensionAllowedTypes policy is |
89 // handled well. | 174 // handled well. |
90 TEST_F(ExtensionManagementTest, LegacyAllowedTypes) { | 175 TEST_F(ExtensionManagementTest, LegacyAllowedTypes) { |
91 base::ListValue allowed_types_pref; | 176 base::ListValue allowed_types_pref; |
92 allowed_types_pref.AppendInteger(Manifest::TYPE_THEME); | 177 allowed_types_pref.AppendInteger(Manifest::TYPE_THEME); |
93 allowed_types_pref.AppendInteger(Manifest::TYPE_USER_SCRIPT); | 178 allowed_types_pref.AppendInteger(Manifest::TYPE_USER_SCRIPT); |
94 | 179 |
95 SetPref(true, pref_names::kAllowedTypes, allowed_types_pref.DeepCopy()); | 180 SetPref(true, pref_names::kAllowedTypes, allowed_types_pref.DeepCopy()); |
96 Refresh(); | |
97 const std::vector<Manifest::Type>& allowed_types = | 181 const std::vector<Manifest::Type>& allowed_types = |
98 extension_management_->ReadGlobalSettings().allowed_types; | 182 extension_management_->ReadGlobalSettings().allowed_types; |
99 ASSERT_TRUE( | 183 ASSERT_TRUE( |
100 extension_management_->ReadGlobalSettings().has_restricted_allowed_types); | 184 extension_management_->ReadGlobalSettings().has_restricted_allowed_types); |
101 EXPECT_TRUE(allowed_types.size() == 2); | 185 EXPECT_TRUE(allowed_types.size() == 2); |
102 EXPECT_FALSE(std::find(allowed_types.begin(), | 186 EXPECT_FALSE(std::find(allowed_types.begin(), |
103 allowed_types.end(), | 187 allowed_types.end(), |
104 Manifest::TYPE_EXTENSION) != allowed_types.end()); | 188 Manifest::TYPE_EXTENSION) != allowed_types.end()); |
105 EXPECT_TRUE(std::find(allowed_types.begin(), | 189 EXPECT_TRUE(std::find(allowed_types.begin(), |
106 allowed_types.end(), | 190 allowed_types.end(), |
107 Manifest::TYPE_THEME) != allowed_types.end()); | 191 Manifest::TYPE_THEME) != allowed_types.end()); |
108 EXPECT_TRUE(std::find(allowed_types.begin(), | 192 EXPECT_TRUE(std::find(allowed_types.begin(), |
109 allowed_types.end(), | 193 allowed_types.end(), |
110 Manifest::TYPE_USER_SCRIPT) != allowed_types.end()); | 194 Manifest::TYPE_USER_SCRIPT) != allowed_types.end()); |
111 } | 195 } |
112 | 196 |
113 // Verify that preference controlled by legacy ExtensionInstallBlacklist policy | 197 // Verify that preference controlled by legacy ExtensionInstallBlacklist policy |
114 // is handled well. | 198 // is handled well. |
115 TEST_F(ExtensionManagementTest, LegacyInstallBlacklist) { | 199 TEST_F(ExtensionManagementTest, LegacyInstallBlacklist) { |
116 base::ListValue denied_list_pref; | 200 base::ListValue denied_list_pref; |
117 denied_list_pref.AppendString(kTargetExtension); | 201 denied_list_pref.AppendString(kTargetExtension); |
118 | 202 |
119 SetPref(true, pref_names::kInstallDenyList, denied_list_pref.DeepCopy()); | 203 SetPref(true, pref_names::kInstallDenyList, denied_list_pref.DeepCopy()); |
120 Refresh(); | |
121 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, | 204 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, |
122 ExtensionManagement::INSTALLATION_BLOCKED); | 205 ExtensionManagement::INSTALLATION_BLOCKED); |
123 EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, | 206 EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, |
124 ExtensionManagement::INSTALLATION_ALLOWED); | 207 ExtensionManagement::INSTALLATION_ALLOWED); |
125 } | 208 } |
126 | 209 |
127 // Verify that preference controlled by legacy ExtensionInstallWhitelist policy | 210 // Verify that preference controlled by legacy ExtensionInstallWhitelist policy |
128 // is handled well. | 211 // is handled well. |
129 TEST_F(ExtensionManagementTest, LegacyInstallWhitelist) { | 212 TEST_F(ExtensionManagementTest, LegacyInstallWhitelist) { |
130 base::ListValue denied_list_pref; | 213 base::ListValue denied_list_pref; |
131 denied_list_pref.AppendString("*"); | 214 denied_list_pref.AppendString("*"); |
132 base::ListValue allowed_list_pref; | 215 base::ListValue allowed_list_pref; |
133 allowed_list_pref.AppendString(kTargetExtension); | 216 allowed_list_pref.AppendString(kTargetExtension); |
134 | 217 |
135 SetPref(true, pref_names::kInstallDenyList, denied_list_pref.DeepCopy()); | 218 SetPref(true, pref_names::kInstallDenyList, denied_list_pref.DeepCopy()); |
136 SetPref(true, pref_names::kInstallAllowList, allowed_list_pref.DeepCopy()); | 219 SetPref(true, pref_names::kInstallAllowList, allowed_list_pref.DeepCopy()); |
137 Refresh(); | |
138 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, | 220 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, |
139 ExtensionManagement::INSTALLATION_ALLOWED); | 221 ExtensionManagement::INSTALLATION_ALLOWED); |
140 EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, | 222 EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, |
141 ExtensionManagement::INSTALLATION_BLOCKED); | 223 ExtensionManagement::INSTALLATION_BLOCKED); |
142 | 224 |
143 // Verify that install whitelist preference set by user is ignored. | 225 // Verify that install whitelist preference set by user is ignored. |
144 RemovePref(true, pref_names::kInstallAllowList); | 226 RemovePref(true, pref_names::kInstallAllowList); |
145 SetPref(false, pref_names::kInstallAllowList, allowed_list_pref.DeepCopy()); | 227 SetPref(false, pref_names::kInstallAllowList, allowed_list_pref.DeepCopy()); |
146 Refresh(); | |
147 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, | 228 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, |
148 ExtensionManagement::INSTALLATION_BLOCKED); | 229 ExtensionManagement::INSTALLATION_BLOCKED); |
149 } | 230 } |
150 | 231 |
151 // Verify that preference controlled by legacy ExtensionInstallForcelist policy | 232 // Verify that preference controlled by legacy ExtensionInstallForcelist policy |
152 // is handled well. | 233 // is handled well. |
153 TEST_F(ExtensionManagementTest, LegacyInstallForcelist) { | 234 TEST_F(ExtensionManagementTest, LegacyInstallForcelist) { |
154 base::DictionaryValue forced_list_pref; | 235 base::DictionaryValue forced_list_pref; |
155 ExternalPolicyLoader::AddExtension( | 236 ExternalPolicyLoader::AddExtension( |
156 &forced_list_pref, kTargetExtension, kExampleUpdateUrl); | 237 &forced_list_pref, kTargetExtension, kExampleUpdateUrl); |
157 | 238 |
158 SetPref(true, pref_names::kInstallForceList, forced_list_pref.DeepCopy()); | 239 SetPref(true, pref_names::kInstallForceList, forced_list_pref.DeepCopy()); |
159 Refresh(); | |
160 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, | 240 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, |
161 ExtensionManagement::INSTALLATION_FORCED); | 241 ExtensionManagement::INSTALLATION_FORCED); |
162 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).update_url, | 242 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).update_url, |
163 kExampleUpdateUrl); | 243 kExampleUpdateUrl); |
164 EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, | 244 EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, |
165 ExtensionManagement::INSTALLATION_ALLOWED); | 245 ExtensionManagement::INSTALLATION_ALLOWED); |
166 | 246 |
167 // Verify that install forcelist preference set by user is ignored. | 247 // Verify that install forcelist preference set by user is ignored. |
168 RemovePref(true, pref_names::kInstallForceList); | 248 RemovePref(true, pref_names::kInstallForceList); |
169 SetPref(false, pref_names::kInstallForceList, forced_list_pref.DeepCopy()); | 249 SetPref(false, pref_names::kInstallForceList, forced_list_pref.DeepCopy()); |
170 Refresh(); | |
171 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, | 250 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, |
172 ExtensionManagement::INSTALLATION_ALLOWED); | 251 ExtensionManagement::INSTALLATION_ALLOWED); |
173 } | 252 } |
174 | 253 |
| 254 // Tests the flag value indicating that extensions are blacklisted by default. |
| 255 TEST_F(ExtensionAdminPolicyTest, BlacklistedByDefault) { |
| 256 EXPECT_FALSE(BlacklistedByDefault(NULL)); |
| 257 |
| 258 base::ListValue blacklist; |
| 259 blacklist.Append(new base::StringValue(kOtherExtension)); |
| 260 EXPECT_FALSE(BlacklistedByDefault(&blacklist)); |
| 261 blacklist.Append(new base::StringValue("*")); |
| 262 EXPECT_TRUE(BlacklistedByDefault(&blacklist)); |
| 263 |
| 264 blacklist.Clear(); |
| 265 blacklist.Append(new base::StringValue("*")); |
| 266 EXPECT_TRUE(BlacklistedByDefault(&blacklist)); |
| 267 } |
| 268 |
| 269 // Tests UserMayLoad for required extensions. |
| 270 TEST_F(ExtensionAdminPolicyTest, UserMayLoadRequired) { |
| 271 CreateExtension(Manifest::COMPONENT); |
| 272 EXPECT_TRUE(UserMayLoad(NULL, NULL, NULL, NULL, extension_.get(), NULL)); |
| 273 base::string16 error; |
| 274 EXPECT_TRUE(UserMayLoad(NULL, NULL, NULL, NULL, extension_.get(), &error)); |
| 275 EXPECT_TRUE(error.empty()); |
| 276 |
| 277 // Required extensions may load even if they're on the blacklist. |
| 278 base::ListValue blacklist; |
| 279 blacklist.Append(new base::StringValue(extension_->id())); |
| 280 EXPECT_TRUE( |
| 281 UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL)); |
| 282 |
| 283 blacklist.Append(new base::StringValue("*")); |
| 284 EXPECT_TRUE( |
| 285 UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL)); |
| 286 } |
| 287 |
| 288 // Tests UserMayLoad when no blacklist exists, or it's empty. |
| 289 TEST_F(ExtensionAdminPolicyTest, UserMayLoadNoBlacklist) { |
| 290 CreateExtension(Manifest::INTERNAL); |
| 291 EXPECT_TRUE(UserMayLoad(NULL, NULL, NULL, NULL, extension_.get(), NULL)); |
| 292 base::ListValue blacklist; |
| 293 EXPECT_TRUE( |
| 294 UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL)); |
| 295 base::string16 error; |
| 296 EXPECT_TRUE( |
| 297 UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), &error)); |
| 298 EXPECT_TRUE(error.empty()); |
| 299 } |
| 300 |
| 301 // Tests UserMayLoad for an extension on the whitelist. |
| 302 TEST_F(ExtensionAdminPolicyTest, UserMayLoadWhitelisted) { |
| 303 CreateExtension(Manifest::INTERNAL); |
| 304 |
| 305 base::ListValue whitelist; |
| 306 whitelist.Append(new base::StringValue(extension_->id())); |
| 307 EXPECT_TRUE( |
| 308 UserMayLoad(NULL, &whitelist, NULL, NULL, extension_.get(), NULL)); |
| 309 |
| 310 base::ListValue blacklist; |
| 311 blacklist.Append(new base::StringValue(extension_->id())); |
| 312 EXPECT_TRUE( |
| 313 UserMayLoad(NULL, &whitelist, NULL, NULL, extension_.get(), NULL)); |
| 314 base::string16 error; |
| 315 EXPECT_TRUE( |
| 316 UserMayLoad(NULL, &whitelist, NULL, NULL, extension_.get(), &error)); |
| 317 EXPECT_TRUE(error.empty()); |
| 318 } |
| 319 |
| 320 // Tests UserMayLoad for an extension on the blacklist. |
| 321 TEST_F(ExtensionAdminPolicyTest, UserMayLoadBlacklisted) { |
| 322 CreateExtension(Manifest::INTERNAL); |
| 323 |
| 324 // Blacklisted by default. |
| 325 base::ListValue blacklist; |
| 326 blacklist.Append(new base::StringValue("*")); |
| 327 EXPECT_FALSE( |
| 328 UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL)); |
| 329 base::string16 error; |
| 330 EXPECT_FALSE( |
| 331 UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), &error)); |
| 332 EXPECT_FALSE(error.empty()); |
| 333 |
| 334 // Extension on the blacklist, with and without wildcard. |
| 335 blacklist.Append(new base::StringValue(extension_->id())); |
| 336 EXPECT_FALSE( |
| 337 UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL)); |
| 338 blacklist.Clear(); |
| 339 blacklist.Append(new base::StringValue(extension_->id())); |
| 340 EXPECT_FALSE( |
| 341 UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL)); |
| 342 |
| 343 // With a whitelist. There's no such thing as a whitelist wildcard. |
| 344 base::ListValue whitelist; |
| 345 whitelist.Append(new base::StringValue("behllobkkfkfnphdnhnkndlbkcpglgmj")); |
| 346 EXPECT_FALSE( |
| 347 UserMayLoad(&blacklist, &whitelist, NULL, NULL, extension_.get(), NULL)); |
| 348 whitelist.Append(new base::StringValue("*")); |
| 349 EXPECT_FALSE( |
| 350 UserMayLoad(&blacklist, &whitelist, NULL, NULL, extension_.get(), NULL)); |
| 351 } |
| 352 |
| 353 TEST_F(ExtensionAdminPolicyTest, UserMayLoadAllowedTypes) { |
| 354 CreateExtension(Manifest::INTERNAL); |
| 355 EXPECT_TRUE(UserMayLoad(NULL, NULL, NULL, NULL, extension_.get(), NULL)); |
| 356 |
| 357 base::ListValue allowed_types; |
| 358 EXPECT_FALSE( |
| 359 UserMayLoad(NULL, NULL, NULL, &allowed_types, extension_.get(), NULL)); |
| 360 |
| 361 allowed_types.AppendInteger(Manifest::TYPE_EXTENSION); |
| 362 EXPECT_TRUE( |
| 363 UserMayLoad(NULL, NULL, NULL, &allowed_types, extension_.get(), NULL)); |
| 364 |
| 365 CreateHostedApp(Manifest::INTERNAL); |
| 366 EXPECT_FALSE( |
| 367 UserMayLoad(NULL, NULL, NULL, &allowed_types, extension_.get(), NULL)); |
| 368 |
| 369 CreateHostedApp(Manifest::EXTERNAL_POLICY_DOWNLOAD); |
| 370 EXPECT_FALSE( |
| 371 UserMayLoad(NULL, NULL, NULL, &allowed_types, extension_.get(), NULL)); |
| 372 } |
| 373 |
| 374 TEST_F(ExtensionAdminPolicyTest, UserMayModifySettings) { |
| 375 CreateExtension(Manifest::INTERNAL); |
| 376 EXPECT_TRUE(UserMayModifySettings(extension_.get(), NULL)); |
| 377 base::string16 error; |
| 378 EXPECT_TRUE(UserMayModifySettings(extension_.get(), &error)); |
| 379 EXPECT_TRUE(error.empty()); |
| 380 |
| 381 CreateExtension(Manifest::EXTERNAL_POLICY_DOWNLOAD); |
| 382 error.clear(); |
| 383 EXPECT_FALSE(UserMayModifySettings(extension_.get(), NULL)); |
| 384 EXPECT_FALSE(UserMayModifySettings(extension_.get(), &error)); |
| 385 EXPECT_FALSE(error.empty()); |
| 386 } |
| 387 |
| 388 TEST_F(ExtensionAdminPolicyTest, MustRemainEnabled) { |
| 389 CreateExtension(Manifest::EXTERNAL_POLICY_DOWNLOAD); |
| 390 EXPECT_TRUE(MustRemainEnabled(extension_.get(), NULL)); |
| 391 base::string16 error; |
| 392 EXPECT_TRUE(MustRemainEnabled(extension_.get(), &error)); |
| 393 EXPECT_FALSE(error.empty()); |
| 394 |
| 395 CreateExtension(Manifest::INTERNAL); |
| 396 error.clear(); |
| 397 EXPECT_FALSE(MustRemainEnabled(extension_.get(), NULL)); |
| 398 EXPECT_FALSE(MustRemainEnabled(extension_.get(), &error)); |
| 399 EXPECT_TRUE(error.empty()); |
| 400 } |
| 401 |
175 } // namespace extensions | 402 } // namespace extensions |
OLD | NEW |