Chromium Code Reviews| Index: chrome/browser/content_settings/pref_content_settings_provider.cc |
| diff --git a/chrome/browser/content_settings/pref_content_settings_provider.cc b/chrome/browser/content_settings/pref_content_settings_provider.cc |
| index bb6360e31215c92eee197819d96ee97da538a18d..eca988df9c2f7855f6ec86c9136137562eed5431 100644 |
| --- a/chrome/browser/content_settings/pref_content_settings_provider.cc |
| +++ b/chrome/browser/content_settings/pref_content_settings_provider.cc |
| @@ -60,40 +60,10 @@ const char* kTypeNames[CONTENT_SETTINGS_NUM_TYPES] = { |
| NULL, // Not used for Notifications |
| }; |
| -// True if a given content settings type requires additional resource |
| -// identifiers. |
| -const bool kRequiresResourceIdentifier[CONTENT_SETTINGS_NUM_TYPES] = { |
| - false, // CONTENT_SETTINGS_TYPE_COOKIES |
| - false, // CONTENT_SETTINGS_TYPE_IMAGES |
| - false, // CONTET_SETTINGS_TYPE_JAVASCRIPT |
| - true, // CONTENT_SETTINGS_TYPE_PLUGINS |
| - false, // CONTENT_SETTINGS_TYPE_POPUPS |
| - false, // Not used for Geolocation |
| - false, // Not used for Notifications |
| -}; |
| - |
| -// Map ASK for the plugins content type to BLOCK if click-to-play is |
| -// not enabled. |
| -ContentSetting ClickToPlayFixup(ContentSettingsType content_type, |
| - ContentSetting setting) { |
| - if (setting == CONTENT_SETTING_ASK && |
| - content_type == CONTENT_SETTINGS_TYPE_PLUGINS && |
| - !CommandLine::ForCurrentProcess()->HasSwitch( |
| - switches::kEnableClickToPlay)) { |
| - return CONTENT_SETTING_BLOCK; |
| - } |
| - return setting; |
| -} |
| - |
| } // namespace |
| namespace content_settings { |
| -struct PrefProvider::ExtendedContentSettings { |
| - ContentSettings content_settings; |
| - ResourceContentSettings content_settings_for_resources; |
| -}; |
| - |
| PrefDefaultProvider::PrefDefaultProvider(Profile* profile) |
| : profile_(profile), |
| is_off_the_record_(profile_->IsOffTheRecord()), |
| @@ -273,8 +243,9 @@ void PrefDefaultProvider::GetSettingsFromDictionary( |
| settings->settings[CONTENT_SETTINGS_TYPE_COOKIES] = CONTENT_SETTING_BLOCK; |
| settings->settings[CONTENT_SETTINGS_TYPE_PLUGINS] = |
| - ClickToPlayFixup(CONTENT_SETTINGS_TYPE_PLUGINS, |
| - settings->settings[CONTENT_SETTINGS_TYPE_PLUGINS]); |
| + ProviderUtil::ClickToPlayFixup( |
| + CONTENT_SETTINGS_TYPE_PLUGINS, |
| + settings->settings[CONTENT_SETTINGS_TYPE_PLUGINS]); |
| } |
| void PrefDefaultProvider::NotifyObservers( |
| @@ -288,7 +259,6 @@ void PrefDefaultProvider::NotifyObservers( |
| Details<const ContentSettingsDetails>(&details)); |
| } |
| - |
| // static |
| void PrefDefaultProvider::RegisterUserPrefs(PrefService* prefs) { |
| prefs->RegisterDictionaryPref(prefs::kDefaultContentSettings); |
| @@ -310,9 +280,13 @@ void PrefProvider::RegisterUserPrefs(PrefService* prefs) { |
| } |
| PrefProvider::PrefProvider(Profile* profile) |
| - : profile_(profile), |
| - is_off_the_record_(profile_->IsOffTheRecord()), |
| + : BaseProvider(profile->IsOffTheRecord()), |
| + profile_(profile), |
| updating_preferences_(false) { |
| + Init(); |
| +} |
| + |
| +void PrefProvider::Init() { |
| initializing_ = true; |
| PrefService* prefs = profile_->GetPrefs(); |
| @@ -347,81 +321,6 @@ bool PrefProvider::ContentSettingsTypeIsManaged( |
| return false; |
| } |
| -ContentSetting PrefProvider::GetContentSetting( |
| - const GURL& requesting_url, |
| - const GURL& embedding_url, |
| - ContentSettingsType content_type, |
| - const ResourceIdentifier& resource_identifier) const { |
| - // Support for embedding_patterns is not implemented yet. |
| - DCHECK(requesting_url == embedding_url); |
| - |
| - if (!RequiresResourceIdentifier(content_type)) |
| - return GetNonDefaultContentSettings(requesting_url).settings[content_type]; |
| - |
| - if (RequiresResourceIdentifier(content_type) && resource_identifier.empty()) |
| - return CONTENT_SETTING_DEFAULT; |
| - |
| - if (CommandLine::ForCurrentProcess()->HasSwitch( |
| - switches::kEnableResourceContentSettings)) { |
| - DCHECK(!resource_identifier.empty()); |
| - } |
| - |
| - base::AutoLock auto_lock(lock_); |
| - |
| - const std::string host(net::GetHostOrSpecFromURL(requesting_url)); |
| - ContentSettingsTypeResourceIdentifierPair |
| - requested_setting(content_type, resource_identifier); |
| - |
| - // Check for exact matches first. |
| - HostContentSettings::const_iterator i(host_content_settings_.find(host)); |
| - if (i != host_content_settings_.end() && |
| - i->second.content_settings_for_resources.find(requested_setting) != |
| - i->second.content_settings_for_resources.end()) { |
| - return i->second.content_settings_for_resources.find( |
| - requested_setting)->second; |
| - } |
| - |
| - // If this map is not for an off-the-record profile, these searches will never |
| - // match. The additional off-the-record exceptions always overwrite the |
| - // regular ones. |
| - i = off_the_record_settings_.find(host); |
| - if (i != off_the_record_settings_.end() && |
| - i->second.content_settings_for_resources.find(requested_setting) != |
| - i->second.content_settings_for_resources.end()) { |
| - return i->second.content_settings_for_resources.find( |
| - requested_setting)->second; |
| - } |
| - |
| - // Match patterns starting with the most concrete pattern match. |
| - for (std::string key = |
| - std::string(ContentSettingsPattern::kDomainWildcard) + host; ; ) { |
| - HostContentSettings::const_iterator i(off_the_record_settings_.find(key)); |
| - if (i != off_the_record_settings_.end() && |
| - i->second.content_settings_for_resources.find(requested_setting) != |
| - i->second.content_settings_for_resources.end()) { |
| - return i->second.content_settings_for_resources.find( |
| - requested_setting)->second; |
| - } |
| - |
| - i = host_content_settings_.find(key); |
| - if (i != host_content_settings_.end() && |
| - i->second.content_settings_for_resources.find(requested_setting) != |
| - i->second.content_settings_for_resources.end()) { |
| - return i->second.content_settings_for_resources.find( |
| - requested_setting)->second; |
| - } |
| - |
| - const size_t next_dot = |
| - key.find('.', ContentSettingsPattern::kDomainWildcardLength); |
| - if (next_dot == std::string::npos) |
| - break; |
| - key.erase(ContentSettingsPattern::kDomainWildcardLength, |
| - next_dot - ContentSettingsPattern::kDomainWildcardLength + 1); |
| - } |
| - |
| - return CONTENT_SETTING_DEFAULT; |
| -} |
| - |
| void PrefProvider::SetContentSetting( |
| const ContentSettingsPattern& requesting_pattern, |
| const ContentSettingsPattern& embedding_pattern, |
| @@ -447,16 +346,20 @@ void PrefProvider::SetContentSetting( |
| std::string pattern_str(pattern.AsString()); |
| PrefService* prefs = NULL; |
| DictionaryValue* all_settings_dictionary = NULL; |
| - HostContentSettings* map_to_modify = &off_the_record_settings_; |
| - if (!is_off_the_record_) { |
| + |
| + // Select content-settings-map to write to. |
| + HostContentSettings* map_to_modify = off_the_record_settings(); |
| + if (!is_off_the_record()) { |
| prefs = profile_->GetPrefs(); |
| all_settings_dictionary = |
| prefs->GetMutableDictionary(prefs::kContentSettingsPatterns); |
| - map_to_modify = &host_content_settings_; |
| + |
| + map_to_modify = host_content_settings(); |
| } |
| + // Update content-settings-map. |
| { |
| - base::AutoLock auto_lock(lock_); |
| + base::AutoLock auto_lock(lock()); |
| if (!map_to_modify->count(pattern_str)) |
| (*map_to_modify)[pattern_str].content_settings = ContentSettings(); |
| HostContentSettings::iterator i( |
| @@ -482,11 +385,12 @@ void PrefProvider::SetContentSetting( |
| all_settings_dictionary->RemoveWithoutPathExpansion(pattern_str, NULL); |
| // We can't just return because |NotifyObservers()| needs to be called, |
| - // without |lock_| being held. |
| + // without lock() being held. |
| early_exit = true; |
| } |
| } |
| + // Update the content_settings preference. |
| if (!early_exit && all_settings_dictionary) { |
| DictionaryValue* host_settings_dictionary = NULL; |
| bool found = all_settings_dictionary->GetDictionaryWithoutPathExpansion( |
| @@ -526,62 +430,23 @@ void PrefProvider::SetContentSetting( |
| } |
| updating_preferences_ = true; |
| - if (!is_off_the_record_) |
| + if (!is_off_the_record()) |
| ScopedPrefUpdate update(prefs, prefs::kContentSettingsPatterns); |
| updating_preferences_ = false; |
| NotifyObservers(ContentSettingsDetails(pattern, content_type, "")); |
| } |
| -void PrefProvider::GetAllContentSettingsRules( |
| - ContentSettingsType content_type, |
| - const ResourceIdentifier& resource_identifier, |
| - Rules* content_setting_rules) const { |
| - DCHECK(RequiresResourceIdentifier(content_type) != |
| - resource_identifier.empty()); |
| - DCHECK(content_setting_rules); |
| - content_setting_rules->clear(); |
| - |
| - const HostContentSettings* map_to_return = |
| - is_off_the_record_ ? &off_the_record_settings_ : &host_content_settings_; |
| - ContentSettingsTypeResourceIdentifierPair requested_setting( |
| - content_type, resource_identifier); |
| - |
| - base::AutoLock auto_lock(lock_); |
| - for (HostContentSettings::const_iterator i(map_to_return->begin()); |
| - i != map_to_return->end(); ++i) { |
| - ContentSetting setting; |
| - if (RequiresResourceIdentifier(content_type)) { |
| - if (i->second.content_settings_for_resources.find(requested_setting) != |
| - i->second.content_settings_for_resources.end()) { |
| - setting = i->second.content_settings_for_resources.find( |
| - requested_setting)->second; |
| - } else { |
| - setting = CONTENT_SETTING_DEFAULT; |
| - } |
| - } else { |
| - setting = i->second.content_settings.settings[content_type]; |
| - } |
| - if (setting != CONTENT_SETTING_DEFAULT) { |
| - // Use of push_back() relies on the map iterator traversing in order of |
| - // ascending keys. |
| - content_setting_rules->push_back(Rule(ContentSettingsPattern(i->first), |
| - ContentSettingsPattern(i->first), |
| - setting)); |
| - } |
| - } |
| -} |
| - |
| void PrefProvider::ResetToDefaults() { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| { |
| - base::AutoLock auto_lock(lock_); |
| - host_content_settings_.clear(); |
| - off_the_record_settings_.clear(); |
| + base::AutoLock auto_lock(lock()); |
| + host_content_settings()->clear(); |
| + off_the_record_settings()->clear(); |
| } |
| - if (!is_off_the_record_) { |
| + if (!is_off_the_record()) { |
| PrefService* prefs = profile_->GetPrefs(); |
| updating_preferences_ = true; |
| prefs->ClearPref(prefs::kContentSettingsPatterns); |
| @@ -595,22 +460,22 @@ void PrefProvider::ClearAllContentSettingsRules( |
| PrefService* prefs = NULL; |
| DictionaryValue* all_settings_dictionary = NULL; |
| - HostContentSettings* map_to_modify = &off_the_record_settings_; |
| + HostContentSettings* map_to_modify = off_the_record_settings(); |
| - if (!is_off_the_record_) { |
| + if (!is_off_the_record()) { |
| prefs = profile_->GetPrefs(); |
| all_settings_dictionary = |
| prefs->GetMutableDictionary(prefs::kContentSettingsPatterns); |
| - map_to_modify = &host_content_settings_; |
| + map_to_modify = host_content_settings(); |
| } |
| { |
| - base::AutoLock auto_lock(lock_); |
| + base::AutoLock auto_lock(lock()); |
| for (HostContentSettings::iterator i(map_to_modify->begin()); |
| i != map_to_modify->end(); ) { |
| if (RequiresResourceIdentifier(content_type) || |
| i->second.content_settings.settings[content_type] != |
| - CONTENT_SETTING_DEFAULT) { |
| + CONTENT_SETTING_DEFAULT) { |
| if (RequiresResourceIdentifier(content_type)) |
| i->second.content_settings_for_resources.clear(); |
| i->second.content_settings.settings[content_type] = |
| @@ -637,7 +502,7 @@ void PrefProvider::ClearAllContentSettingsRules( |
| } |
| updating_preferences_ = true; |
| - if (!is_off_the_record_) |
| + if (!is_off_the_record()) |
| ScopedPrefUpdate update(prefs, prefs::kContentSettingsPatterns); |
| updating_preferences_ = false; |
| @@ -664,7 +529,7 @@ void PrefProvider::Observe( |
| return; |
| } |
| - if (!is_off_the_record_) { |
| + if (!is_off_the_record()) { |
| NotifyObservers(ContentSettingsDetails(ContentSettingsPattern(), |
| CONTENT_SETTINGS_TYPE_DEFAULT, |
| "")); |
| @@ -684,34 +549,15 @@ PrefProvider::~PrefProvider() { |
| // //////////////////////////////////////////////////////////////////////////// |
| // Private |
| -bool PrefProvider::RequiresResourceIdentifier( |
| - ContentSettingsType content_type) const { |
| - if (CommandLine::ForCurrentProcess()->HasSwitch( |
| - switches::kEnableResourceContentSettings)) { |
| - return kRequiresResourceIdentifier[content_type]; |
| - } else { |
| - return false; |
| - } |
| -} |
| - |
| -bool PrefProvider::AllDefault( |
| - const ExtendedContentSettings& settings) const { |
| - for (size_t i = 0; i < arraysize(settings.content_settings.settings); ++i) { |
| - if (settings.content_settings.settings[i] != CONTENT_SETTING_DEFAULT) |
| - return false; |
| - } |
| - return settings.content_settings_for_resources.empty(); |
| -} |
| - |
| void PrefProvider::ReadExceptions(bool overwrite) { |
| - base::AutoLock lock(lock_); |
| + base::AutoLock auto_lock(lock()); |
| PrefService* prefs = profile_->GetPrefs(); |
| DictionaryValue* all_settings_dictionary = |
| prefs->GetMutableDictionary(prefs::kContentSettingsPatterns); |
| if (overwrite) |
| - host_content_settings_.clear(); |
| + host_content_settings()->clear(); |
| // Careful: The returned value could be NULL if the pref has never been set. |
| if (all_settings_dictionary != NULL) { |
| @@ -729,10 +575,10 @@ void PrefProvider::ReadExceptions(bool overwrite) { |
| DCHECK(found); |
| ContentSettings settings; |
| GetSettingsFromDictionary(pattern_settings_dictionary, &settings); |
| - host_content_settings_[pattern].content_settings = settings; |
| + (*host_content_settings())[pattern].content_settings = settings; |
| GetResourceSettingsFromDictionary( |
| pattern_settings_dictionary, |
| - &host_content_settings_[pattern].content_settings_for_resources); |
| + &(*host_content_settings())[pattern].content_settings_for_resources); |
|
Bernhard Bauer
2011/02/14 16:58:36
This just looks wrong ;-)
Could you declare a loc
markusheintz_
2011/02/14 18:25:28
Done :-) with slight variation.
|
| } |
| } |
| } |
| @@ -804,8 +650,9 @@ void PrefProvider::GetSettingsFromDictionary( |
| settings->settings[CONTENT_SETTINGS_TYPE_COOKIES] = CONTENT_SETTING_BLOCK; |
| settings->settings[CONTENT_SETTINGS_TYPE_PLUGINS] = |
| - ClickToPlayFixup(CONTENT_SETTINGS_TYPE_PLUGINS, |
| - settings->settings[CONTENT_SETTINGS_TYPE_PLUGINS]); |
| + ProviderUtil::ClickToPlayFixup( |
| + CONTENT_SETTINGS_TYPE_PLUGINS, |
| + settings->settings[CONTENT_SETTINGS_TYPE_PLUGINS]); |
| } |
| void PrefProvider::GetResourceSettingsFromDictionary( |
| @@ -830,8 +677,8 @@ void PrefProvider::GetResourceSettingsFromDictionary( |
| DCHECK(found); |
| (*settings)[ContentSettingsTypeResourceIdentifierPair( |
| ContentSettingsType(type), resource_identifier)] = |
| - ClickToPlayFixup(ContentSettingsType(type), |
| - ContentSetting(setting)); |
| + ProviderUtil::ClickToPlayFixup(ContentSettingsType(type), |
| + ContentSetting(setting)); |
| } |
| break; |
| @@ -911,60 +758,4 @@ void PrefProvider::MigrateObsoletePopupsPref(PrefService* prefs) { |
| } |
| } |
| -// //////////////////////////////////////////////////////////////////////////// |
| -// LEGACY TBR |
| -// |
| - |
| -ContentSettings PrefProvider::GetNonDefaultContentSettings( |
| - const GURL& url) const { |
| - base::AutoLock auto_lock(lock_); |
| - |
| - const std::string host(net::GetHostOrSpecFromURL(url)); |
| - ContentSettings output; |
| - for (int j = 0; j < CONTENT_SETTINGS_NUM_TYPES; ++j) |
| - output.settings[j] = CONTENT_SETTING_DEFAULT; |
| - |
| - // Check for exact matches first. |
| - HostContentSettings::const_iterator i(host_content_settings_.find(host)); |
| - if (i != host_content_settings_.end()) |
| - output = i->second.content_settings; |
| - |
| - // If this map is not for an off-the-record profile, these searches will never |
| - // match. The additional off-the-record exceptions always overwrite the |
| - // regular ones. |
| - i = off_the_record_settings_.find(host); |
| - if (i != off_the_record_settings_.end()) { |
| - for (int j = 0; j < CONTENT_SETTINGS_NUM_TYPES; ++j) |
| - if (i->second.content_settings.settings[j] != CONTENT_SETTING_DEFAULT) |
| - output.settings[j] = i->second.content_settings.settings[j]; |
| - } |
| - |
| - // Match patterns starting with the most concrete pattern match. |
| - for (std::string key = |
| - std::string(ContentSettingsPattern::kDomainWildcard) + host; ; ) { |
| - HostContentSettings::const_iterator i(off_the_record_settings_.find(key)); |
| - if (i != off_the_record_settings_.end()) { |
| - for (int j = 0; j < CONTENT_SETTINGS_NUM_TYPES; ++j) { |
| - if (output.settings[j] == CONTENT_SETTING_DEFAULT) |
| - output.settings[j] = i->second.content_settings.settings[j]; |
| - } |
| - } |
| - i = host_content_settings_.find(key); |
| - if (i != host_content_settings_.end()) { |
| - for (int j = 0; j < CONTENT_SETTINGS_NUM_TYPES; ++j) { |
| - if (output.settings[j] == CONTENT_SETTING_DEFAULT) |
| - output.settings[j] = i->second.content_settings.settings[j]; |
| - } |
| - } |
| - const size_t next_dot = |
| - key.find('.', ContentSettingsPattern::kDomainWildcardLength); |
| - if (next_dot == std::string::npos) |
| - break; |
| - key.erase(ContentSettingsPattern::kDomainWildcardLength, |
| - next_dot - ContentSettingsPattern::kDomainWildcardLength + 1); |
| - } |
| - |
| - return output; |
| -} |
| - |
| } // namespace content_settings |