summaryrefslogtreecommitdiffstats
path: root/chrome/browser/api/prefs/pref_member.cc
diff options
context:
space:
mode:
authorjoi@chromium.org <joi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-12 15:29:20 +0000
committerjoi@chromium.org <joi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-12 15:29:20 +0000
commit54ffd94accce938694d0aab9aff214d6686d9427 (patch)
tree6e40ac84f6add296f4b7b6f1312411a0f7f653b4 /chrome/browser/api/prefs/pref_member.cc
parent8c77b83c8d278b601736f6c5db9eddb7ca135bb3 (diff)
downloadchromium_src-54ffd94accce938694d0aab9aff214d6686d9427.zip
chromium_src-54ffd94accce938694d0aab9aff214d6686d9427.tar.gz
chromium_src-54ffd94accce938694d0aab9aff214d6686d9427.tar.bz2
Reland: Closure-based API to PrefChangeObserver and PrefMember.
The original was in http://codereview.chromium.org/11368098/ (landed as r166670) but seemed to increase memory usage significantly. This version does away with storing the pref name in callbacks, which should reduce memory usage. TBR=ben@chromium.org,finnur@chromium.org BUG=155525, 160177 Review URL: https://chromiumcodereview.appspot.com/11369153 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@167179 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/api/prefs/pref_member.cc')
-rw-r--r--chrome/browser/api/prefs/pref_member.cc19
1 files changed, 12 insertions, 7 deletions
diff --git a/chrome/browser/api/prefs/pref_member.cc b/chrome/browser/api/prefs/pref_member.cc
index e81b13a..5ca5e62d 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,13 +25,13 @@ PrefMemberBase::~PrefMemberBase() {
void PrefMemberBase::Init(const char* pref_name,
PrefServiceBase* prefs,
- PrefObserver* observer) {
+ const NamedChangeCallback& observer) {
DCHECK(pref_name);
DCHECK(prefs);
DCHECK(pref_name_.empty()); // Check that Init is only called once.
- observer_ = observer;
prefs_ = prefs;
pref_name_ = pref_name;
+ observer_ = observer;
// Check that the preference is registered.
DCHECK(prefs_->FindPreference(pref_name_.c_str()))
<< pref_name << " not registered.";
@@ -60,8 +60,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_.is_null())
+ observer_.Run(pref_name);
}
void PrefMemberBase::UpdateValueFromPref() const {
@@ -82,6 +82,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) {