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