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: 15 TestContentSettingsDelegate() 16 : settings_changed_(false), content_blocked_(false) {} 17 virtual ~TestContentSettingsDelegate() {} 18 19 void Reset() { settings_changed_ = content_blocked_ = false; } 20 21 bool SettingsChanged() { return settings_changed_; } 22 23 bool ContentBlocked() { return content_blocked_; } 24 25 // TabSpecificContentSettings::Delegate implementation. 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 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 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 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