| Index: chrome/browser/extensions/api/content_settings/content_settings_store.cc
|
| diff --git a/chrome/browser/extensions/api/content_settings/content_settings_store.cc b/chrome/browser/extensions/api/content_settings/content_settings_store.cc
|
| index b2e8c52a50b45670fedeb0fda02a58c79bda9a29..ec745236e3aa79851817ea5871cd23869b491a77 100644
|
| --- a/chrome/browser/extensions/api/content_settings/content_settings_store.cc
|
| +++ b/chrome/browser/extensions/api/content_settings/content_settings_store.cc
|
| @@ -11,6 +11,7 @@
|
|
|
| #include "base/debug/alias.h"
|
| #include "base/logging.h"
|
| +#include "base/memory/ptr_util.h"
|
| #include "base/stl_util.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/values.h"
|
| @@ -62,34 +63,38 @@ std::unique_ptr<RuleIterator> ContentSettingsStore::GetRuleIterator(
|
| std::vector<std::unique_ptr<RuleIterator>> iterators;
|
| // Iterate the extensions based on install time (last installed extensions
|
| // first).
|
| - ExtensionEntryMap::const_reverse_iterator entry;
|
| + ExtensionEntryMap::const_reverse_iterator entry_it;
|
|
|
| // The individual |RuleIterators| shouldn't lock; pass |lock_| to the
|
| // |ConcatenationIterator| in a locked state.
|
| std::unique_ptr<base::AutoLock> auto_lock(new base::AutoLock(lock_));
|
|
|
| - for (entry = entries_.rbegin(); entry != entries_.rend(); ++entry) {
|
| - if (!entry->second->enabled)
|
| + for (entry_it = entries_.rbegin(); entry_it != entries_.rend(); ++entry_it) {
|
| + auto* entry = entry_it->second;
|
| + if (!entry->enabled)
|
| continue;
|
|
|
| + std::unique_ptr<RuleIterator> rule_it;
|
| if (incognito) {
|
| - iterators.push_back(
|
| - entry->second->incognito_session_only_settings.GetRuleIterator(
|
| - type,
|
| - identifier,
|
| - NULL));
|
| - iterators.push_back(
|
| - entry->second->incognito_persistent_settings.GetRuleIterator(
|
| - type,
|
| - identifier,
|
| - NULL));
|
| + rule_it = entry->incognito_session_only_settings.GetRuleIterator(
|
| + type, identifier, nullptr);
|
| + if (rule_it)
|
| + iterators.push_back(std::move(rule_it));
|
| + rule_it = entry->incognito_persistent_settings.GetRuleIterator(
|
| + type, identifier, nullptr);
|
| + if (rule_it)
|
| + iterators.push_back(std::move(rule_it));
|
| } else {
|
| - iterators.push_back(
|
| - entry->second->settings.GetRuleIterator(type, identifier, NULL));
|
| + rule_it = entry->settings.GetRuleIterator(type, identifier, nullptr);
|
| + if (rule_it)
|
| + iterators.push_back(std::move(rule_it));
|
| }
|
| }
|
| - return std::unique_ptr<RuleIterator>(
|
| - new ConcatenationIterator(std::move(iterators), auto_lock.release()));
|
| + if (iterators.empty())
|
| + return nullptr;
|
| +
|
| + return base::MakeUnique<ConcatenationIterator>(std::move(iterators),
|
| + auto_lock.release());
|
| }
|
|
|
| void ContentSettingsStore::SetExtensionContentSetting(
|
| @@ -251,13 +256,17 @@ base::ListValue* ContentSettingsStore::GetSettingsForExtension(
|
| base::AutoLock lock(lock_);
|
| const OriginIdentifierValueMap* map = GetValueMap(extension_id, scope);
|
| if (!map)
|
| - return NULL;
|
| + return nullptr;
|
| +
|
| base::ListValue* settings = new base::ListValue();
|
| - OriginIdentifierValueMap::EntryMap::const_iterator it;
|
| - for (it = map->begin(); it != map->end(); ++it) {
|
| - std::unique_ptr<RuleIterator> rule_iterator(map->GetRuleIterator(
|
| - it->first.content_type, it->first.resource_identifier,
|
| - NULL)); // We already hold the lock.
|
| + for (const auto& it : *map) {
|
| + const auto& key = it.first;
|
| + std::unique_ptr<RuleIterator> rule_iterator(
|
| + map->GetRuleIterator(key.content_type, key.resource_identifier,
|
| + nullptr)); // We already hold the lock.
|
| + if (!rule_iterator)
|
| + continue;
|
| +
|
| while (rule_iterator->HasNext()) {
|
| const Rule& rule = rule_iterator->Next();
|
| std::unique_ptr<base::DictionaryValue> setting_dict(
|
| @@ -268,9 +277,9 @@ base::ListValue* ContentSettingsStore::GetSettingsForExtension(
|
| rule.secondary_pattern.ToString());
|
| setting_dict->SetString(
|
| keys::kContentSettingsTypeKey,
|
| - helpers::ContentSettingsTypeToString(it->first.content_type));
|
| + helpers::ContentSettingsTypeToString(key.content_type));
|
| setting_dict->SetString(keys::kResourceIdentifierKey,
|
| - it->first.resource_identifier);
|
| + key.resource_identifier);
|
| ContentSetting content_setting = ValueToContentSetting(rule.value.get());
|
| DCHECK_NE(CONTENT_SETTING_DEFAULT, content_setting);
|
|
|
|
|