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 |