| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/common/content_settings.h" | 5 #include "chrome/common/content_settings.h" |
| 6 #include "chrome/common/render_messages.h" | 6 #include "chrome/common/render_messages.h" |
| 7 #include "chrome/renderer/content_settings_observer.h" | 7 #include "chrome/renderer/content_settings_observer.h" |
| 8 #include "chrome/test/base/chrome_render_view_test.h" | 8 #include "chrome/test/base/chrome_render_view_test.h" |
| 9 #include "content/public/renderer/render_view.h" | 9 #include "content/public/renderer/render_view.h" |
| 10 #include "ipc/ipc_message_macros.h" | 10 #include "ipc/ipc_message_macros.h" |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 "<head>" | 99 "<head>" |
| 100 "<script>document.createElement('div');</script>" | 100 "<script>document.createElement('div');</script>" |
| 101 "</head>" | 101 "</head>" |
| 102 "<body>" | 102 "<body>" |
| 103 "</body>" | 103 "</body>" |
| 104 "</html>"; | 104 "</html>"; |
| 105 render_thread_->sink().ClearMessages(); | 105 render_thread_->sink().ClearMessages(); |
| 106 LoadHTML(html.c_str()); | 106 LoadHTML(html.c_str()); |
| 107 | 107 |
| 108 // 2. Block JavaScript. | 108 // 2. Block JavaScript. |
| 109 ContentSettings settings; | 109 RendererContentSettingRules content_setting_rules; |
| 110 for (int i = 0; i < CONTENT_SETTINGS_NUM_TYPES; ++i) | 110 ContentSettingsForOneType& script_setting_rules = |
| 111 settings.settings[i] = CONTENT_SETTING_ALLOW; | 111 content_setting_rules.script_rules; |
| 112 settings.settings[CONTENT_SETTINGS_TYPE_JAVASCRIPT] = CONTENT_SETTING_BLOCK; | 112 script_setting_rules.push_back( |
| 113 ContentSettingPatternSource( |
| 114 ContentSettingsPattern::Wildcard(), |
| 115 ContentSettingsPattern::Wildcard(), |
| 116 CONTENT_SETTING_BLOCK, |
| 117 "", |
| 118 false)); |
| 113 ContentSettingsObserver* observer = ContentSettingsObserver::Get(view_); | 119 ContentSettingsObserver* observer = ContentSettingsObserver::Get(view_); |
| 114 observer->SetContentSettings(settings); | 120 observer->SetContentSettingRules(&content_setting_rules); |
| 115 observer->SetDefaultContentSettings(&settings); | |
| 116 | 121 |
| 117 // Make sure no pending messages are in the queue. | 122 // Make sure no pending messages are in the queue. |
| 118 ProcessPendingMessages(); | 123 ProcessPendingMessages(); |
| 119 render_thread_->sink().ClearMessages(); | 124 render_thread_->sink().ClearMessages(); |
| 120 | 125 |
| 121 // 3. Reload page. | 126 // 3. Reload page. |
| 122 std::string url_str = "data:text/html;charset=utf-8,"; | 127 std::string url_str = "data:text/html;charset=utf-8,"; |
| 123 url_str.append(html); | 128 url_str.append(html); |
| 124 GURL url(url_str); | 129 GURL url(url_str); |
| 125 Reload(url); | 130 Reload(url); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 138 } | 143 } |
| 139 EXPECT_NE(-1, navigation_index); | 144 EXPECT_NE(-1, navigation_index); |
| 140 EXPECT_NE(-1, block_index); | 145 EXPECT_NE(-1, block_index); |
| 141 EXPECT_LT(navigation_index, block_index); | 146 EXPECT_LT(navigation_index, block_index); |
| 142 } | 147 } |
| 143 | 148 |
| 144 TEST_F(ChromeRenderViewTest, PluginsTemporarilyAllowed) { | 149 TEST_F(ChromeRenderViewTest, PluginsTemporarilyAllowed) { |
| 145 // Load some HTML. | 150 // Load some HTML. |
| 146 LoadHTML("<html>Foo</html>"); | 151 LoadHTML("<html>Foo</html>"); |
| 147 | 152 |
| 148 // Block plugins. | |
| 149 ContentSettings settings; | |
| 150 for (int i = 0; i < CONTENT_SETTINGS_NUM_TYPES; ++i) | |
| 151 settings.settings[i] = CONTENT_SETTING_ALLOW; | |
| 152 settings.settings[CONTENT_SETTINGS_TYPE_PLUGINS] = CONTENT_SETTING_BLOCK; | |
| 153 ContentSettingsObserver* observer = ContentSettingsObserver::Get(view_); | 153 ContentSettingsObserver* observer = ContentSettingsObserver::Get(view_); |
| 154 observer->SetContentSettings(settings); | |
| 155 observer->SetDefaultContentSettings(&settings); | |
| 156 EXPECT_FALSE(observer->plugins_temporarily_allowed()); | 154 EXPECT_FALSE(observer->plugins_temporarily_allowed()); |
| 157 | 155 |
| 158 // Temporarily allow plugins. | 156 // Temporarily allow plugins. |
| 159 OnMessageReceived(ChromeViewMsg_LoadBlockedPlugins(MSG_ROUTING_NONE)); | 157 OnMessageReceived(ChromeViewMsg_LoadBlockedPlugins(MSG_ROUTING_NONE)); |
| 160 EXPECT_TRUE(observer->plugins_temporarily_allowed()); | 158 EXPECT_TRUE(observer->plugins_temporarily_allowed()); |
| 161 | 159 |
| 162 // Simulate a navigation within the page. | 160 // Simulate a navigation within the page. |
| 163 DidNavigateWithinPage(GetMainFrame(), true); | 161 DidNavigateWithinPage(GetMainFrame(), true); |
| 164 EXPECT_TRUE(observer->plugins_temporarily_allowed()); | 162 EXPECT_TRUE(observer->plugins_temporarily_allowed()); |
| 165 | 163 |
| 166 // Navigate to a different page. | 164 // Navigate to a different page. |
| 167 LoadHTML("<html>Bar</html>"); | 165 LoadHTML("<html>Bar</html>"); |
| 168 EXPECT_FALSE(observer->plugins_temporarily_allowed()); | 166 EXPECT_FALSE(observer->plugins_temporarily_allowed()); |
| 169 } | 167 } |
| 170 | 168 |
| 171 TEST_F(ChromeRenderViewTest, ImagesBlockedByDefault) { | 169 TEST_F(ChromeRenderViewTest, ImagesBlockedByDefault) { |
| 172 MockContentSettingsObserver mock_observer(view_); | 170 MockContentSettingsObserver mock_observer(view_); |
| 173 | 171 |
| 174 // Load some HTML. | 172 // Load some HTML. |
| 175 LoadHTML("<html>Foo</html>"); | 173 LoadHTML("<html>Foo</html>"); |
| 176 | 174 |
| 177 // Set the default image blocking setting. | 175 // Set the default image blocking setting. |
| 178 ContentSettingsForOneType image_setting_rules; | 176 RendererContentSettingRules content_setting_rules; |
| 177 ContentSettingsForOneType& image_setting_rules = |
| 178 content_setting_rules.image_rules; |
| 179 image_setting_rules.push_back( | 179 image_setting_rules.push_back( |
| 180 ContentSettingPatternSource(ContentSettingsPattern::Wildcard(), | 180 ContentSettingPatternSource(ContentSettingsPattern::Wildcard(), |
| 181 ContentSettingsPattern::Wildcard(), | 181 ContentSettingsPattern::Wildcard(), |
| 182 CONTENT_SETTING_BLOCK, | 182 CONTENT_SETTING_BLOCK, |
| 183 "", | 183 "", |
| 184 false)); | 184 false)); |
| 185 | 185 |
| 186 ContentSettingsObserver* observer = ContentSettingsObserver::Get(view_); | 186 ContentSettingsObserver* observer = ContentSettingsObserver::Get(view_); |
| 187 observer->SetImageSettingRules(&image_setting_rules); | 187 observer->SetContentSettingRules(&content_setting_rules); |
| 188 EXPECT_CALL(mock_observer, | 188 EXPECT_CALL(mock_observer, |
| 189 OnContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES, std::string())); | 189 OnContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES, std::string())); |
| 190 EXPECT_FALSE(observer->AllowImage(GetMainFrame(), | 190 EXPECT_FALSE(observer->AllowImage(GetMainFrame(), |
| 191 true, mock_observer.image_url_)); | 191 true, mock_observer.image_url_)); |
| 192 ::testing::Mock::VerifyAndClearExpectations(&observer); | 192 ::testing::Mock::VerifyAndClearExpectations(&observer); |
| 193 | 193 |
| 194 // Create an exception which allows the image. | 194 // Create an exception which allows the image. |
| 195 image_setting_rules.insert( | 195 image_setting_rules.insert( |
| 196 image_setting_rules.begin(), | 196 image_setting_rules.begin(), |
| 197 ContentSettingPatternSource( | 197 ContentSettingPatternSource( |
| (...skipping 11 matching lines...) Expand all Loading... |
| 209 ::testing::Mock::VerifyAndClearExpectations(&observer); | 209 ::testing::Mock::VerifyAndClearExpectations(&observer); |
| 210 } | 210 } |
| 211 | 211 |
| 212 TEST_F(ChromeRenderViewTest, ImagesAllowedByDefault) { | 212 TEST_F(ChromeRenderViewTest, ImagesAllowedByDefault) { |
| 213 MockContentSettingsObserver mock_observer(view_); | 213 MockContentSettingsObserver mock_observer(view_); |
| 214 | 214 |
| 215 // Load some HTML. | 215 // Load some HTML. |
| 216 LoadHTML("<html>Foo</html>"); | 216 LoadHTML("<html>Foo</html>"); |
| 217 | 217 |
| 218 // Set the default image blocking setting. | 218 // Set the default image blocking setting. |
| 219 ContentSettingsForOneType image_setting_rules; | 219 RendererContentSettingRules content_setting_rules; |
| 220 ContentSettingsForOneType& image_setting_rules = |
| 221 content_setting_rules.image_rules; |
| 220 image_setting_rules.push_back( | 222 image_setting_rules.push_back( |
| 221 ContentSettingPatternSource(ContentSettingsPattern::Wildcard(), | 223 ContentSettingPatternSource(ContentSettingsPattern::Wildcard(), |
| 222 ContentSettingsPattern::Wildcard(), | 224 ContentSettingsPattern::Wildcard(), |
| 223 CONTENT_SETTING_ALLOW, | 225 CONTENT_SETTING_ALLOW, |
| 224 "", | 226 "", |
| 225 false)); | 227 false)); |
| 226 | 228 |
| 227 ContentSettingsObserver* observer = ContentSettingsObserver::Get(view_); | 229 ContentSettingsObserver* observer = ContentSettingsObserver::Get(view_); |
| 228 observer->SetImageSettingRules(&image_setting_rules); | 230 observer->SetContentSettingRules(&content_setting_rules); |
| 229 EXPECT_CALL( | 231 EXPECT_CALL( |
| 230 mock_observer, | 232 mock_observer, |
| 231 OnContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES, std::string())).Times(0); | 233 OnContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES, std::string())).Times(0); |
| 232 EXPECT_TRUE(observer->AllowImage(GetMainFrame(), true, | 234 EXPECT_TRUE(observer->AllowImage(GetMainFrame(), true, |
| 233 mock_observer.image_url_)); | 235 mock_observer.image_url_)); |
| 234 ::testing::Mock::VerifyAndClearExpectations(&observer); | 236 ::testing::Mock::VerifyAndClearExpectations(&observer); |
| 235 | 237 |
| 236 // Create an exception which blocks the image. | 238 // Create an exception which blocks the image. |
| 237 image_setting_rules.insert( | 239 image_setting_rules.insert( |
| 238 image_setting_rules.begin(), | 240 image_setting_rules.begin(), |
| 239 ContentSettingPatternSource( | 241 ContentSettingPatternSource( |
| 240 ContentSettingsPattern::Wildcard(), | 242 ContentSettingsPattern::Wildcard(), |
| 241 ContentSettingsPattern::FromString(mock_observer.image_origin_), | 243 ContentSettingsPattern::FromString(mock_observer.image_origin_), |
| 242 CONTENT_SETTING_BLOCK, | 244 CONTENT_SETTING_BLOCK, |
| 243 "", | 245 "", |
| 244 false)); | 246 false)); |
| 245 EXPECT_CALL(mock_observer, | 247 EXPECT_CALL(mock_observer, |
| 246 OnContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES, std::string())); | 248 OnContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES, std::string())); |
| 247 EXPECT_FALSE(observer->AllowImage(GetMainFrame(), | 249 EXPECT_FALSE(observer->AllowImage(GetMainFrame(), |
| 248 true, mock_observer.image_url_)); | 250 true, mock_observer.image_url_)); |
| 249 ::testing::Mock::VerifyAndClearExpectations(&observer); | 251 ::testing::Mock::VerifyAndClearExpectations(&observer); |
| 250 } | 252 } |
| 253 |
| 254 TEST_F(ChromeRenderViewTest, ContentSettingsBlockScripts) { |
| 255 // Set the content settings for scripts. |
| 256 RendererContentSettingRules content_setting_rules; |
| 257 ContentSettingsForOneType& script_setting_rules = |
| 258 content_setting_rules.script_rules; |
| 259 script_setting_rules.push_back( |
| 260 ContentSettingPatternSource( |
| 261 ContentSettingsPattern::Wildcard(), |
| 262 ContentSettingsPattern::Wildcard(), |
| 263 CONTENT_SETTING_BLOCK, |
| 264 "", |
| 265 false)); |
| 266 |
| 267 ContentSettingsObserver* observer = ContentSettingsObserver::Get(view_); |
| 268 observer->SetContentSettingRules(&content_setting_rules); |
| 269 |
| 270 // Load a page which contains a script. |
| 271 std::string html = "<html>" |
| 272 "<head>" |
| 273 "<script src='data:foo'></script>" |
| 274 "</head>" |
| 275 "<body>" |
| 276 "</body>" |
| 277 "</html>"; |
| 278 LoadHTML(html.c_str()); |
| 279 |
| 280 // Verify that the script was blocked. |
| 281 bool was_blocked = false; |
| 282 for (size_t i = 0; i < render_thread_->sink().message_count(); ++i) { |
| 283 const IPC::Message* msg = render_thread_->sink().GetMessageAt(i); |
| 284 if (msg->type() == ChromeViewHostMsg_ContentBlocked::ID) |
| 285 was_blocked = true; |
| 286 } |
| 287 EXPECT_TRUE(was_blocked); |
| 288 } |
| 289 |
| 290 TEST_F(ChromeRenderViewTest, ContentSettingsAllowScripts) { |
| 291 // Set the content settings for scripts. |
| 292 RendererContentSettingRules content_setting_rules; |
| 293 ContentSettingsForOneType& script_setting_rules = |
| 294 content_setting_rules.script_rules; |
| 295 script_setting_rules.push_back( |
| 296 ContentSettingPatternSource( |
| 297 ContentSettingsPattern::Wildcard(), |
| 298 ContentSettingsPattern::Wildcard(), |
| 299 CONTENT_SETTING_ALLOW, |
| 300 "", |
| 301 false)); |
| 302 |
| 303 ContentSettingsObserver* observer = ContentSettingsObserver::Get(view_); |
| 304 observer->SetContentSettingRules(&content_setting_rules); |
| 305 |
| 306 // Load a page which contains a script. |
| 307 std::string html = "<html>" |
| 308 "<head>" |
| 309 "<script src='data:foo'></script>" |
| 310 "</head>" |
| 311 "<body>" |
| 312 "</body>" |
| 313 "</html>"; |
| 314 LoadHTML(html.c_str()); |
| 315 |
| 316 // Verify that the script was not blocked. |
| 317 bool was_blocked = false; |
| 318 for (size_t i = 0; i < render_thread_->sink().message_count(); ++i) { |
| 319 const IPC::Message* msg = render_thread_->sink().GetMessageAt(i); |
| 320 if (msg->type() == ChromeViewHostMsg_ContentBlocked::ID) |
| 321 was_blocked = true; |
| 322 } |
| 323 EXPECT_FALSE(was_blocked); |
| 324 } |
| OLD | NEW |