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_value_map.h" 6 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" 12#include "url/gurl.h" 13 14TEST(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 Value::CreateIntegerValue(1)); 27 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, 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 58TEST(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( 68 ContentSettingsPattern::FromString("[*.]google.com"), 69 ContentSettingsPattern::FromString("[*.]google.com"), 70 CONTENT_SETTINGS_TYPE_PLUGINS, 71 "java-plugin", 72 Value::CreateIntegerValue(1)); 73 74 int actual_value; 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, 83 "flash-plugin")); 84 // Delete non-existing value. 85 map.DeleteValue( 86 ContentSettingsPattern::FromString("[*.]google.com"), 87 ContentSettingsPattern::FromString("[*.]google.com"), 88 CONTENT_SETTINGS_TYPE_PLUGINS, 89 "flash-plugin"); 90 EXPECT_EQ(NULL, map.GetValue(GURL("http://www.google.com"), 91 GURL("http://www.google.com"), 92 CONTENT_SETTINGS_TYPE_PLUGINS, 93 "flash-plugin")); 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); 99 100 // Delete existing value. 101 map.DeleteValue( 102 ContentSettingsPattern::FromString("[*.]google.com"), 103 ContentSettingsPattern::FromString("[*.]google.com"), 104 CONTENT_SETTINGS_TYPE_PLUGINS, 105 "java-plugin"); 106 107 EXPECT_EQ(NULL, map.GetValue(GURL("http://www.google.com"), 108 GURL("http://www.google.com"), 109 CONTENT_SETTINGS_TYPE_PLUGINS, 110 "java-plugin")); 111} 112 113TEST(OriginIdentifierValueMapTest, Clear) { 114 content_settings::OriginIdentifierValueMap map; 115 EXPECT_TRUE(map.empty()); 116 117 // Set two values. 118 map.SetValue( 119 ContentSettingsPattern::FromString("[*.]google.com"), 120 ContentSettingsPattern::FromString("[*.]google.com"), 121 CONTENT_SETTINGS_TYPE_PLUGINS, 122 "java-plugin", 123 Value::CreateIntegerValue(1)); 124 map.SetValue(ContentSettingsPattern::FromString("[*.]google.com"), 125 ContentSettingsPattern::FromString("[*.]google.com"), 126 CONTENT_SETTINGS_TYPE_COOKIES, 127 std::string(), 128 Value::CreateIntegerValue(1)); 129 EXPECT_FALSE(map.empty()); 130 int actual_value; 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); 136 137 // Clear the map. 138 map.clear(); 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, 143 "java-plugin")); 144} 145 146TEST(OriginIdentifierValueMapTest, ListEntryPrecedences) { 147 content_settings::OriginIdentifierValueMap map; 148 149 map.SetValue(ContentSettingsPattern::FromString("[*.]google.com"), 150 ContentSettingsPattern::FromString("[*.]google.com"), 151 CONTENT_SETTINGS_TYPE_COOKIES, 152 std::string(), 153 Value::CreateIntegerValue(1)); 154 155 map.SetValue(ContentSettingsPattern::FromString("www.google.com"), 156 ContentSettingsPattern::FromString("[*.]google.com"), 157 CONTENT_SETTINGS_TYPE_COOKIES, 158 std::string(), 159 Value::CreateIntegerValue(2)); 160 161 int actual_value; 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); 167 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); 173} 174 175TEST(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()); 180} 181 182TEST(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, 192 std::string(), 193 Value::CreateIntegerValue(1)); 194 map.SetValue(sub_pattern, 195 ContentSettingsPattern::Wildcard(), 196 CONTENT_SETTINGS_TYPE_COOKIES, 197 std::string(), 198 Value::CreateIntegerValue(2)); 199 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())); 206 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())); 211} 212