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_utils.h"
6 
7 #include <stddef.h>
8 
9 #include <string>
10 
11 #include "base/stl_util.h"
12 #include "components/content_settings/core/test/content_settings_test_utils.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 
15 namespace content_settings {
16 
17 namespace {
18 
19 const char* const kContentSettingNames[] = {
20   "default",
21   "allow",
22   "block",
23   "ask",
24   "session_only",
25   "detect_important_content",
26 };
27 static_assert(base::size(kContentSettingNames) == CONTENT_SETTING_NUM_SETTINGS,
28               "kContentSettingNames has an unexpected number of elements");
29 
30 }  // namespace
31 
TEST(ContentSettingsUtilsTest,ParsePatternString)32 TEST(ContentSettingsUtilsTest, ParsePatternString) {
33   PatternPair pattern_pair;
34 
35   pattern_pair = ParsePatternString(std::string());
36   EXPECT_FALSE(pattern_pair.first.IsValid());
37   EXPECT_FALSE(pattern_pair.second.IsValid());
38 
39   pattern_pair = ParsePatternString(",");
40   EXPECT_FALSE(pattern_pair.first.IsValid());
41   EXPECT_FALSE(pattern_pair.second.IsValid());
42 
43   pattern_pair = ParsePatternString("http://www.foo.com");
44   EXPECT_TRUE(pattern_pair.first.IsValid());
45   EXPECT_EQ(pattern_pair.second, ContentSettingsPattern::Wildcard());
46 
47   // This inconsistency is to recover from some broken code.
48   pattern_pair = ParsePatternString("http://www.foo.com,");
49   EXPECT_TRUE(pattern_pair.first.IsValid());
50   EXPECT_FALSE(pattern_pair.second.IsValid());
51 
52   pattern_pair = ParsePatternString("http://www.foo.com,http://www.bar.com");
53   EXPECT_TRUE(pattern_pair.first.IsValid());
54   EXPECT_TRUE(pattern_pair.second.IsValid());
55 
56   pattern_pair = ParsePatternString("http://www.foo.com,http://www.bar.com,");
57   EXPECT_FALSE(pattern_pair.first.IsValid());
58   EXPECT_FALSE(pattern_pair.second.IsValid());
59 
60   pattern_pair = ParsePatternString(
61       "http://www.foo.com,http://www.bar.com,http://www.error.com");
62   EXPECT_FALSE(pattern_pair.first.IsValid());
63   EXPECT_FALSE(pattern_pair.second.IsValid());
64 }
65 
TEST(ContentSettingsUtilsTest,ContentSettingsStringMap)66 TEST(ContentSettingsUtilsTest, ContentSettingsStringMap) {
67   std::string setting_string =
68       ContentSettingToString(CONTENT_SETTING_NUM_SETTINGS);
69   EXPECT_TRUE(setting_string.empty());
70 
71   for (size_t i = 0; i < base::size(kContentSettingNames); ++i) {
72     ContentSetting setting = static_cast<ContentSetting>(i);
73     setting_string = ContentSettingToString(setting);
74     EXPECT_EQ(kContentSettingNames[i], setting_string);
75 
76     ContentSetting converted_setting;
77     EXPECT_TRUE(
78         ContentSettingFromString(kContentSettingNames[i], &converted_setting));
79     EXPECT_EQ(setting, converted_setting);
80   }
81 }
82 
TEST(ContentSettingsUtilsTest,IsMorePermissive)83 TEST(ContentSettingsUtilsTest, IsMorePermissive) {
84   EXPECT_TRUE(IsMorePermissive(
85       CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK));
86   EXPECT_TRUE(IsMorePermissive(
87       CONTENT_SETTING_ALLOW, CONTENT_SETTING_ASK));
88   EXPECT_TRUE(IsMorePermissive(
89       CONTENT_SETTING_ALLOW, CONTENT_SETTING_DETECT_IMPORTANT_CONTENT));
90   EXPECT_TRUE(IsMorePermissive(
91       CONTENT_SETTING_ALLOW, CONTENT_SETTING_SESSION_ONLY));
92 
93   EXPECT_TRUE(IsMorePermissive(
94       CONTENT_SETTING_SESSION_ONLY, CONTENT_SETTING_ASK));
95   EXPECT_TRUE(IsMorePermissive(
96       CONTENT_SETTING_SESSION_ONLY, CONTENT_SETTING_BLOCK));
97 
98   EXPECT_TRUE(IsMorePermissive(
99       CONTENT_SETTING_DETECT_IMPORTANT_CONTENT, CONTENT_SETTING_ASK));
100   EXPECT_TRUE(IsMorePermissive(
101       CONTENT_SETTING_DETECT_IMPORTANT_CONTENT, CONTENT_SETTING_BLOCK));
102 
103   EXPECT_TRUE(IsMorePermissive(CONTENT_SETTING_ASK, CONTENT_SETTING_BLOCK));
104 
105   EXPECT_FALSE(IsMorePermissive(
106       CONTENT_SETTING_BLOCK, CONTENT_SETTING_ALLOW));
107   EXPECT_FALSE(IsMorePermissive(
108       CONTENT_SETTING_BLOCK, CONTENT_SETTING_DETECT_IMPORTANT_CONTENT));
109   EXPECT_FALSE(IsMorePermissive(
110       CONTENT_SETTING_BLOCK, CONTENT_SETTING_SESSION_ONLY));
111   EXPECT_FALSE(IsMorePermissive(CONTENT_SETTING_BLOCK, CONTENT_SETTING_ASK));
112 
113   EXPECT_FALSE(IsMorePermissive(
114       CONTENT_SETTING_ASK, CONTENT_SETTING_ALLOW));
115   EXPECT_FALSE(IsMorePermissive(
116       CONTENT_SETTING_ASK, CONTENT_SETTING_SESSION_ONLY));
117   EXPECT_FALSE(IsMorePermissive(
118       CONTENT_SETTING_ASK, CONTENT_SETTING_DETECT_IMPORTANT_CONTENT));
119 
120   EXPECT_FALSE(IsMorePermissive(
121       CONTENT_SETTING_SESSION_ONLY, CONTENT_SETTING_ALLOW));
122   EXPECT_FALSE(IsMorePermissive(
123       CONTENT_SETTING_DETECT_IMPORTANT_CONTENT, CONTENT_SETTING_ALLOW));
124 
125   EXPECT_FALSE(IsMorePermissive(
126       CONTENT_SETTING_ALLOW, CONTENT_SETTING_ALLOW));
127 
128   // Check that all possible ContentSettings except CONTENT_SETTING_DEFAULT are
129   // handled.
130   for (int i = 1; i < CONTENT_SETTING_NUM_SETTINGS; ++i) {
131     auto s = static_cast<ContentSetting>(i);
132     EXPECT_FALSE(IsMorePermissive(s, s));
133   }
134 }
135 
136 }  // namespace content_settings
137