1 // Copyright (c) 2010 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/tab_contents/tab_specific_content_settings.h"
6
7 #include "chrome/test/testing_profile.h"
8 #include "net/base/cookie_monster.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace {
12 class TestContentSettingsDelegate
13 : public TabSpecificContentSettings::Delegate {
14 public:
TestContentSettingsDelegate()15 TestContentSettingsDelegate()
16 : settings_changed_(false), content_blocked_(false) {}
~TestContentSettingsDelegate()17 virtual ~TestContentSettingsDelegate() {}
18
Reset()19 void Reset() { settings_changed_ = content_blocked_ = false; }
20
SettingsChanged()21 bool SettingsChanged() { return settings_changed_; }
22
ContentBlocked()23 bool ContentBlocked() { return content_blocked_; }
24
25 // TabSpecificContentSettings::Delegate implementation.
OnContentSettingsAccessed(bool content_was_blocked)26 virtual void OnContentSettingsAccessed(bool content_was_blocked) {
27 settings_changed_ = true;
28 content_blocked_ = content_was_blocked;
29 }
30
31 private:
32 bool settings_changed_;
33 bool content_blocked_;
34
35 DISALLOW_COPY_AND_ASSIGN(TestContentSettingsDelegate);
36 };
37 } // namespace
38
TEST(TabSpecificContentSettingsTest,BlockedContent)39 TEST(TabSpecificContentSettingsTest, BlockedContent) {
40 TestContentSettingsDelegate test_delegate;
41 TestingProfile profile;
42 TabSpecificContentSettings content_settings(&test_delegate, &profile);
43 net::CookieOptions options;
44
45 // Check that after initializing, nothing is blocked.
46 EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES));
47 EXPECT_FALSE(
48 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT));
49 EXPECT_FALSE(
50 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS));
51 EXPECT_FALSE(
52 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES));
53 EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS));
54
55 // Set a cookie, block access to images, block a popup.
56 content_settings.OnCookieChanged(
57 GURL("http://google.com"), "A=B", options, false);
58 EXPECT_TRUE(test_delegate.SettingsChanged());
59 EXPECT_FALSE(test_delegate.ContentBlocked());
60 test_delegate.Reset();
61 content_settings.OnContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES,
62 std::string());
63 EXPECT_TRUE(test_delegate.SettingsChanged());
64 EXPECT_TRUE(test_delegate.ContentBlocked());
65 test_delegate.Reset();
66 content_settings.SetPopupsBlocked(true);
67 EXPECT_TRUE(test_delegate.SettingsChanged());
68 EXPECT_TRUE(test_delegate.ContentBlocked());
69 test_delegate.Reset();
70
71 // Check that only the respective content types are affected.
72 EXPECT_TRUE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES));
73 EXPECT_FALSE(
74 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT));
75 EXPECT_FALSE(
76 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS));
77 EXPECT_FALSE(
78 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES));
79 EXPECT_TRUE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS));
80 content_settings.OnCookieChanged(
81 GURL("http://google.com"), "A=B", options, false);
82
83 // Block a cookie.
84 content_settings.OnCookieChanged(
85 GURL("http://google.com"), "C=D", options, true);
86 EXPECT_TRUE(
87 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES));
88
89 // Reset blocked content settings.
90 content_settings.ClearBlockedContentSettingsExceptForCookies();
91 EXPECT_TRUE(test_delegate.SettingsChanged());
92 EXPECT_FALSE(test_delegate.ContentBlocked());
93 EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES));
94 EXPECT_FALSE(
95 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT));
96 EXPECT_FALSE(
97 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS));
98 EXPECT_TRUE(
99 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES));
100 EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS));
101
102 content_settings.ClearCookieSpecificContentSettings();
103 EXPECT_TRUE(test_delegate.SettingsChanged());
104 EXPECT_FALSE(test_delegate.ContentBlocked());
105 EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES));
106 EXPECT_FALSE(
107 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT));
108 EXPECT_FALSE(
109 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS));
110 EXPECT_FALSE(
111 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES));
112 EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS));
113 }
114
TEST(TabSpecificContentSettingsTest,AllowedContent)115 TEST(TabSpecificContentSettingsTest, AllowedContent) {
116 TestContentSettingsDelegate test_delegate;
117 TestingProfile profile;
118 TabSpecificContentSettings content_settings(&test_delegate, &profile);
119 net::CookieOptions options;
120
121 ASSERT_FALSE(
122 content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_IMAGES));
123 ASSERT_FALSE(
124 content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES));
125 ASSERT_FALSE(
126 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES));
127 content_settings.OnCookieChanged(
128 GURL("http://google.com"), "A=B", options, false);
129 ASSERT_TRUE(
130 content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES));
131 ASSERT_FALSE(
132 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES));
133 content_settings.OnCookieChanged(
134 GURL("http://google.com"), "C=D", options, true);
135 ASSERT_TRUE(
136 content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES));
137 ASSERT_TRUE(
138 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES));
139 }
140
TEST(TabSpecificContentSettingsTest,EmptyCookieList)141 TEST(TabSpecificContentSettingsTest, EmptyCookieList) {
142 TestContentSettingsDelegate test_delegate;
143 TestingProfile profile;
144 TabSpecificContentSettings content_settings(&test_delegate, &profile);
145
146 ASSERT_FALSE(
147 content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES));
148 ASSERT_FALSE(
149 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES));
150 content_settings.OnCookiesRead(
151 GURL("http://google.com"), net::CookieList(), true);
152 ASSERT_FALSE(
153 content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES));
154 ASSERT_FALSE(
155 content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES));
156 }
157