| Index: chrome/browser/prefs/pref_notifier_impl.cc
|
| diff --git a/chrome/browser/prefs/pref_notifier_impl.cc b/chrome/browser/prefs/pref_notifier_impl.cc
|
| index a226685cc058faf37911b2eb5de50e6be1422b20..0101403531fcc1d9afaff8eb022aa14ceeafcd1f 100644
|
| --- a/chrome/browser/prefs/pref_notifier_impl.cc
|
| +++ b/chrome/browser/prefs/pref_notifier_impl.cc
|
| @@ -7,9 +7,6 @@
|
| #include "base/logging.h"
|
| #include "base/stl_util.h"
|
| #include "chrome/browser/prefs/pref_service.h"
|
| -#include "chrome/common/chrome_notification_types.h"
|
| -#include "content/public/browser/notification_observer.h"
|
| -#include "content/public/browser/notification_service.h"
|
|
|
| PrefNotifierImpl::PrefNotifierImpl()
|
| : pref_service_(NULL) {
|
| @@ -25,45 +22,44 @@ PrefNotifierImpl::~PrefNotifierImpl() {
|
| // Verify that there are no pref observers when we shut down.
|
| for (PrefObserverMap::iterator it = pref_observers_.begin();
|
| it != pref_observers_.end(); ++it) {
|
| - NotificationObserverList::Iterator obs_iterator(*(it->second));
|
| + PrefObserverList::Iterator obs_iterator(*(it->second));
|
| if (obs_iterator.GetNext()) {
|
| LOG(WARNING) << "pref observer found at shutdown " << it->first;
|
| }
|
| }
|
|
|
| + // Same for initialization observers.
|
| + PrefInitObserverList::Iterator init_it(init_observers_);
|
| + if (init_it.GetNext()) {
|
| + LOG(WARNING) << "Init observer found at shutdown.";
|
| + }
|
| +
|
| STLDeleteContainerPairSecondPointers(pref_observers_.begin(),
|
| pref_observers_.end());
|
| pref_observers_.clear();
|
| + init_observers_.Clear();
|
| }
|
|
|
| void PrefNotifierImpl::AddPrefObserver(const char* path,
|
| - content::NotificationObserver* obs) {
|
| + PrefObserver* obs) {
|
| // Get the pref observer list associated with the path.
|
| - NotificationObserverList* observer_list = NULL;
|
| + PrefObserverList* observer_list = NULL;
|
| const PrefObserverMap::iterator observer_iterator =
|
| pref_observers_.find(path);
|
| if (observer_iterator == pref_observers_.end()) {
|
| - observer_list = new NotificationObserverList;
|
| + observer_list = new PrefObserverList;
|
| pref_observers_[path] = observer_list;
|
| } else {
|
| observer_list = observer_iterator->second;
|
| }
|
|
|
| - // Verify that this observer doesn't already exist.
|
| - NotificationObserverList::Iterator it(*observer_list);
|
| - content::NotificationObserver* existing_obs;
|
| - while ((existing_obs = it.GetNext()) != NULL) {
|
| - DCHECK(existing_obs != obs) << path << " observer already registered";
|
| - if (existing_obs == obs)
|
| - return;
|
| - }
|
| -
|
| - // Ok, safe to add the pref observer.
|
| + // Add the pref observer. ObserverList will DCHECK if it already is
|
| + // in the list.
|
| observer_list->AddObserver(obs);
|
| }
|
|
|
| void PrefNotifierImpl::RemovePrefObserver(const char* path,
|
| - content::NotificationObserver* obs) {
|
| + PrefObserver* obs) {
|
| DCHECK(CalledOnValidThread());
|
|
|
| const PrefObserverMap::iterator observer_iterator =
|
| @@ -72,10 +68,18 @@ void PrefNotifierImpl::RemovePrefObserver(const char* path,
|
| return;
|
| }
|
|
|
| - NotificationObserverList* observer_list = observer_iterator->second;
|
| + PrefObserverList* observer_list = observer_iterator->second;
|
| observer_list->RemoveObserver(obs);
|
| }
|
|
|
| +void PrefNotifierImpl::AddInitObserver(PrefInitObserver* obs) {
|
| + init_observers_.AddObserver(obs);
|
| +}
|
| +
|
| +void PrefNotifierImpl::RemoveInitObserver(PrefInitObserver* obs) {
|
| + init_observers_.RemoveObserver(obs);
|
| +}
|
| +
|
| void PrefNotifierImpl::OnPreferenceChanged(const std::string& path) {
|
| FireObservers(path);
|
| }
|
| @@ -83,10 +87,9 @@ void PrefNotifierImpl::OnPreferenceChanged(const std::string& path) {
|
| void PrefNotifierImpl::OnInitializationCompleted(bool succeeded) {
|
| DCHECK(CalledOnValidThread());
|
|
|
| - content::NotificationService::current()->Notify(
|
| - chrome::NOTIFICATION_PREF_INITIALIZATION_COMPLETED,
|
| - content::Source<PrefService>(pref_service_),
|
| - content::Details<bool>(&succeeded));
|
| + FOR_EACH_OBSERVER(PrefInitObserver,
|
| + init_observers_,
|
| + OnInitializationCompleted(pref_service_, succeeded));
|
| }
|
|
|
| void PrefNotifierImpl::FireObservers(const std::string& path) {
|
| @@ -101,13 +104,9 @@ void PrefNotifierImpl::FireObservers(const std::string& path) {
|
| if (observer_iterator == pref_observers_.end())
|
| return;
|
|
|
| - NotificationObserverList::Iterator it(*(observer_iterator->second));
|
| - content::NotificationObserver* observer;
|
| - while ((observer = it.GetNext()) != NULL) {
|
| - observer->Observe(chrome::NOTIFICATION_PREF_CHANGED,
|
| - content::Source<PrefService>(pref_service_),
|
| - content::Details<const std::string>(&path));
|
| - }
|
| + FOR_EACH_OBSERVER(PrefObserver,
|
| + *(observer_iterator->second),
|
| + OnPreferenceChanged(pref_service_, path));
|
| }
|
|
|
| void PrefNotifierImpl::SetPrefService(PrefService* pref_service) {
|
|
|