Chromium Code Reviews| 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; |
| } |