| Index: services/preferences/public/cpp/pref_store_manager_impl.cc
|
| diff --git a/services/preferences/public/cpp/pref_store_manager_impl.cc b/services/preferences/public/cpp/pref_store_manager_impl.cc
|
| index 5a72b2cc0f536ee56498959c6c32dac25085f142..85a99bcf4115806b8fd57e5575e1e28d43f74c7a 100644
|
| --- a/services/preferences/public/cpp/pref_store_manager_impl.cc
|
| +++ b/services/preferences/public/cpp/pref_store_manager_impl.cc
|
| @@ -5,11 +5,15 @@
|
| #include "services/preferences/public/cpp/pref_store_manager_impl.h"
|
|
|
| #include "base/memory/ref_counted.h"
|
| +#include "base/threading/sequenced_worker_pool.h"
|
| #include "components/prefs/pref_value_store.h"
|
| #include "mojo/public/cpp/bindings/interface_request.h"
|
| +#include "services/preferences/user_prefs.h"
|
| +#include "services/preferences/user_prefs_factory.h"
|
| #include "services/service_manager/public/cpp/interface_registry.h"
|
|
|
| namespace prefs {
|
| +namespace {
|
|
|
| using ConnectCallback = mojom::PrefStoreConnector::ConnectCallback;
|
| using PrefStorePtrs =
|
| @@ -73,8 +77,14 @@ void ConnectionBarrier::OnConnect(
|
| }
|
| }
|
|
|
| -PrefStoreManagerImpl::PrefStoreManagerImpl(PrefStoreTypes expected_pref_stores)
|
| - : expected_pref_stores_(std::move(expected_pref_stores)) {}
|
| +} // namespace
|
| +
|
| +PrefStoreManagerImpl::PrefStoreManagerImpl(
|
| + PrefStoreTypes expected_pref_stores,
|
| + scoped_refptr<base::SequencedWorkerPool> worker_pool)
|
| + : expected_pref_stores_(std::move(expected_pref_stores)),
|
| + init_binding_(this),
|
| + worker_pool_(std::move(worker_pool)) {}
|
|
|
| PrefStoreManagerImpl::~PrefStoreManagerImpl() = default;
|
|
|
| @@ -119,6 +129,40 @@ void PrefStoreManagerImpl::Create(
|
| registry_bindings_.AddBinding(this, std::move(request));
|
| }
|
|
|
| +void PrefStoreManagerImpl::Create(
|
| + const service_manager::Identity& remote_identity,
|
| + prefs::mojom::PersistentPrefStoreConnectorRequest request) {
|
| + if (!user_prefs_connector_) {
|
| + user_prefs_connector_requests_.push_back(std::move(request));
|
| + return;
|
| + }
|
| + user_prefs_connector_bindings_.AddBinding(user_prefs_connector_.get(),
|
| + std::move(request));
|
| +}
|
| +
|
| +void PrefStoreManagerImpl::Create(
|
| + const service_manager::Identity& remote_identity,
|
| + prefs::mojom::PersistentPrefStoreInitRequest request) {
|
| + if (init_binding_.is_bound())
|
| + return;
|
| +
|
| + init_binding_.Bind(std::move(request));
|
| +}
|
| +
|
| +void PrefStoreManagerImpl::Init(
|
| + mojom::UserPrefsConfigurationPtr configuration) {
|
| + DCHECK(!user_prefs_connector_);
|
| +
|
| + user_prefs_connector_ =
|
| + CreateUserPrefs(std::move(configuration), worker_pool_.get());
|
| + DCHECK(user_prefs_connector_);
|
| + for (auto& request : user_prefs_connector_requests_) {
|
| + user_prefs_connector_bindings_.AddBinding(user_prefs_connector_.get(),
|
| + std::move(request));
|
| + }
|
| + user_prefs_connector_requests_.clear();
|
| +}
|
| +
|
| void PrefStoreManagerImpl::OnStart() {}
|
|
|
| bool PrefStoreManagerImpl::OnConnect(
|
| @@ -126,6 +170,8 @@ bool PrefStoreManagerImpl::OnConnect(
|
| service_manager::InterfaceRegistry* registry) {
|
| registry->AddInterface<prefs::mojom::PrefStoreConnector>(this);
|
| registry->AddInterface<prefs::mojom::PrefStoreRegistry>(this);
|
| + registry->AddInterface<prefs::mojom::PersistentPrefStoreConnector>(this);
|
| + registry->AddInterface<prefs::mojom::PersistentPrefStoreInit>(this);
|
| return true;
|
| }
|
|
|
|
|