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

Side by Side Diff: chrome/browser/extensions/extension_management_unittest.cc

Issue 500043003: Add PolicyProvider to ExtensionManagement (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ext-1
Patch Set: fixes to #5 Created 6 years, 3 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 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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698