diff options
Diffstat (limited to 'chrome/browser/content_settings')
-rw-r--r-- | chrome/browser/content_settings/host_content_settings_map.cc | 22 | ||||
-rw-r--r-- | chrome/browser/content_settings/host_content_settings_map.h | 18 |
2 files changed, 33 insertions, 7 deletions
diff --git a/chrome/browser/content_settings/host_content_settings_map.cc b/chrome/browser/content_settings/host_content_settings_map.cc index 421f0c1..50606ad 100644 --- a/chrome/browser/content_settings/host_content_settings_map.cc +++ b/chrome/browser/content_settings/host_content_settings_map.cc @@ -77,8 +77,11 @@ bool SupportsResourceIdentifier(ContentSettingsType content_type) { HostContentSettingsMap::HostContentSettingsMap( PrefService* prefs, - bool incognito) - : prefs_(prefs), + bool incognito) : +#ifndef NDEBUG + used_content_settings_providers_(false), +#endif + prefs_(prefs), is_off_the_record_(incognito) { content_settings::ObservableProvider* policy_provider = new content_settings::PolicyProvider(prefs_); @@ -105,6 +108,9 @@ HostContentSettingsMap::HostContentSettingsMap( void HostContentSettingsMap::RegisterExtensionService( ExtensionService* extension_service) { DCHECK(extension_service); +#ifndef NDEBUG + DCHECK(!used_content_settings_providers_); +#endif DCHECK(!content_settings_providers_[INTERNAL_EXTENSION_PROVIDER]); DCHECK(!content_settings_providers_[CUSTOM_EXTENSION_PROVIDER]); @@ -167,6 +173,8 @@ ContentSetting HostContentSettingsMap::GetDefaultContentSettingFromProvider( ContentSetting HostContentSettingsMap::GetDefaultContentSetting( ContentSettingsType content_type, std::string* provider_id) const { + UsedContentSettingsProviders(); + // Iterate through the list of providers and return the first non-NULL value // that matches |primary_url| and |secondary_url|. for (ConstProviderIterator provider = content_settings_providers_.begin(); @@ -208,6 +216,7 @@ void HostContentSettingsMap::GetSettingsForOneType( DCHECK(SupportsResourceIdentifier(content_type) || resource_identifier.empty()); DCHECK(settings); + UsedContentSettingsProviders(); settings->clear(); for (ConstProviderIterator provider = content_settings_providers_.begin(); @@ -257,6 +266,8 @@ void HostContentSettingsMap::SetWebsiteSetting( DCHECK(IsValueAllowedForType(prefs_, value, content_type)); DCHECK(SupportsResourceIdentifier(content_type) || resource_identifier.empty()); + UsedContentSettingsProviders(); + for (ProviderIterator provider = content_settings_providers_.begin(); provider != content_settings_providers_.end(); ++provider) { @@ -316,6 +327,7 @@ void HostContentSettingsMap::AddExceptionForURL( void HostContentSettingsMap::ClearSettingsForOneType( ContentSettingsType content_type) { + UsedContentSettingsProviders(); for (ProviderIterator provider = content_settings_providers_.begin(); provider != content_settings_providers_.end(); ++provider) { @@ -497,6 +509,12 @@ void HostContentSettingsMap::AddSettingsForOneType( } } +void HostContentSettingsMap::UsedContentSettingsProviders() const { +#ifndef NDEBUG + used_content_settings_providers_ = true; +#endif +} + bool HostContentSettingsMap::ShouldAllowAllContent( const GURL& primary_url, const GURL& secondary_url, diff --git a/chrome/browser/content_settings/host_content_settings_map.h b/chrome/browser/content_settings/host_content_settings_map.h index 635a3db..46f62ff 100644 --- a/chrome/browser/content_settings/host_content_settings_map.h +++ b/chrome/browser/content_settings/host_content_settings_map.h @@ -15,7 +15,6 @@ #include "base/basictypes.h" #include "base/memory/ref_counted.h" #include "base/prefs/public/pref_change_registrar.h" -#include "base/synchronization/lock.h" #include "base/tuple.h" #include "chrome/browser/content_settings/content_settings_observer.h" #include "chrome/common/content_settings.h" @@ -230,18 +229,27 @@ class HostContentSettingsMap ContentSettingsForOneType* settings, bool incognito) const; + // Call UsedContentSettingsProviders() whenever you access + // content_settings_providers_ (apart from initialization and + // teardown), so that we can DCHECK in RegisterExtensionService that + // it is not being called too late. + void UsedContentSettingsProviders() const; + +#ifndef NDEBUG + mutable bool used_content_settings_providers_; +#endif + // Weak; owned by the Profile. PrefService* prefs_; // Whether this settings map is for an OTR session. bool is_off_the_record_; - // Content setting providers. + // Content setting providers. This is only modified at construction + // time and by RegisterExtensionService, both of which should happen + // before any other uses of it. ProviderMap content_settings_providers_; - // Used around accesses to the following objects to guarantee thread safety. - mutable base::Lock lock_; - DISALLOW_COPY_AND_ASSIGN(HostContentSettingsMap); }; |