Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/content_settings/content_settings_pref_provider.h" | 5 #include "chrome/browser/content_settings/content_settings_pref_provider.h" |
| 6 | 6 |
| 7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
| 11 #include "base/prefs/default_pref_store.h" | 11 #include "base/prefs/default_pref_store.h" |
| 12 #include "base/prefs/overlay_user_pref_store.h" | 12 #include "base/prefs/overlay_user_pref_store.h" |
| 13 #include "base/prefs/public/pref_change_registrar.h" | 13 #include "base/prefs/public/pref_change_registrar.h" |
| 14 #include "base/prefs/testing_pref_store.h" | 14 #include "base/prefs/testing_pref_store.h" |
| 15 #include "base/threading/platform_thread.h" | 15 #include "base/threading/platform_thread.h" |
| 16 #include "base/values.h" | 16 #include "base/values.h" |
| 17 #include "chrome/browser/content_settings/content_settings_mock_observer.h" | 17 #include "chrome/browser/content_settings/content_settings_mock_observer.h" |
| 18 #include "chrome/browser/content_settings/content_settings_utils.h" | 18 #include "chrome/browser/content_settings/content_settings_utils.h" |
| 19 #include "chrome/browser/prefs/browser_prefs.h" | 19 #include "chrome/browser/prefs/browser_prefs.h" |
| 20 #include "chrome/browser/prefs/pref_registry_syncable.h" | |
| 20 #include "chrome/browser/prefs/pref_service.h" | 21 #include "chrome/browser/prefs/pref_service.h" |
| 21 #include "chrome/browser/prefs/pref_service_mock_builder.h" | 22 #include "chrome/browser/prefs/pref_service_mock_builder.h" |
| 23 #include "chrome/browser/prefs/pref_service_syncable.h" | |
| 22 #include "chrome/browser/prefs/scoped_user_pref_update.h" | 24 #include "chrome/browser/prefs/scoped_user_pref_update.h" |
| 23 #include "chrome/common/chrome_switches.h" | 25 #include "chrome/common/chrome_switches.h" |
| 24 #include "chrome/common/pref_names.h" | 26 #include "chrome/common/pref_names.h" |
| 25 #include "chrome/common/url_constants.h" | 27 #include "chrome/common/url_constants.h" |
| 26 #include "chrome/test/base/testing_pref_service.h" | 28 #include "chrome/test/base/testing_pref_service.h" |
| 27 #include "chrome/test/base/testing_profile.h" | 29 #include "chrome/test/base/testing_profile.h" |
| 28 #include "content/public/test/test_browser_thread.h" | 30 #include "content/public/test/test_browser_thread.h" |
| 29 #include "googleurl/src/gurl.h" | 31 #include "googleurl/src/gurl.h" |
| 30 #include "testing/gtest/include/gtest/gtest.h" | 32 #include "testing/gtest/include/gtest/gtest.h" |
| 31 | 33 |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 127 | 129 |
| 128 // Test for regression in which the PrefProvider modified the user pref store | 130 // Test for regression in which the PrefProvider modified the user pref store |
| 129 // of the OTR unintentionally: http://crbug.com/74466. | 131 // of the OTR unintentionally: http://crbug.com/74466. |
| 130 TEST_F(PrefProviderTest, Incognito) { | 132 TEST_F(PrefProviderTest, Incognito) { |
| 131 PersistentPrefStore* user_prefs = new TestingPrefStore(); | 133 PersistentPrefStore* user_prefs = new TestingPrefStore(); |
| 132 OverlayUserPrefStore* otr_user_prefs = | 134 OverlayUserPrefStore* otr_user_prefs = |
| 133 new OverlayUserPrefStore(user_prefs); | 135 new OverlayUserPrefStore(user_prefs); |
| 134 | 136 |
| 135 PrefServiceMockBuilder builder; | 137 PrefServiceMockBuilder builder; |
| 136 builder.WithUserPrefs(user_prefs); | 138 builder.WithUserPrefs(user_prefs); |
| 137 PrefServiceSyncable* regular_prefs = builder.CreateSyncable(); | 139 scoped_refptr<PrefRegistrySyncable> registry(new PrefRegistrySyncable); |
| 140 PrefServiceSyncable* regular_prefs = builder.CreateSyncable(registry); | |
|
Mattias Nissler (ping if slow)
2013/02/06 17:53:33
can we use a TestingPrefService instance here inst
Jói
2013/02/07 14:52:32
That's challenging due to the overlay-on-original
Mattias Nissler (ping if slow)
2013/02/08 11:26:56
It seems in this test they actually don't (which I
| |
| 138 | 141 |
| 139 Profile::RegisterUserPrefs(regular_prefs); | 142 Profile::RegisterUserPrefs(registry); |
| 140 chrome::RegisterUserPrefs(regular_prefs); | 143 chrome::RegisterUserPrefs(regular_prefs, registry); |
| 141 | 144 |
| 142 builder.WithUserPrefs(otr_user_prefs); | 145 builder.WithUserPrefs(otr_user_prefs); |
| 143 PrefServiceSyncable* otr_prefs = builder.CreateSyncable(); | 146 scoped_refptr<PrefRegistrySyncable> otr_registry(new PrefRegistrySyncable); |
| 147 PrefServiceSyncable* otr_prefs = builder.CreateSyncable(otr_registry); | |
|
Mattias Nissler (ping if slow)
2013/02/06 17:53:33
same here
Jói
2013/02/07 14:52:32
ditto
| |
| 144 | 148 |
| 145 Profile::RegisterUserPrefs(otr_prefs); | 149 Profile::RegisterUserPrefs(otr_registry); |
| 146 chrome::RegisterUserPrefs(otr_prefs); | 150 chrome::RegisterUserPrefs(otr_prefs, otr_registry); |
| 147 | 151 |
| 148 TestingProfile profile; | 152 TestingProfile profile; |
| 149 TestingProfile* otr_profile = new TestingProfile; | 153 TestingProfile* otr_profile = new TestingProfile; |
| 150 profile.SetOffTheRecordProfile(otr_profile); | 154 profile.SetOffTheRecordProfile(otr_profile); |
| 151 profile.SetPrefService(regular_prefs); | 155 profile.SetPrefService(regular_prefs); |
| 152 otr_profile->set_incognito(true); | 156 otr_profile->set_incognito(true); |
| 153 otr_profile->SetPrefService(otr_prefs); | 157 otr_profile->SetPrefService(otr_prefs); |
| 154 | 158 |
| 155 PrefProvider pref_content_settings_provider(regular_prefs, false); | 159 PrefProvider pref_content_settings_provider(regular_prefs, false); |
| 156 PrefProvider pref_content_settings_provider_incognito(otr_prefs, true); | 160 PrefProvider pref_content_settings_provider_incognito(otr_prefs, true); |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 361 secondary_url, | 365 secondary_url, |
| 362 CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, | 366 CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, |
| 363 std::string(), | 367 std::string(), |
| 364 false)); | 368 false)); |
| 365 provider.ShutdownOnUIThread(); | 369 provider.ShutdownOnUIThread(); |
| 366 } | 370 } |
| 367 | 371 |
| 368 // http://crosbug.com/17760 | 372 // http://crosbug.com/17760 |
| 369 TEST_F(PrefProviderTest, Deadlock) { | 373 TEST_F(PrefProviderTest, Deadlock) { |
| 370 TestingPrefServiceSyncable prefs; | 374 TestingPrefServiceSyncable prefs; |
| 371 PrefProvider::RegisterUserPrefs(&prefs); | 375 PrefProvider::RegisterUserPrefs(prefs.registry()); |
| 372 | 376 |
| 373 // Chain of events: a preference changes, |PrefProvider| notices it, and reads | 377 // Chain of events: a preference changes, |PrefProvider| notices it, and reads |
| 374 // and writes the preference. When the preference is written, a notification | 378 // and writes the preference. When the preference is written, a notification |
| 375 // is sent, and this used to happen when |PrefProvider| was still holding its | 379 // is sent, and this used to happen when |PrefProvider| was still holding its |
| 376 // lock. | 380 // lock. |
| 377 | 381 |
| 378 PrefProvider provider(&prefs, false); | 382 PrefProvider provider(&prefs, false); |
| 379 DeadlockCheckerObserver observer(&prefs, &provider); | 383 DeadlockCheckerObserver observer(&prefs, &provider); |
| 380 { | 384 { |
| 381 DictionaryPrefUpdate update(&prefs, | 385 DictionaryPrefUpdate update(&prefs, |
| 382 prefs::kContentSettingsPatternPairs); | 386 prefs::kContentSettingsPatternPairs); |
| 383 DictionaryValue* mutable_settings = update.Get(); | 387 DictionaryValue* mutable_settings = update.Get(); |
| 384 mutable_settings->SetWithoutPathExpansion("www.example.com,*", | 388 mutable_settings->SetWithoutPathExpansion("www.example.com,*", |
| 385 new base::DictionaryValue()); | 389 new base::DictionaryValue()); |
| 386 } | 390 } |
| 387 EXPECT_TRUE(observer.notification_received()); | 391 EXPECT_TRUE(observer.notification_received()); |
| 388 | 392 |
| 389 provider.ShutdownOnUIThread(); | 393 provider.ShutdownOnUIThread(); |
| 390 } | 394 } |
| 391 | 395 |
| 392 } // namespace content_settings | 396 } // namespace content_settings |
| OLD | NEW |