Chromium Code Reviews| Index: components/content_settings/core/browser/content_settings_origin_identifier_value_map.cc |
| diff --git a/components/content_settings/core/browser/content_settings_origin_identifier_value_map.cc b/components/content_settings/core/browser/content_settings_origin_identifier_value_map.cc |
| index 3f6133b67a8cb760ad7fb12b8d5c3c8ec5633a74..64d7af677334ad21c20a9594bd38ca8f9ae754ac 100644 |
| --- a/components/content_settings/core/browser/content_settings_origin_identifier_value_map.cc |
| +++ b/components/content_settings/core/browser/content_settings_origin_identifier_value_map.cc |
| @@ -38,10 +38,10 @@ class RuleIteratorImpl : public RuleIterator { |
| Rule Next() override { |
| DCHECK(HasNext()); |
| - DCHECK(current_rule_->second.get()); |
| + DCHECK(current_rule_->second.value.get()); |
| Rule to_return(current_rule_->first.primary_pattern, |
| current_rule_->first.secondary_pattern, |
| - current_rule_->second.get()->DeepCopy()); |
| + current_rule_->second.value.get()->DeepCopy()); |
| ++current_rule_; |
| return to_return; |
| } |
| @@ -83,6 +83,10 @@ bool OriginIdentifierValueMap::PatternPair::operator<( |
| std::tie(other.primary_pattern, other.secondary_pattern); |
| } |
| +OriginIdentifierValueMap::ValueEntry::ValueEntry() : last_modified(), value(){}; |
| + |
| +OriginIdentifierValueMap::ValueEntry::~ValueEntry(){}; |
| + |
| std::unique_ptr<RuleIterator> OriginIdentifierValueMap::GetRuleIterator( |
| ContentSettingsType content_type, |
| const ResourceIdentifier& resource_identifier, |
| @@ -129,17 +133,37 @@ base::Value* OriginIdentifierValueMap::GetValue( |
| for (const auto& entry : it->second) { |
| if (entry.first.primary_pattern.Matches(primary_url) && |
| entry.first.secondary_pattern.Matches(secondary_url)) { |
| - return entry.second.get(); |
| + return entry.second.value.get(); |
| } |
| } |
| return nullptr; |
| } |
| +base::Time OriginIdentifierValueMap::GetLastModified( |
| + const ContentSettingsPattern& primary_pattern, |
| + const ContentSettingsPattern& secondary_pattern, |
| + ContentSettingsType content_type, |
| + const ResourceIdentifier& resource_identifier) const { |
| + DCHECK(primary_pattern.IsValid()); |
| + DCHECK(secondary_pattern.IsValid()); |
| + |
| + EntryMapKey key(content_type, resource_identifier); |
| + PatternPair patterns(primary_pattern, secondary_pattern); |
| + EntryMap::const_iterator it = entries_.find(key); |
| + if (it == entries_.end()) |
| + return base::Time(); |
| + Rules::const_iterator r = it->second.find(patterns); |
| + if (r == it->second.end()) |
| + return base::Time(); |
| + return r->second.last_modified; |
| +} |
| + |
| void OriginIdentifierValueMap::SetValue( |
| const ContentSettingsPattern& primary_pattern, |
| const ContentSettingsPattern& secondary_pattern, |
| ContentSettingsType content_type, |
| const ResourceIdentifier& resource_identifier, |
| + base::Time last_modified, |
| base::Value* value) { |
| DCHECK(primary_pattern.IsValid()); |
| DCHECK(secondary_pattern.IsValid()); |
| @@ -150,7 +174,8 @@ void OriginIdentifierValueMap::SetValue( |
| EntryMapKey key(content_type, resource_identifier); |
| PatternPair patterns(primary_pattern, secondary_pattern); |
| // This will create the entry and the linked_ptr if needed. |
| - entries_[key][patterns].reset(value); |
| + entries_[key][patterns].value.reset(value); |
| + entries_[key][patterns].last_modified = last_modified; |
|
raymes
2017/04/24 03:20:22
This is going to cost 2 lookups which could potent
dullweber
2017/04/25 10:50:44
Done.
|
| } |
| void OriginIdentifierValueMap::DeleteValue( |