| // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/tab_contents/tab_specific_content_settings.h" |
| |
| #include "chrome/test/testing_profile.h" |
| #include "net/base/cookie_monster.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace { |
| class TestContentSettingsDelegate |
| : public TabSpecificContentSettings::Delegate { |
| public: |
| TestContentSettingsDelegate() |
| : settings_changed_(false), content_blocked_(false) {} |
| virtual ~TestContentSettingsDelegate() {} |
| |
| void Reset() { settings_changed_ = content_blocked_ = false; } |
| |
| bool SettingsChanged() { return settings_changed_; } |
| |
| bool ContentBlocked() { return content_blocked_; } |
| |
| // TabSpecificContentSettings::Delegate implementation. |
| virtual void OnContentSettingsAccessed(bool content_was_blocked) { |
| settings_changed_ = true; |
| content_blocked_ = content_was_blocked; |
| } |
| |
| private: |
| bool settings_changed_; |
| bool content_blocked_; |
| |
| DISALLOW_COPY_AND_ASSIGN(TestContentSettingsDelegate); |
| }; |
| } // namespace |
| |
| TEST(TabSpecificContentSettingsTest, BlockedContent) { |
| TestContentSettingsDelegate test_delegate; |
| TestingProfile profile; |
| TabSpecificContentSettings content_settings(&test_delegate, &profile); |
| net::CookieOptions options; |
| |
| // Check that after initializing, nothing is blocked. |
| EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES)); |
| EXPECT_FALSE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT)); |
| EXPECT_FALSE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS)); |
| EXPECT_FALSE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); |
| EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS)); |
| |
| // Set a cookie, block access to images, block a popup. |
| content_settings.OnCookieChanged( |
| GURL("http://google.com"), "A=B", options, false); |
| EXPECT_TRUE(test_delegate.SettingsChanged()); |
| EXPECT_FALSE(test_delegate.ContentBlocked()); |
| test_delegate.Reset(); |
| content_settings.OnContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES, |
| std::string()); |
| EXPECT_TRUE(test_delegate.SettingsChanged()); |
| EXPECT_TRUE(test_delegate.ContentBlocked()); |
| test_delegate.Reset(); |
| content_settings.SetPopupsBlocked(true); |
| EXPECT_TRUE(test_delegate.SettingsChanged()); |
| EXPECT_TRUE(test_delegate.ContentBlocked()); |
| test_delegate.Reset(); |
| |
| // Check that only the respective content types are affected. |
| EXPECT_TRUE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES)); |
| EXPECT_FALSE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT)); |
| EXPECT_FALSE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS)); |
| EXPECT_FALSE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); |
| EXPECT_TRUE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS)); |
| content_settings.OnCookieChanged( |
| GURL("http://google.com"), "A=B", options, false); |
| |
| // Block a cookie. |
| content_settings.OnCookieChanged( |
| GURL("http://google.com"), "C=D", options, true); |
| EXPECT_TRUE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); |
| |
| // Reset blocked content settings. |
| content_settings.ClearBlockedContentSettingsExceptForCookies(); |
| EXPECT_TRUE(test_delegate.SettingsChanged()); |
| EXPECT_FALSE(test_delegate.ContentBlocked()); |
| EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES)); |
| EXPECT_FALSE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT)); |
| EXPECT_FALSE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS)); |
| EXPECT_TRUE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); |
| EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS)); |
| |
| content_settings.ClearCookieSpecificContentSettings(); |
| EXPECT_TRUE(test_delegate.SettingsChanged()); |
| EXPECT_FALSE(test_delegate.ContentBlocked()); |
| EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES)); |
| EXPECT_FALSE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT)); |
| EXPECT_FALSE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS)); |
| EXPECT_FALSE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); |
| EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS)); |
| } |
| |
| TEST(TabSpecificContentSettingsTest, AllowedContent) { |
| TestContentSettingsDelegate test_delegate; |
| TestingProfile profile; |
| TabSpecificContentSettings content_settings(&test_delegate, &profile); |
| net::CookieOptions options; |
| |
| ASSERT_FALSE( |
| content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_IMAGES)); |
| ASSERT_FALSE( |
| content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES)); |
| ASSERT_FALSE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); |
| content_settings.OnCookieChanged( |
| GURL("http://google.com"), "A=B", options, false); |
| ASSERT_TRUE( |
| content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES)); |
| ASSERT_FALSE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); |
| content_settings.OnCookieChanged( |
| GURL("http://google.com"), "C=D", options, true); |
| ASSERT_TRUE( |
| content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES)); |
| ASSERT_TRUE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); |
| } |
| |
| TEST(TabSpecificContentSettingsTest, EmptyCookieList) { |
| TestContentSettingsDelegate test_delegate; |
| TestingProfile profile; |
| TabSpecificContentSettings content_settings(&test_delegate, &profile); |
| |
| ASSERT_FALSE( |
| content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES)); |
| ASSERT_FALSE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); |
| content_settings.OnCookiesRead( |
| GURL("http://google.com"), net::CookieList(), true); |
| ASSERT_FALSE( |
| content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES)); |
| ASSERT_FALSE( |
| content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); |
| } |