| 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() {
|
|
|