| 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) {
|
| + callback.Run(from_sync);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +SyncedPrefChangeRegistrar::SyncedPrefChangeRegistrar(
|
| + PrefServiceSyncable* pref_service) {
|
| + pref_service_ = pref_service;
|
| +}
|
| +
|
| +SyncedPrefChangeRegistrar::~SyncedPrefChangeRegistrar() {
|
| + RemoveAll();
|
| +}
|
| +
|
| +void SyncedPrefChangeRegistrar::Add(const char *path,
|
| + 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) {
|
| + 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,
|
| + bool from_sync) {
|
| + ObserverMap::const_iterator iter = observers_.find(path);
|
| + if (iter == observers_.end())
|
| + return;
|
| + iter->second.Run(path, from_sync);
|
| +}
|
|
|