| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "components/content_settings/core/browser/content_settings_pref.h" | 5 #include "components/content_settings/core/browser/content_settings_pref.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> |
| 8 | 9 |
| 9 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
| 10 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/memory/ptr_util.h" |
| 11 #include "base/metrics/histogram_macros.h" | 13 #include "base/metrics/histogram_macros.h" |
| 12 #include "base/strings/string_split.h" | 14 #include "base/strings/string_split.h" |
| 15 #include "base/values.h" |
| 13 #include "components/content_settings/core/browser/content_settings_info.h" | 16 #include "components/content_settings/core/browser/content_settings_info.h" |
| 14 #include "components/content_settings/core/browser/content_settings_registry.h" | 17 #include "components/content_settings/core/browser/content_settings_registry.h" |
| 15 #include "components/content_settings/core/browser/content_settings_rule.h" | 18 #include "components/content_settings/core/browser/content_settings_rule.h" |
| 16 #include "components/content_settings/core/browser/content_settings_utils.h" | 19 #include "components/content_settings/core/browser/content_settings_utils.h" |
| 17 #include "components/content_settings/core/browser/host_content_settings_map.h" | 20 #include "components/content_settings/core/browser/host_content_settings_map.h" |
| 18 #include "components/content_settings/core/common/content_settings.h" | 21 #include "components/content_settings/core/common/content_settings.h" |
| 19 #include "components/content_settings/core/common/content_settings_pattern.h" | 22 #include "components/content_settings/core/common/content_settings_pattern.h" |
| 20 #include "components/content_settings/core/common/pref_names.h" | 23 #include "components/content_settings/core/common/pref_names.h" |
| 21 #include "components/prefs/scoped_user_pref_update.h" | 24 #include "components/prefs/scoped_user_pref_update.h" |
| 22 #include "url/gurl.h" | 25 #include "url/gurl.h" |
| (...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 332 base::DictionaryValue* pattern_pairs_settings = update.Get(); | 335 base::DictionaryValue* pattern_pairs_settings = update.Get(); |
| 333 | 336 |
| 334 // Get settings dictionary for the given patterns. | 337 // Get settings dictionary for the given patterns. |
| 335 std::string pattern_str(CreatePatternString(primary_pattern, | 338 std::string pattern_str(CreatePatternString(primary_pattern, |
| 336 secondary_pattern)); | 339 secondary_pattern)); |
| 337 base::DictionaryValue* settings_dictionary = NULL; | 340 base::DictionaryValue* settings_dictionary = NULL; |
| 338 bool found = pattern_pairs_settings->GetDictionaryWithoutPathExpansion( | 341 bool found = pattern_pairs_settings->GetDictionaryWithoutPathExpansion( |
| 339 pattern_str, &settings_dictionary); | 342 pattern_str, &settings_dictionary); |
| 340 | 343 |
| 341 if (!found && value) { | 344 if (!found && value) { |
| 342 settings_dictionary = new base::DictionaryValue; | |
| 343 pattern_pairs_settings->SetWithoutPathExpansion( | 345 pattern_pairs_settings->SetWithoutPathExpansion( |
| 344 pattern_str, settings_dictionary); | 346 pattern_str, base::MakeUnique<base::DictionaryValue>()); |
| 347 pattern_pairs_settings->GetDictionaryWithoutPathExpansion( |
| 348 pattern_str, &settings_dictionary); |
| 345 } | 349 } |
| 346 | 350 |
| 347 if (settings_dictionary) { | 351 if (settings_dictionary) { |
| 348 if (SupportsResourceIdentifiers(content_type_) && | 352 if (SupportsResourceIdentifiers(content_type_) && |
| 349 !resource_identifier.empty()) { | 353 !resource_identifier.empty()) { |
| 350 base::DictionaryValue* resource_dictionary = NULL; | 354 base::DictionaryValue* resource_dictionary = NULL; |
| 351 found = settings_dictionary->GetDictionary( | 355 found = settings_dictionary->GetDictionary( |
| 352 kPerResourceIdentifierPrefName, &resource_dictionary); | 356 kPerResourceIdentifierPrefName, &resource_dictionary); |
| 353 if (!found) { | 357 if (!found) { |
| 354 if (value == NULL) | 358 if (value == NULL) |
| 355 return; // Nothing to remove. Exit early. | 359 return; // Nothing to remove. Exit early. |
| 356 resource_dictionary = new base::DictionaryValue; | 360 resource_dictionary = new base::DictionaryValue; |
| 357 settings_dictionary->Set( | 361 settings_dictionary->Set( |
| 358 kPerResourceIdentifierPrefName, resource_dictionary); | 362 kPerResourceIdentifierPrefName, resource_dictionary); |
| 359 } | 363 } |
| 360 // Update resource dictionary. | 364 // Update resource dictionary. |
| 361 if (value == NULL) { | 365 if (value == NULL) { |
| 362 resource_dictionary->RemoveWithoutPathExpansion(resource_identifier, | 366 resource_dictionary->RemoveWithoutPathExpansion(resource_identifier, |
| 363 NULL); | 367 NULL); |
| 364 if (resource_dictionary->empty()) { | 368 if (resource_dictionary->empty()) { |
| 365 settings_dictionary->RemoveWithoutPathExpansion( | 369 settings_dictionary->RemoveWithoutPathExpansion( |
| 366 kPerResourceIdentifierPrefName, NULL); | 370 kPerResourceIdentifierPrefName, NULL); |
| 367 } | 371 } |
| 368 } else { | 372 } else { |
| 369 resource_dictionary->SetWithoutPathExpansion( | 373 resource_dictionary->SetWithoutPathExpansion(resource_identifier, |
| 370 resource_identifier, value->DeepCopy()); | 374 value->CreateDeepCopy()); |
| 371 } | 375 } |
| 372 } else { | 376 } else { |
| 373 // Update settings dictionary. | 377 // Update settings dictionary. |
| 374 if (value == NULL) { | 378 if (value == NULL) { |
| 375 settings_dictionary->RemoveWithoutPathExpansion(kSettingPath, NULL); | 379 settings_dictionary->RemoveWithoutPathExpansion(kSettingPath, NULL); |
| 376 } else { | 380 } else { |
| 377 settings_dictionary->SetWithoutPathExpansion( | 381 settings_dictionary->SetWithoutPathExpansion(kSettingPath, |
| 378 kSettingPath, value->DeepCopy()); | 382 value->CreateDeepCopy()); |
| 379 } | 383 } |
| 380 } | 384 } |
| 381 // Remove the settings dictionary if it is empty. | 385 // Remove the settings dictionary if it is empty. |
| 382 if (settings_dictionary->empty()) { | 386 if (settings_dictionary->empty()) { |
| 383 pattern_pairs_settings->RemoveWithoutPathExpansion( | 387 pattern_pairs_settings->RemoveWithoutPathExpansion( |
| 384 pattern_str, NULL); | 388 pattern_str, NULL); |
| 385 } | 389 } |
| 386 } | 390 } |
| 387 } | 391 } |
| 388 } | 392 } |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 432 | 436 |
| 433 for (size_t i = 0; i < remove_items.size(); ++i) { | 437 for (size_t i = 0; i < remove_items.size(); ++i) { |
| 434 all_settings_dictionary->RemoveWithoutPathExpansion(remove_items[i], NULL); | 438 all_settings_dictionary->RemoveWithoutPathExpansion(remove_items[i], NULL); |
| 435 } | 439 } |
| 436 | 440 |
| 437 for (size_t i = 0; i < move_items.size(); ++i) { | 441 for (size_t i = 0; i < move_items.size(); ++i) { |
| 438 std::unique_ptr<base::Value> pattern_settings_dictionary; | 442 std::unique_ptr<base::Value> pattern_settings_dictionary; |
| 439 all_settings_dictionary->RemoveWithoutPathExpansion( | 443 all_settings_dictionary->RemoveWithoutPathExpansion( |
| 440 move_items[i].first, &pattern_settings_dictionary); | 444 move_items[i].first, &pattern_settings_dictionary); |
| 441 all_settings_dictionary->SetWithoutPathExpansion( | 445 all_settings_dictionary->SetWithoutPathExpansion( |
| 442 move_items[i].second, pattern_settings_dictionary.release()); | 446 move_items[i].second, std::move(pattern_settings_dictionary)); |
| 443 } | 447 } |
| 444 } | 448 } |
| 445 | 449 |
| 446 void ContentSettingsPref::AssertLockNotHeld() const { | 450 void ContentSettingsPref::AssertLockNotHeld() const { |
| 447 #if !defined(NDEBUG) | 451 #if !defined(NDEBUG) |
| 448 // |Lock::Acquire()| will assert if the lock is held by this thread. | 452 // |Lock::Acquire()| will assert if the lock is held by this thread. |
| 449 lock_.Acquire(); | 453 lock_.Acquire(); |
| 450 lock_.Release(); | 454 lock_.Release(); |
| 451 #endif | 455 #endif |
| 452 } | 456 } |
| 453 | 457 |
| 454 } // namespace content_settings | 458 } // namespace content_settings |
| OLD | NEW |