Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(412)

Unified Diff: services/preferences/public/cpp/persistent_pref_store_client.cc

Issue 2767743003: Pref service: Merge connectors and send a PrefRegistry in Connect(). (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « services/preferences/public/cpp/persistent_pref_store_client.h ('k') | services/preferences/public/cpp/preferences.typemap » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698