| 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();
 | 
| +}
 | 
| 
 |