// 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_