summaryrefslogtreecommitdiffstats
path: root/chrome/browser/host_content_settings_map_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/host_content_settings_map_unittest.cc')
-rw-r--r--chrome/browser/host_content_settings_map_unittest.cc518
1 files changed, 518 insertions, 0 deletions
diff --git a/chrome/browser/host_content_settings_map_unittest.cc b/chrome/browser/host_content_settings_map_unittest.cc
new file mode 100644
index 0000000..108d26e
--- /dev/null
+++ b/chrome/browser/host_content_settings_map_unittest.cc
@@ -0,0 +1,518 @@
+// 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/host_content_settings_map.h"
+
+#include "chrome/browser/pref_service.h"
+#include "chrome/common/notification_registrar.h"
+#include "chrome/common/notification_service.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/common/url_constants.h"
+#include "chrome/test/testing_profile.h"
+#include "googleurl/src/gurl.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+
+namespace {
+
+bool SettingsEqual(const ContentSettings& settings1,
+ const ContentSettings& settings2) {
+ for (int i = 0; i < CONTENT_SETTINGS_NUM_TYPES; ++i) {
+ if (settings1.settings[i] != settings2.settings[i])
+ return false;
+ }
+ return true;
+}
+
+class StubSettingsObserver : public NotificationObserver {
+ public:
+ StubSettingsObserver() : last_notifier(NULL), counter(0) {
+ registrar_.Add(this, NotificationType::CONTENT_SETTINGS_CHANGED,
+ NotificationService::AllSources());
+ }
+
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ ++counter;
+ Source<HostContentSettingsMap> content_settings(source);
+ Details<HostContentSettingsMap::ContentSettingsDetails>
+ settings_details(details);
+ last_notifier = content_settings.ptr();
+ last_pattern = settings_details.ptr()->pattern();
+ last_update_all = settings_details.ptr()->update_all();
+ // This checks that calling a Get function from an observer doesn't
+ // deadlock.
+ last_notifier->GetContentSettings(GURL("http://random-hostname.com/"));
+ }
+
+ HostContentSettingsMap* last_notifier;
+ HostContentSettingsMap::Pattern last_pattern;
+ bool last_update_all;
+ int counter;
+
+ private:
+ NotificationRegistrar registrar_;
+};
+
+class HostContentSettingsMapTest : public testing::Test {
+ public:
+ HostContentSettingsMapTest() : ui_thread_(ChromeThread::UI, &message_loop_) {}
+
+ protected:
+ MessageLoop message_loop_;
+ ChromeThread ui_thread_;
+};
+
+TEST_F(HostContentSettingsMapTest, DefaultValues) {
+ TestingProfile profile;
+ HostContentSettingsMap* host_content_settings_map =
+ profile.GetHostContentSettingsMap();
+
+ // Check setting defaults.
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetDefaultContentSetting(
+ CONTENT_SETTINGS_TYPE_JAVASCRIPT));
+ host_content_settings_map->SetDefaultContentSetting(
+ CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_BLOCK);
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetDefaultContentSetting(
+ CONTENT_SETTINGS_TYPE_IMAGES));
+ EXPECT_EQ(CONTENT_SETTING_ALLOW, host_content_settings_map->GetContentSetting(
+ GURL(chrome::kChromeUINewTabURL),
+ CONTENT_SETTINGS_TYPE_IMAGES));
+ host_content_settings_map->SetDefaultContentSetting(
+ CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_ASK);
+ EXPECT_EQ(CONTENT_SETTING_ASK,
+ host_content_settings_map->GetDefaultContentSetting(
+ CONTENT_SETTINGS_TYPE_PLUGINS));
+ host_content_settings_map->SetDefaultContentSetting(
+ CONTENT_SETTINGS_TYPE_POPUPS, CONTENT_SETTING_ALLOW);
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetDefaultContentSetting(
+ CONTENT_SETTINGS_TYPE_POPUPS));
+ host_content_settings_map->ResetToDefaults();
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetDefaultContentSetting(
+ CONTENT_SETTINGS_TYPE_PLUGINS));
+
+ // Check returning individual settings.
+ GURL host("http://example.com/");
+ HostContentSettingsMap::Pattern pattern("[*.]example.com");
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ host, CONTENT_SETTINGS_TYPE_IMAGES));
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_DEFAULT);
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ host, CONTENT_SETTINGS_TYPE_IMAGES));
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_BLOCK);
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetContentSetting(
+ host, CONTENT_SETTINGS_TYPE_IMAGES));
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ host, CONTENT_SETTINGS_TYPE_PLUGINS));
+
+ // Check returning all settings for a host.
+ ContentSettings desired_settings;
+ desired_settings.settings[CONTENT_SETTINGS_TYPE_COOKIES] =
+ CONTENT_SETTING_ALLOW;
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_DEFAULT);
+ desired_settings.settings[CONTENT_SETTINGS_TYPE_IMAGES] =
+ CONTENT_SETTING_ALLOW;
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_JAVASCRIPT, CONTENT_SETTING_BLOCK);
+ desired_settings.settings[CONTENT_SETTINGS_TYPE_JAVASCRIPT] =
+ CONTENT_SETTING_BLOCK;
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_ALLOW);
+ desired_settings.settings[CONTENT_SETTINGS_TYPE_PLUGINS] =
+ CONTENT_SETTING_ALLOW;
+ desired_settings.settings[CONTENT_SETTINGS_TYPE_POPUPS] =
+ CONTENT_SETTING_BLOCK;
+ desired_settings.settings[CONTENT_SETTINGS_TYPE_GEOLOCATION] =
+ CONTENT_SETTING_ASK;
+ desired_settings.settings[CONTENT_SETTINGS_TYPE_NOTIFICATIONS] =
+ CONTENT_SETTING_ASK;
+ ContentSettings settings =
+ host_content_settings_map->GetContentSettings(host);
+ EXPECT_TRUE(SettingsEqual(desired_settings, settings));
+
+ // Check returning all hosts for a setting.
+ HostContentSettingsMap::Pattern pattern2("[*.]example.org");
+ host_content_settings_map->SetContentSetting(pattern2,
+ CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_BLOCK);
+ host_content_settings_map->SetContentSetting(pattern2,
+ CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_BLOCK);
+ HostContentSettingsMap::SettingsForOneType host_settings;
+ host_content_settings_map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_IMAGES,
+ &host_settings);
+ EXPECT_EQ(1U, host_settings.size());
+ host_content_settings_map->GetSettingsForOneType(
+ CONTENT_SETTINGS_TYPE_PLUGINS, &host_settings);
+ EXPECT_EQ(2U, host_settings.size());
+ host_content_settings_map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_POPUPS,
+ &host_settings);
+ EXPECT_EQ(0U, host_settings.size());
+ host_content_settings_map->ResetToDefaults();
+ host_content_settings_map->GetSettingsForOneType(
+ CONTENT_SETTINGS_TYPE_PLUGINS, &host_settings);
+ EXPECT_EQ(0U, host_settings.size());
+
+ // Check clearing one type.
+ HostContentSettingsMap::Pattern pattern3("[*.]example.net");
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_BLOCK);
+ host_content_settings_map->SetContentSetting(pattern2,
+ CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_BLOCK);
+ host_content_settings_map->SetContentSetting(pattern2,
+ CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_BLOCK);
+ host_content_settings_map->SetContentSetting(pattern3,
+ CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_BLOCK);
+ host_content_settings_map->ClearSettingsForOneType(
+ CONTENT_SETTINGS_TYPE_IMAGES);
+ host_content_settings_map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_IMAGES,
+ &host_settings);
+ EXPECT_EQ(0U, host_settings.size());
+ host_content_settings_map->GetSettingsForOneType(
+ CONTENT_SETTINGS_TYPE_PLUGINS, &host_settings);
+ EXPECT_EQ(1U, host_settings.size());
+}
+
+TEST_F(HostContentSettingsMapTest, Patterns) {
+ TestingProfile profile;
+ HostContentSettingsMap* host_content_settings_map =
+ profile.GetHostContentSettingsMap();
+
+ GURL host1("http://example.com/");
+ GURL host2("http://www.example.com/");
+ GURL host3("http://example.org/");
+ HostContentSettingsMap::Pattern pattern1("[*.]example.com");
+ HostContentSettingsMap::Pattern pattern2("example.org");
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ host1, CONTENT_SETTINGS_TYPE_IMAGES));
+ host_content_settings_map->SetContentSetting(pattern1,
+ CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_BLOCK);
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetContentSetting(
+ host1, CONTENT_SETTINGS_TYPE_IMAGES));
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetContentSetting(
+ host2, CONTENT_SETTINGS_TYPE_IMAGES));
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ host3, CONTENT_SETTINGS_TYPE_IMAGES));
+ host_content_settings_map->SetContentSetting(pattern2,
+ CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_BLOCK);
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetContentSetting(
+ host3, CONTENT_SETTINGS_TYPE_IMAGES));
+}
+
+TEST_F(HostContentSettingsMapTest, PatternSupport) {
+ EXPECT_TRUE(HostContentSettingsMap::Pattern("[*.]example.com").IsValid());
+ EXPECT_TRUE(HostContentSettingsMap::Pattern("example.com").IsValid());
+ EXPECT_TRUE(HostContentSettingsMap::Pattern("192.168.0.1").IsValid());
+ EXPECT_TRUE(HostContentSettingsMap::Pattern("[::1]").IsValid());
+ EXPECT_FALSE(HostContentSettingsMap::Pattern("*example.com").IsValid());
+ EXPECT_FALSE(HostContentSettingsMap::Pattern("example.*").IsValid());
+ EXPECT_FALSE(HostContentSettingsMap::Pattern("http://example.com").IsValid());
+
+ EXPECT_TRUE(HostContentSettingsMap::Pattern("[*.]example.com").Matches(
+ GURL("http://example.com/")));
+ EXPECT_TRUE(HostContentSettingsMap::Pattern("[*.]example.com").Matches(
+ GURL("http://www.example.com/")));
+ EXPECT_TRUE(HostContentSettingsMap::Pattern("www.example.com").Matches(
+ GURL("http://www.example.com/")));
+ EXPECT_FALSE(HostContentSettingsMap::Pattern("").Matches(
+ GURL("http://www.example.com/")));
+ EXPECT_FALSE(HostContentSettingsMap::Pattern("[*.]example.com").Matches(
+ GURL("http://example.org/")));
+ EXPECT_FALSE(HostContentSettingsMap::Pattern("example.com").Matches(
+ GURL("http://example.org/")));
+}
+
+TEST_F(HostContentSettingsMapTest, Observer) {
+ TestingProfile profile;
+ HostContentSettingsMap* host_content_settings_map =
+ profile.GetHostContentSettingsMap();
+ StubSettingsObserver observer;
+
+ HostContentSettingsMap::Pattern pattern("[*.]example.com");
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_ALLOW);
+ EXPECT_EQ(host_content_settings_map, observer.last_notifier);
+ EXPECT_EQ(pattern, observer.last_pattern);
+ EXPECT_FALSE(observer.last_update_all);
+ EXPECT_EQ(1, observer.counter);
+
+ host_content_settings_map->ClearSettingsForOneType(
+ CONTENT_SETTINGS_TYPE_IMAGES);
+ EXPECT_EQ(host_content_settings_map, observer.last_notifier);
+ EXPECT_TRUE(observer.last_update_all);
+ EXPECT_EQ(2, observer.counter);
+
+ host_content_settings_map->ResetToDefaults();
+ EXPECT_EQ(host_content_settings_map, observer.last_notifier);
+ EXPECT_TRUE(observer.last_update_all);
+ EXPECT_EQ(3, observer.counter);
+
+ host_content_settings_map->SetDefaultContentSetting(
+ CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_BLOCK);
+ EXPECT_EQ(host_content_settings_map, observer.last_notifier);
+ EXPECT_TRUE(observer.last_update_all);
+ EXPECT_EQ(4, observer.counter);
+}
+
+TEST_F(HostContentSettingsMapTest, ObserveDefaultPref) {
+ TestingProfile profile;
+ HostContentSettingsMap* host_content_settings_map =
+ profile.GetHostContentSettingsMap();
+
+ PrefService* prefs = profile.GetPrefs();
+
+ // Make a copy of the default pref value so we can reset it later.
+ scoped_ptr<Value> default_value(prefs->FindPreference(
+ prefs::kDefaultContentSettings)->GetValue()->DeepCopy());
+
+ GURL host("http://example.com");
+
+ host_content_settings_map->SetDefaultContentSetting(
+ CONTENT_SETTINGS_TYPE_COOKIES, CONTENT_SETTING_BLOCK);
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetContentSetting(
+ host, CONTENT_SETTINGS_TYPE_COOKIES));
+
+ // Make a copy of the pref's new value so we can reset it later.
+ scoped_ptr<Value> new_value(prefs->FindPreference(
+ prefs::kDefaultContentSettings)->GetValue()->DeepCopy());
+
+ // Clearing the backing pref should also clear the internal cache.
+ prefs->Set(prefs::kDefaultContentSettings, *default_value);
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ host, CONTENT_SETTINGS_TYPE_COOKIES));
+
+ // Reseting the pref to its previous value should update the cache.
+ prefs->Set(prefs::kDefaultContentSettings, *new_value);
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetContentSetting(
+ host, CONTENT_SETTINGS_TYPE_COOKIES));
+}
+
+TEST_F(HostContentSettingsMapTest, ObserveExceptionPref) {
+ TestingProfile profile;
+ HostContentSettingsMap* host_content_settings_map =
+ profile.GetHostContentSettingsMap();
+
+ PrefService* prefs = profile.GetPrefs();
+
+ // Make a copy of the default pref value so we can reset it later.
+ scoped_ptr<Value> default_value(prefs->FindPreference(
+ prefs::kContentSettingsPatterns)->GetValue()->DeepCopy());
+
+ HostContentSettingsMap::Pattern pattern("[*.]example.com");
+ GURL host("http://example.com");
+
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_COOKIES, CONTENT_SETTING_BLOCK);
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetContentSetting(
+ host, CONTENT_SETTINGS_TYPE_COOKIES));
+
+ // Make a copy of the pref's new value so we can reset it later.
+ scoped_ptr<Value> new_value(prefs->FindPreference(
+ prefs::kContentSettingsPatterns)->GetValue()->DeepCopy());
+
+ // Clearing the backing pref should also clear the internal cache.
+ prefs->Set(prefs::kContentSettingsPatterns, *default_value);
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ host, CONTENT_SETTINGS_TYPE_COOKIES));
+
+ // Reseting the pref to its previous value should update the cache.
+ prefs->Set(prefs::kContentSettingsPatterns, *new_value);
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetContentSetting(
+ host, CONTENT_SETTINGS_TYPE_COOKIES));
+}
+
+TEST_F(HostContentSettingsMapTest, HostTrimEndingDotCheck) {
+ TestingProfile profile;
+ HostContentSettingsMap* host_content_settings_map =
+ profile.GetHostContentSettingsMap();
+
+ HostContentSettingsMap::Pattern pattern("[*.]example.com");
+ GURL host_ending_with_dot("http://example.com./");
+
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ host_ending_with_dot, CONTENT_SETTINGS_TYPE_IMAGES));
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_DEFAULT);
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ host_ending_with_dot, CONTENT_SETTINGS_TYPE_IMAGES));
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_BLOCK);
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetContentSetting(
+ host_ending_with_dot, CONTENT_SETTINGS_TYPE_IMAGES));
+
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ host_ending_with_dot, CONTENT_SETTINGS_TYPE_COOKIES));
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_COOKIES, CONTENT_SETTING_DEFAULT);
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ host_ending_with_dot, CONTENT_SETTINGS_TYPE_COOKIES));
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_COOKIES, CONTENT_SETTING_BLOCK);
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetContentSetting(
+ host_ending_with_dot, CONTENT_SETTINGS_TYPE_COOKIES));
+
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ host_ending_with_dot, CONTENT_SETTINGS_TYPE_JAVASCRIPT));
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_JAVASCRIPT, CONTENT_SETTING_DEFAULT);
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ host_ending_with_dot, CONTENT_SETTINGS_TYPE_JAVASCRIPT));
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_JAVASCRIPT, CONTENT_SETTING_BLOCK);
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetContentSetting(
+ host_ending_with_dot, CONTENT_SETTINGS_TYPE_JAVASCRIPT));
+
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ host_ending_with_dot, CONTENT_SETTINGS_TYPE_PLUGINS));
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_DEFAULT);
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ host_ending_with_dot, CONTENT_SETTINGS_TYPE_PLUGINS));
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_BLOCK);
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetContentSetting(
+ host_ending_with_dot, CONTENT_SETTINGS_TYPE_PLUGINS));
+
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetContentSetting(
+ host_ending_with_dot, CONTENT_SETTINGS_TYPE_POPUPS));
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_POPUPS, CONTENT_SETTING_DEFAULT);
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetContentSetting(
+ host_ending_with_dot, CONTENT_SETTINGS_TYPE_POPUPS));
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_POPUPS, CONTENT_SETTING_ALLOW);
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ host_ending_with_dot, CONTENT_SETTINGS_TYPE_POPUPS));
+}
+
+TEST_F(HostContentSettingsMapTest, NestedSettings) {
+ TestingProfile profile;
+ HostContentSettingsMap* host_content_settings_map =
+ profile.GetHostContentSettingsMap();
+
+ GURL host("http://a.b.example.com/");
+ HostContentSettingsMap::Pattern pattern1("[*.]example.com");
+ HostContentSettingsMap::Pattern pattern2("[*.]b.example.com");
+ HostContentSettingsMap::Pattern pattern3("a.b.example.com");
+
+ host_content_settings_map->SetContentSetting(pattern1,
+ CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_BLOCK);
+ host_content_settings_map->SetContentSetting(pattern2,
+ CONTENT_SETTINGS_TYPE_COOKIES, CONTENT_SETTING_BLOCK);
+ host_content_settings_map->SetContentSetting(pattern3,
+ CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTING_BLOCK);
+ host_content_settings_map->SetDefaultContentSetting(
+ CONTENT_SETTINGS_TYPE_JAVASCRIPT, CONTENT_SETTING_BLOCK);
+
+ ContentSettings desired_settings;
+ desired_settings.settings[CONTENT_SETTINGS_TYPE_COOKIES] =
+ CONTENT_SETTING_BLOCK;
+ desired_settings.settings[CONTENT_SETTINGS_TYPE_IMAGES] =
+ CONTENT_SETTING_BLOCK;
+ desired_settings.settings[CONTENT_SETTINGS_TYPE_JAVASCRIPT] =
+ CONTENT_SETTING_BLOCK;
+ desired_settings.settings[CONTENT_SETTINGS_TYPE_PLUGINS] =
+ CONTENT_SETTING_BLOCK;
+ desired_settings.settings[CONTENT_SETTINGS_TYPE_POPUPS] =
+ CONTENT_SETTING_BLOCK;
+ desired_settings.settings[CONTENT_SETTINGS_TYPE_GEOLOCATION] =
+ CONTENT_SETTING_ASK;
+ desired_settings.settings[CONTENT_SETTINGS_TYPE_NOTIFICATIONS] =
+ CONTENT_SETTING_ASK;
+ ContentSettings settings =
+ host_content_settings_map->GetContentSettings(host);
+ EXPECT_TRUE(SettingsEqual(desired_settings, settings));
+ EXPECT_EQ(desired_settings.settings[CONTENT_SETTINGS_TYPE_COOKIES],
+ settings.settings[CONTENT_SETTINGS_TYPE_COOKIES]);
+ EXPECT_EQ(desired_settings.settings[CONTENT_SETTINGS_TYPE_IMAGES],
+ settings.settings[CONTENT_SETTINGS_TYPE_IMAGES]);
+ EXPECT_EQ(desired_settings.settings[CONTENT_SETTINGS_TYPE_PLUGINS],
+ settings.settings[CONTENT_SETTINGS_TYPE_PLUGINS]);
+ EXPECT_EQ(desired_settings.settings[CONTENT_SETTINGS_TYPE_POPUPS],
+ settings.settings[CONTENT_SETTINGS_TYPE_POPUPS]);
+ EXPECT_EQ(desired_settings.settings[CONTENT_SETTINGS_TYPE_GEOLOCATION],
+ settings.settings[CONTENT_SETTINGS_TYPE_GEOLOCATION]);
+ EXPECT_EQ(desired_settings.settings[CONTENT_SETTINGS_TYPE_COOKIES],
+ settings.settings[CONTENT_SETTINGS_TYPE_COOKIES]);
+}
+
+TEST_F(HostContentSettingsMapTest, OffTheRecord) {
+ TestingProfile profile;
+ HostContentSettingsMap* host_content_settings_map =
+ profile.GetHostContentSettingsMap();
+ profile.set_off_the_record(true);
+ scoped_refptr<HostContentSettingsMap> otr_map =
+ new HostContentSettingsMap(&profile);
+ profile.set_off_the_record(false);
+
+ GURL host("http://example.com/");
+ HostContentSettingsMap::Pattern pattern("[*.]example.com");
+
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ host, CONTENT_SETTINGS_TYPE_IMAGES));
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ otr_map->GetContentSetting(
+ host, CONTENT_SETTINGS_TYPE_IMAGES));
+
+ // Changing content settings on the main map should also affect the
+ // off-the-record map.
+ host_content_settings_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_BLOCK);
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetContentSetting(
+ host, CONTENT_SETTINGS_TYPE_IMAGES));
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ otr_map->GetContentSetting(
+ host, CONTENT_SETTINGS_TYPE_IMAGES));
+
+ // Changing content settings on the off-the-record map should NOT affect the
+ // main map.
+ otr_map->SetContentSetting(pattern,
+ CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_ALLOW);
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetContentSetting(
+ host, CONTENT_SETTINGS_TYPE_IMAGES));
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ otr_map->GetContentSetting(
+ host, CONTENT_SETTINGS_TYPE_IMAGES));
+}
+
+} // namespace