Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(484)

Unified Diff: services/preferences/persistent_pref_store_impl.cc

Issue 2777483002: Pref service: Add initial support for pref registration. (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: services/preferences/persistent_pref_store_impl.cc
diff --git a/services/preferences/persistent_pref_store_impl.cc b/services/preferences/persistent_pref_store_impl.cc
index d09e6549cb8e95e6df27403ab81dff53a2636827..e785fccbcdf8908ccdfd026ad5149142db40ec09 100644
--- a/services/preferences/persistent_pref_store_impl.cc
+++ b/services/preferences/persistent_pref_store_impl.cc
@@ -8,6 +8,7 @@
#include "base/auto_reset.h"
#include "base/memory/ptr_util.h"
+#include "base/stl_util.h"
#include "base/values.h"
#include "components/prefs/persistent_pref_store.h"
#include "mojo/public/cpp/bindings/binding.h"
@@ -18,10 +19,12 @@ class PersistentPrefStoreImpl::Connection : public mojom::PersistentPrefStore {
public:
Connection(PersistentPrefStoreImpl* pref_store,
mojom::PersistentPrefStoreRequest request,
- mojom::PrefStoreObserverPtr observer)
+ mojom::PrefStoreObserverPtr observer,
+ ObservedPrefs observed_keys)
: pref_store_(pref_store),
binding_(this, std::move(request)),
- observer_(std::move(observer)) {
+ observer_(std::move(observer)),
+ observed_keys_(std::move(observed_keys)) {
auto error_callback =
base::Bind(&PersistentPrefStoreImpl::Connection::OnConnectionError,
base::Unretained(this));
@@ -35,6 +38,9 @@ class PersistentPrefStoreImpl::Connection : public mojom::PersistentPrefStore {
if (write_in_progress_)
return;
+ if (!base::ContainsKey(observed_keys_, key))
tibell 2017/03/26 22:54:47 Optional: merge with previous if?
Sam McNally 2017/03/26 23:02:45 Done.
+ return;
+
observer_->OnPrefChanged(key, value ? value->CreateDeepCopy() : nullptr);
}
@@ -56,10 +62,11 @@ class PersistentPrefStoreImpl::Connection : public mojom::PersistentPrefStore {
void OnConnectionError() { pref_store_->OnConnectionError(this); }
// Owns |this|.
- PersistentPrefStoreImpl* pref_store_;
+ PersistentPrefStoreImpl* const pref_store_;
mojo::Binding<mojom::PersistentPrefStore> binding_;
mojom::PrefStoreObserverPtr observer_;
+ const ObservedPrefs observed_keys_;
// If true then a write is in progress and any update notifications should be
// ignored, as those updates would originate from ourselves.
@@ -87,7 +94,7 @@ PersistentPrefStoreImpl::~PersistentPrefStoreImpl() {
}
mojom::PersistentPrefStoreConnectionPtr
-PersistentPrefStoreImpl::CreateConnection() {
+PersistentPrefStoreImpl::CreateConnection(ObservedPrefs observed_prefs) {
DCHECK(!initializing_);
if (!backing_pref_store_->IsInitializationComplete()) {
// |backing_pref_store_| initialization failed.
@@ -100,7 +107,8 @@ PersistentPrefStoreImpl::CreateConnection() {
mojom::PrefStoreObserverRequest observer_request =
mojo::MakeRequest(&observer);
auto connection = base::MakeUnique<Connection>(
- this, mojo::MakeRequest(&pref_store_ptr), std::move(observer));
+ this, mojo::MakeRequest(&pref_store_ptr), std::move(observer),
+ std::move(observed_prefs));
auto* connection_ptr = connection.get();
connections_.insert(std::make_pair(connection_ptr, std::move(connection)));
return mojom::PersistentPrefStoreConnection::New(

Powered by Google App Engine
This is Rietveld 408576698