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..8bb2f98613ce3e7134a1ce539cd359290b5e4c8c 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,9 @@ 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); |
+ ValueEntry* entry = &entries_[key][patterns]; |
+ entry->value.reset(value); |
+ entry->last_modified = last_modified; |
} |
void OriginIdentifierValueMap::DeleteValue( |