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

Unified Diff: services/preferences/persistent_pref_store_impl.cc

Issue 2777483002: Pref service: Add initial support for pref registration. (Closed)
Patch Set: rebase 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..ad85c96a68207a9b4669db504887957b7f2d860f 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));
@@ -32,7 +35,7 @@ class PersistentPrefStoreImpl::Connection : public mojom::PersistentPrefStore {
~Connection() override = default;
void OnPrefValueChanged(const std::string& key, const base::Value* value) {
- if (write_in_progress_)
+ if (write_in_progress_ || !base::ContainsKey(observed_keys_, key))
return;
observer_->OnPrefChanged(key, value ? value->CreateDeepCopy() : nullptr);
@@ -56,10 +59,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 +91,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 +104,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(
« no previous file with comments | « services/preferences/persistent_pref_store_impl.h ('k') | services/preferences/persistent_pref_store_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698