Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(943)

Side by Side Diff: chrome/browser/content_settings/content_settings_origin_identifier_value_map.cc

Issue 7049007: Origin Identifier Value Map. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: " Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/content_settings/content_settings_origin_identifier_val ue_map.h"
6
7 #include "base/logging.h"
8 #include "base/values.h"
9 #include "googleurl/src/gurl.h"
10
11 namespace content_settings {
12
13 OriginIdentifierValueMap::OriginIdentifierValueMap() {}
14
15 OriginIdentifierValueMap::~OriginIdentifierValueMap() {
16 Clear();
17 }
18
19 OriginIdentifierValueMap::const_iterator
20 OriginIdentifierValueMap::GetEntryWithHighestPrecedence(
21 OriginIdentifierValueMap::const_iterator first,
22 OriginIdentifierValueMap::const_iterator second) const {
23 // Compare requesting patterns.
24 if (first->a > second->a)
25 return first;
26 if (second->a > first->a)
27 return second;
28 DCHECK(first->a == second->a);
29
30 // Compare embedding patterns.
31 if (first->a > second->a)
32 return first;
33 DCHECK(first->b < second->b);
34 return second;
35 }
36
37 Value* OriginIdentifierValueMap::GetValue(
38 const GURL& item_url,
39 const GURL& top_level_frame_url,
40 ContentSettingsType content_type,
41 const ResourceIdentifier& resource_identifier) const {
42 // Find best matching list entry.
43 OriginIdentifierValueMap::const_iterator best_match = entries_.end();
44 for (OriginIdentifierValueMap::const_iterator entry = entries_.begin();
45 entry != entries_.end();
46 ++entry) {
47 if (entry->a.Matches(item_url) &&
48 entry->b.Matches(top_level_frame_url) &&
49 entry->c == content_type &&
50 entry->d == resource_identifier) {
51 if (best_match == entries_.end()) {
52 best_match = entry;
53 } else {
54 best_match = GetEntryWithHighestPrecedence(best_match, entry);
55 }
56 }
57 }
58 if (best_match != entries_.end())
59 return best_match->e;
60 return NULL;
61 }
62
63 void OriginIdentifierValueMap::SetValue(
64 const ContentSettingsPattern& item_pattern,
65 const ContentSettingsPattern& top_level_frame_pattern,
66 ContentSettingsType content_type,
67 const ResourceIdentifier& resource_identifier,
68 Value* value) {
69 OriginIdentifierValueMap::iterator list_entry =
70 FindEntry(item_pattern,
71 top_level_frame_pattern,
72 content_type,
73 resource_identifier);
74 if (list_entry == entries_.end()) {
75 // No matching list entry found. Add a new entry to the list.
76 entries_.insert(list_entry, MakeTuple(item_pattern,
77 top_level_frame_pattern,
78 content_type,
79 resource_identifier,
80 value));
81 } else {
82 // Update the list entry.
83 list_entry->e = value;
84 }
85 }
86
87 void OriginIdentifierValueMap::DeleteValue(
88 const ContentSettingsPattern& item_pattern,
89 const ContentSettingsPattern& top_level_frame_pattern,
90 ContentSettingsType content_type,
91 const ResourceIdentifier& resource_identifier) {
92 OriginIdentifierValueMap::iterator entry_to_delete =
93 FindEntry(item_pattern,
94 top_level_frame_pattern,
95 content_type,
96 resource_identifier);
97 if (entry_to_delete != entries_.end()) {
98 delete entry_to_delete->e;
99 entries_.erase(entry_to_delete);
100 }
101 }
102
103 void OriginIdentifierValueMap::Clear() {
104 // Delete all owned value objects.
105 for (OriginIdentifierValueMap::iterator entry = entries_.begin();
106 entry != entries_.end();
107 ++entry) {
108 delete entry->e;
109 }
110 entries_.clear();
111 }
112
113 OriginIdentifierValueMap::iterator OriginIdentifierValueMap::DeleteValue(
114 OriginIdentifierValueMap::iterator entry) {
115 return entries_.erase(entry);
116 }
117
118 OriginIdentifierValueMap::iterator OriginIdentifierValueMap::FindEntry(
119 const ContentSettingsPattern& item_pattern,
120 const ContentSettingsPattern& top_level_frame_pattern,
121 ContentSettingsType content_type,
122 const ResourceIdentifier& resource_identifier) {
123 for (OriginIdentifierValueMap::iterator entry = entries_.begin();
124 entry != entries_.end();
125 ++entry) {
126 if (item_pattern == entry->a &&
127 top_level_frame_pattern == entry->b &&
128 content_type == entry->c &&
129 resource_identifier == entry->d) {
130 return entry;
131 }
132 }
133 return entries_.end();
134 }
135
136 } // namespace content_settings
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698