Chromium Code Reviews| 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 |