15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/content_settings_pref_provider.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/auto_reset.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/prefs/default_pref_store.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/prefs/overlay_user_pref_store.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_change_registrar.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/scoped_user_pref_update.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/prefs/testing_pref_store.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/platform_thread.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/content_settings_mock_observer.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/content_settings_utils.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/browser_prefs.h" 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/prefs/pref_service_mock_factory.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/prefs/pref_service_syncable.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_pref_service_syncable.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "components/user_prefs/pref_registry_syncable.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content_settings { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DeadlockCheckerThread : public base::PlatformThread::Delegate { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit DeadlockCheckerThread(PrefProvider* provider) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : provider_(provider) {} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ThreadMain() OVERRIDE { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool got_lock = provider_->lock_.Try(); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(got_lock); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (got_lock) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->lock_.Release(); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefProvider* provider_; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DeadlockCheckerThread); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A helper for observing an preference changes and testing whether 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |PrefProvider| holds a lock when the preferences change. 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DeadlockCheckerObserver { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |DeadlockCheckerObserver| doesn't take the ownership of |prefs| or 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ||provider|. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeadlockCheckerObserver(PrefService* prefs, PrefProvider* provider) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : provider_(provider), 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_received_(false) { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_change_registrar_.Init(prefs); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_change_registrar_.Add( 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kContentSettingsPatternPairs, 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind( 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &DeadlockCheckerObserver::OnContentSettingsPatternPairsChanged, 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(this))); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DeadlockCheckerObserver() {} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool notification_received() const { 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return notification_received_; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnContentSettingsPatternPairsChanged() { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check whether |provider_| holds its lock. For this, we need a 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // separate thread. 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeadlockCheckerThread thread(provider_); 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::PlatformThreadHandle handle; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(base::PlatformThread::Create(0, &thread, &handle)); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::PlatformThread::Join(handle); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_received_ = true; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefProvider* provider_; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefChangeRegistrar pref_change_registrar_; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool notification_received_; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DeadlockCheckerObserver); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrefProviderTest : public testing::Test { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefProviderTest() : ui_thread_( 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, &message_loop_) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop message_loop_; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread ui_thread_; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrefProviderTest, Observer) { 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile profile; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefProvider pref_content_settings_provider(profile.GetPrefs(), false); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern pattern = 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromString("[*.]example.com"); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings::MockObserver mock_observer; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_observer, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnContentSettingChanged(pattern, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "")); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_content_settings_provider.AddObserver(&mock_observer); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_content_settings_provider.SetWebsiteSetting( 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern, 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Value::CreateIntegerValue(CONTENT_SETTING_ALLOW)); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_content_settings_provider.ShutdownOnUIThread(); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test for regression in which the PrefProvider modified the user pref store 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of the OTR unintentionally: http://crbug.com/74466. 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrefProviderTest, Incognito) { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PersistentPrefStore* user_prefs = new TestingPrefStore(); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OverlayUserPrefStore* otr_user_prefs = 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new OverlayUserPrefStore(user_prefs); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PrefServiceMockFactory factory; 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) factory.set_user_prefs(make_scoped_refptr(user_prefs)); 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<user_prefs::PrefRegistrySyncable> registry( 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new user_prefs::PrefRegistrySyncable); 141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PrefServiceSyncable* regular_prefs = 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) factory.CreateSyncable(registry.get()).release(); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chrome::RegisterUserProfilePrefs(registry.get()); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PrefServiceMockFactory otr_factory; 147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) otr_factory.set_user_prefs(make_scoped_refptr(otr_user_prefs)); 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<user_prefs::PrefRegistrySyncable> otr_registry( 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new user_prefs::PrefRegistrySyncable); 150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PrefServiceSyncable* otr_prefs = 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) otr_factory.CreateSyncable(otr_registry.get()).release(); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chrome::RegisterUserProfilePrefs(otr_registry.get()); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingProfile::Builder profile_builder; 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_builder.SetPrefService(make_scoped_ptr(regular_prefs)); 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TestingProfile> profile = profile_builder.Build(); 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingProfile::Builder otr_profile_builder; 1603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) otr_profile_builder.SetIncognito(); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) otr_profile_builder.SetPrefService(make_scoped_ptr(otr_prefs)); 1623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) scoped_ptr<TestingProfile> otr_profile(otr_profile_builder.Build()); 1633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) profile->SetOffTheRecordProfile(otr_profile.PassAs<Profile>()); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefProvider pref_content_settings_provider(regular_prefs, false); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefProvider pref_content_settings_provider_incognito(otr_prefs, true); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern pattern = 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromString("[*.]example.com"); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_content_settings_provider.SetWebsiteSetting( 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern, 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Value::CreateIntegerValue(CONTENT_SETTING_ALLOW)); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL host("http://example.com/"); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The value should of course be visible in the regular PrefProvider. 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_ALLOW, 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSetting(&pref_content_settings_provider, 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host, 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host, 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And also in the OTR version. 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_ALLOW, 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSetting(&pref_content_settings_provider_incognito, 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host, 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host, 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // But the value should not be overridden in the OTR user prefs accidentally. 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(otr_user_prefs->IsSetInOverlay( 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kContentSettingsPatternPairs)); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_content_settings_provider.ShutdownOnUIThread(); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_content_settings_provider_incognito.ShutdownOnUIThread(); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrefProviderTest, GetContentSettingsValue) { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile testing_profile; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefProvider provider(testing_profile.GetPrefs(), false); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL primary_url("http://example.com/"); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern primary_pattern = 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromString("[*.]example.com"); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_DEFAULT, 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSetting(&provider, 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) primary_url, 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) primary_url, 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(NULL, 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSettingValue(&provider, 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) primary_url, 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) primary_url, 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider.SetWebsiteSetting(primary_pattern, 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) primary_pattern, 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Value::CreateIntegerValue(CONTENT_SETTING_BLOCK)); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_BLOCK, 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSetting(&provider, 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) primary_url, 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) primary_url, 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Value> value_ptr( 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSettingValue(&provider, 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) primary_url, 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) primary_url, 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int int_value = -1; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value_ptr->GetAsInteger(&int_value); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_BLOCK, IntToContentSetting(int_value)); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider.SetWebsiteSetting(primary_pattern, 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) primary_pattern, 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(NULL, 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSettingValue(&provider, 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) primary_url, 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) primary_url, 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider.ShutdownOnUIThread(); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrefProviderTest, Patterns) { 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile testing_profile; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefProvider pref_content_settings_provider(testing_profile.GetPrefs(), 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL host1("http://example.com/"); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL host2("http://www.example.com/"); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL host3("http://example.org/"); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL host4("file:///tmp/test.html"); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern pattern1 = 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromString("[*.]example.com"); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern pattern2 = 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromString("example.org"); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern pattern3 = 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromString("file:///tmp/test.html"); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_DEFAULT, 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSetting(&pref_content_settings_provider, 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host1, 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host1, 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_content_settings_provider.SetWebsiteSetting( 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern1, 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern1, 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Value::CreateIntegerValue(CONTENT_SETTING_BLOCK)); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_BLOCK, 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSetting(&pref_content_settings_provider, 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host1, 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host1, 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_BLOCK, 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSetting(&pref_content_settings_provider, 301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host2, 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host2, 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_DEFAULT, 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSetting(&pref_content_settings_provider, 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host3, 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host3, 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_content_settings_provider.SetWebsiteSetting( 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern2, 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern2, 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Value::CreateIntegerValue(CONTENT_SETTING_BLOCK)); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_BLOCK, 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSetting(&pref_content_settings_provider, 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host3, 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host3, 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_DEFAULT, 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetContentSetting(&pref_content_settings_provider, 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host4, 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host4, 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false)); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_content_settings_provider.SetWebsiteSetting( 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern3, 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern3, 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Value::CreateIntegerValue(CONTENT_SETTING_BLOCK)); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_BLOCK, 342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetContentSetting(&pref_content_settings_provider, 343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host4, 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host4, 345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, 346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false)); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_content_settings_provider.ShutdownOnUIThread(); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrefProviderTest, ResourceIdentifier) { 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile testing_profile; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefProvider pref_content_settings_provider(testing_profile.GetPrefs(), 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL host("http://example.com/"); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern pattern = 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromString("[*.]example.com"); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string resource1("someplugin"); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string resource2("otherplugin"); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_DEFAULT, 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetContentSetting( 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &pref_content_settings_provider, 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host, host, CONTENT_SETTINGS_TYPE_PLUGINS, 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource1, false)); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_content_settings_provider.SetWebsiteSetting( 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern, 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern, 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_PLUGINS, 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource1, 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Value::CreateIntegerValue(CONTENT_SETTING_BLOCK)); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_BLOCK, 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetContentSetting( 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &pref_content_settings_provider, 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host, host, CONTENT_SETTINGS_TYPE_PLUGINS, 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource1, false)); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_DEFAULT, 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetContentSetting( 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &pref_content_settings_provider, 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host, host, CONTENT_SETTINGS_TYPE_PLUGINS, 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource2, false)); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_content_settings_provider.ShutdownOnUIThread(); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrefProviderTest, AutoSubmitCertificateContentSetting) { 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile profile; 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable* prefs = profile.GetTestingPrefService(); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL primary_url("https://www.example.com"); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL secondary_url("https://www.sample.com"); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefProvider provider(prefs, false); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_DEFAULT, 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetContentSetting( 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &provider, 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) primary_url, 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) primary_url, 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string(), 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false)); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider.SetWebsiteSetting( 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(primary_url), 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string(), 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Value::CreateIntegerValue(CONTENT_SETTING_ALLOW)); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_ALLOW, 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetContentSetting( 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &provider, 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) primary_url, 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) secondary_url, 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string(), 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false)); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider.ShutdownOnUIThread(); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crosbug.com/17760 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrefProviderTest, Deadlock) { 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 4257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch PrefProvider::RegisterProfilePrefs(prefs.registry()); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Chain of events: a preference changes, |PrefProvider| notices it, and reads 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and writes the preference. When the preference is written, a notification 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is sent, and this used to happen when |PrefProvider| was still holding its 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // lock. 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefProvider provider(&prefs, false); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeadlockCheckerObserver observer(&prefs, &provider); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DictionaryPrefUpdate update(&prefs, 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kContentSettingsPatternPairs); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DictionaryValue* mutable_settings = update.Get(); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mutable_settings->SetWithoutPathExpansion("www.example.com,*", 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new base::DictionaryValue()); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(observer.notification_received()); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider.ShutdownOnUIThread(); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content_settings 447