Index: chrome/browser/content_settings/content_settings_origin_identifier_value_map.cc |
diff --git a/chrome/browser/content_settings/content_settings_origin_identifier_value_map.cc b/chrome/browser/content_settings/content_settings_origin_identifier_value_map.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1d30d90f5419cbf3a7982c2a9187cf153bbba8a3 |
--- /dev/null |
+++ b/chrome/browser/content_settings/content_settings_origin_identifier_value_map.cc |
@@ -0,0 +1,131 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/content_settings/content_settings_origin_identifier_value_map.h" |
+ |
+#include "base/logging.h" |
+#include "base/values.h" |
+#include "googleurl/src/gurl.h" |
+ |
+namespace content_settings { |
+ |
+OriginIdentifierValueMap::OriginIdentifierValueMap() {} |
+ |
+OriginIdentifierValueMap::~OriginIdentifierValueMap() { |
+ Clear(); |
Bernhard Bauer
2011/06/14 11:50:57
Unnecessary now.
markusheintz_
2011/06/14 12:24:33
Removed
|
+} |
+ |
+bool operator>(const OriginIdentifierValueMap::Entry& first, |
+ const OriginIdentifierValueMap::Entry& second) { |
+ // Compare item patterns. |
+ if (first.item_pattern > second.item_pattern) |
+ return true; |
+ if (first.item_pattern < second.item_pattern) |
+ return false; |
+ |
+ // Compare top_level_frame patterns. |
+ if (first.top_level_frame_pattern > second.top_level_frame_pattern) |
+ return true; |
+ return false; |
+} |
+ |
+Value* OriginIdentifierValueMap::GetValue( |
+ const GURL& item_url, |
+ const GURL& top_level_frame_url, |
+ ContentSettingsType content_type, |
+ const ResourceIdentifier& resource_identifier) const { |
+ // Find best matching list entry. |
+ OriginIdentifierValueMap::const_iterator best_match = entries_.end(); |
+ for (OriginIdentifierValueMap::const_iterator entry = entries_.begin(); |
+ entry != entries_.end(); |
+ ++entry) { |
+ if (entry->item_pattern.Matches(item_url) && |
+ entry->top_level_frame_pattern.Matches(top_level_frame_url) && |
+ entry->content_type == content_type && |
+ entry->identifier == resource_identifier) { |
+ if (best_match == entries_.end() || *entry > *best_match) { |
+ best_match = entry; |
+ } |
+ } |
+ } |
+ if (best_match != entries_.end()) |
+ return best_match->value.get(); |
+ return NULL; |
+} |
+ |
+void OriginIdentifierValueMap::SetValue( |
+ const ContentSettingsPattern& item_pattern, |
+ const ContentSettingsPattern& top_level_frame_pattern, |
+ ContentSettingsType content_type, |
+ const ResourceIdentifier& resource_identifier, |
+ Value* value) { |
+ OriginIdentifierValueMap::iterator list_entry = |
+ FindEntry(item_pattern, |
+ top_level_frame_pattern, |
+ content_type, |
+ resource_identifier); |
+ if (list_entry == entries_.end()) { |
+ // No matching list entry found. Add a new entry to the list. |
+ entries_.insert(list_entry, Entry(item_pattern, |
+ top_level_frame_pattern, |
+ content_type, |
+ resource_identifier, |
+ value)); |
+ } else { |
+ // Update the list entry. |
+ list_entry->value.reset(value); |
+ } |
+} |
+ |
+void OriginIdentifierValueMap::DeleteValue( |
+ const ContentSettingsPattern& item_pattern, |
+ const ContentSettingsPattern& top_level_frame_pattern, |
+ ContentSettingsType content_type, |
+ const ResourceIdentifier& resource_identifier) { |
+ OriginIdentifierValueMap::iterator entry_to_delete = |
+ FindEntry(item_pattern, |
+ top_level_frame_pattern, |
+ content_type, |
+ resource_identifier); |
+ if (entry_to_delete != entries_.end()) { |
+ entries_.erase(entry_to_delete); |
+ } |
+} |
+ |
+void OriginIdentifierValueMap::Clear() { |
+ // Delete all owned value objects. |
+ /* |
+ for (OriginIdentifierValueMap::iterator entry = entries_.begin(); |
+ entry != entries_.end(); |
+ ++entry) { |
+ delete entry->value; |
+ } |
+ */ |
+ entries_.clear(); |
+} |
+ |
+OriginIdentifierValueMap::iterator OriginIdentifierValueMap::DeleteValue( |
+ OriginIdentifierValueMap::iterator entry) { |
+ return entries_.erase(entry); |
+} |
+ |
+OriginIdentifierValueMap::iterator OriginIdentifierValueMap::FindEntry( |
+ const ContentSettingsPattern& item_pattern, |
+ const ContentSettingsPattern& top_level_frame_pattern, |
+ ContentSettingsType content_type, |
+ const ResourceIdentifier& resource_identifier) { |
+ for (OriginIdentifierValueMap::iterator entry = entries_.begin(); |
+ entry != entries_.end(); |
+ ++entry) { |
+ if (item_pattern == entry->item_pattern && |
+ top_level_frame_pattern == entry->top_level_frame_pattern && |
+ content_type == entry->content_type && |
+ resource_identifier == entry->identifier) { |
+ return entry; |
+ } |
+ } |
+ return entries_.end(); |
+} |
+ |
+} // namespace content_settings |