diff options
author | marja@chromium.org <marja@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-16 11:56:56 +0000 |
---|---|---|
committer | marja@chromium.org <marja@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-16 11:56:56 +0000 |
commit | edece2111f69da5328faa06ca23b760016a62bcd (patch) | |
tree | 7fe93400714773d399579a3fdfea22559e7490ce /chrome/renderer/content_settings_observer_browsertest.cc | |
parent | 2676cd5647572899d3672edf04bf48c65ced5b71 (diff) | |
download | chromium_src-edece2111f69da5328faa06ca23b760016a62bcd.zip chromium_src-edece2111f69da5328faa06ca23b760016a62bcd.tar.gz chromium_src-edece2111f69da5328faa06ca23b760016a62bcd.tar.bz2 |
Take script URLs into account when applying script content settings.
Transmit script content settings to the renderer. Use the script URL as the secondary URL
for the content setting rules.
This CL contains the functionality of the following 2 CLs, hopefully without performance
regressions:
http://codereview.chromium.org/8409006
http://codereview.chromium.org/8498007
BUG=90840
TEST=ChromeRenderViewTest.ContentSettings(Allow|Block)Scripts
Review URL: http://codereview.chromium.org/8538004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@110286 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/content_settings_observer_browsertest.cc')
-rw-r--r-- | chrome/renderer/content_settings_observer_browsertest.cc | 108 |
1 files changed, 91 insertions, 17 deletions
diff --git a/chrome/renderer/content_settings_observer_browsertest.cc b/chrome/renderer/content_settings_observer_browsertest.cc index 4bd9805..d05df62 100644 --- a/chrome/renderer/content_settings_observer_browsertest.cc +++ b/chrome/renderer/content_settings_observer_browsertest.cc @@ -106,13 +106,18 @@ TEST_F(ChromeRenderViewTest, JSBlockSentAfterPageLoad) { LoadHTML(html.c_str()); // 2. Block JavaScript. - ContentSettings settings; - for (int i = 0; i < CONTENT_SETTINGS_NUM_TYPES; ++i) - settings.settings[i] = CONTENT_SETTING_ALLOW; - settings.settings[CONTENT_SETTINGS_TYPE_JAVASCRIPT] = CONTENT_SETTING_BLOCK; + RendererContentSettingRules content_setting_rules; + ContentSettingsForOneType& script_setting_rules = + content_setting_rules.script_rules; + script_setting_rules.push_back( + ContentSettingPatternSource( + ContentSettingsPattern::Wildcard(), + ContentSettingsPattern::Wildcard(), + CONTENT_SETTING_BLOCK, + "", + false)); ContentSettingsObserver* observer = ContentSettingsObserver::Get(view_); - observer->SetContentSettings(settings); - observer->SetDefaultContentSettings(&settings); + observer->SetContentSettingRules(&content_setting_rules); // Make sure no pending messages are in the queue. ProcessPendingMessages(); @@ -145,14 +150,7 @@ TEST_F(ChromeRenderViewTest, PluginsTemporarilyAllowed) { // Load some HTML. LoadHTML("<html>Foo</html>"); - // Block plugins. - ContentSettings settings; - for (int i = 0; i < CONTENT_SETTINGS_NUM_TYPES; ++i) - settings.settings[i] = CONTENT_SETTING_ALLOW; - settings.settings[CONTENT_SETTINGS_TYPE_PLUGINS] = CONTENT_SETTING_BLOCK; ContentSettingsObserver* observer = ContentSettingsObserver::Get(view_); - observer->SetContentSettings(settings); - observer->SetDefaultContentSettings(&settings); EXPECT_FALSE(observer->plugins_temporarily_allowed()); // Temporarily allow plugins. @@ -175,7 +173,9 @@ TEST_F(ChromeRenderViewTest, ImagesBlockedByDefault) { LoadHTML("<html>Foo</html>"); // Set the default image blocking setting. - ContentSettingsForOneType image_setting_rules; + RendererContentSettingRules content_setting_rules; + ContentSettingsForOneType& image_setting_rules = + content_setting_rules.image_rules; image_setting_rules.push_back( ContentSettingPatternSource(ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), @@ -184,7 +184,7 @@ TEST_F(ChromeRenderViewTest, ImagesBlockedByDefault) { false)); ContentSettingsObserver* observer = ContentSettingsObserver::Get(view_); - observer->SetImageSettingRules(&image_setting_rules); + observer->SetContentSettingRules(&content_setting_rules); EXPECT_CALL(mock_observer, OnContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES, std::string())); EXPECT_FALSE(observer->AllowImage(GetMainFrame(), @@ -216,7 +216,9 @@ TEST_F(ChromeRenderViewTest, ImagesAllowedByDefault) { LoadHTML("<html>Foo</html>"); // Set the default image blocking setting. - ContentSettingsForOneType image_setting_rules; + RendererContentSettingRules content_setting_rules; + ContentSettingsForOneType& image_setting_rules = + content_setting_rules.image_rules; image_setting_rules.push_back( ContentSettingPatternSource(ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), @@ -225,7 +227,7 @@ TEST_F(ChromeRenderViewTest, ImagesAllowedByDefault) { false)); ContentSettingsObserver* observer = ContentSettingsObserver::Get(view_); - observer->SetImageSettingRules(&image_setting_rules); + observer->SetContentSettingRules(&content_setting_rules); EXPECT_CALL( mock_observer, OnContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES, std::string())).Times(0); @@ -248,3 +250,75 @@ TEST_F(ChromeRenderViewTest, ImagesAllowedByDefault) { true, mock_observer.image_url_)); ::testing::Mock::VerifyAndClearExpectations(&observer); } + +TEST_F(ChromeRenderViewTest, ContentSettingsBlockScripts) { + // Set the content settings for scripts. + RendererContentSettingRules content_setting_rules; + ContentSettingsForOneType& script_setting_rules = + content_setting_rules.script_rules; + script_setting_rules.push_back( + ContentSettingPatternSource( + ContentSettingsPattern::Wildcard(), + ContentSettingsPattern::Wildcard(), + CONTENT_SETTING_BLOCK, + "", + false)); + + ContentSettingsObserver* observer = ContentSettingsObserver::Get(view_); + observer->SetContentSettingRules(&content_setting_rules); + + // Load a page which contains a script. + std::string html = "<html>" + "<head>" + "<script src='data:foo'></script>" + "</head>" + "<body>" + "</body>" + "</html>"; + LoadHTML(html.c_str()); + + // Verify that the script was blocked. + bool was_blocked = false; + for (size_t i = 0; i < render_thread_->sink().message_count(); ++i) { + const IPC::Message* msg = render_thread_->sink().GetMessageAt(i); + if (msg->type() == ChromeViewHostMsg_ContentBlocked::ID) + was_blocked = true; + } + EXPECT_TRUE(was_blocked); +} + +TEST_F(ChromeRenderViewTest, ContentSettingsAllowScripts) { + // Set the content settings for scripts. + RendererContentSettingRules content_setting_rules; + ContentSettingsForOneType& script_setting_rules = + content_setting_rules.script_rules; + script_setting_rules.push_back( + ContentSettingPatternSource( + ContentSettingsPattern::Wildcard(), + ContentSettingsPattern::Wildcard(), + CONTENT_SETTING_ALLOW, + "", + false)); + + ContentSettingsObserver* observer = ContentSettingsObserver::Get(view_); + observer->SetContentSettingRules(&content_setting_rules); + + // Load a page which contains a script. + std::string html = "<html>" + "<head>" + "<script src='data:foo'></script>" + "</head>" + "<body>" + "</body>" + "</html>"; + LoadHTML(html.c_str()); + + // Verify that the script was not blocked. + bool was_blocked = false; + for (size_t i = 0; i < render_thread_->sink().message_count(); ++i) { + const IPC::Message* msg = render_thread_->sink().GetMessageAt(i); + if (msg->type() == ChromeViewHostMsg_ContentBlocked::ID) + was_blocked = true; + } + EXPECT_FALSE(was_blocked); +} |