| Index: chrome/browser/api/prefs/pref_member.cc
|
| diff --git a/chrome/browser/api/prefs/pref_member.cc b/chrome/browser/api/prefs/pref_member.cc
|
| index e81b13a61081620b7495dbb94ac4f697fe0d344d..a96b35f0cd2d6db66a273bfea1d4e2f0fa158464 100644
|
| --- a/chrome/browser/api/prefs/pref_member.cc
|
| +++ b/chrome/browser/api/prefs/pref_member.cc
|
| @@ -4,7 +4,8 @@
|
|
|
| #include "chrome/browser/api/prefs/pref_member.h"
|
|
|
| -#include "base/bind.h"
|
| +#include "base/bind_helpers.h"
|
| +#include "base/callback.h"
|
| #include "base/location.h"
|
| #include "base/prefs/public/pref_service_base.h"
|
| #include "base/value_conversions.h"
|
| @@ -14,8 +15,7 @@ using base::MessageLoopProxy;
|
| namespace subtle {
|
|
|
| PrefMemberBase::PrefMemberBase()
|
| - : observer_(NULL),
|
| - prefs_(NULL),
|
| + : prefs_(NULL),
|
| setting_value_(false) {
|
| }
|
|
|
| @@ -25,11 +25,16 @@ PrefMemberBase::~PrefMemberBase() {
|
|
|
| void PrefMemberBase::Init(const char* pref_name,
|
| PrefServiceBase* prefs,
|
| - PrefObserver* observer) {
|
| + const NamedChangeCallback& observer) {
|
| + observer_.reset(new NamedChangeCallback(observer));
|
| + Init(pref_name, prefs);
|
| +}
|
| +
|
| +void PrefMemberBase::Init(const char* pref_name,
|
| + PrefServiceBase* prefs) {
|
| DCHECK(pref_name);
|
| DCHECK(prefs);
|
| DCHECK(pref_name_.empty()); // Check that Init is only called once.
|
| - observer_ = observer;
|
| prefs_ = prefs;
|
| pref_name_ = pref_name;
|
| // Check that the preference is registered.
|
| @@ -60,8 +65,8 @@ void PrefMemberBase::OnPreferenceChanged(PrefServiceBase* service,
|
| const std::string& pref_name) {
|
| VerifyValuePrefName();
|
| UpdateValueFromPref();
|
| - if (!setting_value_ && observer_)
|
| - observer_->OnPreferenceChanged(service, pref_name);
|
| + if (!setting_value_ && observer_.get())
|
| + observer_->Run(pref_name);
|
| }
|
|
|
| void PrefMemberBase::UpdateValueFromPref() const {
|
| @@ -82,6 +87,11 @@ void PrefMemberBase::VerifyPref() const {
|
| UpdateValueFromPref();
|
| }
|
|
|
| +void PrefMemberBase::InvokeUnnamedCallback(const base::Closure& callback,
|
| + const std::string& pref_name) {
|
| + callback.Run();
|
| +}
|
| +
|
| PrefMemberBase::Internal::Internal()
|
| : thread_loop_(MessageLoopProxy::current()),
|
| is_managed_(false) {
|
|
|