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

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

Issue 500043003: Add PolicyProvider to ExtensionManagement (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ext-1
Patch Set: rebase again 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 "chrome/browser/extensions/extension_management.h" 5 #include "chrome/browser/extensions/extension_management.h"
6 6
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
7 #include "base/logging.h" 9 #include "base/logging.h"
8 #include "base/prefs/pref_service.h" 10 #include "base/prefs/pref_service.h"
9 #include "chrome/browser/extensions/external_provider_impl.h" 11 #include "chrome/browser/extensions/external_provider_impl.h"
12 #include "chrome/browser/extensions/standard_management_policy_provider.h"
13 #include "chrome/browser/profiles/profile.h"
10 #include "components/crx_file/id_util.h" 14 #include "components/crx_file/id_util.h"
15 #include "components/keyed_service/content/browser_context_dependency_manager.h"
11 #include "extensions/browser/pref_names.h" 16 #include "extensions/browser/pref_names.h"
12 #include "extensions/common/url_pattern.h" 17 #include "extensions/common/url_pattern.h"
13 18
14 namespace extensions { 19 namespace extensions {
15 20
16 void ExtensionManagement::IndividualSettings::Reset() { 21 void ExtensionManagement::IndividualSettings::Reset() {
17 installation_mode = ExtensionManagement::INSTALLATION_ALLOWED; 22 installation_mode = ExtensionManagement::INSTALLATION_ALLOWED;
18 update_url.clear(); 23 update_url.clear();
19 } 24 }
20 25
21 ExtensionManagement::GlobalSettings::GlobalSettings() { 26 ExtensionManagement::GlobalSettings::GlobalSettings() {
22 Reset(); 27 Reset();
23 } 28 }
24 29
25 ExtensionManagement::GlobalSettings::~GlobalSettings() { 30 ExtensionManagement::GlobalSettings::~GlobalSettings() {
26 } 31 }
27 32
28 void ExtensionManagement::GlobalSettings::Reset() { 33 void ExtensionManagement::GlobalSettings::Reset() {
29 has_restricted_install_sources = false; 34 has_restricted_install_sources = false;
30 install_sources.ClearPatterns(); 35 install_sources.ClearPatterns();
31 has_restricted_allowed_types = false; 36 has_restricted_allowed_types = false;
32 allowed_types.clear(); 37 allowed_types.clear();
33 } 38 }
34 39
35 ExtensionManagement::ExtensionManagement(PrefService* pref_service) 40 ExtensionManagement::ExtensionManagement(PrefService* pref_service)
36 : pref_service_(pref_service) { 41 : pref_service_(pref_service) {
42 pref_change_registrar_.Init(pref_service_);
43 base::Closure pref_change_callback = base::Bind(
44 &ExtensionManagement::OnExtensionPrefChanged, base::Unretained(this));
45 pref_change_registrar_.Add(pref_names::kInstallAllowList,
46 pref_change_callback);
47 pref_change_registrar_.Add(pref_names::kInstallDenyList,
48 pref_change_callback);
49 pref_change_registrar_.Add(pref_names::kInstallForceList,
50 pref_change_callback);
51 pref_change_registrar_.Add(pref_names::kAllowedInstallSites,
52 pref_change_callback);
53 pref_change_registrar_.Add(pref_names::kAllowedTypes, pref_change_callback);
54 Refresh();
55 provider_.reset(new StandardManagementPolicyProvider(this));
37 } 56 }
38 57
39 ExtensionManagement::~ExtensionManagement() { 58 ExtensionManagement::~ExtensionManagement() {
40 } 59 }
41 60
61 void ExtensionManagement::AddObserver(Observer* observer) {
62 observer_list_.AddObserver(observer);
63 }
64
65 void ExtensionManagement::RemoveObserver(Observer* observer) {
66 observer_list_.RemoveObserver(observer);
67 }
68
69 ManagementPolicy::Provider* ExtensionManagement::GetProvider() {
70 return provider_.get();
71 }
72
73 bool ExtensionManagement::BlacklistedByDefault() {
74 return default_settings_.installation_mode == INSTALLATION_BLOCKED;
75 }
76
77 const ExtensionManagement::IndividualSettings& ExtensionManagement::ReadById(
78 const ExtensionId& id) const {
79 DCHECK(crx_file::id_util::IdIsValid(id)) << "Invalid ID: " << id;
80 SettingsIdMap::const_iterator it = settings_by_id_.find(id);
81 if (it != settings_by_id_.end())
82 return it->second;
83 return default_settings_;
84 }
85
86 const ExtensionManagement::GlobalSettings&
87 ExtensionManagement::ReadGlobalSettings() const {
88 return global_settings_;
89 }
90
42 void ExtensionManagement::Refresh() { 91 void ExtensionManagement::Refresh() {
43 // Load all extension management settings preferences. 92 // Load all extension management settings preferences.
44 const base::ListValue* allowed_list_pref = 93 const base::ListValue* allowed_list_pref =
45 static_cast<const base::ListValue*>(LoadPreference( 94 static_cast<const base::ListValue*>(LoadPreference(
46 pref_names::kInstallAllowList, true, base::Value::TYPE_LIST)); 95 pref_names::kInstallAllowList, true, base::Value::TYPE_LIST));
47 // Allow user to use preference to block certain extensions. Note that policy 96 // Allow user to use preference to block certain extensions. Note that policy
48 // managed forcelist or whitelist will always override this. 97 // managed forcelist or whitelist will always override this.
49 const base::ListValue* denied_list_pref = 98 const base::ListValue* denied_list_pref =
50 static_cast<const base::ListValue*>(LoadPreference( 99 static_cast<const base::ListValue*>(LoadPreference(
51 pref_names::kInstallDenyList, false, base::Value::TYPE_LIST)); 100 pref_names::kInstallDenyList, false, base::Value::TYPE_LIST));
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 global_settings_.allowed_types.push_back( 184 global_settings_.allowed_types.push_back(
136 static_cast<Manifest::Type>(int_value)); 185 static_cast<Manifest::Type>(int_value));
137 } 186 }
138 } 187 }
139 } 188 }
140 189
141 // TODO(binjin): Add parsing of new ExtensionManagement preference after the 190 // TODO(binjin): Add parsing of new ExtensionManagement preference after the
142 // new ExtensionManagement policy is added. 191 // new ExtensionManagement policy is added.
143 } 192 }
144 193
145 const ExtensionManagement::IndividualSettings& ExtensionManagement::ReadById(
146 const ExtensionId& id) const {
147 DCHECK(crx_file::id_util::IdIsValid(id)) << "Invalid ID: " << id;
148 SettingsIdMap::const_iterator it = settings_by_id_.find(id);
149 if (it != settings_by_id_.end())
150 return it->second;
151 return default_settings_;
152 }
153
154 const ExtensionManagement::GlobalSettings&
155 ExtensionManagement::ReadGlobalSettings() const {
156 return global_settings_;
157 }
158
159 const base::Value* ExtensionManagement::LoadPreference( 194 const base::Value* ExtensionManagement::LoadPreference(
160 const char* pref_name, 195 const char* pref_name,
161 bool force_managed, 196 bool force_managed,
162 base::Value::Type expected_type) { 197 base::Value::Type expected_type) {
163 const PrefService::Preference* pref = 198 const PrefService::Preference* pref =
164 pref_service_->FindPreference(pref_name); 199 pref_service_->FindPreference(pref_name);
165 if (pref && !pref->IsDefaultValue() && 200 if (pref && !pref->IsDefaultValue() &&
166 (!force_managed || pref->IsManaged())) { 201 (!force_managed || pref->IsManaged())) {
167 const base::Value* value = pref->GetValue(); 202 const base::Value* value = pref->GetValue();
168 if (value && value->IsType(expected_type)) 203 if (value && value->IsType(expected_type))
169 return value; 204 return value;
170 } 205 }
171 return NULL; 206 return NULL;
172 } 207 }
173 208
209 void ExtensionManagement::OnExtensionPrefChanged() {
210 Refresh();
211 NotifyExtensionManagementPrefChanged();
212 }
213
214 void ExtensionManagement::NotifyExtensionManagementPrefChanged() {
215 FOR_EACH_OBSERVER(
216 Observer, observer_list_, OnExtensionManagementSettingsChanged());
217 }
218
174 ExtensionManagement::IndividualSettings* ExtensionManagement::AccessById( 219 ExtensionManagement::IndividualSettings* ExtensionManagement::AccessById(
175 const ExtensionId& id) { 220 const ExtensionId& id) {
176 DCHECK(crx_file::id_util::IdIsValid(id)) << "Invalid ID: " << id; 221 DCHECK(crx_file::id_util::IdIsValid(id)) << "Invalid ID: " << id;
177 SettingsIdMap::iterator it = settings_by_id_.find(id); 222 SettingsIdMap::iterator it = settings_by_id_.find(id);
178 if (it == settings_by_id_.end()) 223 if (it == settings_by_id_.end())
179 it = settings_by_id_.insert(std::make_pair(id, default_settings_)).first; 224 it = settings_by_id_.insert(std::make_pair(id, default_settings_)).first;
180 return &it->second; 225 return &it->second;
181 } 226 }
182 227
228 ExtensionManagement* ExtensionManagementFactory::GetForBrowserContext(
229 content::BrowserContext* context) {
230 return static_cast<ExtensionManagement*>(
231 GetInstance()->GetServiceForBrowserContext(context, true));
232 }
233
234 ExtensionManagementFactory* ExtensionManagementFactory::GetInstance() {
235 return Singleton<ExtensionManagementFactory>::get();
236 }
237
238 ExtensionManagementFactory::ExtensionManagementFactory()
239 : BrowserContextKeyedServiceFactory(
240 "ExtensionManagement",
241 BrowserContextDependencyManager::GetInstance()) {
242 }
243
244 ExtensionManagementFactory::~ExtensionManagementFactory() {
245 }
246
247 KeyedService* ExtensionManagementFactory::BuildServiceInstanceFor(
248 content::BrowserContext* context) const {
249 return new ExtensionManagement(
250 Profile::FromBrowserContext(context)->GetPrefs());
251 }
252
183 } // namespace extensions 253 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_management.h ('k') | chrome/browser/extensions/extension_management_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698