Index: chrome/browser/prefs/pref_change_registrar.cc |
diff --git a/chrome/browser/prefs/pref_change_registrar.cc b/chrome/browser/prefs/pref_change_registrar.cc |
index dc8bb97acfadf22b43243143ceffc25da0121f73..05372b1fe2a377f64e8e9686fdfeb00ef7fb461e 100644 |
--- a/chrome/browser/prefs/pref_change_registrar.cc |
+++ b/chrome/browser/prefs/pref_change_registrar.cc |
@@ -9,16 +9,11 @@ |
PrefChangeRegistrar::PrefChangeRegistrar() : service_(NULL) {} |
PrefChangeRegistrar::~PrefChangeRegistrar() { |
- if (service_) { |
- for (std::set<ObserverRegistration>::const_iterator it = observers_.begin(); |
- it != observers_.end(); ++it) { |
- service_->RemovePrefObserver(it->first.c_str(), it->second); |
- } |
- } |
+ RemoveAll(); |
} |
void PrefChangeRegistrar::Init(PrefService* service) { |
- DCHECK(!service_); |
+ DCHECK(IsEmpty() || service_ == service); |
service_ = service; |
} |
@@ -51,3 +46,17 @@ void PrefChangeRegistrar::Remove(const char* path, NotificationObserver* obs) { |
service_->RemovePrefObserver(it->first.c_str(), it->second); |
observers_.erase(it); |
} |
+ |
+void PrefChangeRegistrar::RemoveAll() { |
+ if (service_) { |
+ for (std::set<ObserverRegistration>::const_iterator it = observers_.begin(); |
+ it != observers_.end(); ++it) { |
+ service_->RemovePrefObserver(it->first.c_str(), it->second); |
+ } |
+ observers_.clear(); |
+ } |
+} |
+ |
+bool PrefChangeRegistrar::IsEmpty() const { |
+ return observers_.empty(); |
+} |