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

Unified Diff: components/sync/model_impl/model_type_store_impl.cc

Issue 2480203002: ui: Cleanup class/struct forward declarations (Closed)
Patch Set: Sync CL to position 430550 Created 4 years, 1 month 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: components/sync/model_impl/model_type_store_impl.cc
diff --git a/components/sync/model_impl/model_type_store_impl.cc b/components/sync/model_impl/model_type_store_impl.cc
index 8c828230611e690252507dfe868a13af2e2111a9..542dfb90a84bef2574eea7aa31484694c1586ee9 100644
--- a/components/sync/model_impl/model_type_store_impl.cc
+++ b/components/sync/model_impl/model_type_store_impl.cc
@@ -4,6 +4,7 @@
#include "components/sync/model_impl/model_type_store_impl.h"
+#include <string>
#include <utility>
#include "base/bind.h"
@@ -13,6 +14,8 @@
#include "base/task_runner_util.h"
#include "base/threading/thread_task_runner_handle.h"
#include "components/sync/model_impl/model_type_store_backend.h"
+#include "components/sync/protocol/entity_metadata.pb.h"
+#include "components/sync/protocol/model_type_state.pb.h"
#include "third_party/leveldatabase/src/include/leveldb/env.h"
#include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
@@ -66,7 +69,8 @@ ModelTypeStoreImpl::ModelTypeStoreImpl(
ModelType type,
scoped_refptr<ModelTypeStoreBackend> backend,
scoped_refptr<base::SequencedTaskRunner> backend_task_runner)
- : backend_(backend),
+ : type_(type),
+ backend_(backend),
backend_task_runner_(backend_task_runner),
data_prefix_(FormatDataPrefix(type)),
metadata_prefix_(FormatMetaPrefix(type)),
@@ -227,7 +231,8 @@ void ModelTypeStoreImpl::ReadMetadataRecordsDone(
Result result) {
DCHECK(CalledOnValidThread());
if (result != Result::SUCCESS) {
- callback.Run(result, std::move(metadata_records), std::string());
+ callback.Run(MakeSyncError("Reading metadata failed."),
+ base::MakeUnique<MetadataBatch>());
return;
}
@@ -255,23 +260,57 @@ void ModelTypeStoreImpl::ReadAllMetadataDone(
std::unique_ptr<IdList> missing_id_list,
Result result) {
DCHECK(CalledOnValidThread());
+
if (result != Result::SUCCESS) {
- callback.Run(result, std::move(metadata_records), std::string());
+ callback.Run(MakeSyncError("Reading metadata failed."),
+ base::MakeUnique<MetadataBatch>());
return;
}
+ std::string global_metadata = "";
if (!missing_id_list->empty()) {
- // Missing global metadata record is not an error. We shouild return empty
- // string in this case.
- DCHECK((*missing_id_list)[0] == global_metadata_key_);
+ // Missing global metadata record is not an error; we can just return the
+ // default instance using the empty string above.
+ DCHECK_EQ(global_metadata_key_, (*missing_id_list)[0]);
DCHECK(global_metadata_records->empty());
- callback.Run(Result::SUCCESS, std::move(metadata_records), std::string());
+ } else {
+ DCHECK_EQ(1U, global_metadata_records->size());
+ DCHECK_EQ(global_metadata_key_, (*global_metadata_records)[0].id);
+ global_metadata = (*global_metadata_records)[0].value;
+ }
+
+ DeserializeMetadata(callback, global_metadata, std::move(metadata_records));
+}
+
+void ModelTypeStoreImpl::DeserializeMetadata(
+ const ReadMetadataCallback& callback,
+ const std::string& global_metadata,
+ std::unique_ptr<RecordList> metadata_records) {
+ auto metadata_batch = base::MakeUnique<MetadataBatch>();
+
+ sync_pb::ModelTypeState state;
+ if (!state.ParseFromString(global_metadata)) {
+ callback.Run(MakeSyncError("Failed to deserialize model type state."),
+ base::MakeUnique<MetadataBatch>());
return;
}
- DCHECK(!global_metadata_records->empty());
- DCHECK((*global_metadata_records)[0].id == global_metadata_key_);
- callback.Run(Result::SUCCESS, std::move(metadata_records),
- (*global_metadata_records)[0].value);
+ metadata_batch->SetModelTypeState(state);
+
+ for (const Record& r : *metadata_records.get()) {
+ sync_pb::EntityMetadata entity_metadata;
+ if (!entity_metadata.ParseFromString(r.value)) {
+ callback.Run(MakeSyncError("Failed to deserialize entity metadata."),
+ base::MakeUnique<MetadataBatch>());
+ return;
+ }
+ metadata_batch->AddMetadata(r.id, entity_metadata);
+ }
+
+ callback.Run(SyncError(), std::move(metadata_batch));
+}
+
+SyncError ModelTypeStoreImpl::MakeSyncError(const std::string& msg) {
+ return SyncError(FROM_HERE, SyncError::DATATYPE_ERROR, msg, type_);
}
std::unique_ptr<ModelTypeStore::WriteBatch>
« no previous file with comments | « components/sync/model_impl/model_type_store_impl.h ('k') | components/sync/model_impl/model_type_store_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698