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/content_settings/content_settings_policy_provider.h" 6 7 #include "base/auto_reset.h" 8 #include "base/command_line.h" 9 #include "chrome/browser/content_settings/stub_settings_observer.h" 10 #include "chrome/browser/prefs/pref_service.h" 11 #include "chrome/common/chrome_switches.h" 12 #include "chrome/common/pref_names.h" 13 #include "chrome/common/url_constants.h" 14 #include "chrome/test/testing_browser_process_test.h" 15 #include "chrome/test/testing_pref_service.h" 16 #include "chrome/test/testing_profile.h" 17 #include "content/browser/browser_thread.h" 18 #include "testing/gtest/include/gtest/gtest.h" 19 #include "googleurl/src/gurl.h" 20 21 namespace content_settings { 22 23 class PolicyDefaultProviderTest : public TestingBrowserProcessTest { 24 public: 25 PolicyDefaultProviderTest() 26 : ui_thread_(BrowserThread::UI, &message_loop_) { 27 } 28 29 protected: 30 MessageLoop message_loop_; 31 BrowserThread ui_thread_; 32 }; 33 34 TEST_F(PolicyDefaultProviderTest, DefaultValues) { 35 TestingProfile profile; 36 PolicyDefaultProvider provider(&profile); 37 TestingPrefService* prefs = profile.GetTestingPrefService(); 38 39 // By default, policies should be off. 40 ASSERT_FALSE( 41 provider.DefaultSettingIsManaged(CONTENT_SETTINGS_TYPE_COOKIES)); 42 43 // Set managed-default-content-setting through the coresponding preferences. 44 prefs->SetManagedPref(prefs::kManagedDefaultCookiesSetting, 45 Value::CreateIntegerValue(CONTENT_SETTING_BLOCK)); 46 ASSERT_TRUE( 47 provider.DefaultSettingIsManaged(CONTENT_SETTINGS_TYPE_COOKIES)); 48 ASSERT_EQ(CONTENT_SETTING_BLOCK, 49 provider.ProvideDefaultSetting(CONTENT_SETTINGS_TYPE_COOKIES)); 50 51 // Remove managed-default-content-settings-preferences. 52 prefs->RemoveManagedPref(prefs::kManagedDefaultCookiesSetting); 53 ASSERT_FALSE( 54 provider.DefaultSettingIsManaged(CONTENT_SETTINGS_TYPE_COOKIES)); 55 } 56 57 // When a default-content-setting is set to a managed setting a 58 // CONTENT_SETTINGS_CHANGED notification should be fired. The same should happen 59 // if the managed setting is removed. 60 TEST_F(PolicyDefaultProviderTest, ObserveManagedSettingsChange) { 61 TestingProfile profile; 62 StubSettingsObserver observer; 63 // Make sure the content settings map exists. 64 profile.GetHostContentSettingsMap(); 65 TestingPrefService* prefs = profile.GetTestingPrefService(); 66 67 // Set the managed default-content-setting. 68 prefs->SetManagedPref(prefs::kManagedDefaultImagesSetting, 69 Value::CreateIntegerValue(CONTENT_SETTING_BLOCK)); 70 EXPECT_EQ(profile.GetHostContentSettingsMap(), observer.last_notifier); 71 EXPECT_EQ(ContentSettingsPattern(), observer.last_pattern); 72 EXPECT_EQ(CONTENT_SETTINGS_TYPE_DEFAULT, observer.last_type); 73 EXPECT_TRUE(observer.last_update_all); 74 EXPECT_TRUE(observer.last_update_all_types); 75 EXPECT_EQ(1, observer.counter); 76 77 // Remove the managed default-content-setting. 78 prefs->RemoveManagedPref(prefs::kManagedDefaultImagesSetting); 79 EXPECT_EQ(profile.GetHostContentSettingsMap(), observer.last_notifier); 80 EXPECT_EQ(CONTENT_SETTINGS_TYPE_DEFAULT, observer.last_type); 81 EXPECT_EQ(ContentSettingsPattern(), observer.last_pattern); 82 EXPECT_TRUE(observer.last_update_all); 83 EXPECT_TRUE(observer.last_update_all_types); 84 EXPECT_EQ(2, observer.counter); 85 } 86 87 class PolicyProviderTest : public testing::Test { 88 public: 89 PolicyProviderTest() 90 : ui_thread_(BrowserThread::UI, &message_loop_) { 91 } 92 93 protected: 94 // TODO(markusheintz): Check if it's possible to derive the provider class 95 // from NonThreadSafe and to use native thread identifiers instead of 96 // BrowserThread IDs. Then we could get rid of the message_loop and ui_thread 97 // fields. 98 MessageLoop message_loop_; 99 BrowserThread ui_thread_; 100 }; 101 102 TEST_F(PolicyProviderTest, Default) { 103 TestingProfile profile; 104 TestingPrefService* prefs = profile.GetTestingPrefService(); 105 106 ListValue* value = new ListValue(); 107 value->Append(Value::CreateStringValue("[*.]google.com")); 108 prefs->SetManagedPref(prefs::kManagedImagesBlockedForUrls, 109 value); 110 111 PolicyProvider provider(static_cast<Profile*>(&profile)); 112 113 ContentSettingsPattern yt_url_pattern("www.youtube.com"); 114 GURL youtube_url("http://www.youtube.com"); 115 GURL google_url("http://mail.google.com"); 116 117 EXPECT_EQ(CONTENT_SETTING_DEFAULT, 118 provider.GetContentSetting( 119 youtube_url, youtube_url, CONTENT_SETTINGS_TYPE_COOKIES, "")); 120 EXPECT_EQ(CONTENT_SETTING_BLOCK, 121 provider.GetContentSetting( 122 google_url, google_url, CONTENT_SETTINGS_TYPE_IMAGES, "")); 123 124 provider.SetContentSetting( 125 yt_url_pattern, 126 yt_url_pattern, 127 CONTENT_SETTINGS_TYPE_COOKIES, 128 "", 129 CONTENT_SETTING_BLOCK); 130 EXPECT_EQ(CONTENT_SETTING_DEFAULT, 131 provider.GetContentSetting( 132 youtube_url, youtube_url, CONTENT_SETTINGS_TYPE_COOKIES, "")); 133 } 134 135 TEST_F(PolicyProviderTest, ResourceIdentifier) { 136 CommandLine* cmd = CommandLine::ForCurrentProcess(); 137 AutoReset<CommandLine> auto_reset(cmd, *cmd); 138 cmd->AppendSwitch(switches::kEnableResourceContentSettings); 139 140 TestingProfile profile; 141 TestingPrefService* prefs = profile.GetTestingPrefService(); 142 143 ListValue* value = new ListValue(); 144 value->Append(Value::CreateStringValue("[*.]google.com")); 145 prefs->SetManagedPref(prefs::kManagedPluginsAllowedForUrls, 146 value); 147 148 PolicyProvider provider(static_cast<Profile*>(&profile)); 149 150 GURL youtube_url("http://www.youtube.com"); 151 GURL google_url("http://mail.google.com"); 152 153 EXPECT_EQ(CONTENT_SETTING_DEFAULT, 154 provider.GetContentSetting( 155 youtube_url, 156 youtube_url, 157 CONTENT_SETTINGS_TYPE_PLUGINS, 158 "someplugin")); 159 160 // There is no policy support for resource content settings until the feature 161 // is enabled by default. Resource identifiers are simply ignored by the 162 // PolicyProvider. 163 EXPECT_EQ(CONTENT_SETTING_ALLOW, 164 provider.GetContentSetting( 165 google_url, 166 google_url, 167 CONTENT_SETTINGS_TYPE_PLUGINS, 168 "")); 169 170 EXPECT_EQ(CONTENT_SETTING_ALLOW, 171 provider.GetContentSetting( 172 google_url, 173 google_url, 174 CONTENT_SETTINGS_TYPE_PLUGINS, 175 "someplugin")); 176 177 EXPECT_EQ(CONTENT_SETTING_ALLOW, 178 provider.GetContentSetting( 179 google_url, 180 google_url, 181 CONTENT_SETTINGS_TYPE_PLUGINS, 182 "anotherplugin")); 183 } 184 185 } // namespace content_settings 186