| Index: services/preferences/public/cpp/persistent_pref_store_client.cc
|
| diff --git a/services/preferences/public/cpp/persistent_pref_store_client.cc b/services/preferences/public/cpp/persistent_pref_store_client.cc
|
| index 74c9b116fbd7d9bae66fe0bc950077ad0f9e36bc..ccd1e9f2c1361efa46c7d03d7074a96245d474dc 100644
|
| --- a/services/preferences/public/cpp/persistent_pref_store_client.cc
|
| +++ b/services/preferences/public/cpp/persistent_pref_store_client.cc
|
| @@ -8,13 +8,40 @@
|
|
|
| #include "base/threading/thread_restrictions.h"
|
| #include "base/values.h"
|
| +#include "components/prefs/pref_registry.h"
|
| #include "mojo/public/cpp/bindings/sync_call_restrictions.h"
|
|
|
| namespace prefs {
|
| +namespace {
|
| +
|
| +mojom::PrefRegistryPtr WrapPrefRegistry(PrefRegistry& pref_registry) {
|
| + auto registry = mojom::PrefRegistry::New();
|
| + for (auto& pref : pref_registry) {
|
| + auto registration = mojom::PrefRegistration::New();
|
| + registration->set_owning_registration(mojom::OwningPrefRegistration::New(
|
| + pref.second->CreateDeepCopy(),
|
| + pref_registry.GetRegistrationFlags(pref.first)));
|
| + registry->registrations[pref.first] = std::move(registration);
|
| + }
|
| + return registry;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +PersistentPrefStoreClient::PersistentPrefStoreClient(
|
| + mojom::PrefStoreConnectorPtr connector,
|
| + scoped_refptr<PrefRegistry> pref_registry)
|
| + : connector_(std::move(connector)),
|
| + pref_registry_(std::move(pref_registry)) {
|
| + DCHECK(connector_);
|
| +}
|
|
|
| PersistentPrefStoreClient::PersistentPrefStoreClient(
|
| - mojom::PersistentPrefStoreConnectorPtr connector)
|
| - : connector_(std::move(connector)) {}
|
| + mojom::PersistentPrefStoreConnectionPtr connection) {
|
| + OnCreateComplete(std::move(connection),
|
| + std::unordered_map<PrefValueStore::PrefStoreType,
|
| + prefs::mojom::PrefStoreConnectionPtr>());
|
| +}
|
|
|
| void PersistentPrefStoreClient::SetValue(const std::string& key,
|
| std::unique_ptr<base::Value> value,
|
| @@ -67,27 +94,26 @@ PersistentPrefStore::PrefReadError PersistentPrefStoreClient::GetReadError()
|
| }
|
|
|
| PersistentPrefStore::PrefReadError PersistentPrefStoreClient::ReadPrefs() {
|
| - PrefReadError read_error = PrefReadError::PREF_READ_ERROR_NONE;
|
| - bool read_only = false;
|
| - std::unique_ptr<base::DictionaryValue> local_prefs;
|
| - mojom::PersistentPrefStorePtr pref_store;
|
| - mojom::PrefStoreObserverRequest observer_request;
|
| + mojom::PersistentPrefStoreConnectionPtr connection;
|
| + std::unordered_map<PrefValueStore::PrefStoreType,
|
| + prefs::mojom::PrefStoreConnectionPtr>
|
| + other_pref_stores;
|
| base::ThreadRestrictions::AssertWaitAllowed();
|
| mojo::SyncCallRestrictions::ScopedAllowSyncCall allow_sync_calls;
|
| - if (!connector_->Connect(&read_error, &read_only, &local_prefs, &pref_store,
|
| - &observer_request)) {
|
| + if (!connector_->Connect(WrapPrefRegistry(*pref_registry_), &connection,
|
| + &other_pref_stores)) {
|
| NOTREACHED();
|
| }
|
|
|
| - OnCreateComplete(read_error, read_only, std::move(local_prefs),
|
| - std::move(pref_store), std::move(observer_request));
|
| + OnCreateComplete(std::move(connection), std::move(other_pref_stores));
|
| return read_error_;
|
| }
|
|
|
| void PersistentPrefStoreClient::ReadPrefsAsync(
|
| ReadErrorDelegate* error_delegate) {
|
| error_delegate_.reset(error_delegate);
|
| - connector_->Connect(base::Bind(&PersistentPrefStoreClient::OnCreateComplete,
|
| + connector_->Connect(WrapPrefRegistry(*pref_registry_),
|
| + base::Bind(&PersistentPrefStoreClient::OnCreateComplete,
|
| base::Unretained(this)));
|
| }
|
|
|
| @@ -114,20 +140,25 @@ PersistentPrefStoreClient::~PersistentPrefStoreClient() {
|
| }
|
|
|
| void PersistentPrefStoreClient::OnCreateComplete(
|
| - PrefReadError read_error,
|
| - bool read_only,
|
| - std::unique_ptr<base::DictionaryValue> cached_prefs,
|
| - mojom::PersistentPrefStorePtr pref_store,
|
| - mojom::PrefStoreObserverRequest observer_request) {
|
| + mojom::PersistentPrefStoreConnectionPtr connection,
|
| + std::unordered_map<PrefValueStore::PrefStoreType,
|
| + prefs::mojom::PrefStoreConnectionPtr>
|
| + other_pref_stores) {
|
| + DCHECK(other_pref_stores.empty());
|
| connector_.reset();
|
| - read_error_ = read_error;
|
| - read_only_ = read_only;
|
| - pref_store_ = std::move(pref_store);
|
| + read_error_ = connection->read_error;
|
| + read_only_ = connection->read_only;
|
| + pref_store_ = std::move(connection->pref_store);
|
| if (error_delegate_ && read_error_ != PREF_READ_ERROR_NONE)
|
| error_delegate_->OnError(read_error_);
|
| error_delegate_.reset();
|
|
|
| - Init(std::move(cached_prefs), true, std::move(observer_request));
|
| + if (connection->pref_store_connection) {
|
| + Init(std::move(connection->pref_store_connection->initial_prefs), true,
|
| + std::move(connection->pref_store_connection->observer));
|
| + } else {
|
| + Init(nullptr, false, nullptr);
|
| + }
|
| }
|
|
|
| } // namespace prefs
|
|
|