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 "components/content_settings/core/browser/content_settings_origin_identifier_value_map.h" 6 7 #include "base/memory/scoped_ptr.h" 8 #include "base/values.h" 9 #include "chrome/browser/content_settings/content_settings_utils.h" 10 #include "components/content_settings/core/browser/content_settings_rule.h" 11 #include "testing/gtest/include/gtest/gtest.h" 12 #include "url/gurl.h" 13 14 TEST(OriginIdentifierValueMapTest, SetGetValue) { 15 content_settings::OriginIdentifierValueMap map; 16 17 EXPECT_EQ(NULL, 18 map.GetValue(GURL("http://www.google.com"), 19 GURL("http://www.google.com"), 20 CONTENT_SETTINGS_TYPE_COOKIES, 21 std::string())); 22 map.SetValue(ContentSettingsPattern::FromString("[*.]google.com"), 23 ContentSettingsPattern::FromString("[*.]google.com"), 24 CONTENT_SETTINGS_TYPE_COOKIES, 25 std::string(), 26 new base::FundamentalValue(1)); 27 28 scoped_ptr<base::Value> expected_value(new base::FundamentalValue(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, 32 std::string()))); 33 34 EXPECT_EQ(NULL, 35 map.GetValue(GURL("http://www.google.com"), 36 GURL("http://www.youtube.com"), 37 CONTENT_SETTINGS_TYPE_COOKIES, 38 std::string())); 39 40 EXPECT_EQ(NULL, 41 map.GetValue(GURL("http://www.youtube.com"), 42 GURL("http://www.google.com"), 43 CONTENT_SETTINGS_TYPE_COOKIES, 44 std::string())); 45 46 EXPECT_EQ(NULL, 47 map.GetValue(GURL("http://www.google.com"), 48 GURL("http://www.google.com"), 49 CONTENT_SETTINGS_TYPE_POPUPS, 50 std::string())); 51 52 EXPECT_EQ(NULL, map.GetValue(GURL("http://www.google.com"), 53 GURL("http://www.google.com"), 54 CONTENT_SETTINGS_TYPE_COOKIES, 55 "resource_id")); 56 } 57 58 TEST(OriginIdentifierValueMapTest, SetDeleteValue) { 59 content_settings::OriginIdentifierValueMap map; 60 61 EXPECT_EQ(NULL, map.GetValue(GURL("http://www.google.com"), 62 GURL("http://www.google.com"), 63 CONTENT_SETTINGS_TYPE_PLUGINS, 64 "java-plugin")); 65 66 // Set sample values. 67 map.SetValue(ContentSettingsPattern::FromString("[*.]google.com"), 68 ContentSettingsPattern::FromString("[*.]google.com"), 69 CONTENT_SETTINGS_TYPE_PLUGINS, 70 "java-plugin", 71 new base::FundamentalValue(1)); 72 73 int actual_value; 74 EXPECT_TRUE(map.GetValue(GURL("http://www.google.com"), 75 GURL("http://www.google.com"), 76 CONTENT_SETTINGS_TYPE_PLUGINS, 77 "java-plugin")->GetAsInteger(&actual_value)); 78 EXPECT_EQ(1, actual_value); 79 EXPECT_EQ(NULL, map.GetValue(GURL("http://www.google.com"), 80 GURL("http://www.google.com"), 81 CONTENT_SETTINGS_TYPE_PLUGINS, 82 "flash-plugin")); 83 // Delete non-existing value. 84 map.DeleteValue( 85 ContentSettingsPattern::FromString("[*.]google.com"), 86 ContentSettingsPattern::FromString("[*.]google.com"), 87 CONTENT_SETTINGS_TYPE_PLUGINS, 88 "flash-plugin"); 89 EXPECT_EQ(NULL, map.GetValue(GURL("http://www.google.com"), 90 GURL("http://www.google.com"), 91 CONTENT_SETTINGS_TYPE_PLUGINS, 92 "flash-plugin")); 93 EXPECT_TRUE(map.GetValue(GURL("http://www.google.com"), 94 GURL("http://www.google.com"), 95 CONTENT_SETTINGS_TYPE_PLUGINS, 96 "java-plugin")->GetAsInteger(&actual_value)); 97 EXPECT_EQ(1, actual_value); 98 99 // Delete existing value. 100 map.DeleteValue( 101 ContentSettingsPattern::FromString("[*.]google.com"), 102 ContentSettingsPattern::FromString("[*.]google.com"), 103 CONTENT_SETTINGS_TYPE_PLUGINS, 104 "java-plugin"); 105 106 EXPECT_EQ(NULL, map.GetValue(GURL("http://www.google.com"), 107 GURL("http://www.google.com"), 108 CONTENT_SETTINGS_TYPE_PLUGINS, 109 "java-plugin")); 110 } 111 112 TEST(OriginIdentifierValueMapTest, Clear) { 113 content_settings::OriginIdentifierValueMap map; 114 EXPECT_TRUE(map.empty()); 115 116 // Set two values. 117 map.SetValue(ContentSettingsPattern::FromString("[*.]google.com"), 118 ContentSettingsPattern::FromString("[*.]google.com"), 119 CONTENT_SETTINGS_TYPE_PLUGINS, 120 "java-plugin", 121 new base::FundamentalValue(1)); 122 map.SetValue(ContentSettingsPattern::FromString("[*.]google.com"), 123 ContentSettingsPattern::FromString("[*.]google.com"), 124 CONTENT_SETTINGS_TYPE_COOKIES, 125 std::string(), 126 new base::FundamentalValue(1)); 127 EXPECT_FALSE(map.empty()); 128 int actual_value; 129 EXPECT_TRUE(map.GetValue(GURL("http://www.google.com"), 130 GURL("http://www.google.com"), 131 CONTENT_SETTINGS_TYPE_PLUGINS, 132 "java-plugin")->GetAsInteger(&actual_value)); 133 EXPECT_EQ(1, actual_value); 134 135 // Clear the map. 136 map.clear(); 137 EXPECT_TRUE(map.empty()); 138 EXPECT_EQ(NULL, map.GetValue(GURL("http://www.google.com"), 139 GURL("http://www.google.com"), 140 CONTENT_SETTINGS_TYPE_PLUGINS, 141 "java-plugin")); 142 } 143 144 TEST(OriginIdentifierValueMapTest, ListEntryPrecedences) { 145 content_settings::OriginIdentifierValueMap map; 146 147 map.SetValue(ContentSettingsPattern::FromString("[*.]google.com"), 148 ContentSettingsPattern::FromString("[*.]google.com"), 149 CONTENT_SETTINGS_TYPE_COOKIES, 150 std::string(), 151 new base::FundamentalValue(1)); 152 153 map.SetValue(ContentSettingsPattern::FromString("www.google.com"), 154 ContentSettingsPattern::FromString("[*.]google.com"), 155 CONTENT_SETTINGS_TYPE_COOKIES, 156 std::string(), 157 new base::FundamentalValue(2)); 158 159 int actual_value; 160 EXPECT_TRUE(map.GetValue(GURL("http://mail.google.com"), 161 GURL("http://www.google.com"), 162 CONTENT_SETTINGS_TYPE_COOKIES, 163 std::string())->GetAsInteger(&actual_value)); 164 EXPECT_EQ(1, actual_value); 165 166 EXPECT_TRUE(map.GetValue(GURL("http://www.google.com"), 167 GURL("http://www.google.com"), 168 CONTENT_SETTINGS_TYPE_COOKIES, 169 std::string())->GetAsInteger(&actual_value)); 170 EXPECT_EQ(2, actual_value); 171 } 172 173 TEST(OriginIdentifierValueMapTest, IterateEmpty) { 174 content_settings::OriginIdentifierValueMap map; 175 scoped_ptr<content_settings::RuleIterator> rule_iterator( 176 map.GetRuleIterator(CONTENT_SETTINGS_TYPE_COOKIES, std::string(), NULL)); 177 EXPECT_FALSE(rule_iterator->HasNext()); 178 } 179 180 TEST(OriginIdentifierValueMapTest, IterateNonempty) { 181 // Verify the precedence order. 182 content_settings::OriginIdentifierValueMap map; 183 ContentSettingsPattern pattern = 184 ContentSettingsPattern::FromString("[*.]google.com"); 185 ContentSettingsPattern sub_pattern = 186 ContentSettingsPattern::FromString("sub.google.com"); 187 map.SetValue(pattern, 188 ContentSettingsPattern::Wildcard(), 189 CONTENT_SETTINGS_TYPE_COOKIES, 190 std::string(), 191 new base::FundamentalValue(1)); 192 map.SetValue(sub_pattern, 193 ContentSettingsPattern::Wildcard(), 194 CONTENT_SETTINGS_TYPE_COOKIES, 195 std::string(), 196 new base::FundamentalValue(2)); 197 198 scoped_ptr<content_settings::RuleIterator> rule_iterator( 199 map.GetRuleIterator(CONTENT_SETTINGS_TYPE_COOKIES, std::string(), NULL)); 200 ASSERT_TRUE(rule_iterator->HasNext()); 201 content_settings::Rule rule = rule_iterator->Next(); 202 EXPECT_EQ(sub_pattern, rule.primary_pattern); 203 EXPECT_EQ(2, content_settings::ValueToContentSetting(rule.value.get())); 204 205 ASSERT_TRUE(rule_iterator->HasNext()); 206 rule = rule_iterator->Next(); 207 EXPECT_EQ(pattern, rule.primary_pattern); 208 EXPECT_EQ(1, content_settings::ValueToContentSetting(rule.value.get())); 209 } 210