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.
5 #include "chrome/browser/content_settings/content_settings_origin_identifier_value_map.h"
7 #include "base/memory/scoped_ptr.h"
8 #include "base/values.h"
9 #include "chrome/browser/content_settings/content_settings_rule.h"
10 #include "chrome/browser/content_settings/content_settings_utils.h"
11 #include "testing/gtest/include/gtest/gtest.h"
14 TEST(OriginIdentifierValueMapTest, SetGetValue) {
15 content_settings::OriginIdentifierValueMap map;
18 map.GetValue(GURL("http://www.google.com"),
19 GURL("http://www.google.com"),
20 CONTENT_SETTINGS_TYPE_COOKIES,
22 map.SetValue(ContentSettingsPattern::FromString("[*.]google.com"),
23 ContentSettingsPattern::FromString("[*.]google.com"),
24 CONTENT_SETTINGS_TYPE_COOKIES,
26 Value::CreateIntegerValue(1));
28 scoped_ptr<Value> expected_value(Value::CreateIntegerValue(1));
29 EXPECT_TRUE(expected_value->Equals(map.GetValue(GURL("http://www.google.com"),
30 GURL("http://www.google.com"),
31 CONTENT_SETTINGS_TYPE_COOKIES,
35 map.GetValue(GURL("http://www.google.com"),
36 GURL("http://www.youtube.com"),
37 CONTENT_SETTINGS_TYPE_COOKIES,
41 map.GetValue(GURL("http://www.youtube.com"),
42 GURL("http://www.google.com"),
43 CONTENT_SETTINGS_TYPE_COOKIES,
47 map.GetValue(GURL("http://www.google.com"),
48 GURL("http://www.google.com"),
49 CONTENT_SETTINGS_TYPE_POPUPS,
52 EXPECT_EQ(NULL, map.GetValue(GURL("http://www.google.com"),
53 GURL("http://www.google.com"),
54 CONTENT_SETTINGS_TYPE_COOKIES,
58 TEST(OriginIdentifierValueMapTest, SetDeleteValue) {
59 content_settings::OriginIdentifierValueMap map;
61 EXPECT_EQ(NULL, map.GetValue(GURL("http://www.google.com"),
62 GURL("http://www.google.com"),
63 CONTENT_SETTINGS_TYPE_PLUGINS,
68 ContentSettingsPattern::FromString("[*.]google.com"),
69 ContentSettingsPattern::FromString("[*.]google.com"),
70 CONTENT_SETTINGS_TYPE_PLUGINS,
72 Value::CreateIntegerValue(1));
75 EXPECT_TRUE(map.GetValue(GURL("http://www.google.com"),
76 GURL("http://www.google.com"),
77 CONTENT_SETTINGS_TYPE_PLUGINS,
78 "java-plugin")->GetAsInteger(&actual_value));
79 EXPECT_EQ(1, actual_value);
80 EXPECT_EQ(NULL, map.GetValue(GURL("http://www.google.com"),
81 GURL("http://www.google.com"),
82 CONTENT_SETTINGS_TYPE_PLUGINS,
84 // Delete non-existing value.
86 ContentSettingsPattern::FromString("[*.]google.com"),
87 ContentSettingsPattern::FromString("[*.]google.com"),
88 CONTENT_SETTINGS_TYPE_PLUGINS,
90 EXPECT_EQ(NULL, map.GetValue(GURL("http://www.google.com"),
91 GURL("http://www.google.com"),
92 CONTENT_SETTINGS_TYPE_PLUGINS,
94 EXPECT_TRUE(map.GetValue(GURL("http://www.google.com"),
95 GURL("http://www.google.com"),
96 CONTENT_SETTINGS_TYPE_PLUGINS,
97 "java-plugin")->GetAsInteger(&actual_value));
98 EXPECT_EQ(1, actual_value);
100 // Delete existing value.
102 ContentSettingsPattern::FromString("[*.]google.com"),
103 ContentSettingsPattern::FromString("[*.]google.com"),
104 CONTENT_SETTINGS_TYPE_PLUGINS,
107 EXPECT_EQ(NULL, map.GetValue(GURL("http://www.google.com"),
108 GURL("http://www.google.com"),
109 CONTENT_SETTINGS_TYPE_PLUGINS,
113 TEST(OriginIdentifierValueMapTest, Clear) {
114 content_settings::OriginIdentifierValueMap map;
115 EXPECT_TRUE(map.empty());
119 ContentSettingsPattern::FromString("[*.]google.com"),
120 ContentSettingsPattern::FromString("[*.]google.com"),
121 CONTENT_SETTINGS_TYPE_PLUGINS,
123 Value::CreateIntegerValue(1));
124 map.SetValue(ContentSettingsPattern::FromString("[*.]google.com"),
125 ContentSettingsPattern::FromString("[*.]google.com"),
126 CONTENT_SETTINGS_TYPE_COOKIES,
128 Value::CreateIntegerValue(1));
129 EXPECT_FALSE(map.empty());
131 EXPECT_TRUE(map.GetValue(GURL("http://www.google.com"),
132 GURL("http://www.google.com"),
133 CONTENT_SETTINGS_TYPE_PLUGINS,
134 "java-plugin")->GetAsInteger(&actual_value));
135 EXPECT_EQ(1, actual_value);
139 EXPECT_TRUE(map.empty());
140 EXPECT_EQ(NULL, map.GetValue(GURL("http://www.google.com"),
141 GURL("http://www.google.com"),
142 CONTENT_SETTINGS_TYPE_PLUGINS,
146 TEST(OriginIdentifierValueMapTest, ListEntryPrecedences) {
147 content_settings::OriginIdentifierValueMap map;
149 map.SetValue(ContentSettingsPattern::FromString("[*.]google.com"),
150 ContentSettingsPattern::FromString("[*.]google.com"),
151 CONTENT_SETTINGS_TYPE_COOKIES,
153 Value::CreateIntegerValue(1));
155 map.SetValue(ContentSettingsPattern::FromString("www.google.com"),
156 ContentSettingsPattern::FromString("[*.]google.com"),
157 CONTENT_SETTINGS_TYPE_COOKIES,
159 Value::CreateIntegerValue(2));
162 EXPECT_TRUE(map.GetValue(GURL("http://mail.google.com"),
163 GURL("http://www.google.com"),
164 CONTENT_SETTINGS_TYPE_COOKIES,
165 std::string())->GetAsInteger(&actual_value));
166 EXPECT_EQ(1, actual_value);
168 EXPECT_TRUE(map.GetValue(GURL("http://www.google.com"),
169 GURL("http://www.google.com"),
170 CONTENT_SETTINGS_TYPE_COOKIES,
171 std::string())->GetAsInteger(&actual_value));
172 EXPECT_EQ(2, actual_value);
175 TEST(OriginIdentifierValueMapTest, IterateEmpty) {
176 content_settings::OriginIdentifierValueMap map;
177 scoped_ptr<content_settings::RuleIterator> rule_iterator(
178 map.GetRuleIterator(CONTENT_SETTINGS_TYPE_COOKIES, std::string(), NULL));
179 EXPECT_FALSE(rule_iterator->HasNext());
182 TEST(OriginIdentifierValueMapTest, IterateNonempty) {
183 // Verify the precedence order.
184 content_settings::OriginIdentifierValueMap map;
185 ContentSettingsPattern pattern =
186 ContentSettingsPattern::FromString("[*.]google.com");
187 ContentSettingsPattern sub_pattern =
188 ContentSettingsPattern::FromString("sub.google.com");
189 map.SetValue(pattern,
190 ContentSettingsPattern::Wildcard(),
191 CONTENT_SETTINGS_TYPE_COOKIES,
193 Value::CreateIntegerValue(1));
194 map.SetValue(sub_pattern,
195 ContentSettingsPattern::Wildcard(),
196 CONTENT_SETTINGS_TYPE_COOKIES,
198 Value::CreateIntegerValue(2));
200 scoped_ptr<content_settings::RuleIterator> rule_iterator(
201 map.GetRuleIterator(CONTENT_SETTINGS_TYPE_COOKIES, std::string(), NULL));
202 ASSERT_TRUE(rule_iterator->HasNext());
203 content_settings::Rule rule = rule_iterator->Next();
204 EXPECT_EQ(sub_pattern, rule.primary_pattern);
205 EXPECT_EQ(2, content_settings::ValueToContentSetting(rule.value.get()));
207 ASSERT_TRUE(rule_iterator->HasNext());
208 rule = rule_iterator->Next();
209 EXPECT_EQ(pattern, rule.primary_pattern);
210 EXPECT_EQ(1, content_settings::ValueToContentSetting(rule.value.get()));