Index: services/preferences/public/cpp/pref_store_manager_impl.h |
diff --git a/services/preferences/public/cpp/pref_store_manager_impl.h b/services/preferences/public/cpp/pref_store_manager_impl.h |
index 3310090d89448dc675ec72d279f4e93742889834..07961579deea37f184d9e46b8125ae83a76c212e 100644 |
--- a/services/preferences/public/cpp/pref_store_manager_impl.h |
+++ b/services/preferences/public/cpp/pref_store_manager_impl.h |
@@ -5,6 +5,11 @@ |
#ifndef SERVICES_PREFERENCES_PUBLIC_CPP_PREF_STORE_MANAGER_IMPL_H_ |
#define SERVICES_PREFERENCES_PUBLIC_CPP_PREF_STORE_MANAGER_IMPL_H_ |
+#include <memory> |
+#include <set> |
+#include <unordered_map> |
+#include <vector> |
+ |
#include "base/compiler_specific.h" |
#include "base/macros.h" |
#include "base/memory/ref_counted.h" |
@@ -14,7 +19,12 @@ |
#include "services/service_manager/public/cpp/interface_factory.h" |
#include "services/service_manager/public/cpp/service.h" |
+namespace base { |
+class SequencedWorkerPool; |
+} |
+ |
namespace prefs { |
+class PersistentPrefStoreImpl; |
// This class mediates the connection of clients who wants to read preferences |
// and the pref stores that store those preferences. Pref stores use the |
@@ -25,13 +35,18 @@ class PrefStoreManagerImpl |
public mojom::PrefStoreConnector, |
public service_manager::InterfaceFactory<mojom::PrefStoreConnector>, |
public service_manager::InterfaceFactory<mojom::PrefStoreRegistry>, |
+ public service_manager::InterfaceFactory< |
+ mojom::PersistentPrefStoreConnector>, |
+ public mojom::PrefServiceControl, |
+ public service_manager::InterfaceFactory<mojom::PrefServiceControl>, |
public service_manager::Service { |
public: |
using PrefStoreTypes = std::set<PrefValueStore::PrefStoreType>; |
// Only replies to Connect calls when all |expected_pref_stores| have |
// registered. |
- explicit PrefStoreManagerImpl(PrefStoreTypes expected_pref_stores); |
+ PrefStoreManagerImpl(PrefStoreTypes expected_pref_stores, |
+ scoped_refptr<base::SequencedWorkerPool> worker_pool); |
~PrefStoreManagerImpl() override; |
private: |
@@ -53,6 +68,18 @@ class PrefStoreManagerImpl |
void Create(const service_manager::Identity& remote_identity, |
prefs::mojom::PrefStoreRegistryRequest request) override; |
+ // service_manager::InterfaceFactory<PersistentPrefStoreConnector>: |
+ void Create( |
+ const service_manager::Identity& remote_identity, |
+ prefs::mojom::PersistentPrefStoreConnectorRequest request) override; |
+ |
+ // service_manager::InterfaceFactory<PrefServiceControl>: |
+ void Create(const service_manager::Identity& remote_identity, |
+ prefs::mojom::PrefServiceControlRequest request) override; |
+ |
+ // PrefServiceControl: |
+ void Init(mojom::PersistentPrefStoreConfigurationPtr configuration) override; |
+ |
// service_manager::Service: |
void OnStart() override; |
bool OnConnect(const service_manager::ServiceInfo& remote_info, |
@@ -72,6 +99,17 @@ class PrefStoreManagerImpl |
mojo::BindingSet<mojom::PrefStoreConnector> connector_bindings_; |
mojo::BindingSet<mojom::PrefStoreRegistry> registry_bindings_; |
+ std::unique_ptr<PersistentPrefStoreImpl> persistent_pref_store_; |
+ mojo::BindingSet<mojom::PersistentPrefStoreConnector> |
+ persistent_pref_store_bindings_; |
+ mojo::Binding<mojom::PrefServiceControl> init_binding_; |
+ |
+ // Requests made to connect to the service before it has been initialized. |
+ // These will be handled when initialization completes. |
+ std::vector<mojom::PersistentPrefStoreConnectorRequest> |
+ pending_persistent_pref_store_requests_; |
+ |
+ scoped_refptr<base::SequencedWorkerPool> worker_pool_; |
// We hold on to the connection request callbacks until all expected |
// PrefStores have registered. |