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

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, format correction 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 } 27 }
23 28
24 ExtensionManagement::GlobalSettings::~GlobalSettings() { 29 ExtensionManagement::GlobalSettings::~GlobalSettings() {
25 } 30 }
26 31
27 void ExtensionManagement::GlobalSettings::Reset() { 32 void ExtensionManagement::GlobalSettings::Reset() {
28 has_restricted_install_sources = false; 33 has_restricted_install_sources = false;
29 install_sources.ClearPatterns(); 34 install_sources.ClearPatterns();
30 has_restricted_allowed_types = false; 35 has_restricted_allowed_types = false;
31 allowed_types.clear(); 36 allowed_types.clear();
32 } 37 }
33 38
34 ExtensionManagement::ExtensionManagement(PrefService* pref_service) 39 ExtensionManagement::ExtensionManagement(PrefService* pref_service)
35 : pref_service_(pref_service) { 40 : pref_service_(pref_service) {
41 pref_change_registrar_.Init(pref_service_);
42 pref_change_registrar_.Add(
43 pref_names::kInstallAllowList,
44 base::Bind(&ExtensionManagement::OnExtensionPrefChanged,
45 base::Unretained(this)));
46 pref_change_registrar_.Add(
47 pref_names::kInstallDenyList,
48 base::Bind(&ExtensionManagement::OnExtensionPrefChanged,
49 base::Unretained(this)));
50 pref_change_registrar_.Add(
51 pref_names::kInstallForceList,
52 base::Bind(&ExtensionManagement::OnExtensionPrefChanged,
53 base::Unretained(this)));
54 pref_change_registrar_.Add(
55 pref_names::kAllowedInstallSites,
56 base::Bind(&ExtensionManagement::OnExtensionPrefChanged,
57 base::Unretained(this)));
58 pref_change_registrar_.Add(
59 pref_names::kAllowedTypes,
60 base::Bind(&ExtensionManagement::OnExtensionPrefChanged,
61 base::Unretained(this)));
Joao da Silva 2014/09/03 11:52:54 Suggestion: all of these registrations use the sam
binjin 2014/09/03 15:31:36 Done.
62 Refresh();
63 provider_.reset(new StandardManagementPolicyProvider(this));
36 } 64 }
37 65
38 ExtensionManagement::~ExtensionManagement() { 66 ExtensionManagement::~ExtensionManagement() {
39 } 67 }
40 68
69 void ExtensionManagement::AddObserver(Observer* obs) {
70 observer_list_.AddObserver(obs);
71 }
72
73 void ExtensionManagement::RemoveObserver(Observer* obs) {
Joao da Silva 2014/09/03 11:52:54 Rename "obs" to "observer"
binjin 2014/09/03 15:31:36 Done.
74 observer_list_.RemoveObserver(obs);
75 }
76
77 ManagementPolicy::Provider* ExtensionManagement::GetProvider() {
78 return provider_.get();
79 }
80
81 bool ExtensionManagement::BlacklistedByDefault() {
82 return default_settings_.installation_mode == INSTALLATION_BLOCKED;
83 }
84
85 const ExtensionManagement::IndividualSettings& ExtensionManagement::ReadById(
86 const ExtensionId& id) const {
87 DCHECK(crx_file::id_util::IdIsValid(id)) << "Invalid ID: " << id;
88 SettingsIdMap::const_iterator it = settings_by_id_.find(id);
89 if (it != settings_by_id_.end())
90 return it->second;
91 return default_settings_;
92 }
93
94 const ExtensionManagement::GlobalSettings&
95 ExtensionManagement::ReadGlobalSettings() const {
96 return global_settings_;
97 }
98
41 void ExtensionManagement::Refresh() { 99 void ExtensionManagement::Refresh() {
42 // Load all extension management settings preferences. 100 // Load all extension management settings preferences.
43 const base::ListValue* allowed_list_pref = 101 const base::ListValue* allowed_list_pref =
44 static_cast<const base::ListValue*>(LoadPreference( 102 static_cast<const base::ListValue*>(LoadPreference(
45 pref_names::kInstallAllowList, true, base::Value::TYPE_LIST)); 103 pref_names::kInstallAllowList, true, base::Value::TYPE_LIST));
46 const base::ListValue* denied_list_pref = 104 const base::ListValue* denied_list_pref =
47 static_cast<const base::ListValue*>(LoadPreference( 105 static_cast<const base::ListValue*>(LoadPreference(
48 pref_names::kInstallDenyList, false, base::Value::TYPE_LIST)); 106 pref_names::kInstallDenyList, false, base::Value::TYPE_LIST));
49 const base::DictionaryValue* forced_list_pref = 107 const base::DictionaryValue* forced_list_pref =
50 static_cast<const base::DictionaryValue*>(LoadPreference( 108 static_cast<const base::DictionaryValue*>(LoadPreference(
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 global_settings_.allowed_types.push_back( 189 global_settings_.allowed_types.push_back(
132 static_cast<Manifest::Type>(int_value)); 190 static_cast<Manifest::Type>(int_value));
133 } 191 }
134 } 192 }
135 } 193 }
136 194
137 // TODO(binjin): Add parsing of new ExtensionManagement preference after the 195 // TODO(binjin): Add parsing of new ExtensionManagement preference after the
138 // new ExtensionManagement policy is added. 196 // new ExtensionManagement policy is added.
139 } 197 }
140 198
141 const ExtensionManagement::IndividualSettings& ExtensionManagement::ReadById(
142 const ExtensionId& id) const {
143 DCHECK(crx_file::id_util::IdIsValid(id)) << "Invalid ID: " << id;
144 SettingsIdMap::const_iterator it = settings_by_id_.find(id);
145 if (it != settings_by_id_.end())
146 return it->second;
147 return default_settings_;
148 }
149
150 const ExtensionManagement::GlobalSettings&
151 ExtensionManagement::ReadGlobalSettings() const {
152 return global_settings_;
153 }
154
155 const base::Value* ExtensionManagement::LoadPreference( 199 const base::Value* ExtensionManagement::LoadPreference(
156 const char* pref_name, 200 const char* pref_name,
157 bool force_managed, 201 bool force_managed,
158 base::Value::Type expected_type) { 202 base::Value::Type expected_type) {
159 const PrefService::Preference* pref = 203 const PrefService::Preference* pref =
160 pref_service_->FindPreference(pref_name); 204 pref_service_->FindPreference(pref_name);
161 if (pref && !pref->IsDefaultValue() && 205 if (pref && !pref->IsDefaultValue() &&
162 (!force_managed || pref->IsManaged())) { 206 (!force_managed || pref->IsManaged())) {
163 const base::Value* value = pref->GetValue(); 207 const base::Value* value = pref->GetValue();
164 if (value && value->IsType(expected_type)) 208 if (value && value->IsType(expected_type))
165 return value; 209 return value;
166 } 210 }
167 return NULL; 211 return NULL;
168 } 212 }
169 213
214 void ExtensionManagement::OnExtensionPrefChanged() {
215 Refresh();
216 NotifyExtensionManagementPrefChanged();
217 }
218
219 void ExtensionManagement::NotifyExtensionManagementPrefChanged() {
220 FOR_EACH_OBSERVER(
221 Observer, observer_list_, OnExtensionManagementPrefChanged());
222 }
223
170 ExtensionManagement::IndividualSettings* ExtensionManagement::AccessById( 224 ExtensionManagement::IndividualSettings* ExtensionManagement::AccessById(
171 const ExtensionId& id) { 225 const ExtensionId& id) {
172 DCHECK(crx_file::id_util::IdIsValid(id)) << "Invalid ID: " << id; 226 DCHECK(crx_file::id_util::IdIsValid(id)) << "Invalid ID: " << id;
173 SettingsIdMap::iterator it = settings_by_id_.find(id); 227 SettingsIdMap::iterator it = settings_by_id_.find(id);
174 if (it == settings_by_id_.end()) 228 if (it == settings_by_id_.end())
175 it = settings_by_id_.insert(std::make_pair(id, default_settings_)).first; 229 it = settings_by_id_.insert(std::make_pair(id, default_settings_)).first;
176 return &it->second; 230 return &it->second;
177 } 231 }
178 232
233 ExtensionManagement* ExtensionManagementFactory::GetForBrowserContext(
234 content::BrowserContext* context) {
235 return static_cast<ExtensionManagement*>(
236 GetInstance()->GetServiceForBrowserContext(context, true));
237 }
238
239 ExtensionManagementFactory* ExtensionManagementFactory::GetInstance() {
240 return Singleton<ExtensionManagementFactory>::get();
241 }
242
243 ExtensionManagementFactory::ExtensionManagementFactory()
244 : BrowserContextKeyedServiceFactory(
245 "ExtensionManagement",
246 BrowserContextDependencyManager::GetInstance()) {
247 }
248
249 ExtensionManagementFactory::~ExtensionManagementFactory() {
250 }
251
252 KeyedService* ExtensionManagementFactory::BuildServiceInstanceFor(
253 content::BrowserContext* context) const {
254 return new ExtensionManagement(
255 Profile::FromBrowserContext(context)->GetPrefs());
256 }
257
179 } // namespace extensions 258 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698