Index: chrome/browser/content_settings/host_content_settings_map.cc |
diff --git a/chrome/browser/content_settings/host_content_settings_map.cc b/chrome/browser/content_settings/host_content_settings_map.cc |
index e0e1e56940f5754f5157a4bd55f679c36c935f4e..260700713269cf5ecb5645986cff2fce8275e0fa 100644 |
--- a/chrome/browser/content_settings/host_content_settings_map.cc |
+++ b/chrome/browser/content_settings/host_content_settings_map.cc |
@@ -9,7 +9,9 @@ |
#include "base/command_line.h" |
#include "base/string_util.h" |
#include "base/utf_string_conversions.h" |
+#include "chrome/browser/content_settings/content_settings_details.h" |
#include "chrome/browser/content_settings/content_settings_extension_provider.h" |
+#include "chrome/browser/content_settings/content_settings_observable_provider.h" |
#include "chrome/browser/content_settings/content_settings_policy_provider.h" |
#include "chrome/browser/content_settings/content_settings_pref_provider.h" |
#include "chrome/browser/content_settings/content_settings_provider.h" |
@@ -55,10 +57,6 @@ typedef std::vector<ProviderPtr>::iterator ProviderIterator; |
typedef std::vector<ProviderPtr>::const_iterator ConstProviderIterator; |
typedef content_settings::ProviderInterface::Rules Rules; |
-typedef content_settings::ProviderInterface::Rules::iterator |
- rules_iterator; |
-typedef content_settings::ProviderInterface::Rules::const_iterator |
- const_rules_iterator; |
const char* kProviderNames[] = { |
"policy", |
@@ -109,20 +107,22 @@ HostContentSettingsMap::HostContentSettingsMap( |
// The order in which the content settings providers are created is critical, |
// as providers that are further up in the list (i.e. added earlier) override |
// providers further down. |
- content_settings_providers_.push_back(make_linked_ptr( |
- new content_settings::PolicyProvider(this, |
- prefs_, |
- policy_default_provider))); |
+ content_settings::ObservableProvider* provider = |
+ new content_settings::PolicyProvider(prefs_, policy_default_provider); |
+ provider->AddObserver(this); |
+ content_settings_providers_.push_back(make_linked_ptr(provider)); |
+ |
if (extension_service) { |
// |extension_service| can be NULL in unit tests. |
- content_settings_providers_.push_back(make_linked_ptr( |
- new content_settings::ExtensionProvider( |
- this, |
- extension_service->GetExtensionContentSettingsStore(), |
- is_off_the_record_))); |
+ provider = new content_settings::ExtensionProvider( |
+ extension_service->GetExtensionContentSettingsStore(), |
+ is_off_the_record_); |
+ provider->AddObserver(this); |
+ content_settings_providers_.push_back(make_linked_ptr(provider)); |
} |
- content_settings_providers_.push_back(make_linked_ptr( |
- new content_settings::PrefProvider(this, prefs_, is_off_the_record_))); |
+ provider = new content_settings::PrefProvider(prefs_, is_off_the_record_); |
+ provider->AddObserver(this); |
+ content_settings_providers_.push_back(make_linked_ptr(provider)); |
pref_change_registrar_.Init(prefs_); |
pref_change_registrar_.Add(prefs::kBlockThirdPartyCookies, this); |
@@ -447,6 +447,21 @@ void HostContentSettingsMap::SetBlockThirdPartyCookies(bool block) { |
prefs_->SetBoolean(prefs::kBlockThirdPartyCookies, block); |
} |
+void HostContentSettingsMap::OnContentSettingChanged( |
+ ContentSettingsPattern primary_pattern, |
+ ContentSettingsPattern secondary_pattern, |
+ ContentSettingsType content_type, |
+ std::string resource_identifier) { |
+ const ContentSettingsDetails details(primary_pattern, |
+ secondary_pattern, |
+ content_type, |
+ resource_identifier); |
+ NotificationService::current()->Notify( |
+ chrome::NOTIFICATION_CONTENT_SETTINGS_CHANGED, |
+ Source<HostContentSettingsMap>(this), |
+ Details<const ContentSettingsDetails>(&details)); |
+} |
+ |
void HostContentSettingsMap::Observe(int type, |
const NotificationSource& source, |
const NotificationDetails& details) { |