1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Use of this source code is governed by a BSD-style license that can be
321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// found in the LICENSE file.
421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/content_settings/content_settings_pref_provider.h"
621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/auto_reset.h"
872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/command_line.h"
972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/content_settings/stub_settings_observer.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/prefs/browser_prefs.h"
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/prefs/default_pref_store.h"
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/prefs/overlay_persistent_pref_store.h"
1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/prefs/pref_service.h"
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/prefs/testing_pref_store.h"
1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/common/chrome_switches.h"
1621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/common/pref_names.h"
1721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/common/url_constants.h"
18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/test/testing_browser_process_test.h"
1921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/test/testing_pref_service.h"
2021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/test/testing_profile.h"
21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h"
2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "googleurl/src/gurl.h"
2321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "testing/gtest/include/gtest/gtest.h"
2421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace {
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ContentSettingsPrefService : public PrefService {
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public:
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ContentSettingsPrefService(PrefStore* managed_platform_prefs,
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                             PrefStore* managed_cloud_prefs,
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                             PrefStore* extension_prefs,
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                             PrefStore* command_line_prefs,
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                             PersistentPrefStore* user_prefs,
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                             PrefStore* recommended_platform_prefs,
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                             PrefStore* recommended_cloud_prefs,
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                             DefaultPrefStore* default_store)
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      : PrefService(
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          managed_platform_prefs, managed_cloud_prefs, extension_prefs,
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          command_line_prefs, user_prefs, recommended_platform_prefs,
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          recommended_cloud_prefs, default_store, NULL) {}
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual ~ContentSettingsPrefService() {}
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen};
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace content_settings {
4521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass PrefDefaultProviderTest : public TestingBrowserProcessTest {
4721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen public:
4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  PrefDefaultProviderTest()
4921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      : ui_thread_(BrowserThread::UI, &message_loop_) {
5021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
5121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
5221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen protected:
5321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  MessageLoop message_loop_;
5421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  BrowserThread ui_thread_;
5521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen};
5621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(PrefDefaultProviderTest, DefaultValues) {
5821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  TestingProfile profile;
5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  content_settings::PrefDefaultProvider provider(&profile);
6021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
6121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_FALSE(
6221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      provider.DefaultSettingIsManaged(CONTENT_SETTINGS_TYPE_COOKIES));
6321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
6421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Check setting defaults.
6521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ(CONTENT_SETTING_ALLOW,
6621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            provider.ProvideDefaultSetting(CONTENT_SETTINGS_TYPE_COOKIES));
6721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  provider.UpdateDefaultSetting(CONTENT_SETTINGS_TYPE_COOKIES,
6821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                                CONTENT_SETTING_BLOCK);
6921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ(CONTENT_SETTING_BLOCK,
7021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            provider.ProvideDefaultSetting(CONTENT_SETTINGS_TYPE_COOKIES));
7121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  provider.ResetToDefaults();
7221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ(CONTENT_SETTING_ALLOW,
7321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            provider.ProvideDefaultSetting(CONTENT_SETTINGS_TYPE_COOKIES));
7421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
7521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(PrefDefaultProviderTest, Observer) {
7721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  TestingProfile profile;
7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  PrefDefaultProvider provider(&profile);
7921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  StubSettingsObserver observer;
8021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
8121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  provider.UpdateDefaultSetting(
8221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTING_BLOCK);
8321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ(profile.GetHostContentSettingsMap(), observer.last_notifier);
8421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_TRUE(observer.last_update_all);
8521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_FALSE(observer.last_update_all_types);
8621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ(1, observer.counter);
8721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
8821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
8972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(PrefDefaultProviderTest, ObserveDefaultPref) {
9021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  TestingProfile profile;
9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  PrefDefaultProvider provider(&profile);
9221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
9321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  PrefService* prefs = profile.GetPrefs();
9421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
9521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Make a copy of the default pref value so we can reset it later.
9621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  scoped_ptr<Value> default_value(prefs->FindPreference(
9721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      prefs::kDefaultContentSettings)->GetValue()->DeepCopy());
9821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
9921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  provider.UpdateDefaultSetting(
10021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      CONTENT_SETTINGS_TYPE_COOKIES, CONTENT_SETTING_BLOCK);
10121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ(CONTENT_SETTING_BLOCK,
10221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            provider.ProvideDefaultSetting(CONTENT_SETTINGS_TYPE_COOKIES));
10321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
10421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Make a copy of the pref's new value so we can reset it later.
10521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  scoped_ptr<Value> new_value(prefs->FindPreference(
10621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      prefs::kDefaultContentSettings)->GetValue()->DeepCopy());
10721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
10821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Clearing the backing pref should also clear the internal cache.
10921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  prefs->Set(prefs::kDefaultContentSettings, *default_value);
11021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ(CONTENT_SETTING_ALLOW,
11121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            provider.ProvideDefaultSetting(CONTENT_SETTINGS_TYPE_COOKIES));
11221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
11321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Reseting the pref to its previous value should update the cache.
11421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  prefs->Set(prefs::kDefaultContentSettings, *new_value);
11521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ(CONTENT_SETTING_BLOCK,
11621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            provider.ProvideDefaultSetting(CONTENT_SETTINGS_TYPE_COOKIES));
11721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
11821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
11972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(PrefDefaultProviderTest, OffTheRecord) {
12021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  TestingProfile profile;
12172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  PrefDefaultProvider provider(&profile);
12221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  profile.set_incognito(true);
12472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  PrefDefaultProvider otr_provider(&profile);
125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  profile.set_incognito(false);
12621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
12721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ(CONTENT_SETTING_ALLOW,
12821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            provider.ProvideDefaultSetting(CONTENT_SETTINGS_TYPE_COOKIES));
12921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ(CONTENT_SETTING_ALLOW,
13021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            otr_provider.ProvideDefaultSetting(CONTENT_SETTINGS_TYPE_COOKIES));
13121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
13221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Changing content settings on the main provider should also affect the
133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // incognito map.
13421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  provider.UpdateDefaultSetting(CONTENT_SETTINGS_TYPE_COOKIES,
13521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                                CONTENT_SETTING_BLOCK);
13621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ(CONTENT_SETTING_BLOCK,
13721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            provider.ProvideDefaultSetting(CONTENT_SETTINGS_TYPE_COOKIES));
13821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ(CONTENT_SETTING_BLOCK,
13921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            otr_provider.ProvideDefaultSetting(CONTENT_SETTINGS_TYPE_COOKIES));
14021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Changing content settings on the incognito provider should be ignored.
14221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  otr_provider.UpdateDefaultSetting(CONTENT_SETTINGS_TYPE_COOKIES,
14321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                                   CONTENT_SETTING_ALLOW);
14421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ(CONTENT_SETTING_BLOCK,
14521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            provider.ProvideDefaultSetting(CONTENT_SETTINGS_TYPE_COOKIES));
14621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ(CONTENT_SETTING_BLOCK,
14721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            otr_provider.ProvideDefaultSetting(CONTENT_SETTINGS_TYPE_COOKIES));
14821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
14921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
15072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// ////////////////////////////////////////////////////////////////////////////
15172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// PrefProviderTest
15272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen//
15372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
15472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenbool SettingsEqual(const ContentSettings& settings1,
15572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                   const ContentSettings& settings2) {
15672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  for (int i = 0; i < CONTENT_SETTINGS_NUM_TYPES; ++i) {
15772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    if (settings1.settings[i] != settings2.settings[i])
15872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      return false;
15972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  }
16072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  return true;
16172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
16272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
163dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass PrefProviderTest : public TestingBrowserProcessTest {
16472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public:
16572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  PrefProviderTest() : ui_thread_(
16672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      BrowserThread::UI, &message_loop_) {
16772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  }
16872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
16972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen protected:
17072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  MessageLoop message_loop_;
17172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  BrowserThread ui_thread_;
17272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen};
17372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
17472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(PrefProviderTest, Observer) {
17572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  TestingProfile profile;
176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  profile.GetHostContentSettingsMap();
17772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  Profile* p = &profile;
17872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  PrefProvider pref_content_settings_provider(p);
17972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  StubSettingsObserver observer;
18072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ContentSettingsPattern pattern("[*.]example.com");
18172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
18272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  pref_content_settings_provider.SetContentSetting(
18372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      pattern,
18472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      pattern,
18572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      CONTENT_SETTINGS_TYPE_IMAGES,
18672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "",
18772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      CONTENT_SETTING_ALLOW);
18872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(profile.GetHostContentSettingsMap(), observer.last_notifier);
18972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(pattern, observer.last_pattern);
19072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_FALSE(observer.last_update_all);
19172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_FALSE(observer.last_update_all_types);
192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Expect 2 calls: One from the update and one from canonicalization.
193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(2, observer.counter);
194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Test for regression in which the PrefProvider modified the user pref store
197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// of the OTR unintentionally: http://crbug.com/74466.
198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(PrefProviderTest, Incognito) {
199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DefaultPrefStore* default_prefs = new DefaultPrefStore();
200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  PersistentPrefStore* user_prefs = new TestingPrefStore();
201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  OverlayPersistentPrefStore* otr_user_prefs =
202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      new OverlayPersistentPrefStore(user_prefs);
203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  PrefService* regular_prefs = new ContentSettingsPrefService(
205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NULL,  // managed_platform_prefs
206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NULL,  // managed_cloud_prefs
207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NULL,  // extension_prefs
208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NULL,  // command_line_prefs
209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      user_prefs,
210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NULL,  // recommended_platform_prefs,
211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NULL,  // recommended_cloud_prefs,
212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      default_prefs);
213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  Profile::RegisterUserPrefs(regular_prefs);
215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  browser::RegisterUserPrefs(regular_prefs);
216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  PrefService* otr_prefs = new ContentSettingsPrefService(
218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        NULL,  // managed_platform_prefs
219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        NULL,  // managed_cloud_prefs
220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        NULL,  // extension_prefs
221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        NULL,  // command_line_prefs
222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        otr_user_prefs,
223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        NULL,  // recommended_platform_prefs,
224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        NULL,  // recommended_cloud_prefs,
225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        default_prefs);
226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TestingProfile profile;
228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TestingProfile* otr_profile = new TestingProfile;
229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  profile.SetOffTheRecordProfile(otr_profile);
230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  profile.SetPrefService(regular_prefs);
231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  otr_profile->set_incognito(true);
232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  otr_profile->SetPrefService(otr_prefs);
233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  profile.GetHostContentSettingsMap();
234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  PrefProvider pref_content_settings_provider(&profile);
236ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  PrefProvider pref_content_settings_provider_incognito(otr_profile);
237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ContentSettingsPattern pattern("[*.]example.com");
238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  pref_content_settings_provider.SetContentSetting(
239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      pattern,
240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      pattern,
241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      CONTENT_SETTINGS_TYPE_IMAGES,
242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "",
243ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      CONTENT_SETTING_ALLOW);
244ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
245ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  GURL host("http://example.com/");
246ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // The value should of course be visible in the regular PrefProvider.
247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(CONTENT_SETTING_ALLOW,
248ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            pref_content_settings_provider.GetContentSetting(
249ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                host, host, CONTENT_SETTINGS_TYPE_IMAGES, ""));
250ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // And also in the OTR version.
251ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(CONTENT_SETTING_ALLOW,
252ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            pref_content_settings_provider_incognito.GetContentSetting(
253ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                host, host, CONTENT_SETTINGS_TYPE_IMAGES, ""));
254ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // But the value should not be overridden in the OTR user prefs accidentally.
255ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_FALSE(otr_user_prefs->IsSetInOverlay(prefs::kContentSettingsPatterns));
25672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
25772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
25872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(PrefProviderTest, Patterns) {
25972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  TestingProfile testing_profile;
260ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  testing_profile.GetHostContentSettingsMap();
26172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  PrefProvider pref_content_settings_provider(
26272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      testing_profile.GetOriginalProfile());
26372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
26472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  GURL host1("http://example.com/");
26572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  GURL host2("http://www.example.com/");
26672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  GURL host3("http://example.org/");
267dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  GURL host4("file:///tmp/test.html");
26872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ContentSettingsPattern pattern1("[*.]example.com");
26972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ContentSettingsPattern pattern2("example.org");
270dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  ContentSettingsPattern pattern3("file:///tmp/test.html");
27172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
27272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(CONTENT_SETTING_DEFAULT,
27372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            pref_content_settings_provider.GetContentSetting(
27472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                host1, host1, CONTENT_SETTINGS_TYPE_IMAGES, ""));
27572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  pref_content_settings_provider.SetContentSetting(
27672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      pattern1,
27772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      pattern1,
27872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      CONTENT_SETTINGS_TYPE_IMAGES,
27972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "",
28072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      CONTENT_SETTING_BLOCK);
28172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(CONTENT_SETTING_BLOCK,
28272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            pref_content_settings_provider.GetContentSetting(
28372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                host1, host1, CONTENT_SETTINGS_TYPE_IMAGES, ""));
28472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(CONTENT_SETTING_BLOCK,
28572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            pref_content_settings_provider.GetContentSetting(
28672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                host2, host2, CONTENT_SETTINGS_TYPE_IMAGES, ""));
28772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
28872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(CONTENT_SETTING_DEFAULT,
28972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            pref_content_settings_provider.GetContentSetting(
29072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                host3, host3, CONTENT_SETTINGS_TYPE_IMAGES, ""));
29172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  pref_content_settings_provider.SetContentSetting(
29272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      pattern2,
29372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      pattern2,
29472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      CONTENT_SETTINGS_TYPE_IMAGES,
29572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "",
29672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      CONTENT_SETTING_BLOCK);
29772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(CONTENT_SETTING_BLOCK,
29872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            pref_content_settings_provider.GetContentSetting(
29972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                host3, host3, CONTENT_SETTINGS_TYPE_IMAGES, ""));
300dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
301dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_EQ(CONTENT_SETTING_DEFAULT,
302dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen            pref_content_settings_provider.GetContentSetting(
303dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                host4, host4, CONTENT_SETTINGS_TYPE_IMAGES, ""));
304dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  pref_content_settings_provider.SetContentSetting(
305dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      pattern3,
306dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      pattern3,
307dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CONTENT_SETTINGS_TYPE_IMAGES,
308dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      "",
309dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      CONTENT_SETTING_BLOCK);
310dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  EXPECT_EQ(CONTENT_SETTING_BLOCK,
311dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen            pref_content_settings_provider.GetContentSetting(
312dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                host4, host4, CONTENT_SETTINGS_TYPE_IMAGES, ""));
31372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
31472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
31572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(PrefProviderTest, ResourceIdentifier) {
31672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // This feature is currently behind a flag.
31772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  CommandLine* cmd = CommandLine::ForCurrentProcess();
31872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  AutoReset<CommandLine> auto_reset(cmd, *cmd);
31972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  cmd->AppendSwitch(switches::kEnableResourceContentSettings);
32072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
32172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  TestingProfile testing_profile;
322ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  testing_profile.GetHostContentSettingsMap();
32372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  PrefProvider pref_content_settings_provider(
32472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      testing_profile.GetOriginalProfile());
32572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
32672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  GURL host("http://example.com/");
32772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ContentSettingsPattern pattern("[*.]example.com");
32872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::string resource1("someplugin");
32972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::string resource2("otherplugin");
33072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
33172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(CONTENT_SETTING_DEFAULT,
33272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            pref_content_settings_provider.GetContentSetting(
33372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                host, host, CONTENT_SETTINGS_TYPE_PLUGINS, resource1));
33472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  pref_content_settings_provider.SetContentSetting(
33572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      pattern,
33672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      pattern,
33772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      CONTENT_SETTINGS_TYPE_PLUGINS,
33872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      resource1,
33972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      CONTENT_SETTING_BLOCK);
34072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(CONTENT_SETTING_BLOCK,
34172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            pref_content_settings_provider.GetContentSetting(
34272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                host, host, CONTENT_SETTINGS_TYPE_PLUGINS, resource1));
34372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(CONTENT_SETTING_DEFAULT,
34472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            pref_content_settings_provider.GetContentSetting(
34572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                host, host, CONTENT_SETTINGS_TYPE_PLUGINS, resource2));
34672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
34772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
34872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}  // namespace content_settings
349