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

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: 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 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 3430b7ee745992f40cf184e338c1dfbd67759b52..81710ab497ac737e59deb83a9509c621c3568bca 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"
@@ -33,11 +38,64 @@ void ExtensionManagement::GlobalSettings::Reset() {
ExtensionManagement::ExtensionManagement(PrefService* pref_service)
: pref_service_(pref_service) {
+ pref_change_registrar_.Init(pref_service_);
+ pref_change_registrar_.Add(
+ pref_names::kInstallAllowList,
+ base::Bind(&ExtensionManagement::OnExtensionPrefChanged,
+ base::Unretained(this)));
+ pref_change_registrar_.Add(
+ pref_names::kInstallDenyList,
+ base::Bind(&ExtensionManagement::OnExtensionPrefChanged,
+ base::Unretained(this)));
+ pref_change_registrar_.Add(
+ pref_names::kInstallForceList,
+ base::Bind(&ExtensionManagement::OnExtensionPrefChanged,
+ base::Unretained(this)));
+ pref_change_registrar_.Add(
+ pref_names::kAllowedInstallSites,
+ base::Bind(&ExtensionManagement::OnExtensionPrefChanged,
+ base::Unretained(this)));
+ pref_change_registrar_.Add(
+ pref_names::kAllowedTypes,
+ base::Bind(&ExtensionManagement::OnExtensionPrefChanged,
+ 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.
+ Refresh();
+ provider_.reset(new StandardManagementPolicyProvider(this));
}
ExtensionManagement::~ExtensionManagement() {
}
+void ExtensionManagement::AddObserver(Observer* obs) {
+ observer_list_.AddObserver(obs);
+}
+
+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.
+ observer_list_.RemoveObserver(obs);
+}
+
+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 =
@@ -138,20 +196,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,
@@ -167,6 +211,16 @@ const base::Value* ExtensionManagement::LoadPreference(
return NULL;
}
+void ExtensionManagement::OnExtensionPrefChanged() {
+ Refresh();
+ NotifyExtensionManagementPrefChanged();
+}
+
+void ExtensionManagement::NotifyExtensionManagementPrefChanged() {
+ FOR_EACH_OBSERVER(
+ Observer, observer_list_, OnExtensionManagementPrefChanged());
+}
+
ExtensionManagement::IndividualSettings* ExtensionManagement::AccessById(
const ExtensionId& id) {
DCHECK(crx_file::id_util::IdIsValid(id)) << "Invalid ID: " << id;
@@ -176,4 +230,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