Index: chrome/browser/prefs/pref_member.cc |
diff --git a/chrome/browser/prefs/pref_member.cc b/chrome/browser/prefs/pref_member.cc |
index 405aab63d850747d491fdfc6d5cc779a1373195c..5ccfecd70684b990f28922d72a938e0882127de2 100644 |
--- a/chrome/browser/prefs/pref_member.cc |
+++ b/chrome/browser/prefs/pref_member.cc |
@@ -7,6 +7,7 @@ |
#include "base/logging.h" |
#include "base/value_conversions.h" |
#include "chrome/browser/prefs/pref_service.h" |
+#include "content/common/notification_source.h" |
#include "content/common/notification_type.h" |
namespace subtle { |
@@ -18,8 +19,7 @@ PrefMemberBase::PrefMemberBase() |
} |
PrefMemberBase::~PrefMemberBase() { |
- if (prefs_ && !pref_name_.empty()) |
- prefs_->RemovePrefObserver(pref_name_.c_str(), this); |
+ Destroy(); |
} |
@@ -37,8 +37,15 @@ void PrefMemberBase::Init(const char* pref_name, PrefService* prefs, |
prefs_->AddPrefObserver(pref_name, this); |
} |
+void PrefMemberBase::ObserveProfileDestruction(Profile* profile) { |
+ DCHECK(registrar_.IsEmpty()); |
+ registrar_.Add(this, |
+ NotificationType::PROFILE_DESTROYED, |
+ Source<Profile>(profile)); |
+} |
+ |
void PrefMemberBase::Destroy() { |
- if (prefs_) { |
+ if (prefs_ && !pref_name_.empty()) { |
prefs_->RemovePrefObserver(pref_name_.c_str(), this); |
prefs_ = NULL; |
} |
@@ -55,11 +62,22 @@ void PrefMemberBase::MoveToThread(BrowserThread::ID thread_id) { |
void PrefMemberBase::Observe(NotificationType type, |
const NotificationSource& source, |
const NotificationDetails& details) { |
- VerifyValuePrefName(); |
- DCHECK(NotificationType::PREF_CHANGED == type); |
- UpdateValueFromPref(); |
- if (!setting_value_ && observer_) |
- observer_->Observe(type, source, details); |
+ switch (type.value) { |
+ case NotificationType::PREF_CHANGED: { |
+ VerifyValuePrefName(); |
+ UpdateValueFromPref(); |
+ if (!setting_value_ && observer_) |
+ observer_->Observe(type, source, details); |
+ break; |
+ } |
+ case NotificationType::PROFILE_DESTROYED: { |
+ Destroy(); |
+ registrar_.RemoveAll(); |
+ break; |
+ } |
Mattias Nissler (ping if slow)
2011/04/05 08:48:27
No need for curlies (or make it consistent with th
Bernhard Bauer
2011/04/05 10:48:34
Done.
|
+ default: |
+ NOTREACHED(); |
+ } |
} |
void PrefMemberBase::VerifyValuePrefName() const { |