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; |
} |