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