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

Unified 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: 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_management.cc
diff --git a/chrome/browser/extensions/extension_management.cc b/chrome/browser/extensions/extension_management.cc
index 5852b9a4103777f374d6dce04269bad5e259dc57..abb4d90d6542f941df4e04b00cee67a25fb26390 100644
--- a/chrome/browser/extensions/extension_management.cc
+++ b/chrome/browser/extensions/extension_management.cc
@@ -4,10 +4,15 @@
#include "chrome/browser/extensions/extension_management.h"
+#include "base/bind.h"
+#include "base/bind_helpers.h"
#include "base/logging.h"
#include "base/prefs/pref_service.h"
#include "chrome/browser/extensions/external_provider_impl.h"
+#include "chrome/browser/extensions/standard_management_policy_provider.h"
+#include "chrome/browser/profiles/profile.h"
#include "components/crx_file/id_util.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
#include "extensions/browser/pref_names.h"
#include "extensions/common/url_pattern.h"
@@ -34,11 +39,55 @@ void ExtensionManagement::GlobalSettings::Reset() {
ExtensionManagement::ExtensionManagement(PrefService* pref_service)
: pref_service_(pref_service) {
+ pref_change_registrar_.Init(pref_service_);
+ base::Closure pref_change_callback = base::Bind(
+ &ExtensionManagement::OnExtensionPrefChanged, base::Unretained(this));
+ pref_change_registrar_.Add(pref_names::kInstallAllowList,
+ pref_change_callback);
+ pref_change_registrar_.Add(pref_names::kInstallDenyList,
+ pref_change_callback);
+ pref_change_registrar_.Add(pref_names::kInstallForceList,
+ pref_change_callback);
+ pref_change_registrar_.Add(pref_names::kAllowedInstallSites,
+ pref_change_callback);
+ pref_change_registrar_.Add(pref_names::kAllowedTypes, pref_change_callback);
+ Refresh();
+ provider_.reset(new StandardManagementPolicyProvider(this));
}
ExtensionManagement::~ExtensionManagement() {
}
+void ExtensionManagement::AddObserver(Observer* observer) {
+ observer_list_.AddObserver(observer);
+}
+
+void ExtensionManagement::RemoveObserver(Observer* observer) {
+ observer_list_.RemoveObserver(observer);
+}
+
+ManagementPolicy::Provider* ExtensionManagement::GetProvider() {
+ return provider_.get();
+}
+
+bool ExtensionManagement::BlacklistedByDefault() {
+ return default_settings_.installation_mode == INSTALLATION_BLOCKED;
+}
+
+const ExtensionManagement::IndividualSettings& ExtensionManagement::ReadById(
+ const ExtensionId& id) const {
+ DCHECK(crx_file::id_util::IdIsValid(id)) << "Invalid ID: " << id;
+ SettingsIdMap::const_iterator it = settings_by_id_.find(id);
+ if (it != settings_by_id_.end())
+ return it->second;
+ return default_settings_;
+}
+
+const ExtensionManagement::GlobalSettings&
+ExtensionManagement::ReadGlobalSettings() const {
+ return global_settings_;
+}
+
void ExtensionManagement::Refresh() {
// Load all extension management settings preferences.
const base::ListValue* allowed_list_pref =
@@ -142,20 +191,6 @@ void ExtensionManagement::Refresh() {
// new ExtensionManagement policy is added.
}
-const ExtensionManagement::IndividualSettings& ExtensionManagement::ReadById(
- const ExtensionId& id) const {
- DCHECK(crx_file::id_util::IdIsValid(id)) << "Invalid ID: " << id;
- SettingsIdMap::const_iterator it = settings_by_id_.find(id);
- if (it != settings_by_id_.end())
- return it->second;
- return default_settings_;
-}
-
-const ExtensionManagement::GlobalSettings&
-ExtensionManagement::ReadGlobalSettings() const {
- return global_settings_;
-}
-
const base::Value* ExtensionManagement::LoadPreference(
const char* pref_name,
bool force_managed,
@@ -171,6 +206,16 @@ const base::Value* ExtensionManagement::LoadPreference(
return NULL;
}
+void ExtensionManagement::OnExtensionPrefChanged() {
+ Refresh();
+ NotifyExtensionManagementPrefChanged();
+}
+
+void ExtensionManagement::NotifyExtensionManagementPrefChanged() {
+ FOR_EACH_OBSERVER(
+ Observer, observer_list_, OnExtensionManagementSettingsChanged());
+}
+
ExtensionManagement::IndividualSettings* ExtensionManagement::AccessById(
const ExtensionId& id) {
DCHECK(crx_file::id_util::IdIsValid(id)) << "Invalid ID: " << id;
@@ -180,4 +225,29 @@ ExtensionManagement::IndividualSettings* ExtensionManagement::AccessById(
return &it->second;
}
+ExtensionManagement* ExtensionManagementFactory::GetForBrowserContext(
+ content::BrowserContext* context) {
+ return static_cast<ExtensionManagement*>(
+ GetInstance()->GetServiceForBrowserContext(context, true));
+}
+
+ExtensionManagementFactory* ExtensionManagementFactory::GetInstance() {
+ return Singleton<ExtensionManagementFactory>::get();
+}
+
+ExtensionManagementFactory::ExtensionManagementFactory()
+ : BrowserContextKeyedServiceFactory(
+ "ExtensionManagement",
+ BrowserContextDependencyManager::GetInstance()) {
+}
+
+ExtensionManagementFactory::~ExtensionManagementFactory() {
+}
+
+KeyedService* ExtensionManagementFactory::BuildServiceInstanceFor(
+ content::BrowserContext* context) const {
+ return new ExtensionManagement(
+ Profile::FromBrowserContext(context)->GetPrefs());
+}
+
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698