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

Side by Side Diff: components/sync/core/shared_model_type_processor.cc

Issue 2376123003: [Sync] Move //components/sync to the syncer namespace. (Closed)
Patch Set: Rebase. Created 4 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/sync/core/shared_model_type_processor.h" 5 #include "components/sync/core/shared_model_type_processor.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/location.h" 11 #include "base/location.h"
12 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
13 #include "base/metrics/histogram_macros.h" 13 #include "base/metrics/histogram_macros.h"
14 #include "base/threading/thread_task_runner_handle.h" 14 #include "base/threading/thread_task_runner_handle.h"
15 #include "components/sync/core/activation_context.h" 15 #include "components/sync/core/activation_context.h"
16 #include "components/sync/core/processor_entity_tracker.h" 16 #include "components/sync/core/processor_entity_tracker.h"
17 #include "components/sync/engine/commit_queue.h" 17 #include "components/sync/engine/commit_queue.h"
18 #include "components/sync/protocol/proto_value_conversions.h" 18 #include "components/sync/protocol/proto_value_conversions.h"
19 #include "components/sync/syncable/syncable_util.h" 19 #include "components/sync/syncable/syncable_util.h"
20 20
21 namespace syncer_v2 { 21 namespace syncer {
22 22
23 namespace { 23 namespace {
24 24
25 class ModelTypeProcessorProxy : public ModelTypeProcessor { 25 class ModelTypeProcessorProxy : public ModelTypeProcessor {
26 public: 26 public:
27 ModelTypeProcessorProxy( 27 ModelTypeProcessorProxy(
28 const base::WeakPtr<ModelTypeProcessor>& processor, 28 const base::WeakPtr<ModelTypeProcessor>& processor,
29 const scoped_refptr<base::SequencedTaskRunner>& processor_task_runner); 29 const scoped_refptr<base::SequencedTaskRunner>& processor_task_runner);
30 ~ModelTypeProcessorProxy() override; 30 ~ModelTypeProcessorProxy() override;
31 31
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 void ModelTypeProcessorProxy::OnUpdateReceived( 70 void ModelTypeProcessorProxy::OnUpdateReceived(
71 const sync_pb::DataTypeState& type_state, 71 const sync_pb::DataTypeState& type_state,
72 const UpdateResponseDataList& updates) { 72 const UpdateResponseDataList& updates) {
73 processor_task_runner_->PostTask( 73 processor_task_runner_->PostTask(
74 FROM_HERE, base::Bind(&ModelTypeProcessor::OnUpdateReceived, processor_, 74 FROM_HERE, base::Bind(&ModelTypeProcessor::OnUpdateReceived, processor_,
75 type_state, updates)); 75 type_state, updates));
76 } 76 }
77 77
78 } // namespace 78 } // namespace
79 79
80 SharedModelTypeProcessor::SharedModelTypeProcessor(syncer::ModelType type, 80 SharedModelTypeProcessor::SharedModelTypeProcessor(ModelType type,
81 ModelTypeService* service) 81 ModelTypeService* service)
82 : type_(type), 82 : type_(type),
83 is_metadata_loaded_(false), 83 is_metadata_loaded_(false),
84 is_initial_pending_data_loaded_(false), 84 is_initial_pending_data_loaded_(false),
85 service_(service), 85 service_(service),
86 error_handler_(nullptr), 86 error_handler_(nullptr),
87 weak_ptr_factory_(this) { 87 weak_ptr_factory_(this) {
88 DCHECK(service); 88 DCHECK(service);
89 } 89 }
90 90
91 SharedModelTypeProcessor::~SharedModelTypeProcessor() {} 91 SharedModelTypeProcessor::~SharedModelTypeProcessor() {}
92 92
93 // static 93 // static
94 std::unique_ptr<ModelTypeChangeProcessor> 94 std::unique_ptr<ModelTypeChangeProcessor>
95 SharedModelTypeProcessor::CreateAsChangeProcessor(syncer::ModelType type, 95 SharedModelTypeProcessor::CreateAsChangeProcessor(ModelType type,
96 ModelTypeService* service) { 96 ModelTypeService* service) {
97 return std::unique_ptr<ModelTypeChangeProcessor>( 97 return std::unique_ptr<ModelTypeChangeProcessor>(
98 new SharedModelTypeProcessor(type, service)); 98 new SharedModelTypeProcessor(type, service));
99 } 99 }
100 100
101 void SharedModelTypeProcessor::OnSyncStarting( 101 void SharedModelTypeProcessor::OnSyncStarting(
102 std::unique_ptr<syncer::DataTypeErrorHandler> error_handler, 102 std::unique_ptr<DataTypeErrorHandler> error_handler,
103 const StartCallback& start_callback) { 103 const StartCallback& start_callback) {
104 DCHECK(CalledOnValidThread()); 104 DCHECK(CalledOnValidThread());
105 DCHECK(start_callback_.is_null()); 105 DCHECK(start_callback_.is_null());
106 DCHECK(!IsConnected()); 106 DCHECK(!IsConnected());
107 DCHECK(error_handler); 107 DCHECK(error_handler);
108 DVLOG(1) << "Sync is starting for " << ModelTypeToString(type_); 108 DVLOG(1) << "Sync is starting for " << ModelTypeToString(type_);
109 109
110 error_handler_ = std::move(error_handler); 110 error_handler_ = std::move(error_handler);
111 start_callback_ = start_callback; 111 start_callback_ = start_callback;
112 ConnectIfReady(); 112 ConnectIfReady();
113 } 113 }
114 114
115 void SharedModelTypeProcessor::OnMetadataLoaded( 115 void SharedModelTypeProcessor::OnMetadataLoaded(
116 syncer::SyncError error, 116 SyncError error,
117 std::unique_ptr<MetadataBatch> batch) { 117 std::unique_ptr<MetadataBatch> batch) {
118 DCHECK(CalledOnValidThread()); 118 DCHECK(CalledOnValidThread());
119 DCHECK(entities_.empty()); 119 DCHECK(entities_.empty());
120 DCHECK(!is_metadata_loaded_); 120 DCHECK(!is_metadata_loaded_);
121 DCHECK(!IsConnected()); 121 DCHECK(!IsConnected());
122 122
123 is_metadata_loaded_ = true; 123 is_metadata_loaded_ = true;
124 // Flip this flag here to cover all cases where we don't need to load data. 124 // Flip this flag here to cover all cases where we don't need to load data.
125 is_initial_pending_data_loaded_ = true; 125 is_initial_pending_data_loaded_ = true;
126 126
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 return is_metadata_loaded_; 187 return is_metadata_loaded_;
188 } 188 }
189 189
190 bool SharedModelTypeProcessor::IsConnected() const { 190 bool SharedModelTypeProcessor::IsConnected() const {
191 DCHECK(CalledOnValidThread()); 191 DCHECK(CalledOnValidThread());
192 return !!worker_; 192 return !!worker_;
193 } 193 }
194 194
195 void SharedModelTypeProcessor::GetAllNodes( 195 void SharedModelTypeProcessor::GetAllNodes(
196 const scoped_refptr<base::TaskRunner>& task_runner, 196 const scoped_refptr<base::TaskRunner>& task_runner,
197 const base::Callback<void(const syncer::ModelType, 197 const base::Callback<void(const ModelType,
198 std::unique_ptr<base::ListValue>)>& callback) { 198 std::unique_ptr<base::ListValue>)>& callback) {
199 DCHECK(service_); 199 DCHECK(service_);
200 service_->GetAllData( 200 service_->GetAllData(
201 base::Bind(&SharedModelTypeProcessor::MergeDataWithMetadata, 201 base::Bind(&SharedModelTypeProcessor::MergeDataWithMetadata,
202 base::Unretained(this), task_runner, callback)); 202 base::Unretained(this), task_runner, callback));
203 } 203 }
204 204
205 void SharedModelTypeProcessor::DisableSync() { 205 void SharedModelTypeProcessor::DisableSync() {
206 DCHECK(CalledOnValidThread()); 206 DCHECK(CalledOnValidThread());
207 std::unique_ptr<MetadataChangeList> change_list = 207 std::unique_ptr<MetadataChangeList> change_list =
208 service_->CreateMetadataChangeList(); 208 service_->CreateMetadataChangeList();
209 for (auto it = entities_.begin(); it != entities_.end(); ++it) { 209 for (auto it = entities_.begin(); it != entities_.end(); ++it) {
210 change_list->ClearMetadata(it->second->storage_key()); 210 change_list->ClearMetadata(it->second->storage_key());
211 } 211 }
212 change_list->ClearDataTypeState(); 212 change_list->ClearDataTypeState();
213 // Nothing to do if this fails, so just ignore the error it might return. 213 // Nothing to do if this fails, so just ignore the error it might return.
214 service_->ApplySyncChanges(std::move(change_list), EntityChangeList()); 214 service_->ApplySyncChanges(std::move(change_list), EntityChangeList());
215 } 215 }
216 216
217 syncer::SyncError SharedModelTypeProcessor::CreateAndUploadError( 217 SyncError SharedModelTypeProcessor::CreateAndUploadError(
218 const tracked_objects::Location& location, 218 const tracked_objects::Location& location,
219 const std::string& message) { 219 const std::string& message) {
220 if (error_handler_) { 220 if (error_handler_) {
221 return error_handler_->CreateAndUploadError(location, message, type_); 221 return error_handler_->CreateAndUploadError(location, message, type_);
222 } else { 222 } else {
223 return syncer::SyncError(location, syncer::SyncError::DATATYPE_ERROR, 223 return SyncError(location, SyncError::DATATYPE_ERROR, message, type_);
224 message, type_);
225 } 224 }
226 } 225 }
227 226
228 void SharedModelTypeProcessor::ConnectSync( 227 void SharedModelTypeProcessor::ConnectSync(
229 std::unique_ptr<CommitQueue> worker) { 228 std::unique_ptr<CommitQueue> worker) {
230 DCHECK(CalledOnValidThread()); 229 DCHECK(CalledOnValidThread());
231 DVLOG(1) << "Successfully connected " << ModelTypeToString(type_); 230 DVLOG(1) << "Successfully connected " << ModelTypeToString(type_);
232 231
233 worker_ = std::move(worker); 232 worker_ = std::move(worker);
234 233
(...skipping 13 matching lines...) Expand all
248 } 247 }
249 } 248 }
250 249
251 void SharedModelTypeProcessor::Put(const std::string& storage_key, 250 void SharedModelTypeProcessor::Put(const std::string& storage_key,
252 std::unique_ptr<EntityData> data, 251 std::unique_ptr<EntityData> data,
253 MetadataChangeList* metadata_change_list) { 252 MetadataChangeList* metadata_change_list) {
254 DCHECK(IsAllowingChanges()); 253 DCHECK(IsAllowingChanges());
255 DCHECK(data.get()); 254 DCHECK(data.get());
256 DCHECK(!data->is_deleted()); 255 DCHECK(!data->is_deleted());
257 DCHECK(!data->non_unique_name.empty()); 256 DCHECK(!data->non_unique_name.empty());
258 DCHECK_EQ(type_, syncer::GetModelTypeFromSpecifics(data->specifics)); 257 DCHECK_EQ(type_, GetModelTypeFromSpecifics(data->specifics));
259 258
260 if (!data_type_state_.initial_sync_done()) { 259 if (!data_type_state_.initial_sync_done()) {
261 // Ignore changes before the initial sync is done. 260 // Ignore changes before the initial sync is done.
262 return; 261 return;
263 } 262 }
264 263
265 // Fill in some data. 264 // Fill in some data.
266 data->client_tag_hash = GetClientTagHash(storage_key, *data); 265 data->client_tag_hash = GetClientTagHash(storage_key, *data);
267 if (data->modification_time.is_null()) { 266 if (data->modification_time.is_null()) {
268 data->modification_time = base::Time::Now(); 267 data->modification_time = base::Time::Now();
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 entity->ReceiveCommitResponse(data); 357 entity->ReceiveCommitResponse(data);
359 358
360 if (entity->CanClearMetadata()) { 359 if (entity->CanClearMetadata()) {
361 change_list->ClearMetadata(entity->storage_key()); 360 change_list->ClearMetadata(entity->storage_key());
362 entities_.erase(entity->metadata().client_tag_hash()); 361 entities_.erase(entity->metadata().client_tag_hash());
363 } else { 362 } else {
364 change_list->UpdateMetadata(entity->storage_key(), entity->metadata()); 363 change_list->UpdateMetadata(entity->storage_key(), entity->metadata());
365 } 364 }
366 } 365 }
367 366
368 syncer::SyncError error = 367 SyncError error =
369 service_->ApplySyncChanges(std::move(change_list), EntityChangeList()); 368 service_->ApplySyncChanges(std::move(change_list), EntityChangeList());
370 if (error.IsSet()) { 369 if (error.IsSet()) {
371 error_handler_->OnUnrecoverableError(error); 370 error_handler_->OnUnrecoverableError(error);
372 } 371 }
373 } 372 }
374 373
375 void SharedModelTypeProcessor::OnUpdateReceived( 374 void SharedModelTypeProcessor::OnUpdateReceived(
376 const sync_pb::DataTypeState& data_type_state, 375 const sync_pb::DataTypeState& data_type_state,
377 const UpdateResponseDataList& updates) { 376 const UpdateResponseDataList& updates) {
378 if (!data_type_state_.initial_sync_done()) { 377 if (!data_type_state_.initial_sync_done()) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 if (got_new_encryption_requirements) { 413 if (got_new_encryption_requirements) {
415 already_updated.insert(entity->storage_key()); 414 already_updated.insert(entity->storage_key());
416 } 415 }
417 } 416 }
418 417
419 if (got_new_encryption_requirements) { 418 if (got_new_encryption_requirements) {
420 RecommitAllForEncryption(already_updated, metadata_changes.get()); 419 RecommitAllForEncryption(already_updated, metadata_changes.get());
421 } 420 }
422 421
423 // Inform the service of the new or updated data. 422 // Inform the service of the new or updated data.
424 syncer::SyncError error = 423 SyncError error =
425 service_->ApplySyncChanges(std::move(metadata_changes), entity_changes); 424 service_->ApplySyncChanges(std::move(metadata_changes), entity_changes);
426 425
427 if (error.IsSet()) { 426 if (error.IsSet()) {
428 error_handler_->OnUnrecoverableError(error); 427 error_handler_->OnUnrecoverableError(error);
429 } else { 428 } else {
430 // There may be new reasons to commit by the time this function is done. 429 // There may be new reasons to commit by the time this function is done.
431 FlushPendingCommitRequests(); 430 FlushPendingCommitRequests();
432 } 431 }
433 } 432 }
434 433
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 606
608 for (const UpdateResponseData& update : updates) { 607 for (const UpdateResponseData& update : updates) {
609 ProcessorEntityTracker* entity = CreateEntity(update.entity.value()); 608 ProcessorEntityTracker* entity = CreateEntity(update.entity.value());
610 const std::string& storage_key = entity->storage_key(); 609 const std::string& storage_key = entity->storage_key();
611 entity->RecordAcceptedUpdate(update); 610 entity->RecordAcceptedUpdate(update);
612 metadata_changes->UpdateMetadata(storage_key, entity->metadata()); 611 metadata_changes->UpdateMetadata(storage_key, entity->metadata());
613 data_map[storage_key] = update.entity; 612 data_map[storage_key] = update.entity;
614 } 613 }
615 614
616 // Let the service handle associating and merging the data. 615 // Let the service handle associating and merging the data.
617 syncer::SyncError error = 616 SyncError error =
618 service_->MergeSyncData(std::move(metadata_changes), data_map); 617 service_->MergeSyncData(std::move(metadata_changes), data_map);
619 618
620 if (error.IsSet()) { 619 if (error.IsSet()) {
621 error_handler_->OnUnrecoverableError(error); 620 error_handler_->OnUnrecoverableError(error);
622 } else { 621 } else {
623 // We may have new reasons to commit by the time this function is done. 622 // We may have new reasons to commit by the time this function is done.
624 FlushPendingCommitRequests(); 623 FlushPendingCommitRequests();
625 } 624 }
626 } 625 }
627 626
628 void SharedModelTypeProcessor::OnInitialPendingDataLoaded( 627 void SharedModelTypeProcessor::OnInitialPendingDataLoaded(
629 syncer::SyncError error, 628 SyncError error,
630 std::unique_ptr<DataBatch> data_batch) { 629 std::unique_ptr<DataBatch> data_batch) {
631 DCHECK(!is_initial_pending_data_loaded_); 630 DCHECK(!is_initial_pending_data_loaded_);
632 631
633 if (error.IsSet()) { 632 if (error.IsSet()) {
634 start_error_ = error; 633 start_error_ = error;
635 } else { 634 } else {
636 ConsumeDataBatch(std::move(data_batch)); 635 ConsumeDataBatch(std::move(data_batch));
637 } 636 }
638 637
639 is_initial_pending_data_loaded_ = true; 638 is_initial_pending_data_loaded_ = true;
640 ConnectIfReady(); 639 ConnectIfReady();
641 } 640 }
642 641
643 void SharedModelTypeProcessor::OnDataLoadedForReEncryption( 642 void SharedModelTypeProcessor::OnDataLoadedForReEncryption(
644 syncer::SyncError error, 643 SyncError error,
645 std::unique_ptr<DataBatch> data_batch) { 644 std::unique_ptr<DataBatch> data_batch) {
646 DCHECK(is_initial_pending_data_loaded_); 645 DCHECK(is_initial_pending_data_loaded_);
647 646
648 if (error.IsSet()) { 647 if (error.IsSet()) {
649 error_handler_->OnUnrecoverableError(error); 648 error_handler_->OnUnrecoverableError(error);
650 return; 649 return;
651 } 650 }
652 651
653 ConsumeDataBatch(std::move(data_batch)); 652 ConsumeDataBatch(std::move(data_batch));
654 FlushPendingCommitRequests(); 653 FlushPendingCommitRequests();
655 } 654 }
656 655
657 void SharedModelTypeProcessor::ConsumeDataBatch( 656 void SharedModelTypeProcessor::ConsumeDataBatch(
658 std::unique_ptr<DataBatch> data_batch) { 657 std::unique_ptr<DataBatch> data_batch) {
659 while (data_batch->HasNext()) { 658 while (data_batch->HasNext()) {
660 KeyAndData data = data_batch->Next(); 659 KeyAndData data = data_batch->Next();
661 ProcessorEntityTracker* entity = GetEntityForStorageKey(data.first); 660 ProcessorEntityTracker* entity = GetEntityForStorageKey(data.first);
662 // If the entity wasn't deleted or updated with new commit. 661 // If the entity wasn't deleted or updated with new commit.
663 if (entity != nullptr && entity->RequiresCommitData()) { 662 if (entity != nullptr && entity->RequiresCommitData()) {
664 entity->CacheCommitData(data.second.get()); 663 entity->CacheCommitData(data.second.get());
665 } 664 }
666 } 665 }
667 } 666 }
668 667
669 std::string SharedModelTypeProcessor::GetHashForTag(const std::string& tag) { 668 std::string SharedModelTypeProcessor::GetHashForTag(const std::string& tag) {
670 return syncer::syncable::GenerateSyncableHash(type_, tag); 669 return syncable::GenerateSyncableHash(type_, tag);
671 } 670 }
672 671
673 std::string SharedModelTypeProcessor::GetClientTagHash( 672 std::string SharedModelTypeProcessor::GetClientTagHash(
674 const std::string& storage_key, 673 const std::string& storage_key,
675 const EntityData& data) { 674 const EntityData& data) {
676 auto iter = storage_key_to_tag_hash_.find(storage_key); 675 auto iter = storage_key_to_tag_hash_.find(storage_key);
677 return iter == storage_key_to_tag_hash_.end() 676 return iter == storage_key_to_tag_hash_.end()
678 ? GetHashForTag(service_->GetClientTag(data)) 677 ? GetHashForTag(service_->GetClientTag(data))
679 : iter->second; 678 : iter->second;
680 } 679 }
(...skipping 29 matching lines...) Expand all
710 709
711 ProcessorEntityTracker* SharedModelTypeProcessor::CreateEntity( 710 ProcessorEntityTracker* SharedModelTypeProcessor::CreateEntity(
712 const EntityData& data) { 711 const EntityData& data) {
713 // Verify the tag hash matches, may be relaxed in the future. 712 // Verify the tag hash matches, may be relaxed in the future.
714 DCHECK_EQ(data.client_tag_hash, GetHashForTag(service_->GetClientTag(data))); 713 DCHECK_EQ(data.client_tag_hash, GetHashForTag(service_->GetClientTag(data)));
715 return CreateEntity(service_->GetStorageKey(data), data); 714 return CreateEntity(service_->GetStorageKey(data), data);
716 } 715 }
717 716
718 void SharedModelTypeProcessor::MergeDataWithMetadata( 717 void SharedModelTypeProcessor::MergeDataWithMetadata(
719 const scoped_refptr<base::TaskRunner>& task_runner, 718 const scoped_refptr<base::TaskRunner>& task_runner,
720 const base::Callback<void(const syncer::ModelType, 719 const base::Callback<void(const ModelType,
721 std::unique_ptr<base::ListValue>)>& callback, 720 std::unique_ptr<base::ListValue>)>& callback,
722 syncer::SyncError error, 721 SyncError error,
723 std::unique_ptr<DataBatch> batch) { 722 std::unique_ptr<DataBatch> batch) {
724 std::unique_ptr<base::ListValue> all_nodes = 723 std::unique_ptr<base::ListValue> all_nodes =
725 base::MakeUnique<base::ListValue>(); 724 base::MakeUnique<base::ListValue>();
726 std::string type_string = ModelTypeToString(type_); 725 std::string type_string = ModelTypeToString(type_);
727 726
728 while (batch->HasNext()) { 727 while (batch->HasNext()) {
729 KeyAndData data = batch->Next(); 728 KeyAndData data = batch->Next();
730 std::unique_ptr<base::DictionaryValue> node = 729 std::unique_ptr<base::DictionaryValue> node =
731 data.second->ToDictionaryValue(); 730 data.second->ToDictionaryValue();
732 ProcessorEntityTracker* entity = GetEntityForStorageKey(data.first); 731 ProcessorEntityTracker* entity = GetEntityForStorageKey(data.first);
733 // Entity could be null if there are some unapplied changes. 732 // Entity could be null if there are some unapplied changes.
734 if (entity != nullptr) { 733 if (entity != nullptr) {
735 node->Set("metadata", syncer::EntityMetadataToValue(entity->metadata())); 734 node->Set("metadata", EntityMetadataToValue(entity->metadata()));
736 } 735 }
737 node->SetString("modelType", type_string); 736 node->SetString("modelType", type_string);
738 all_nodes->Append(std::move(node)); 737 all_nodes->Append(std::move(node));
739 } 738 }
740 739
741 // Create a permanent folder for this data type. Since sync server no longer 740 // Create a permanent folder for this data type. Since sync server no longer
742 // create root folders, and USS won't migrate root folders from directory, we 741 // create root folders, and USS won't migrate root folders from directory, we
743 // create root folders for each data type here. 742 // create root folders for each data type here.
744 std::unique_ptr<base::DictionaryValue> rootnode = 743 std::unique_ptr<base::DictionaryValue> rootnode =
745 base::MakeUnique<base::DictionaryValue>(); 744 base::MakeUnique<base::DictionaryValue>();
746 // Function isTypeRootNode in sync_node_browser.js use PARENT_ID and 745 // Function isTypeRootNode in sync_node_browser.js use PARENT_ID and
747 // UNIQUE_SERVER_TAG to check if the node is root node. isChildOf in 746 // UNIQUE_SERVER_TAG to check if the node is root node. isChildOf in
748 // sync_node_browser.js uses modelType to check if root node is parent of real 747 // sync_node_browser.js uses modelType to check if root node is parent of real
749 // data node. NON_UNIQUE_NAME will be the name of node to display. 748 // data node. NON_UNIQUE_NAME will be the name of node to display.
750 rootnode->SetString("PARENT_ID", "r"); 749 rootnode->SetString("PARENT_ID", "r");
751 rootnode->SetString("UNIQUE_SERVER_TAG", type_string); 750 rootnode->SetString("UNIQUE_SERVER_TAG", type_string);
752 rootnode->SetBoolean("IS_DIR", true); 751 rootnode->SetBoolean("IS_DIR", true);
753 rootnode->SetString("modelType", type_string); 752 rootnode->SetString("modelType", type_string);
754 rootnode->SetString("NON_UNIQUE_NAME", type_string); 753 rootnode->SetString("NON_UNIQUE_NAME", type_string);
755 all_nodes->Append(std::move(rootnode)); 754 all_nodes->Append(std::move(rootnode));
756 755
757 task_runner->PostTask(FROM_HERE, 756 task_runner->PostTask(FROM_HERE,
758 base::Bind(callback, type_, base::Passed(&all_nodes))); 757 base::Bind(callback, type_, base::Passed(&all_nodes)));
759 } 758 }
760 759
761 } // namespace syncer_v2 760 } // namespace syncer
OLDNEW
« no previous file with comments | « components/sync/core/shared_model_type_processor.h ('k') | components/sync/core/shared_model_type_processor_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698