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..2e22f2f638001d1290a7bd02045e03fe1224a679 100644 |
--- a/services/preferences/public/cpp/pref_store_manager_impl.cc |
+++ b/services/preferences/public/cpp/pref_store_manager_impl.cc |
@@ -4,12 +4,18 @@ |
#include "services/preferences/public/cpp/pref_store_manager_impl.h" |
+#include <utility> |
+ |
#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/persistent_pref_store_factory.h" |
+#include "services/preferences/persistent_pref_store_impl.h" |
#include "services/service_manager/public/cpp/interface_registry.h" |
namespace prefs { |
+namespace { |
using ConnectCallback = mojom::PrefStoreConnector::ConnectCallback; |
using PrefStorePtrs = |
@@ -73,8 +79,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 +131,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 (!persistent_pref_store_) { |
+ pending_persistent_pref_store_requests_.push_back(std::move(request)); |
+ return; |
+ } |
+ persistent_pref_store_bindings_.AddBinding(persistent_pref_store_.get(), |
+ std::move(request)); |
+} |
+ |
+void PrefStoreManagerImpl::Create( |
+ const service_manager::Identity& remote_identity, |
+ prefs::mojom::PrefServiceControlRequest request) { |
+ if (init_binding_.is_bound()) |
+ return; |
tibell
2017/03/10 04:20:24
Is this an error condition we want to warn about?
Sam McNally
2017/03/10 05:06:56
Done.
|
+ |
+ init_binding_.Bind(std::move(request)); |
+} |
+ |
+void PrefStoreManagerImpl::Init( |
+ mojom::PersistentPrefStoreConfigurationPtr configuration) { |
+ DCHECK(!persistent_pref_store_); |
+ |
+ persistent_pref_store_ = |
+ CreatePersistentPrefStore(std::move(configuration), worker_pool_.get()); |
+ DCHECK(persistent_pref_store_); |
+ for (auto& request : pending_persistent_pref_store_requests_) { |
+ persistent_pref_store_bindings_.AddBinding(persistent_pref_store_.get(), |
+ std::move(request)); |
+ } |
+ pending_persistent_pref_store_requests_.clear(); |
+} |
+ |
void PrefStoreManagerImpl::OnStart() {} |
bool PrefStoreManagerImpl::OnConnect( |
@@ -126,6 +172,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::PrefServiceControl>(this); |
return true; |
} |