Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(343)

Side by Side Diff: chrome/browser/content_settings/content_settings_pref_provider_unittest.cc

Issue 596613002: Remove content dependencies from content settings providers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: shutdown fix Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/message_loop.h"
11 #include "base/prefs/default_pref_store.h" 10 #include "base/prefs/default_pref_store.h"
12 #include "base/prefs/overlay_user_pref_store.h" 11 #include "base/prefs/overlay_user_pref_store.h"
13 #include "base/prefs/pref_change_registrar.h" 12 #include "base/prefs/pref_change_registrar.h"
14 #include "base/prefs/pref_service.h" 13 #include "base/prefs/pref_service.h"
15 #include "base/prefs/scoped_user_pref_update.h" 14 #include "base/prefs/scoped_user_pref_update.h"
16 #include "base/prefs/testing_pref_store.h" 15 #include "base/prefs/testing_pref_store.h"
17 #include "base/test/simple_test_clock.h" 16 #include "base/test/simple_test_clock.h"
18 #include "base/threading/platform_thread.h" 17 #include "base/threading/platform_thread.h"
19 #include "base/values.h" 18 #include "base/values.h"
20 #include "chrome/browser/content_settings/content_settings_mock_observer.h" 19 #include "chrome/browser/content_settings/content_settings_mock_observer.h"
21 #include "chrome/browser/content_settings/content_settings_utils.h" 20 #include "chrome/browser/content_settings/content_settings_utils.h"
22 #include "chrome/browser/prefs/browser_prefs.h" 21 #include "chrome/browser/prefs/browser_prefs.h"
23 #include "chrome/browser/prefs/pref_service_mock_factory.h" 22 #include "chrome/browser/prefs/pref_service_mock_factory.h"
24 #include "chrome/browser/prefs/pref_service_syncable.h" 23 #include "chrome/browser/prefs/pref_service_syncable.h"
25 #include "chrome/common/chrome_switches.h" 24 #include "chrome/common/chrome_switches.h"
26 #include "chrome/common/pref_names.h" 25 #include "chrome/common/pref_names.h"
27 #include "chrome/common/url_constants.h" 26 #include "chrome/common/url_constants.h"
28 #include "chrome/test/base/testing_pref_service_syncable.h" 27 #include "chrome/test/base/testing_pref_service_syncable.h"
29 #include "chrome/test/base/testing_profile.h" 28 #include "chrome/test/base/testing_profile.h"
30 #include "components/pref_registry/pref_registry_syncable.h" 29 #include "components/pref_registry/pref_registry_syncable.h"
31 #include "content/public/test/test_browser_thread.h"
32 #include "testing/gtest/include/gtest/gtest.h" 30 #include "testing/gtest/include/gtest/gtest.h"
33 #include "url/gurl.h" 31 #include "url/gurl.h"
34 32
35 using ::testing::_; 33 using ::testing::_;
36 using content::BrowserThread;
37 34
38 namespace content_settings { 35 namespace content_settings {
39 36
40 class DeadlockCheckerThread : public base::PlatformThread::Delegate { 37 class DeadlockCheckerThread : public base::PlatformThread::Delegate {
41 public: 38 public:
42 explicit DeadlockCheckerThread(PrefProvider* provider) 39 explicit DeadlockCheckerThread(PrefProvider* provider)
43 : provider_(provider) {} 40 : provider_(provider) {}
44 41
45 virtual void ThreadMain() OVERRIDE { 42 virtual void ThreadMain() OVERRIDE {
46 bool got_lock = provider_->lock_.Try(); 43 bool got_lock = provider_->lock_.Try();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 base::PlatformThread::Join(handle); 82 base::PlatformThread::Join(handle);
86 notification_received_ = true; 83 notification_received_ = true;
87 } 84 }
88 85
89 PrefProvider* provider_; 86 PrefProvider* provider_;
90 PrefChangeRegistrar pref_change_registrar_; 87 PrefChangeRegistrar pref_change_registrar_;
91 bool notification_received_; 88 bool notification_received_;
92 DISALLOW_COPY_AND_ASSIGN(DeadlockCheckerObserver); 89 DISALLOW_COPY_AND_ASSIGN(DeadlockCheckerObserver);
93 }; 90 };
94 91
95 class PrefProviderTest : public testing::Test { 92 TEST(PrefProviderTest, Observer) {
96 public:
97 PrefProviderTest() : ui_thread_(
98 BrowserThread::UI, &message_loop_) {
99 }
100
101 protected:
102 base::MessageLoop message_loop_;
103 content::TestBrowserThread ui_thread_;
104 };
105
106 TEST_F(PrefProviderTest, Observer) {
107 TestingProfile profile; 93 TestingProfile profile;
108 PrefProvider pref_content_settings_provider(profile.GetPrefs(), false); 94 PrefProvider pref_content_settings_provider(profile.GetPrefs(), false);
109 95
110 ContentSettingsPattern pattern = 96 ContentSettingsPattern pattern =
111 ContentSettingsPattern::FromString("[*.]example.com"); 97 ContentSettingsPattern::FromString("[*.]example.com");
112 content_settings::MockObserver mock_observer; 98 content_settings::MockObserver mock_observer;
113 EXPECT_CALL(mock_observer, 99 EXPECT_CALL(mock_observer,
114 OnContentSettingChanged(pattern, 100 OnContentSettingChanged(pattern,
115 ContentSettingsPattern::Wildcard(), 101 ContentSettingsPattern::Wildcard(),
116 CONTENT_SETTINGS_TYPE_IMAGES, 102 CONTENT_SETTINGS_TYPE_IMAGES,
117 "")); 103 ""));
118 104
119 pref_content_settings_provider.AddObserver(&mock_observer); 105 pref_content_settings_provider.AddObserver(&mock_observer);
120 106
121 pref_content_settings_provider.SetWebsiteSetting( 107 pref_content_settings_provider.SetWebsiteSetting(
122 pattern, 108 pattern,
123 ContentSettingsPattern::Wildcard(), 109 ContentSettingsPattern::Wildcard(),
124 CONTENT_SETTINGS_TYPE_IMAGES, 110 CONTENT_SETTINGS_TYPE_IMAGES,
125 std::string(), 111 std::string(),
126 new base::FundamentalValue(CONTENT_SETTING_ALLOW)); 112 new base::FundamentalValue(CONTENT_SETTING_ALLOW));
127 113
128 pref_content_settings_provider.ShutdownOnUIThread(); 114 pref_content_settings_provider.ShutdownOnUIThread();
129 } 115 }
130 116
131 // Test for regression in which the PrefProvider modified the user pref store 117 // Test for regression in which the PrefProvider modified the user pref store
132 // of the OTR unintentionally: http://crbug.com/74466. 118 // of the OTR unintentionally: http://crbug.com/74466.
133 TEST_F(PrefProviderTest, Incognito) { 119 TEST(PrefProviderTest, Incognito) {
134 PersistentPrefStore* user_prefs = new TestingPrefStore(); 120 PersistentPrefStore* user_prefs = new TestingPrefStore();
135 OverlayUserPrefStore* otr_user_prefs = 121 OverlayUserPrefStore* otr_user_prefs =
136 new OverlayUserPrefStore(user_prefs); 122 new OverlayUserPrefStore(user_prefs);
137 123
138 PrefServiceMockFactory factory; 124 PrefServiceMockFactory factory;
139 factory.set_user_prefs(make_scoped_refptr(user_prefs)); 125 factory.set_user_prefs(make_scoped_refptr(user_prefs));
140 scoped_refptr<user_prefs::PrefRegistrySyncable> registry( 126 scoped_refptr<user_prefs::PrefRegistrySyncable> registry(
141 new user_prefs::PrefRegistrySyncable); 127 new user_prefs::PrefRegistrySyncable);
142 PrefServiceSyncable* regular_prefs = 128 PrefServiceSyncable* regular_prefs =
143 factory.CreateSyncable(registry.get()).release(); 129 factory.CreateSyncable(registry.get()).release();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 std::string(), 176 std::string(),
191 false)); 177 false));
192 // But the value should not be overridden in the OTR user prefs accidentally. 178 // But the value should not be overridden in the OTR user prefs accidentally.
193 EXPECT_FALSE(otr_user_prefs->IsSetInOverlay( 179 EXPECT_FALSE(otr_user_prefs->IsSetInOverlay(
194 prefs::kContentSettingsPatternPairs)); 180 prefs::kContentSettingsPatternPairs));
195 181
196 pref_content_settings_provider.ShutdownOnUIThread(); 182 pref_content_settings_provider.ShutdownOnUIThread();
197 pref_content_settings_provider_incognito.ShutdownOnUIThread(); 183 pref_content_settings_provider_incognito.ShutdownOnUIThread();
198 } 184 }
199 185
200 TEST_F(PrefProviderTest, GetContentSettingsValue) { 186 TEST(PrefProviderTest, GetContentSettingsValue) {
201 TestingProfile testing_profile; 187 TestingProfile testing_profile;
202 PrefProvider provider(testing_profile.GetPrefs(), false); 188 PrefProvider provider(testing_profile.GetPrefs(), false);
203 189
204 GURL primary_url("http://example.com/"); 190 GURL primary_url("http://example.com/");
205 ContentSettingsPattern primary_pattern = 191 ContentSettingsPattern primary_pattern =
206 ContentSettingsPattern::FromString("[*.]example.com"); 192 ContentSettingsPattern::FromString("[*.]example.com");
207 193
208 EXPECT_EQ(CONTENT_SETTING_DEFAULT, 194 EXPECT_EQ(CONTENT_SETTING_DEFAULT,
209 GetContentSetting(&provider, 195 GetContentSetting(&provider,
210 primary_url, 196 primary_url,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 EXPECT_EQ(NULL, 238 EXPECT_EQ(NULL,
253 GetContentSettingValue(&provider, 239 GetContentSettingValue(&provider,
254 primary_url, 240 primary_url,
255 primary_url, 241 primary_url,
256 CONTENT_SETTINGS_TYPE_IMAGES, 242 CONTENT_SETTINGS_TYPE_IMAGES,
257 std::string(), 243 std::string(),
258 false)); 244 false));
259 provider.ShutdownOnUIThread(); 245 provider.ShutdownOnUIThread();
260 } 246 }
261 247
262 TEST_F(PrefProviderTest, Patterns) { 248 TEST(PrefProviderTest, Patterns) {
263 TestingProfile testing_profile; 249 TestingProfile testing_profile;
264 PrefProvider pref_content_settings_provider(testing_profile.GetPrefs(), 250 PrefProvider pref_content_settings_provider(testing_profile.GetPrefs(),
265 false); 251 false);
266 252
267 GURL host1("http://example.com/"); 253 GURL host1("http://example.com/");
268 GURL host2("http://www.example.com/"); 254 GURL host2("http://www.example.com/");
269 GURL host3("http://example.org/"); 255 GURL host3("http://example.org/");
270 GURL host4("file:///tmp/test.html"); 256 GURL host4("file:///tmp/test.html");
271 ContentSettingsPattern pattern1 = 257 ContentSettingsPattern pattern1 =
272 ContentSettingsPattern::FromString("[*.]example.com"); 258 ContentSettingsPattern::FromString("[*.]example.com");
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 GetContentSetting(&pref_content_settings_provider, 327 GetContentSetting(&pref_content_settings_provider,
342 host4, 328 host4,
343 host4, 329 host4,
344 CONTENT_SETTINGS_TYPE_IMAGES, 330 CONTENT_SETTINGS_TYPE_IMAGES,
345 std::string(), 331 std::string(),
346 false)); 332 false));
347 333
348 pref_content_settings_provider.ShutdownOnUIThread(); 334 pref_content_settings_provider.ShutdownOnUIThread();
349 } 335 }
350 336
351 TEST_F(PrefProviderTest, ResourceIdentifier) { 337 TEST(PrefProviderTest, ResourceIdentifier) {
352 TestingProfile testing_profile; 338 TestingProfile testing_profile;
353 PrefProvider pref_content_settings_provider(testing_profile.GetPrefs(), 339 PrefProvider pref_content_settings_provider(testing_profile.GetPrefs(),
354 false); 340 false);
355 341
356 GURL host("http://example.com/"); 342 GURL host("http://example.com/");
357 ContentSettingsPattern pattern = 343 ContentSettingsPattern pattern =
358 ContentSettingsPattern::FromString("[*.]example.com"); 344 ContentSettingsPattern::FromString("[*.]example.com");
359 std::string resource1("someplugin"); 345 std::string resource1("someplugin");
360 std::string resource2("otherplugin"); 346 std::string resource2("otherplugin");
361 347
(...skipping 15 matching lines...) Expand all
377 resource1, false)); 363 resource1, false));
378 EXPECT_EQ(CONTENT_SETTING_DEFAULT, 364 EXPECT_EQ(CONTENT_SETTING_DEFAULT,
379 GetContentSetting( 365 GetContentSetting(
380 &pref_content_settings_provider, 366 &pref_content_settings_provider,
381 host, host, CONTENT_SETTINGS_TYPE_PLUGINS, 367 host, host, CONTENT_SETTINGS_TYPE_PLUGINS,
382 resource2, false)); 368 resource2, false));
383 369
384 pref_content_settings_provider.ShutdownOnUIThread(); 370 pref_content_settings_provider.ShutdownOnUIThread();
385 } 371 }
386 372
387 TEST_F(PrefProviderTest, AutoSubmitCertificateContentSetting) { 373 TEST(PrefProviderTest, AutoSubmitCertificateContentSetting) {
388 TestingProfile profile; 374 TestingProfile profile;
389 TestingPrefServiceSyncable* prefs = profile.GetTestingPrefService(); 375 TestingPrefServiceSyncable* prefs = profile.GetTestingPrefService();
390 GURL primary_url("https://www.example.com"); 376 GURL primary_url("https://www.example.com");
391 GURL secondary_url("https://www.sample.com"); 377 GURL secondary_url("https://www.sample.com");
392 378
393 PrefProvider provider(prefs, false); 379 PrefProvider provider(prefs, false);
394 380
395 EXPECT_EQ(CONTENT_SETTING_DEFAULT, 381 EXPECT_EQ(CONTENT_SETTING_DEFAULT,
396 GetContentSetting( 382 GetContentSetting(
397 &provider, 383 &provider,
(...skipping 13 matching lines...) Expand all
411 &provider, 397 &provider,
412 primary_url, 398 primary_url,
413 secondary_url, 399 secondary_url,
414 CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, 400 CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE,
415 std::string(), 401 std::string(),
416 false)); 402 false));
417 provider.ShutdownOnUIThread(); 403 provider.ShutdownOnUIThread();
418 } 404 }
419 405
420 // http://crosbug.com/17760 406 // http://crosbug.com/17760
421 TEST_F(PrefProviderTest, Deadlock) { 407 TEST(PrefProviderTest, Deadlock) {
422 TestingPrefServiceSyncable prefs; 408 TestingPrefServiceSyncable prefs;
423 PrefProvider::RegisterProfilePrefs(prefs.registry()); 409 PrefProvider::RegisterProfilePrefs(prefs.registry());
424 410
425 // Chain of events: a preference changes, |PrefProvider| notices it, and reads 411 // Chain of events: a preference changes, |PrefProvider| notices it, and reads
426 // and writes the preference. When the preference is written, a notification 412 // and writes the preference. When the preference is written, a notification
427 // is sent, and this used to happen when |PrefProvider| was still holding its 413 // is sent, and this used to happen when |PrefProvider| was still holding its
428 // lock. 414 // lock.
429 415
430 PrefProvider provider(&prefs, false); 416 PrefProvider provider(&prefs, false);
431 DeadlockCheckerObserver observer(&prefs, &provider); 417 DeadlockCheckerObserver observer(&prefs, &provider);
432 { 418 {
433 DictionaryPrefUpdate update(&prefs, 419 DictionaryPrefUpdate update(&prefs,
434 prefs::kContentSettingsPatternPairs); 420 prefs::kContentSettingsPatternPairs);
435 base::DictionaryValue* mutable_settings = update.Get(); 421 base::DictionaryValue* mutable_settings = update.Get();
436 mutable_settings->SetWithoutPathExpansion("www.example.com,*", 422 mutable_settings->SetWithoutPathExpansion("www.example.com,*",
437 new base::DictionaryValue()); 423 new base::DictionaryValue());
438 } 424 }
439 EXPECT_TRUE(observer.notification_received()); 425 EXPECT_TRUE(observer.notification_received());
440 426
441 provider.ShutdownOnUIThread(); 427 provider.ShutdownOnUIThread();
442 } 428 }
443 429
444 TEST_F(PrefProviderTest, LastUsage) { 430 TEST(PrefProviderTest, LastUsage) {
445 TestingProfile testing_profile; 431 TestingProfile testing_profile;
446 PrefProvider pref_content_settings_provider(testing_profile.GetPrefs(), 432 PrefProvider pref_content_settings_provider(testing_profile.GetPrefs(),
447 false); 433 false);
448 base::SimpleTestClock* test_clock = new base::SimpleTestClock; 434 base::SimpleTestClock* test_clock = new base::SimpleTestClock;
449 test_clock->SetNow(base::Time::Now()); 435 test_clock->SetNow(base::Time::Now());
450 436
451 pref_content_settings_provider.SetClockForTesting( 437 pref_content_settings_provider.SetClockForTesting(
452 scoped_ptr<base::Clock>(test_clock)); 438 scoped_ptr<base::Clock>(test_clock));
453 GURL host("http://example.com/"); 439 GURL host("http://example.com/");
454 ContentSettingsPattern pattern = 440 ContentSettingsPattern pattern =
(...skipping 15 matching lines...) Expand all
470 base::Time second = pref_content_settings_provider.GetLastUsage( 456 base::Time second = pref_content_settings_provider.GetLastUsage(
471 pattern, pattern, CONTENT_SETTINGS_TYPE_GEOLOCATION); 457 pattern, pattern, CONTENT_SETTINGS_TYPE_GEOLOCATION);
472 458
473 base::TimeDelta delta = second - first; 459 base::TimeDelta delta = second - first;
474 EXPECT_EQ(delta.InSeconds(), 10); 460 EXPECT_EQ(delta.InSeconds(), 10);
475 461
476 pref_content_settings_provider.ShutdownOnUIThread(); 462 pref_content_settings_provider.ShutdownOnUIThread();
477 } 463 }
478 464
479 } // namespace content_settings 465 } // namespace content_settings
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698