summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/content_settings_observer_browsertest.cc
diff options
context:
space:
mode:
authormarja@chromium.org <marja@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-16 11:56:56 +0000
committermarja@chromium.org <marja@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-16 11:56:56 +0000
commitedece2111f69da5328faa06ca23b760016a62bcd (patch)
tree7fe93400714773d399579a3fdfea22559e7490ce /chrome/renderer/content_settings_observer_browsertest.cc
parent2676cd5647572899d3672edf04bf48c65ced5b71 (diff)
downloadchromium_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.cc108
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);
+}