// 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. #ifndef CHROME_BROWSER_PREFS_PREF_SET_OBSERVER_H_ #define CHROME_BROWSER_PREFS_PREF_SET_OBSERVER_H_ #pragma once #include <set> #include "base/basictypes.h" #include "chrome/browser/prefs/pref_change_registrar.h" #include "chrome/browser/prefs/pref_service.h" #include "content/common/notification_observer.h" // Observes the state of a set of preferences and allows to query their combined // managed bits. class PrefSetObserver : public NotificationObserver { public: // Initialize with an empty set of preferences. PrefSetObserver(PrefService* pref_service, NotificationObserver* observer); virtual ~PrefSetObserver(); // Add a |pref| to the set of preferences to observe. void AddPref(const std::string& pref); // Remove |pref| from the set of observed peferences. void RemovePref(const std::string& pref); // Check whether |pref| is in the set of observed preferences. bool IsObserved(const std::string& pref); // Check whether any of the observed preferences has the managed bit set. bool IsManaged(); // Create a pref set observer for all preferences relevant to proxies. static PrefSetObserver* CreateProxyPrefSetObserver( PrefService* pref_service, NotificationObserver* observer); // Create a pref set observer for all preferences relevant to default search. static PrefSetObserver* CreateDefaultSearchPrefSetObserver( PrefService* pref_service, NotificationObserver* observer); private: // Overridden from NotificationObserver. virtual void Observe(NotificationType type, const NotificationSource& source, const NotificationDetails& details); typedef std::set<std::string> PrefSet; PrefSet prefs_; PrefService* pref_service_; PrefChangeRegistrar registrar_; NotificationObserver* observer_; DISALLOW_COPY_AND_ASSIGN(PrefSetObserver); }; #endif // CHROME_BROWSER_PREFS_PREF_SET_OBSERVER_H_