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