// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/prefs/pref_set_observer.h" #include "chrome/common/pref_names.h" #include "content/common/notification_type.h" PrefSetObserver::PrefSetObserver(PrefService* pref_service, NotificationObserver* observer) : pref_service_(pref_service), observer_(observer) { registrar_.Init(pref_service); } PrefSetObserver::~PrefSetObserver() {} void PrefSetObserver::AddPref(const std::string& pref) { if (!prefs_.count(pref) && pref_service_->FindPreference(pref.c_str())) { prefs_.insert(pref); registrar_.Add(pref.c_str(), this); } } void PrefSetObserver::RemovePref(const std::string& pref) { if (prefs_.erase(pref)) registrar_.Remove(pref.c_str(), this); } bool PrefSetObserver::IsObserved(const std::string& pref) { return prefs_.count(pref) > 0; } bool PrefSetObserver::IsManaged() { for (PrefSet::const_iterator i(prefs_.begin()); i != prefs_.end(); ++i) { const PrefService::Preference* pref = pref_service_->FindPreference(i->c_str()); if (pref && pref->IsManaged()) return true; } return false; } // static PrefSetObserver* PrefSetObserver::CreateProxyPrefSetObserver( PrefService* pref_service, NotificationObserver* observer) { PrefSetObserver* pref_set = new PrefSetObserver(pref_service, observer); pref_set->AddPref(prefs::kProxy); return pref_set; } // static PrefSetObserver* PrefSetObserver::CreateDefaultSearchPrefSetObserver( PrefService* pref_service, NotificationObserver* observer) { PrefSetObserver* pref_set = new PrefSetObserver(pref_service, observer); pref_set->AddPref(prefs::kDefaultSearchProviderEnabled); pref_set->AddPref(prefs::kDefaultSearchProviderName); pref_set->AddPref(prefs::kDefaultSearchProviderKeyword); pref_set->AddPref(prefs::kDefaultSearchProviderSearchURL); pref_set->AddPref(prefs::kDefaultSearchProviderSuggestURL); pref_set->AddPref(prefs::kDefaultSearchProviderIconURL); pref_set->AddPref(prefs::kDefaultSearchProviderInstantURL); pref_set->AddPref(prefs::kDefaultSearchProviderEncodings); return pref_set; } void PrefSetObserver::Observe(NotificationType type, const NotificationSource& source, const NotificationDetails& details) { if (observer_) observer_->Observe(type, source, details); }