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

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

Issue 595363002: Add policy controlled permission block list for extensions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ext-fix
Patch Set: fixes addressing #4 Created 6 years, 2 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 #include <vector> 6 #include <vector>
7 7
8 #include "base/json/json_parser.h" 8 #include "base/json/json_parser.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/prefs/pref_registry_simple.h" 10 #include "base/prefs/pref_registry_simple.h"
11 #include "base/prefs/testing_pref_service.h" 11 #include "base/prefs/testing_pref_service.h"
12 #include "base/values.h" 12 #include "base/values.h"
13 #include "chrome/browser/extensions/extension_management.h" 13 #include "chrome/browser/extensions/extension_management.h"
14 #include "chrome/browser/extensions/extension_management_internal.h" 14 #include "chrome/browser/extensions/extension_management_internal.h"
15 #include "chrome/browser/extensions/extension_management_test_util.h" 15 #include "chrome/browser/extensions/extension_management_test_util.h"
16 #include "chrome/browser/extensions/external_policy_loader.h" 16 #include "chrome/browser/extensions/external_policy_loader.h"
17 #include "chrome/browser/extensions/standard_management_policy_provider.h"
17 #include "extensions/browser/pref_names.h" 18 #include "extensions/browser/pref_names.h"
18 #include "extensions/common/manifest.h" 19 #include "extensions/common/manifest.h"
19 #include "extensions/common/manifest_constants.h" 20 #include "extensions/common/manifest_constants.h"
21 #include "extensions/common/permissions/api_permission.h"
22 #include "extensions/common/permissions/permissions_info.h"
20 #include "extensions/common/url_pattern.h" 23 #include "extensions/common/url_pattern.h"
21 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
22 #include "url/gurl.h" 25 #include "url/gurl.h"
23 26
24 namespace extensions { 27 namespace extensions {
25 28
26 namespace { 29 namespace {
27 30
28 const char kTargetExtension[] = "abcdefghijklmnopabcdefghijklmnop"; 31 const char kTargetExtension[] = "abcdefghijklmnopabcdefghijklmnop";
29 const char kTargetExtension2[] = "bcdefghijklmnopabcdefghijklmnopa"; 32 const char kTargetExtension2[] = "bcdefghijklmnopabcdefghijklmnopa";
30 const char kTargetExtension3[] = "cdefghijklmnopabcdefghijklmnopab"; 33 const char kTargetExtension3[] = "cdefghijklmnopabcdefghijklmnopab";
31 const char kTargetExtension4[] = "defghijklmnopabcdefghijklmnopabc"; 34 const char kTargetExtension4[] = "defghijklmnopabcdefghijklmnopabc";
32 const char kOtherExtension[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 35 const char kOtherExtension[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
33 const char kExampleUpdateUrl[] = "http://example.com/update_url"; 36 const char kExampleUpdateUrl[] = "http://example.com/update_url";
34 37
35 const char kExampleDictPreference[] = 38 const char kExampleDictPreference[] =
36 "{" 39 "{"
37 " \"abcdefghijklmnopabcdefghijklmnop\": {" // kTargetExtension 40 " \"abcdefghijklmnopabcdefghijklmnop\": {" // kTargetExtension
38 " \"installation_mode\": \"allowed\"," 41 " \"installation_mode\": \"allowed\","
42 " \"blocked_permissions\": [\"fileSystem\", \"bookmarks\"],"
39 " }," 43 " },"
40 " \"bcdefghijklmnopabcdefghijklmnopa\": {" // kTargetExtension2 44 " \"bcdefghijklmnopabcdefghijklmnopa\": {" // kTargetExtension2
41 " \"installation_mode\": \"force_installed\"," 45 " \"installation_mode\": \"force_installed\","
42 " \"update_url\": \"http://example.com/update_url\"," 46 " \"update_url\": \"http://example.com/update_url\","
47 " \"allowed_permissions\": [\"fileSystem\", \"bookmarks\"],"
43 " }," 48 " },"
44 " \"cdefghijklmnopabcdefghijklmnopab\": {" // kTargetExtension3 49 " \"cdefghijklmnopabcdefghijklmnopab\": {" // kTargetExtension3
45 " \"installation_mode\": \"normal_installed\"," 50 " \"installation_mode\": \"normal_installed\","
46 " \"update_url\": \"http://example.com/update_url\"," 51 " \"update_url\": \"http://example.com/update_url\","
52 " \"allowed_permissions\": [\"fileSystem\", \"downloads\"],"
53 " \"blocked_permissions\": [\"fileSystem\", \"history\"],"
47 " }," 54 " },"
48 " \"defghijklmnopabcdefghijklmnopabc\": {" // kTargetExtension4 55 " \"defghijklmnopabcdefghijklmnopabc\": {" // kTargetExtension4
49 " \"installation_mode\": \"blocked\"," 56 " \"installation_mode\": \"blocked\","
50 " }," 57 " },"
51 " \"*\": {" 58 " \"*\": {"
52 " \"installation_mode\": \"blocked\"," 59 " \"installation_mode\": \"blocked\","
53 " \"install_sources\": [\"*://foo.com/*\"]," 60 " \"install_sources\": [\"*://foo.com/*\"],"
54 " \"allowed_types\": [\"theme\", \"user_script\"]," 61 " \"allowed_types\": [\"theme\", \"user_script\"],"
62 " \"blocked_permissions\": [\"fileSystem\", \"downloads\"],"
55 " }," 63 " },"
56 "}"; 64 "}";
57 65
58 } // namespace 66 } // namespace
59 67
60 class ExtensionManagementServiceTest : public testing::Test { 68 class ExtensionManagementServiceTest : public testing::Test {
61 public: 69 public:
62 typedef ExtensionManagementPrefUpdater<TestingPrefServiceSimple> PrefUpdater; 70 typedef ExtensionManagementPrefUpdater<TestingPrefServiceSimple> PrefUpdater;
63 71
64 ExtensionManagementServiceTest() {} 72 ExtensionManagementServiceTest() {}
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 protected: 129 protected:
122 scoped_ptr<TestingPrefServiceSimple> pref_service_; 130 scoped_ptr<TestingPrefServiceSimple> pref_service_;
123 scoped_ptr<ExtensionManagement> extension_management_; 131 scoped_ptr<ExtensionManagement> extension_management_;
124 }; 132 };
125 133
126 class ExtensionAdminPolicyTest : public ExtensionManagementServiceTest { 134 class ExtensionAdminPolicyTest : public ExtensionManagementServiceTest {
127 public: 135 public:
128 ExtensionAdminPolicyTest() {} 136 ExtensionAdminPolicyTest() {}
129 virtual ~ExtensionAdminPolicyTest() {} 137 virtual ~ExtensionAdminPolicyTest() {}
130 138
139 void SetUpPolicyProvider() {
140 provider_.reset(
141 new StandardManagementPolicyProvider(extension_management_.get()));
142 }
143
131 void CreateExtension(Manifest::Location location) { 144 void CreateExtension(Manifest::Location location) {
132 base::DictionaryValue values; 145 base::DictionaryValue values;
133 CreateExtensionFromValues(location, &values); 146 CreateExtensionFromValues(location, &values);
134 } 147 }
135 148
136 void CreateHostedApp(Manifest::Location location) { 149 void CreateHostedApp(Manifest::Location location) {
137 base::DictionaryValue values; 150 base::DictionaryValue values;
138 values.Set(extensions::manifest_keys::kWebURLs, new base::ListValue()); 151 values.Set(extensions::manifest_keys::kWebURLs, new base::ListValue());
139 values.SetString(extensions::manifest_keys::kLaunchWebURL, 152 values.SetString(extensions::manifest_keys::kLaunchWebURL,
140 "http://www.example.com"); 153 "http://www.example.com");
(...skipping 15 matching lines...) Expand all
156 bool UserMayLoad(const base::ListValue* blacklist, 169 bool UserMayLoad(const base::ListValue* blacklist,
157 const base::ListValue* whitelist, 170 const base::ListValue* whitelist,
158 const base::DictionaryValue* forcelist, 171 const base::DictionaryValue* forcelist,
159 const base::ListValue* allowed_types, 172 const base::ListValue* allowed_types,
160 const Extension* extension, 173 const Extension* extension,
161 base::string16* error); 174 base::string16* error);
162 bool UserMayModifySettings(const Extension* extension, base::string16* error); 175 bool UserMayModifySettings(const Extension* extension, base::string16* error);
163 bool MustRemainEnabled(const Extension* extension, base::string16* error); 176 bool MustRemainEnabled(const Extension* extension, base::string16* error);
164 177
165 protected: 178 protected:
179 scoped_ptr<StandardManagementPolicyProvider> provider_;
166 scoped_refptr<Extension> extension_; 180 scoped_refptr<Extension> extension_;
167 }; 181 };
168 182
169 bool ExtensionAdminPolicyTest::BlacklistedByDefault( 183 bool ExtensionAdminPolicyTest::BlacklistedByDefault(
170 const base::ListValue* blacklist) { 184 const base::ListValue* blacklist) {
171 InitPrefService(); 185 SetUpPolicyProvider();
172 if (blacklist) 186 if (blacklist)
173 SetPref(true, pref_names::kInstallDenyList, blacklist->DeepCopy()); 187 SetPref(true, pref_names::kInstallDenyList, blacklist->DeepCopy());
174 return extension_management_->BlacklistedByDefault(); 188 return extension_management_->BlacklistedByDefault();
175 } 189 }
176 190
177 bool ExtensionAdminPolicyTest::UserMayLoad( 191 bool ExtensionAdminPolicyTest::UserMayLoad(
178 const base::ListValue* blacklist, 192 const base::ListValue* blacklist,
179 const base::ListValue* whitelist, 193 const base::ListValue* whitelist,
180 const base::DictionaryValue* forcelist, 194 const base::DictionaryValue* forcelist,
181 const base::ListValue* allowed_types, 195 const base::ListValue* allowed_types,
182 const Extension* extension, 196 const Extension* extension,
183 base::string16* error) { 197 base::string16* error) {
184 InitPrefService(); 198 SetUpPolicyProvider();
185 if (blacklist) 199 if (blacklist)
186 SetPref(true, pref_names::kInstallDenyList, blacklist->DeepCopy()); 200 SetPref(true, pref_names::kInstallDenyList, blacklist->DeepCopy());
187 if (whitelist) 201 if (whitelist)
188 SetPref(true, pref_names::kInstallAllowList, whitelist->DeepCopy()); 202 SetPref(true, pref_names::kInstallAllowList, whitelist->DeepCopy());
189 if (forcelist) 203 if (forcelist)
190 SetPref(true, pref_names::kInstallForceList, forcelist->DeepCopy()); 204 SetPref(true, pref_names::kInstallForceList, forcelist->DeepCopy());
191 if (allowed_types) 205 if (allowed_types)
192 SetPref(true, pref_names::kAllowedTypes, allowed_types->DeepCopy()); 206 SetPref(true, pref_names::kAllowedTypes, allowed_types->DeepCopy());
193 return extension_management_->GetProvider()->UserMayLoad(extension, error); 207 return provider_->UserMayLoad(extension, error);
194 } 208 }
195 209
196 bool ExtensionAdminPolicyTest::UserMayModifySettings(const Extension* extension, 210 bool ExtensionAdminPolicyTest::UserMayModifySettings(const Extension* extension,
197 base::string16* error) { 211 base::string16* error) {
198 InitPrefService(); 212 SetUpPolicyProvider();
199 return extension_management_->GetProvider()->UserMayModifySettings(extension, 213 return provider_->UserMayModifySettings(extension, error);
200 error);
201 } 214 }
202 215
203 bool ExtensionAdminPolicyTest::MustRemainEnabled(const Extension* extension, 216 bool ExtensionAdminPolicyTest::MustRemainEnabled(const Extension* extension,
204 base::string16* error) { 217 base::string16* error) {
205 InitPrefService(); 218 SetUpPolicyProvider();
206 return extension_management_->GetProvider()->MustRemainEnabled(extension, 219 return provider_->MustRemainEnabled(extension, error);
207 error);
208 } 220 }
209 221
210 // Verify that preference controlled by legacy ExtensionInstallSources policy is 222 // Verify that preference controlled by legacy ExtensionInstallSources policy is
211 // handled well. 223 // handled well.
212 TEST_F(ExtensionManagementServiceTest, LegacyInstallSources) { 224 TEST_F(ExtensionManagementServiceTest, LegacyInstallSources) {
213 base::ListValue allowed_sites_pref; 225 base::ListValue allowed_sites_pref;
214 allowed_sites_pref.AppendString("https://www.example.com/foo"); 226 allowed_sites_pref.AppendString("https://www.example.com/foo");
215 allowed_sites_pref.AppendString("https://corp.mycompany.com/*"); 227 allowed_sites_pref.AppendString("https://corp.mycompany.com/*");
216 SetPref( 228 SetPref(
217 true, pref_names::kAllowedInstallSites, allowed_sites_pref.DeepCopy()); 229 true, pref_names::kAllowedInstallSites, allowed_sites_pref.DeepCopy());
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 EXPECT_TRUE(ReadGlobalSettings()->has_restricted_allowed_types); 344 EXPECT_TRUE(ReadGlobalSettings()->has_restricted_allowed_types);
333 const std::vector<Manifest::Type>& allowed_types = 345 const std::vector<Manifest::Type>& allowed_types =
334 ReadGlobalSettings()->allowed_types; 346 ReadGlobalSettings()->allowed_types;
335 EXPECT_EQ(allowed_types.size(), 2u); 347 EXPECT_EQ(allowed_types.size(), 2u);
336 EXPECT_TRUE(std::find(allowed_types.begin(), 348 EXPECT_TRUE(std::find(allowed_types.begin(),
337 allowed_types.end(), 349 allowed_types.end(),
338 Manifest::TYPE_THEME) != allowed_types.end()); 350 Manifest::TYPE_THEME) != allowed_types.end());
339 EXPECT_TRUE(std::find(allowed_types.begin(), 351 EXPECT_TRUE(std::find(allowed_types.begin(),
340 allowed_types.end(), 352 allowed_types.end(),
341 Manifest::TYPE_USER_SCRIPT) != allowed_types.end()); 353 Manifest::TYPE_USER_SCRIPT) != allowed_types.end());
354
355 // Verifies blocked permission list settings.
356 APIPermissionSet api_permission_set;
357 api_permission_set.clear();
358 api_permission_set.insert(APIPermission::kFileSystem);
359 api_permission_set.insert(APIPermission::kDownloads);
360 EXPECT_EQ(api_permission_set,
361 extension_management_->GetBlockedAPIPermissions(kOtherExtension));
362
363 api_permission_set.clear();
364 api_permission_set.insert(APIPermission::kFileSystem);
365 api_permission_set.insert(APIPermission::kDownloads);
366 api_permission_set.insert(APIPermission::kBookmark);
367 EXPECT_EQ(api_permission_set,
368 extension_management_->GetBlockedAPIPermissions(kTargetExtension));
369
370 api_permission_set.clear();
371 api_permission_set.insert(APIPermission::kDownloads);
372 EXPECT_EQ(api_permission_set,
373 extension_management_->GetBlockedAPIPermissions(kTargetExtension2));
374
375 api_permission_set.clear();
376 api_permission_set.insert(APIPermission::kFileSystem);
377 api_permission_set.insert(APIPermission::kHistory);
378 EXPECT_EQ(api_permission_set,
379 extension_management_->GetBlockedAPIPermissions(kTargetExtension3));
342 } 380 }
343 381
344 // Tests functionality of new preference as to deprecate legacy 382 // Tests functionality of new preference as to deprecate legacy
345 // ExtensionInstallSources policy. 383 // ExtensionInstallSources policy.
346 TEST_F(ExtensionManagementServiceTest, NewInstallSources) { 384 TEST_F(ExtensionManagementServiceTest, NewInstallSources) {
347 // Set the legacy preference, and verifies that it works. 385 // Set the legacy preference, and verifies that it works.
348 base::ListValue allowed_sites_pref; 386 base::ListValue allowed_sites_pref;
349 allowed_sites_pref.AppendString("https://www.example.com/foo"); 387 allowed_sites_pref.AppendString("https://www.example.com/foo");
350 SetPref( 388 SetPref(
351 true, pref_names::kAllowedInstallSites, allowed_sites_pref.DeepCopy()); 389 true, pref_names::kAllowedInstallSites, allowed_sites_pref.DeepCopy());
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
678 EXPECT_FALSE(error.empty()); 716 EXPECT_FALSE(error.empty());
679 717
680 CreateExtension(Manifest::INTERNAL); 718 CreateExtension(Manifest::INTERNAL);
681 error.clear(); 719 error.clear();
682 EXPECT_FALSE(MustRemainEnabled(extension_.get(), NULL)); 720 EXPECT_FALSE(MustRemainEnabled(extension_.get(), NULL));
683 EXPECT_FALSE(MustRemainEnabled(extension_.get(), &error)); 721 EXPECT_FALSE(MustRemainEnabled(extension_.get(), &error));
684 EXPECT_TRUE(error.empty()); 722 EXPECT_TRUE(error.empty());
685 } 723 }
686 724
687 } // namespace extensions 725 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698