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 |