| // Copyright (c) 2010 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_CHANGE_REGISTRAR_H_ |
| #define CHROME_BROWSER_PREFS_PREF_CHANGE_REGISTRAR_H_ |
| #pragma once |
| |
| #include <set> |
| #include <string> |
| |
| #include "base/basictypes.h" |
| |
| class PrefService; |
| class NotificationObserver; |
| |
| // Automatically manages the registration of one or more pref change observers |
| // with a PrefStore. Functions much like NotificationRegistrar, but specifically |
| // manages observers of preference changes. When the Registrar is destroyed, |
| // all registered observers are automatically unregistered with the PrefStore. |
| class PrefChangeRegistrar { |
| public: |
| PrefChangeRegistrar(); |
| virtual ~PrefChangeRegistrar(); |
| |
| // Must be called before adding or removing observers. Can be called more |
| // than once as long as the value of |service| doesn't change. |
| void Init(PrefService* service); |
| |
| // Adds an pref observer for the specified pref |path| and |obs| observer |
| // object. All registered observers will be automatically unregistered |
| // when the registrar's destructor is called unless the observer has been |
| // explicitly removed by a call to Remove beforehand. |
| void Add(const char* path, |
| NotificationObserver* obs); |
| |
| // Removes a preference observer that has previously been added with a call to |
| // Add. |
| void Remove(const char* path, |
| NotificationObserver* obs); |
| |
| // Removes all observers that have been previously added with a call to Add. |
| void RemoveAll(); |
| |
| // Returns true if no pref observers are registered. |
| bool IsEmpty() const; |
| |
| private: |
| typedef std::pair<std::string, NotificationObserver*> ObserverRegistration; |
| |
| std::set<ObserverRegistration> observers_; |
| PrefService* service_; |
| |
| DISALLOW_COPY_AND_ASSIGN(PrefChangeRegistrar); |
| }; |
| |
| #endif // CHROME_BROWSER_PREFS_PREF_CHANGE_REGISTRAR_H_ |