Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/content_settings/content_settings_pref_provider.h" | 5 #include "chrome/browser/content_settings/content_settings_pref_provider.h" |
| 6 | 6 |
| 7 #include <list> | 7 #include <list> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/auto_reset.h" | |
| 12 #include "base/command_line.h" | 13 #include "base/command_line.h" |
| 13 #include "base/metrics/histogram.h" | 14 #include "base/metrics/histogram.h" |
| 14 #include "chrome/browser/content_settings/content_settings_details.h" | 15 #include "chrome/browser/content_settings/content_settings_details.h" |
| 15 #include "chrome/browser/content_settings/content_settings_pattern.h" | 16 #include "chrome/browser/content_settings/content_settings_pattern.h" |
| 16 #include "chrome/browser/content_settings/content_settings_utils.h" | 17 #include "chrome/browser/content_settings/content_settings_utils.h" |
| 17 #include "chrome/browser/prefs/pref_service.h" | 18 #include "chrome/browser/prefs/pref_service.h" |
| 18 #include "chrome/browser/prefs/scoped_user_pref_update.h" | 19 #include "chrome/browser/prefs/scoped_user_pref_update.h" |
| 19 #include "chrome/browser/profiles/profile.h" | 20 #include "chrome/browser/profiles/profile.h" |
| 20 #include "chrome/common/chrome_switches.h" | 21 #include "chrome/common/chrome_switches.h" |
| 21 #include "chrome/common/content_settings.h" | 22 #include "chrome/common/content_settings.h" |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 141 setting == CONTENT_SETTING_ASK) { | 142 setting == CONTENT_SETTING_ASK) { |
| 142 return CONTENT_SETTING_BLOCK; | 143 return CONTENT_SETTING_BLOCK; |
| 143 } | 144 } |
| 144 return setting; | 145 return setting; |
| 145 } | 146 } |
| 146 | 147 |
| 147 } // namespace | 148 } // namespace |
| 148 | 149 |
| 149 namespace content_settings { | 150 namespace content_settings { |
| 150 | 151 |
| 151 PrefDefaultProvider::PrefDefaultProvider(Profile* profile) | 152 PrefDefaultProvider::PrefDefaultProvider(HostContentSettingsMap* map, |
| 152 : profile_(profile), | 153 PrefService* prefs, |
| 153 is_incognito_(profile_->IsOffTheRecord()), | 154 bool incognito) |
| 155 : map_(map), | |
| 156 prefs_(prefs), | |
| 157 is_incognito_(incognito), | |
| 154 updating_preferences_(false) { | 158 updating_preferences_(false) { |
| 155 initializing_ = true; | 159 MigrateObsoleteNotificationPref(); |
| 156 PrefService* prefs = profile->GetPrefs(); | |
| 157 | |
| 158 MigrateObsoleteNotificationPref(prefs); | |
| 159 | 160 |
| 160 // Read global defaults. | 161 // Read global defaults. |
| 161 DCHECK_EQ(arraysize(kTypeNames), | 162 DCHECK_EQ(arraysize(kTypeNames), |
| 162 static_cast<size_t>(CONTENT_SETTINGS_NUM_TYPES)); | 163 static_cast<size_t>(CONTENT_SETTINGS_NUM_TYPES)); |
| 163 ReadDefaultSettings(true); | 164 ReadDefaultSettings(true); |
| 164 if (default_content_settings_.settings[CONTENT_SETTINGS_TYPE_COOKIES] == | 165 if (default_content_settings_.settings[CONTENT_SETTINGS_TYPE_COOKIES] == |
| 165 CONTENT_SETTING_BLOCK) { | 166 CONTENT_SETTING_BLOCK) { |
| 166 UserMetrics::RecordAction( | 167 UserMetrics::RecordAction( |
| 167 UserMetricsAction("CookieBlockingEnabledPerDefault")); | 168 UserMetricsAction("CookieBlockingEnabledPerDefault")); |
| 168 } else { | 169 } else { |
| 169 UserMetrics::RecordAction( | 170 UserMetrics::RecordAction( |
| 170 UserMetricsAction("CookieBlockingDisabledPerDefault")); | 171 UserMetricsAction("CookieBlockingDisabledPerDefault")); |
| 171 } | 172 } |
| 172 | 173 |
| 173 pref_change_registrar_.Init(prefs); | 174 pref_change_registrar_.Init(prefs_); |
| 174 pref_change_registrar_.Add(prefs::kDefaultContentSettings, this); | 175 pref_change_registrar_.Add(prefs::kDefaultContentSettings, this); |
| 175 notification_registrar_.Add(this, NotificationType::PROFILE_DESTROYED, | |
| 176 Source<Profile>(profile_)); | |
| 177 initializing_ = false; | |
| 178 } | 176 } |
| 179 | 177 |
| 180 PrefDefaultProvider::~PrefDefaultProvider() { | 178 PrefDefaultProvider::~PrefDefaultProvider() { |
| 181 UnregisterObservers(); | 179 DCHECK(!prefs_); |
| 182 } | 180 } |
| 183 | 181 |
| 184 ContentSetting PrefDefaultProvider::ProvideDefaultSetting( | 182 ContentSetting PrefDefaultProvider::ProvideDefaultSetting( |
| 185 ContentSettingsType content_type) const { | 183 ContentSettingsType content_type) const { |
| 186 base::AutoLock lock(lock_); | 184 base::AutoLock lock(lock_); |
| 187 return default_content_settings_.settings[content_type]; | 185 return default_content_settings_.settings[content_type]; |
| 188 } | 186 } |
| 189 | 187 |
| 190 void PrefDefaultProvider::UpdateDefaultSetting( | 188 void PrefDefaultProvider::UpdateDefaultSetting( |
| 191 ContentSettingsType content_type, | 189 ContentSettingsType content_type, |
| 192 ContentSetting setting) { | 190 ContentSetting setting) { |
| 193 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 191 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 194 DCHECK(kTypeNames[content_type] != NULL); // Don't call this for Geolocation. | 192 DCHECK(kTypeNames[content_type] != NULL); // Don't call this for Geolocation. |
| 195 | 193 |
| 196 // The default settings may not be directly modified for OTR sessions. | 194 // The default settings may not be directly modified for OTR sessions. |
| 197 // Instead, they are synced to the main profile's setting. | 195 // Instead, they are synced to the main profile's setting. |
| 198 if (is_incognito_) | 196 if (is_incognito_) |
| 199 return; | 197 return; |
| 200 | 198 |
| 201 PrefService* prefs = profile_->GetPrefs(); | |
| 202 | |
| 203 std::string dictionary_path(kTypeNames[content_type]); | 199 std::string dictionary_path(kTypeNames[content_type]); |
| 204 updating_preferences_ = true; | 200 updating_preferences_ = true; |
| 205 { | 201 { |
| 206 base::AutoLock lock(lock_); | 202 base::AutoLock lock(lock_); |
| 207 DictionaryPrefUpdate update(prefs, prefs::kDefaultContentSettings); | 203 DictionaryPrefUpdate update(prefs_, prefs::kDefaultContentSettings); |
| 208 DictionaryValue* default_settings_dictionary = update.Get(); | 204 DictionaryValue* default_settings_dictionary = update.Get(); |
| 209 if ((setting == CONTENT_SETTING_DEFAULT) || | 205 if ((setting == CONTENT_SETTING_DEFAULT) || |
| 210 (setting == kDefaultSettings[content_type])) { | 206 (setting == kDefaultSettings[content_type])) { |
| 211 default_content_settings_.settings[content_type] = | 207 default_content_settings_.settings[content_type] = |
| 212 kDefaultSettings[content_type]; | 208 kDefaultSettings[content_type]; |
| 213 default_settings_dictionary->RemoveWithoutPathExpansion(dictionary_path, | 209 default_settings_dictionary->RemoveWithoutPathExpansion(dictionary_path, |
| 214 NULL); | 210 NULL); |
| 215 } else { | 211 } else { |
| 216 default_content_settings_.settings[content_type] = setting; | 212 default_content_settings_.settings[content_type] = setting; |
| 217 default_settings_dictionary->SetWithoutPathExpansion( | 213 default_settings_dictionary->SetWithoutPathExpansion( |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 233 return false; | 229 return false; |
| 234 } | 230 } |
| 235 | 231 |
| 236 void PrefDefaultProvider::ResetToDefaults() { | 232 void PrefDefaultProvider::ResetToDefaults() { |
| 237 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 233 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 238 base::AutoLock lock(lock_); | 234 base::AutoLock lock(lock_); |
| 239 default_content_settings_ = ContentSettings(); | 235 default_content_settings_ = ContentSettings(); |
| 240 ForceDefaultsToBeExplicit(); | 236 ForceDefaultsToBeExplicit(); |
| 241 | 237 |
| 242 if (!is_incognito_) { | 238 if (!is_incognito_) { |
| 243 PrefService* prefs = profile_->GetPrefs(); | |
| 244 updating_preferences_ = true; | 239 updating_preferences_ = true; |
| 245 prefs->ClearPref(prefs::kDefaultContentSettings); | 240 prefs_->ClearPref(prefs::kDefaultContentSettings); |
| 246 updating_preferences_ = false; | 241 updating_preferences_ = false; |
| 247 } | 242 } |
| 248 } | 243 } |
| 249 | 244 |
| 250 void PrefDefaultProvider::Observe(NotificationType type, | 245 void PrefDefaultProvider::Observe(NotificationType type, |
| 251 const NotificationSource& source, | 246 const NotificationSource& source, |
| 252 const NotificationDetails& details) { | 247 const NotificationDetails& details) { |
| 253 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 248 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 254 | 249 |
| 255 if (type == NotificationType::PREF_CHANGED) { | 250 if (type == NotificationType::PREF_CHANGED) { |
| 256 DCHECK_EQ(profile_->GetPrefs(), Source<PrefService>(source).ptr()); | 251 DCHECK_EQ(prefs_, Source<PrefService>(source).ptr()); |
| 257 if (updating_preferences_) | 252 if (updating_preferences_) |
| 258 return; | 253 return; |
| 259 | 254 |
| 260 std::string* name = Details<std::string>(details).ptr(); | 255 std::string* name = Details<std::string>(details).ptr(); |
| 261 if (*name == prefs::kDefaultContentSettings) { | 256 if (*name == prefs::kDefaultContentSettings) { |
| 262 ReadDefaultSettings(true); | 257 ReadDefaultSettings(true); |
| 263 } else { | 258 } else { |
| 264 NOTREACHED() << "Unexpected preference observed"; | 259 NOTREACHED() << "Unexpected preference observed"; |
| 265 return; | 260 return; |
| 266 } | 261 } |
| 267 | 262 |
| 268 if (!is_incognito_) { | 263 ContentSettingsDetails details(ContentSettingsPattern(), |
| 269 ContentSettingsDetails details(ContentSettingsPattern(), | 264 ContentSettingsPattern(), |
| 270 ContentSettingsPattern(), | 265 CONTENT_SETTINGS_TYPE_DEFAULT, |
| 271 CONTENT_SETTINGS_TYPE_DEFAULT, | 266 std::string()); |
| 272 std::string()); | 267 NotifyObservers(details); |
| 273 NotifyObservers(details); | |
| 274 } | |
| 275 } else if (type == NotificationType::PROFILE_DESTROYED) { | |
| 276 DCHECK_EQ(profile_, Source<Profile>(source).ptr()); | |
| 277 UnregisterObservers(); | |
| 278 } else { | 268 } else { |
| 279 NOTREACHED() << "Unexpected notification"; | 269 NOTREACHED() << "Unexpected notification"; |
| 280 } | 270 } |
| 281 } | 271 } |
| 282 | 272 |
| 283 void PrefDefaultProvider::UnregisterObservers() { | 273 void PrefDefaultProvider::ShutdownOnUIThread() { |
| 274 if (!prefs_) | |
| 275 return; | |
| 284 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 276 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 285 if (!profile_) | |
| 286 return; | |
| 287 pref_change_registrar_.RemoveAll(); | 277 pref_change_registrar_.RemoveAll(); |
| 288 notification_registrar_.Remove(this, NotificationType::PROFILE_DESTROYED, | 278 prefs_ = NULL; |
| 289 Source<Profile>(profile_)); | 279 map_ = NULL; |
| 290 profile_ = NULL; | |
| 291 } | 280 } |
| 292 | 281 |
| 293 void PrefDefaultProvider::ReadDefaultSettings(bool overwrite) { | 282 void PrefDefaultProvider::ReadDefaultSettings(bool overwrite) { |
| 294 PrefService* prefs = profile_->GetPrefs(); | |
| 295 const DictionaryValue* default_settings_dictionary = | 283 const DictionaryValue* default_settings_dictionary = |
| 296 prefs->GetDictionary(prefs::kDefaultContentSettings); | 284 prefs_->GetDictionary(prefs::kDefaultContentSettings); |
| 297 | 285 |
| 298 base::AutoLock lock(lock_); | 286 base::AutoLock lock(lock_); |
| 299 | 287 |
| 300 if (overwrite) | 288 if (overwrite) |
| 301 default_content_settings_ = ContentSettings(); | 289 default_content_settings_ = ContentSettings(); |
| 302 | 290 |
| 303 // Careful: The returned value could be NULL if the pref has never been set. | 291 // Careful: The returned value could be NULL if the pref has never been set. |
| 304 if (default_settings_dictionary != NULL) { | 292 if (default_settings_dictionary != NULL) { |
| 305 GetSettingsFromDictionary(default_settings_dictionary, | 293 GetSettingsFromDictionary(default_settings_dictionary, |
| 306 &default_content_settings_); | 294 &default_content_settings_); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 341 settings->settings[CONTENT_SETTINGS_TYPE_COOKIES] = CONTENT_SETTING_BLOCK; | 329 settings->settings[CONTENT_SETTINGS_TYPE_COOKIES] = CONTENT_SETTING_BLOCK; |
| 342 | 330 |
| 343 settings->settings[CONTENT_SETTINGS_TYPE_PLUGINS] = | 331 settings->settings[CONTENT_SETTINGS_TYPE_PLUGINS] = |
| 344 ClickToPlayFixup(CONTENT_SETTINGS_TYPE_PLUGINS, | 332 ClickToPlayFixup(CONTENT_SETTINGS_TYPE_PLUGINS, |
| 345 settings->settings[CONTENT_SETTINGS_TYPE_PLUGINS]); | 333 settings->settings[CONTENT_SETTINGS_TYPE_PLUGINS]); |
| 346 } | 334 } |
| 347 | 335 |
| 348 void PrefDefaultProvider::NotifyObservers( | 336 void PrefDefaultProvider::NotifyObservers( |
| 349 const ContentSettingsDetails& details) { | 337 const ContentSettingsDetails& details) { |
| 350 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 338 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 351 if (initializing_ || profile_ == NULL) | 339 if (map_ == NULL) |
| 352 return; | 340 return; |
| 353 NotificationService::current()->Notify( | 341 NotificationService::current()->Notify( |
| 354 NotificationType::CONTENT_SETTINGS_CHANGED, | 342 NotificationType::CONTENT_SETTINGS_CHANGED, |
| 355 Source<HostContentSettingsMap>(profile_->GetHostContentSettingsMap()), | 343 Source<HostContentSettingsMap>(map_), |
| 356 Details<const ContentSettingsDetails>(&details)); | 344 Details<const ContentSettingsDetails>(&details)); |
| 357 } | 345 } |
| 358 | 346 |
| 359 void PrefDefaultProvider::MigrateObsoleteNotificationPref(PrefService* prefs) { | 347 void PrefDefaultProvider::MigrateObsoleteNotificationPref() { |
| 360 if (prefs->HasPrefPath(prefs::kDesktopNotificationDefaultContentSetting)) { | 348 if (prefs_->HasPrefPath(prefs::kDesktopNotificationDefaultContentSetting)) { |
| 361 ContentSetting setting = IntToContentSetting( | 349 ContentSetting setting = IntToContentSetting( |
| 362 prefs->GetInteger(prefs::kDesktopNotificationDefaultContentSetting)); | 350 prefs_->GetInteger(prefs::kDesktopNotificationDefaultContentSetting)); |
| 363 UpdateDefaultSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, setting); | 351 UpdateDefaultSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, setting); |
| 364 prefs->ClearPref(prefs::kDesktopNotificationDefaultContentSetting); | 352 prefs_->ClearPref(prefs::kDesktopNotificationDefaultContentSetting); |
| 365 } | 353 } |
| 366 } | 354 } |
| 367 | 355 |
| 368 // static | 356 // static |
| 369 void PrefDefaultProvider::RegisterUserPrefs(PrefService* prefs) { | 357 void PrefDefaultProvider::RegisterUserPrefs(PrefService* prefs) { |
| 370 // The registration of the preference prefs::kDefaultContentSettings should | 358 // The registration of the preference prefs::kDefaultContentSettings should |
| 371 // also include the default values for default content settings. This allows | 359 // also include the default values for default content settings. This allows |
| 372 // functional tests to get default content settings by reading the preference | 360 // functional tests to get default content settings by reading the preference |
| 373 // prefs::kDefaultContentSettings via pyauto. | 361 // prefs::kDefaultContentSettings via pyauto. |
| 374 // TODO(markusheintz): Write pyauto hooks for the content settings map as | 362 // TODO(markusheintz): Write pyauto hooks for the content settings map as |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 401 | 389 |
| 402 // Obsolete prefs, for migration: | 390 // Obsolete prefs, for migration: |
| 403 prefs->RegisterDictionaryPref(prefs::kContentSettingsPatterns, | 391 prefs->RegisterDictionaryPref(prefs::kContentSettingsPatterns, |
| 404 PrefService::SYNCABLE_PREF); | 392 PrefService::SYNCABLE_PREF); |
| 405 prefs->RegisterListPref(prefs::kPopupWhitelistedHosts, | 393 prefs->RegisterListPref(prefs::kPopupWhitelistedHosts, |
| 406 PrefService::UNSYNCABLE_PREF); | 394 PrefService::UNSYNCABLE_PREF); |
| 407 prefs->RegisterDictionaryPref(prefs::kPerHostContentSettings, | 395 prefs->RegisterDictionaryPref(prefs::kPerHostContentSettings, |
| 408 PrefService::UNSYNCABLE_PREF); | 396 PrefService::UNSYNCABLE_PREF); |
| 409 } | 397 } |
| 410 | 398 |
| 411 PrefProvider::PrefProvider(Profile* profile) | 399 PrefProvider::PrefProvider(HostContentSettingsMap* map, |
| 412 : profile_(profile), | 400 PrefService* prefs, |
| 413 is_incognito_(profile_->IsOffTheRecord()), | 401 bool incognito) |
| 402 : prefs_(prefs), | |
| 403 map_(map), | |
| 404 is_incognito_(incognito), | |
| 414 updating_preferences_(false) { | 405 updating_preferences_(false) { |
| 415 Init(); | 406 if (!is_incognito_) { |
| 416 } | 407 // Migrate obsolete preferences. |
| 417 | 408 MigrateObsoletePerhostPref(); |
| 418 void PrefProvider::Init() { | 409 MigrateObsoletePopupsPref(); |
| 419 initializing_ = true; | 410 MigrateObsoleteContentSettingsPatternPref(); |
| 420 PrefService* prefs = profile_->GetPrefs(); | 411 } |
| 421 | |
| 422 // Migrate obsolete preferences. | |
| 423 MigrateObsoletePerhostPref(prefs); | |
| 424 MigrateObsoletePopupsPref(prefs); | |
| 425 MigrateObsoleteContentSettingsPatternPref(prefs); | |
| 426 | 412 |
| 427 // Verify preferences version. | 413 // Verify preferences version. |
| 428 if (!prefs->HasPrefPath(prefs::kContentSettingsVersion)) { | 414 if (!prefs_->HasPrefPath(prefs::kContentSettingsVersion)) { |
| 429 prefs->SetInteger(prefs::kContentSettingsVersion, | 415 prefs_->SetInteger(prefs::kContentSettingsVersion, |
| 430 ContentSettingsPattern::kContentSettingsPatternVersion); | 416 ContentSettingsPattern::kContentSettingsPatternVersion); |
| 431 } | 417 } |
| 432 if (prefs->GetInteger(prefs::kContentSettingsVersion) > | 418 if (prefs_->GetInteger(prefs::kContentSettingsVersion) > |
| 433 ContentSettingsPattern::kContentSettingsPatternVersion) { | 419 ContentSettingsPattern::kContentSettingsPatternVersion) { |
| 434 LOG(ERROR) << "Unknown content settings version in preferences."; | 420 LOG(ERROR) << "Unknown content settings version in preferences."; |
| 435 return; | 421 return; |
| 436 } | 422 } |
| 437 | 423 |
| 438 // Read content settings exceptions. | 424 // Read content settings exceptions. |
| 439 ReadContentSettingsFromPref(false); | 425 ReadContentSettingsFromPref(false); |
| 440 | 426 |
| 441 if (!is_incognito_) { | 427 if (!is_incognito_) { |
| 442 UMA_HISTOGRAM_COUNTS("ContentSettings.NumberOfExceptions", | 428 UMA_HISTOGRAM_COUNTS("ContentSettings.NumberOfExceptions", |
| 443 value_map_.size()); | 429 value_map_.size()); |
| 444 } | 430 } |
| 445 | 431 |
| 446 pref_change_registrar_.Init(prefs); | 432 pref_change_registrar_.Init(prefs_); |
| 447 pref_change_registrar_.Add(prefs::kContentSettingsPatterns, this); | 433 pref_change_registrar_.Add(prefs::kContentSettingsPatterns, this); |
| 448 pref_change_registrar_.Add(prefs::kContentSettingsPatternPairs, this); | 434 pref_change_registrar_.Add(prefs::kContentSettingsPatternPairs, this); |
| 449 | |
| 450 notification_registrar_.Add(this, NotificationType::PROFILE_DESTROYED, | |
| 451 Source<Profile>(profile_)); | |
| 452 initializing_ = false; | |
| 453 } | 435 } |
| 454 | 436 |
| 455 ContentSetting PrefProvider::GetContentSetting( | 437 ContentSetting PrefProvider::GetContentSetting( |
| 456 const GURL& primary_url, | 438 const GURL& primary_url, |
| 457 const GURL& secondary_url, | 439 const GURL& secondary_url, |
| 458 ContentSettingsType content_type, | 440 ContentSettingsType content_type, |
| 459 const ResourceIdentifier& resource_identifier) const { | 441 const ResourceIdentifier& resource_identifier) const { |
| 460 // For a |PrefProvider| used in a |HostContentSettingsMap| of a non incognito | 442 // For a |PrefProvider| used in a |HostContentSettingsMap| of a non incognito |
| 461 // profile, this will always return NULL. | 443 // profile, this will always return NULL. |
| 462 // TODO(markusheintz): I don't like this. I'd like to have an | 444 // TODO(markusheintz): I don't like this. I'd like to have an |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 533 map_to_modify->SetValue( | 515 map_to_modify->SetValue( |
| 534 primary_pattern, | 516 primary_pattern, |
| 535 secondary_pattern, | 517 secondary_pattern, |
| 536 content_type, | 518 content_type, |
| 537 resource_identifier, | 519 resource_identifier, |
| 538 Value::CreateIntegerValue(setting)); | 520 Value::CreateIntegerValue(setting)); |
| 539 } | 521 } |
| 540 } | 522 } |
| 541 | 523 |
| 542 // Update the content settings preference. | 524 // Update the content settings preference. |
| 543 if (!is_incognito_ && profile_) { | 525 if (!is_incognito_) { |
| 544 UpdatePref(primary_pattern, | 526 UpdatePref(primary_pattern, |
| 545 secondary_pattern, | 527 secondary_pattern, |
| 546 content_type, | 528 content_type, |
| 547 resource_identifier, | 529 resource_identifier, |
| 548 setting); | 530 setting); |
| 549 } | 531 } |
| 550 | 532 |
| 551 ContentSettingsDetails details( | 533 ContentSettingsDetails details( |
| 552 primary_pattern, secondary_pattern, content_type, std::string()); | 534 primary_pattern, secondary_pattern, content_type, std::string()); |
| 553 NotifyObservers(details); | 535 NotifyObservers(details); |
| 554 } | 536 } |
| 555 | 537 |
| 556 void PrefProvider::ResetToDefaults() { | 538 void PrefProvider::ResetToDefaults() { |
| 557 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 539 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 540 DCHECK(prefs_); | |
| 558 | 541 |
| 559 { | 542 { |
| 560 base::AutoLock auto_lock(lock_); | 543 base::AutoLock auto_lock(lock_); |
| 561 value_map_.clear(); | 544 value_map_.clear(); |
| 562 incognito_value_map_.clear(); | 545 incognito_value_map_.clear(); |
| 563 } | 546 } |
| 564 | 547 |
| 565 if (!is_incognito_) { | 548 if (!is_incognito_) { |
| 566 PrefService* prefs = profile_->GetPrefs(); | |
| 567 updating_preferences_ = true; | 549 updating_preferences_ = true; |
| 568 prefs->ClearPref(prefs::kContentSettingsPatternPairs); | 550 prefs_->ClearPref(prefs::kContentSettingsPatternPairs); |
| 569 prefs->ClearPref(prefs::kContentSettingsPatterns); | 551 prefs_->ClearPref(prefs::kContentSettingsPatterns); |
| 570 updating_preferences_ = false; | 552 updating_preferences_ = false; |
| 571 } | 553 } |
| 572 } | 554 } |
| 573 | 555 |
| 574 void PrefProvider::ClearAllContentSettingsRules( | 556 void PrefProvider::ClearAllContentSettingsRules( |
| 575 ContentSettingsType content_type) { | 557 ContentSettingsType content_type) { |
| 576 DCHECK(kTypeNames[content_type] != NULL); // Don't call this for Geolocation. | 558 DCHECK(kTypeNames[content_type] != NULL); // Don't call this for Geolocation. |
| 559 DCHECK(prefs_); | |
| 577 | 560 |
| 578 OriginIdentifierValueMap* map_to_modify = &incognito_value_map_; | 561 OriginIdentifierValueMap* map_to_modify = &incognito_value_map_; |
| 579 if (!is_incognito_) | 562 if (!is_incognito_) |
| 580 map_to_modify = &value_map_; | 563 map_to_modify = &value_map_; |
| 581 | 564 |
| 582 { | 565 { |
| 583 base::AutoLock auto_lock(lock_); | 566 base::AutoLock auto_lock(lock_); |
| 584 OriginIdentifierValueMap::iterator entry(map_to_modify->begin()); | 567 OriginIdentifierValueMap::iterator entry(map_to_modify->begin()); |
| 585 while (entry != map_to_modify->end()) { | 568 while (entry != map_to_modify->end()) { |
| 586 if (entry->content_type == content_type) { | 569 if (entry->content_type == content_type) { |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 606 NotifyObservers(details); | 589 NotifyObservers(details); |
| 607 } | 590 } |
| 608 | 591 |
| 609 void PrefProvider::Observe( | 592 void PrefProvider::Observe( |
| 610 NotificationType type, | 593 NotificationType type, |
| 611 const NotificationSource& source, | 594 const NotificationSource& source, |
| 612 const NotificationDetails& details) { | 595 const NotificationDetails& details) { |
| 613 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 596 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 614 | 597 |
| 615 if (type == NotificationType::PREF_CHANGED) { | 598 if (type == NotificationType::PREF_CHANGED) { |
| 616 DCHECK_EQ(profile_->GetPrefs(), Source<PrefService>(source).ptr()); | 599 DCHECK_EQ(prefs_, Source<PrefService>(source).ptr()); |
| 617 if (updating_preferences_) | 600 if (updating_preferences_) |
| 618 return; | 601 return; |
| 619 | 602 |
| 620 std::string* name = Details<std::string>(details).ptr(); | 603 std::string* name = Details<std::string>(details).ptr(); |
| 621 if (*name == prefs::kContentSettingsPatternPairs) { | 604 if (*name == prefs::kContentSettingsPatternPairs) { |
| 622 SyncObsoletePref(profile_->GetPrefs()); | 605 SyncObsoletePref(); |
| 623 ReadContentSettingsFromPref(true); | 606 ReadContentSettingsFromPref(true); |
| 624 } else if (*name == prefs::kContentSettingsPatterns) { | 607 } else if (*name == prefs::kContentSettingsPatterns) { |
| 625 updating_preferences_ = true; | 608 AutoReset<bool> tmp(&updating_preferences_, true); |
| 626 MigrateObsoleteContentSettingsPatternPref(profile_->GetPrefs()); | 609 MigrateObsoleteContentSettingsPatternPref(); |
| 627 updating_preferences_ = false; | |
| 628 ReadContentSettingsFromPref(true); | 610 ReadContentSettingsFromPref(true); |
| 629 } else { | 611 } else { |
| 630 NOTREACHED() << "Unexpected preference observed"; | 612 NOTREACHED() << "Unexpected preference observed"; |
| 631 return; | 613 return; |
| 632 } | 614 } |
| 633 | 615 |
| 634 if (!is_incognito_) { | 616 ContentSettingsDetails details(ContentSettingsPattern(), |
| 635 ContentSettingsDetails details(ContentSettingsPattern(), | 617 ContentSettingsPattern(), |
| 636 ContentSettingsPattern(), | 618 CONTENT_SETTINGS_TYPE_DEFAULT, |
| 637 CONTENT_SETTINGS_TYPE_DEFAULT, | 619 std::string()); |
| 638 std::string()); | 620 NotifyObservers(details); |
| 639 NotifyObservers(details); | |
| 640 } | |
| 641 } else if (type == NotificationType::PROFILE_DESTROYED) { | |
| 642 DCHECK_EQ(profile_, Source<Profile>(source).ptr()); | |
| 643 UnregisterObservers(); | |
| 644 } else { | 621 } else { |
| 645 NOTREACHED() << "Unexpected notification"; | 622 NOTREACHED() << "Unexpected notification"; |
| 646 } | 623 } |
| 647 } | 624 } |
| 648 | 625 |
| 649 PrefProvider::~PrefProvider() { | 626 PrefProvider::~PrefProvider() { |
| 650 UnregisterObservers(); | 627 DCHECK(!prefs_); |
| 651 } | 628 } |
| 652 | 629 |
| 653 // //////////////////////////////////////////////////////////////////////////// | 630 // //////////////////////////////////////////////////////////////////////////// |
| 654 // Private | 631 // Private |
| 655 | 632 |
| 656 void PrefProvider::UpdatePref( | 633 void PrefProvider::UpdatePref( |
| 657 const ContentSettingsPattern& primary_pattern, | 634 const ContentSettingsPattern& primary_pattern, |
| 658 const ContentSettingsPattern& secondary_pattern, | 635 const ContentSettingsPattern& secondary_pattern, |
| 659 ContentSettingsType content_type, | 636 ContentSettingsType content_type, |
| 660 const ResourceIdentifier& resource_identifier, | 637 const ResourceIdentifier& resource_identifier, |
| 661 ContentSetting setting) { | 638 ContentSetting setting) { |
| 662 updating_preferences_ = true; | 639 DCHECK(prefs_); |
| 640 AutoReset<bool> tmp(&updating_preferences_, true); | |
| 663 UpdatePatternPairsPref(primary_pattern, | 641 UpdatePatternPairsPref(primary_pattern, |
| 664 secondary_pattern, | 642 secondary_pattern, |
| 665 content_type, | 643 content_type, |
| 666 resource_identifier, | 644 resource_identifier, |
| 667 setting); | 645 setting); |
| 668 UpdatePatternsPref(primary_pattern, | 646 UpdatePatternsPref(primary_pattern, |
| 669 secondary_pattern, | 647 secondary_pattern, |
| 670 content_type, | 648 content_type, |
| 671 resource_identifier, | 649 resource_identifier, |
| 672 setting); | 650 setting); |
| 673 updating_preferences_ = false; | |
| 674 } | 651 } |
| 675 | 652 |
| 676 void PrefProvider::ReadContentSettingsFromPref(bool overwrite) { | 653 void PrefProvider::ReadContentSettingsFromPref(bool overwrite) { |
| 654 DCHECK(prefs_); | |
| 677 base::AutoLock auto_lock(lock_); | 655 base::AutoLock auto_lock(lock_); |
| 678 | 656 |
| 679 PrefService* prefs = profile_->GetPrefs(); | |
| 680 const DictionaryValue* all_settings_dictionary = | 657 const DictionaryValue* all_settings_dictionary = |
| 681 prefs->GetDictionary(prefs::kContentSettingsPatternPairs); | 658 prefs_->GetDictionary(prefs::kContentSettingsPatternPairs); |
| 682 | 659 |
| 683 if (overwrite) | 660 if (overwrite) |
| 684 value_map_.clear(); | 661 value_map_.clear(); |
| 685 | 662 |
| 686 updating_preferences_ = true; | 663 AutoReset<bool> tmp(&updating_preferences_, true); |
| 687 // Careful: The returned value could be NULL if the pref has never been set. | 664 // Careful: The returned value could be NULL if the pref has never been set. |
| 688 if (all_settings_dictionary != NULL) { | 665 if (all_settings_dictionary != NULL) { |
| 689 DictionaryPrefUpdate update(prefs, prefs::kContentSettingsPatternPairs); | 666 DictionaryPrefUpdate update(prefs_, prefs::kContentSettingsPatternPairs); |
| 690 DictionaryValue* mutable_settings; | 667 DictionaryValue* mutable_settings; |
| 691 scoped_ptr<DictionaryValue> mutable_settings_scope; | 668 scoped_ptr<DictionaryValue> mutable_settings_scope; |
| 692 | 669 |
| 693 if (!is_incognito_) { | 670 if (!is_incognito_) { |
| 694 mutable_settings = update.Get(); | 671 mutable_settings = update.Get(); |
| 695 } else { | 672 } else { |
| 696 // Create copy as we do not want to persist anything in OTR prefs. | 673 // Create copy as we do not want to persist anything in OTR prefs. |
| 697 mutable_settings = all_settings_dictionary->DeepCopy(); | 674 mutable_settings = all_settings_dictionary->DeepCopy(); |
| 698 mutable_settings_scope.reset(mutable_settings); | 675 mutable_settings_scope.reset(mutable_settings); |
| 699 } | 676 } |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 766 } | 743 } |
| 767 updating_preferences_ = false; | 744 updating_preferences_ = false; |
| 768 } | 745 } |
| 769 | 746 |
| 770 void PrefProvider::UpdatePatternsPref( | 747 void PrefProvider::UpdatePatternsPref( |
| 771 const ContentSettingsPattern& primary_pattern, | 748 const ContentSettingsPattern& primary_pattern, |
| 772 const ContentSettingsPattern& secondary_pattern, | 749 const ContentSettingsPattern& secondary_pattern, |
| 773 ContentSettingsType content_type, | 750 ContentSettingsType content_type, |
| 774 const ResourceIdentifier& resource_identifier, | 751 const ResourceIdentifier& resource_identifier, |
| 775 ContentSetting setting) { | 752 ContentSetting setting) { |
| 776 DictionaryPrefUpdate update(profile_->GetPrefs(), | 753 DCHECK(prefs_); |
| 754 DictionaryPrefUpdate update(prefs_, | |
| 777 prefs::kContentSettingsPatterns); | 755 prefs::kContentSettingsPatterns); |
| 778 DictionaryValue* all_settings_dictionary = update.Get(); | 756 DictionaryValue* all_settings_dictionary = update.Get(); |
| 779 | 757 |
| 780 // Get settings dictionary for |primary_pattern|. | 758 // Get settings dictionary for |primary_pattern|. |
| 781 std::string pattern_str(primary_pattern.ToString()); | 759 std::string pattern_str(primary_pattern.ToString()); |
| 782 DictionaryValue* settings_dictionary = NULL; | 760 DictionaryValue* settings_dictionary = NULL; |
| 783 bool found = all_settings_dictionary->GetDictionaryWithoutPathExpansion( | 761 bool found = all_settings_dictionary->GetDictionaryWithoutPathExpansion( |
| 784 pattern_str, &settings_dictionary); | 762 pattern_str, &settings_dictionary); |
| 785 | 763 |
| 786 if (!found && (setting != CONTENT_SETTING_DEFAULT)) { | 764 if (!found && (setting != CONTENT_SETTING_DEFAULT)) { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 832 } | 810 } |
| 833 } | 811 } |
| 834 } | 812 } |
| 835 | 813 |
| 836 void PrefProvider::UpdatePatternPairsPref( | 814 void PrefProvider::UpdatePatternPairsPref( |
| 837 const ContentSettingsPattern& primary_pattern, | 815 const ContentSettingsPattern& primary_pattern, |
| 838 const ContentSettingsPattern& secondary_pattern, | 816 const ContentSettingsPattern& secondary_pattern, |
| 839 ContentSettingsType content_type, | 817 ContentSettingsType content_type, |
| 840 const ResourceIdentifier& resource_identifier, | 818 const ResourceIdentifier& resource_identifier, |
| 841 ContentSetting setting) { | 819 ContentSetting setting) { |
| 842 DictionaryPrefUpdate update(profile_->GetPrefs(), | 820 DCHECK(prefs_); |
| 821 DictionaryPrefUpdate update(prefs_, | |
| 843 prefs::kContentSettingsPatternPairs); | 822 prefs::kContentSettingsPatternPairs); |
| 844 DictionaryValue* all_settings_dictionary = update.Get(); | 823 DictionaryValue* all_settings_dictionary = update.Get(); |
| 845 | 824 |
| 846 // Get settings dictionary for the given patterns. | 825 // Get settings dictionary for the given patterns. |
| 847 std::string pattern_str(CreatePatternString(primary_pattern, | 826 std::string pattern_str(CreatePatternString(primary_pattern, |
| 848 secondary_pattern)); | 827 secondary_pattern)); |
| 849 DictionaryValue* settings_dictionary = NULL; | 828 DictionaryValue* settings_dictionary = NULL; |
| 850 bool found = all_settings_dictionary->GetDictionaryWithoutPathExpansion( | 829 bool found = all_settings_dictionary->GetDictionaryWithoutPathExpansion( |
| 851 pattern_str, &settings_dictionary); | 830 pattern_str, &settings_dictionary); |
| 852 | 831 |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 945 all_settings_dictionary->RemoveWithoutPathExpansion( | 924 all_settings_dictionary->RemoveWithoutPathExpansion( |
| 946 move_items[i].first, &pattern_settings_dictionary); | 925 move_items[i].first, &pattern_settings_dictionary); |
| 947 all_settings_dictionary->SetWithoutPathExpansion( | 926 all_settings_dictionary->SetWithoutPathExpansion( |
| 948 move_items[i].second, pattern_settings_dictionary); | 927 move_items[i].second, pattern_settings_dictionary); |
| 949 } | 928 } |
| 950 } | 929 } |
| 951 | 930 |
| 952 void PrefProvider::NotifyObservers( | 931 void PrefProvider::NotifyObservers( |
| 953 const ContentSettingsDetails& details) { | 932 const ContentSettingsDetails& details) { |
| 954 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 933 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 955 if (initializing_ || profile_ == NULL) | 934 if (map_ == NULL) |
| 956 return; | 935 return; |
| 957 NotificationService::current()->Notify( | 936 NotificationService::current()->Notify( |
| 958 NotificationType::CONTENT_SETTINGS_CHANGED, | 937 NotificationType::CONTENT_SETTINGS_CHANGED, |
| 959 Source<HostContentSettingsMap>( | 938 Source<HostContentSettingsMap>(map_), |
| 960 profile_->GetHostContentSettingsMap()), | |
| 961 Details<const ContentSettingsDetails>(&details)); | 939 Details<const ContentSettingsDetails>(&details)); |
| 962 } | 940 } |
| 963 | 941 |
| 964 void PrefProvider::UnregisterObservers() { | 942 void PrefProvider::ShutdownOnUIThread() { |
| 965 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 943 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 966 if (!profile_) | 944 if (!prefs_) |
| 967 return; | 945 return; |
| 968 pref_change_registrar_.RemoveAll(); | 946 pref_change_registrar_.RemoveAll(); |
| 969 notification_registrar_.Remove(this, NotificationType::PROFILE_DESTROYED, | 947 prefs_ = NULL; |
| 970 Source<Profile>(profile_)); | 948 map_ = NULL; |
| 971 profile_ = NULL; | |
| 972 } | 949 } |
| 973 | 950 |
| 974 void PrefProvider::MigrateObsoletePerhostPref(PrefService* prefs) { | 951 void PrefProvider::MigrateObsoletePerhostPref() { |
| 975 if (prefs->HasPrefPath(prefs::kPerHostContentSettings)) { | 952 if (prefs_->HasPrefPath(prefs::kPerHostContentSettings)) { |
| 976 const DictionaryValue* all_settings_dictionary = | 953 const DictionaryValue* all_settings_dictionary = |
| 977 prefs->GetDictionary(prefs::kPerHostContentSettings); | 954 prefs_->GetDictionary(prefs::kPerHostContentSettings); |
| 978 DCHECK(all_settings_dictionary); | 955 DCHECK(all_settings_dictionary); |
| 979 for (DictionaryValue::key_iterator | 956 for (DictionaryValue::key_iterator |
| 980 i(all_settings_dictionary->begin_keys()); | 957 i(all_settings_dictionary->begin_keys()); |
| 981 i != all_settings_dictionary->end_keys(); ++i) { | 958 i != all_settings_dictionary->end_keys(); ++i) { |
| 982 const std::string& host(*i); | 959 const std::string& host(*i); |
| 983 ContentSettingsPattern pattern = | 960 ContentSettingsPattern pattern = |
| 984 ContentSettingsPattern::FromString( | 961 ContentSettingsPattern::FromString( |
| 985 std::string(ContentSettingsPattern::kDomainWildcard) + host); | 962 std::string(ContentSettingsPattern::kDomainWildcard) + host); |
| 986 DictionaryValue* host_settings_dictionary = NULL; | 963 DictionaryValue* host_settings_dictionary = NULL; |
| 987 bool found = all_settings_dictionary->GetDictionaryWithoutPathExpansion( | 964 bool found = all_settings_dictionary->GetDictionaryWithoutPathExpansion( |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1019 SetContentSetting( | 996 SetContentSetting( |
| 1020 pattern, | 997 pattern, |
| 1021 pattern, | 998 pattern, |
| 1022 content_type, | 999 content_type, |
| 1023 "", | 1000 "", |
| 1024 setting); | 1001 setting); |
| 1025 } | 1002 } |
| 1026 } | 1003 } |
| 1027 } | 1004 } |
| 1028 } | 1005 } |
| 1029 prefs->ClearPref(prefs::kPerHostContentSettings); | 1006 prefs_->ClearPref(prefs::kPerHostContentSettings); |
| 1030 } | 1007 } |
| 1031 } | 1008 } |
| 1032 | 1009 |
| 1033 void PrefProvider::MigrateObsoletePopupsPref(PrefService* prefs) { | 1010 void PrefProvider::MigrateObsoletePopupsPref() { |
| 1034 if (prefs->HasPrefPath(prefs::kPopupWhitelistedHosts)) { | 1011 if (prefs_->HasPrefPath(prefs::kPopupWhitelistedHosts)) { |
| 1035 const ListValue* whitelist_pref = | 1012 const ListValue* whitelist_pref = |
| 1036 prefs->GetList(prefs::kPopupWhitelistedHosts); | 1013 prefs_->GetList(prefs::kPopupWhitelistedHosts); |
| 1037 for (ListValue::const_iterator i(whitelist_pref->begin()); | 1014 for (ListValue::const_iterator i(whitelist_pref->begin()); |
| 1038 i != whitelist_pref->end(); ++i) { | 1015 i != whitelist_pref->end(); ++i) { |
| 1039 std::string host; | 1016 std::string host; |
| 1040 (*i)->GetAsString(&host); | 1017 (*i)->GetAsString(&host); |
| 1041 SetContentSetting(ContentSettingsPattern::FromString(host), | 1018 SetContentSetting(ContentSettingsPattern::FromString(host), |
| 1042 ContentSettingsPattern::FromString(host), | 1019 ContentSettingsPattern::FromString(host), |
| 1043 CONTENT_SETTINGS_TYPE_POPUPS, | 1020 CONTENT_SETTINGS_TYPE_POPUPS, |
| 1044 "", | 1021 "", |
| 1045 CONTENT_SETTING_ALLOW); | 1022 CONTENT_SETTING_ALLOW); |
| 1046 } | 1023 } |
| 1047 prefs->ClearPref(prefs::kPopupWhitelistedHosts); | 1024 prefs_->ClearPref(prefs::kPopupWhitelistedHosts); |
| 1048 } | 1025 } |
| 1049 } | 1026 } |
| 1050 | 1027 |
| 1051 void PrefProvider::MigrateObsoleteContentSettingsPatternPref( | 1028 void PrefProvider::MigrateObsoleteContentSettingsPatternPref() { |
| 1052 PrefService* prefs) { | 1029 DCHECK(prefs_); |
| 1053 if (prefs->HasPrefPath(prefs::kContentSettingsPatterns) && | 1030 if (prefs_->HasPrefPath(prefs::kContentSettingsPatterns)) { |
| 1054 !is_incognito_) { | |
| 1055 const DictionaryValue* all_settings_dictionary = | 1031 const DictionaryValue* all_settings_dictionary = |
| 1056 prefs->GetDictionary(prefs::kContentSettingsPatterns); | 1032 prefs_->GetDictionary(prefs::kContentSettingsPatterns); |
| 1057 | 1033 |
| 1058 DictionaryPrefUpdate update(prefs, prefs::kContentSettingsPatternPairs); | 1034 DictionaryPrefUpdate update(prefs_, prefs::kContentSettingsPatternPairs); |
| 1059 DictionaryValue* exceptions_dictionary; | 1035 DictionaryValue* exceptions_dictionary; |
| 1060 exceptions_dictionary = update.Get(); | 1036 exceptions_dictionary = update.Get(); |
| 1061 for (DictionaryValue::key_iterator i(all_settings_dictionary->begin_keys()); | 1037 for (DictionaryValue::key_iterator i(all_settings_dictionary->begin_keys()); |
| 1062 i != all_settings_dictionary->end_keys(); | 1038 i != all_settings_dictionary->end_keys(); |
| 1063 ++i) { | 1039 ++i) { |
| 1064 const std::string& key(*i); | 1040 const std::string& key(*i); |
| 1065 | 1041 |
| 1066 // Validate pattern string and skip it if it is invalid. | 1042 // Validate pattern string and skip it if it is invalid. |
| 1067 std::pair<ContentSettingsPattern, ContentSettingsPattern> pattern_pair = | 1043 std::pair<ContentSettingsPattern, ContentSettingsPattern> pattern_pair = |
| 1068 ParsePatternString(key); | 1044 ParsePatternString(key); |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 1081 std::string new_pattern_str = CreatePatternString( | 1057 std::string new_pattern_str = CreatePatternString( |
| 1082 primary_pattern, ContentSettingsPattern::Wildcard()); | 1058 primary_pattern, ContentSettingsPattern::Wildcard()); |
| 1083 | 1059 |
| 1084 // Existing values are overwritten. | 1060 // Existing values are overwritten. |
| 1085 exceptions_dictionary->SetWithoutPathExpansion( | 1061 exceptions_dictionary->SetWithoutPathExpansion( |
| 1086 new_pattern_str, dictionary->DeepCopy()); | 1062 new_pattern_str, dictionary->DeepCopy()); |
| 1087 } | 1063 } |
| 1088 } | 1064 } |
| 1089 } | 1065 } |
| 1090 | 1066 |
| 1091 void PrefProvider::SyncObsoletePref(PrefService* prefs) { | 1067 void PrefProvider::SyncObsoletePref() { |
| 1092 updating_preferences_ = true; | 1068 DCHECK(prefs_); |
| 1093 if (prefs->HasPrefPath(prefs::kContentSettingsPatternPairs) && | 1069 AutoReset<bool> tmp(&updating_preferences_, true); |
|
markusheintz_
2011/07/06 15:56:24
This is up to you:
Could we use a more descriptive
| |
| 1070 if (prefs_->HasPrefPath(prefs::kContentSettingsPatternPairs) && | |
| 1094 !is_incognito_) { | 1071 !is_incognito_) { |
| 1095 const DictionaryValue* pattern_pairs_dictionary = | 1072 const DictionaryValue* pattern_pairs_dictionary = |
| 1096 prefs->GetDictionary(prefs::kContentSettingsPatternPairs); | 1073 prefs_->GetDictionary(prefs::kContentSettingsPatternPairs); |
| 1097 | 1074 |
| 1098 DictionaryPrefUpdate update(prefs, prefs::kContentSettingsPatterns); | 1075 DictionaryPrefUpdate update(prefs_, prefs::kContentSettingsPatterns); |
| 1099 DictionaryValue* obsolete_settings_dictionary = update.Get(); | 1076 DictionaryValue* obsolete_settings_dictionary = update.Get(); |
| 1100 | 1077 |
| 1101 for (DictionaryValue::key_iterator i = | 1078 for (DictionaryValue::key_iterator i = |
| 1102 pattern_pairs_dictionary->begin_keys(); | 1079 pattern_pairs_dictionary->begin_keys(); |
| 1103 i != pattern_pairs_dictionary->end_keys(); | 1080 i != pattern_pairs_dictionary->end_keys(); |
| 1104 ++i) { | 1081 ++i) { |
| 1105 const std::string& key(*i); | 1082 const std::string& key(*i); |
| 1106 // Validate pattern string and skip it if it is invalid. | 1083 // Validate pattern string and skip it if it is invalid. |
| 1107 std::pair<ContentSettingsPattern, ContentSettingsPattern> pattern_pair = | 1084 std::pair<ContentSettingsPattern, ContentSettingsPattern> pattern_pair = |
| 1108 ParsePatternString(key); | 1085 ParsePatternString(key); |
| 1109 if (!pattern_pair.first.IsValid() || !pattern_pair.second.IsValid()) | 1086 if (!pattern_pair.first.IsValid() || !pattern_pair.second.IsValid()) |
| 1110 continue; | 1087 continue; |
| 1111 | 1088 |
| 1112 // Copy dictionary | 1089 // Copy dictionary |
| 1113 DictionaryValue* dictionary = NULL; | 1090 DictionaryValue* dictionary = NULL; |
| 1114 bool found = pattern_pairs_dictionary->GetDictionaryWithoutPathExpansion( | 1091 bool found = pattern_pairs_dictionary->GetDictionaryWithoutPathExpansion( |
| 1115 key, &dictionary); | 1092 key, &dictionary); |
| 1116 DCHECK(found); | 1093 DCHECK(found); |
| 1117 std::string new_key = pattern_pair.first.ToString(); | 1094 std::string new_key = pattern_pair.first.ToString(); |
| 1118 // Existing values are overwritten. | 1095 // Existing values are overwritten. |
| 1119 obsolete_settings_dictionary->SetWithoutPathExpansion( | 1096 obsolete_settings_dictionary->SetWithoutPathExpansion( |
| 1120 new_key, dictionary->DeepCopy()); | 1097 new_key, dictionary->DeepCopy()); |
| 1121 } | 1098 } |
| 1122 } | 1099 } |
| 1123 updating_preferences_ = false; | |
| 1124 } | 1100 } |
| 1125 | 1101 |
| 1126 } // namespace content_settings | 1102 } // namespace content_settings |
| OLD | NEW |