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

Unified Diff: services/preferences/pref_store_manager_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
« no previous file with comments | « services/preferences/pref_store_manager_impl.h ('k') | services/preferences/public/cpp/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/preferences/pref_store_manager_impl.cc
diff --git a/services/preferences/pref_store_manager_impl.cc b/services/preferences/pref_store_manager_impl.cc
index 19200390de66c6b84253b7a25cd8a76ae45d9d59..bc3e48772cbe41317e8c457f8a008e2c2fe6bbcc 100644
--- a/services/preferences/pref_store_manager_impl.cc
+++ b/services/preferences/pref_store_manager_impl.cc
@@ -8,10 +8,12 @@
#include "base/memory/ref_counted.h"
#include "base/threading/sequenced_worker_pool.h"
+#include "components/prefs/default_pref_store.h"
#include "components/prefs/pref_value_store.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "services/preferences/persistent_pref_store_factory.h"
#include "services/preferences/persistent_pref_store_impl.h"
+#include "services/preferences/public/cpp/pref_store_impl.h"
#include "services/service_manager/public/cpp/interface_registry.h"
namespace prefs {
@@ -68,13 +70,6 @@ void ConnectionBarrier::Create(
}
void ConnectionBarrier::Init(const PrefStorePtrs& pref_store_ptrs) {
- if (expected_connections_ == 0) {
- // Degenerate case. We don't expect this, but it could happen in
- // e.g. testing.
- callback_.Run(std::move(persistent_pref_store_connection_),
- std::move(connections_));
- return;
- }
for (const auto& ptr : pref_store_ptrs) {
ptr.second->AddObserver(
base::Bind(&ConnectionBarrier::OnConnect, this, ptr.first));
@@ -109,7 +104,13 @@ PrefStoreManagerImpl::PrefStoreManagerImpl(
scoped_refptr<base::SequencedWorkerPool> worker_pool)
: expected_pref_stores_(std::move(expected_pref_stores)),
init_binding_(this),
- worker_pool_(std::move(worker_pool)) {}
+ defaults_(new DefaultPrefStore),
+ defaults_wrapper_(base::MakeUnique<PrefStoreImpl>(
+ defaults_,
+ mojo::MakeRequest(&pref_store_ptrs_[PrefValueStore::DEFAULT_STORE]))),
+ worker_pool_(std::move(worker_pool)) {
+ expected_pref_stores_.insert(PrefValueStore::DEFAULT_STORE);
+}
PrefStoreManagerImpl::~PrefStoreManagerImpl() = default;
@@ -133,11 +134,13 @@ void PrefStoreManagerImpl::Register(PrefValueStore::PrefStoreType type,
}
}
-void PrefStoreManagerImpl::Connect(const ConnectCallback& callback) {
+void PrefStoreManagerImpl::Connect(mojom::PrefRegistryPtr pref_registry,
+ const ConnectCallback& callback) {
if (AllConnected()) {
- ConnectImpl(callback);
+ ConnectImpl(std::move(pref_registry), callback);
} else {
- pending_callbacks_.push_back(callback);
+ pending_connects_.push_back(
+ std::make_pair(callback, std::move(pref_registry)));
}
}
@@ -202,14 +205,30 @@ bool PrefStoreManagerImpl::AllConnected() const {
}
void PrefStoreManagerImpl::ProcessPendingConnects() {
- for (auto& connect : pending_callbacks_)
- ConnectImpl(connect);
- pending_callbacks_.clear();
+ for (auto& connect : pending_connects_)
+ ConnectImpl(std::move(connect.second), connect.first);
+ pending_connects_.clear();
}
-void PrefStoreManagerImpl::ConnectImpl(const ConnectCallback& callback) {
+void PrefStoreManagerImpl::ConnectImpl(mojom::PrefRegistryPtr pref_registry,
+ const ConnectCallback& callback) {
+ PersistentPrefStoreImpl::ObservedPrefs observed_prefs;
+ for (auto& registration : pref_registry->registrations) {
+ observed_prefs.insert(registration.first);
+ const auto& key = registration.first;
+ auto& default_value = registration.second->default_value;
+ const base::Value* old_default = nullptr;
+ // TODO(sammc): Once non-owning registrations are supported, disallow
+ // multiple owners instead of just checking for consistent defaults.
+ if (defaults_->GetValue(key, &old_default))
+ DCHECK(old_default->Equals(default_value.get()));
+ else
+ defaults_->SetDefaultValue(key, std::move(default_value));
+ }
ConnectionBarrier::Create(
- pref_store_ptrs_, persistent_pref_store_->CreateConnection(), callback);
+ pref_store_ptrs_,
+ persistent_pref_store_->CreateConnection(std::move(observed_prefs)),
+ callback);
}
void PrefStoreManagerImpl::OnPersistentPrefStoreReady() {
« no previous file with comments | « services/preferences/pref_store_manager_impl.h ('k') | services/preferences/public/cpp/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698