Chromium Code Reviews| Index: chrome/browser/prefs/synced_pref_change_registrar.cc |
| diff --git a/chrome/browser/prefs/synced_pref_change_registrar.cc b/chrome/browser/prefs/synced_pref_change_registrar.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..6245a5f754e739e68b3bd349e69d91fea5a8f4c3 |
| --- /dev/null |
| +++ b/chrome/browser/prefs/synced_pref_change_registrar.cc |
| @@ -0,0 +1,63 @@ |
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/prefs/synced_pref_change_registrar.h" |
| + |
| +#include "base/bind.h" |
| + |
| +namespace { |
| + |
| +void InvokeUnnamedCallback( |
| + const SyncedPrefChangeRegistrar::ChangeCallback& callback, |
| + const std::string& path, bool from_sync) { |
|
battre
2013/08/06 15:54:39
nit: each parameter into a new line.
Ken Rockot(use gerrit already)
2013/08/06 20:18:32
Done.
|
| + callback.Run(from_sync); |
| +} |
| + |
| +} // namespace |
| + |
| +SyncedPrefChangeRegistrar::SyncedPrefChangeRegistrar( |
| + PrefServiceSyncable* pref_service) { |
| + pref_service_ = pref_service; |
| +} |
| + |
| +SyncedPrefChangeRegistrar::~SyncedPrefChangeRegistrar() { |
| + RemoveAll(); |
| +} |
| + |
| +void SyncedPrefChangeRegistrar::Add(const char *path, |
|
battre
2013/08/06 15:54:39
nit: align parameters
Ken Rockot(use gerrit already)
2013/08/06 20:18:32
Done.
|
| + const ChangeCallback& callback) { |
| + Add(path, base::Bind(InvokeUnnamedCallback, callback)); |
| +} |
| + |
| +void SyncedPrefChangeRegistrar::Add(const char *path, |
| + const NamedChangeCallback& callback) { |
| + DCHECK(!IsObserved(path)); |
| + observers_[path] = callback; |
| + pref_service_->AddSyncedPrefObserver(path, this); |
| +} |
| + |
| +void SyncedPrefChangeRegistrar::Remove(const char *path) { |
| + observers_.erase(path); |
| + pref_service_->RemoveSyncedPrefObserver(path, this); |
| +} |
| + |
| +void SyncedPrefChangeRegistrar::RemoveAll() { |
| + for (ObserverMap::iterator iter = observers_.begin(); |
| + iter != observers_.end(); ++iter) { |
|
battre
2013/08/06 15:54:39
nit: +1 space indent
Ken Rockot(use gerrit already)
2013/08/06 20:18:32
Done.
|
| + pref_service_->RemoveSyncedPrefObserver(iter->first, this); |
| + } |
| + observers_.clear(); |
| +} |
| + |
| +bool SyncedPrefChangeRegistrar::IsObserved(const char* path) const { |
| + return observers_.find(path) != observers_.end(); |
| +} |
| + |
| +void SyncedPrefChangeRegistrar::OnSyncedPrefChanged(const std::string& path, |
|
battre
2013/08/06 15:54:39
nit: align parameters.
Ken Rockot(use gerrit already)
2013/08/06 20:18:32
Done.
|
| + bool from_sync) { |
| + ObserverMap::const_iterator iter = observers_.find(path); |
| + if (iter == observers_.end()) |
| + return; |
| + iter->second.Run(path, from_sync); |
| +} |