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

Unified Diff: components/sync/core/shared_model_type_processor.cc

Issue 2319973003: [USS] Implement SharedModelTypeProcessor::GetAllNodes for USS (Closed)
Patch Set: add comments Created 4 years, 3 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: components/sync/core/shared_model_type_processor.cc
diff --git a/components/sync/core/shared_model_type_processor.cc b/components/sync/core/shared_model_type_processor.cc
index 14ca2b6e9825f7b3be65115448e95f92fa4b38eb..65b9df6eb5b411f9ff2c94132c84599409d384dd 100644
--- a/components/sync/core/shared_model_type_processor.cc
+++ b/components/sync/core/shared_model_type_processor.cc
@@ -15,6 +15,7 @@
#include "components/sync/core/activation_context.h"
#include "components/sync/core/processor_entity_tracker.h"
#include "components/sync/engine/commit_queue.h"
+#include "components/sync/protocol/proto_value_conversions.h"
#include "components/sync/syncable/syncable_util.h"
namespace syncer_v2 {
@@ -191,6 +192,16 @@ bool SharedModelTypeProcessor::IsConnected() const {
return !!worker_;
}
+void SharedModelTypeProcessor::GetAllNodes(
+ const scoped_refptr<base::TaskRunner>& task_runner,
+ const base::Callback<void(const syncer::ModelType,
+ std::unique_ptr<base::ListValue>)>& callback) {
+ DCHECK(service_);
+ service_->GetAllData(
+ base::Bind(&SharedModelTypeProcessor::MergeDataWithMetadata,
+ base::Unretained(this), task_runner, callback));
+}
+
void SharedModelTypeProcessor::DisableSync() {
DCHECK(CalledOnValidThread());
std::unique_ptr<MetadataChangeList> change_list =
@@ -704,4 +715,39 @@ ProcessorEntityTracker* SharedModelTypeProcessor::CreateEntity(
return CreateEntity(service_->GetStorageKey(data), data);
}
+void SharedModelTypeProcessor::MergeDataWithMetadata(
+ const scoped_refptr<base::TaskRunner>& task_runner,
+ const base::Callback<void(const syncer::ModelType,
+ std::unique_ptr<base::ListValue>)>& callback,
+ syncer::SyncError error,
+ std::unique_ptr<DataBatch> batch) {
+ std::unique_ptr<base::ListValue> all_nodes(new base::ListValue());
+
+ while (batch->HasNext()) {
+ KeyAndData data = batch->Next();
+ std::unique_ptr<base::DictionaryValue> node =
+ EntityData::ToValue(*data.second);
+ ProcessorEntityTracker* entity = GetEntityForStorageKey(data.first);
+ // entity could be null if there are some unapplied changes.
skym 2016/09/12 16:40:39 Capitalize first letter
Gang Wu 2016/09/12 22:38:03 Done.
+ if (entity != nullptr) {
+ std::unique_ptr<base::DictionaryValue> metadata =
+ syncer::EntityMetadataToValue(entity->metadata());
+ node->MergeDictionary(metadata.get());
skym 2016/09/12 16:40:38 1) Why do we merge these two? Why not use a single
Gang Wu 2016/09/12 22:38:03 |node| is real data, |metadata| is metadata, so me
skym 2016/09/13 16:45:17 Really? Looking at EntityData::ToDictionaryValue()
Gang Wu 2016/09/13 18:45:02 Thanks for point that out! But in here, all the ke
+ }
+ node->SetString("modelType", ModelTypeToString(type_));
skym 2016/09/12 16:40:39 I know this wasn't you, but its really odd how som
Gang Wu 2016/09/12 22:38:03 We can discuss this in USS meeting, since this wil
+ all_nodes->Append(std::move(node));
+ }
+
+ // Create a permanent folder for this data type
skym 2016/09/12 16:40:39 Comment sentence should have a period at the end.
Gang Wu 2016/09/12 22:38:03 yes, that is correct. Comments added.
+ std::unique_ptr<base::DictionaryValue> rootnode(new base::DictionaryValue());
skym 2016/09/12 16:40:39 MakeUnique?
Gang Wu 2016/09/12 22:38:03 any different?
skym 2016/09/13 16:45:17 https://groups.google.com/a/chromium.org/forum/#!t
Gang Wu 2016/09/13 18:45:02 Done.
+ rootnode->SetString("PARENT_ID", "r");
skym 2016/09/12 16:40:39 r?
Gang Wu 2016/09/12 22:38:03 I guess "r" means root, isTypeRootNode in sync_nod
+ rootnode->SetBoolean("IS_DIR", true);
+ rootnode->SetString("modelType", ModelTypeToString(type_));
+ rootnode->SetString("NON_UNIQUE_NAME", ModelTypeToString(type_));
skym 2016/09/12 16:40:38 You call ModelTypeToString a lot in this function.
Gang Wu 2016/09/12 22:38:03 Done.
+ all_nodes->Append(std::move(rootnode));
+
+ task_runner->PostTask(FROM_HERE,
+ base::Bind(callback, type_, base::Passed(&all_nodes)));
+}
+
} // namespace syncer_v2

Powered by Google App Engine
This is Rietveld 408576698