• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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