OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/sync/glue/generic_change_processor.h" | 5 #include "chrome/browser/sync/glue/generic_change_processor.h" |
6 | 6 |
7 #include "base/location.h" | 7 #include "base/location.h" |
8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
10 #include "content/public/browser/browser_thread.h" | 10 #include "content/public/browser/browser_thread.h" |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 syncer::SyncData::CreateRemoteData( | 74 syncer::SyncData::CreateRemoteData( |
75 it->id, read_node.GetEntitySpecifics()))); | 75 it->id, read_node.GetEntitySpecifics()))); |
76 } | 76 } |
77 } | 77 } |
78 } | 78 } |
79 | 79 |
80 void GenericChangeProcessor::CommitChangesFromSyncModel() { | 80 void GenericChangeProcessor::CommitChangesFromSyncModel() { |
81 DCHECK(CalledOnValidThread()); | 81 DCHECK(CalledOnValidThread()); |
82 if (syncer_changes_.empty()) | 82 if (syncer_changes_.empty()) |
83 return; | 83 return; |
84 if (!local_service_) { | 84 if (!local_service_.get()) { |
85 syncer::ModelType type = syncer_changes_[0].sync_data().GetDataType(); | 85 syncer::ModelType type = syncer_changes_[0].sync_data().GetDataType(); |
86 syncer::SyncError error(FROM_HERE, "Local service destroyed.", type); | 86 syncer::SyncError error(FROM_HERE, "Local service destroyed.", type); |
87 error_handler()->OnSingleDatatypeUnrecoverableError(error.location(), | 87 error_handler()->OnSingleDatatypeUnrecoverableError(error.location(), |
88 error.message()); | 88 error.message()); |
89 return; | 89 return; |
90 } | 90 } |
91 syncer::SyncError error = local_service_->ProcessSyncChanges(FROM_HERE, | 91 syncer::SyncError error = local_service_->ProcessSyncChanges(FROM_HERE, |
92 syncer_changes_); | 92 syncer_changes_); |
93 syncer_changes_.clear(); | 93 syncer_changes_.clear(); |
94 if (error.IsSet()) { | 94 if (error.IsSet()) { |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 std::string type_str = syncer::ModelTypeToString(type); | 278 std::string type_str = syncer::ModelTypeToString(type); |
279 syncer::WriteNode sync_node(&trans); | 279 syncer::WriteNode sync_node(&trans); |
280 if (change.change_type() == syncer::SyncChange::ACTION_DELETE) { | 280 if (change.change_type() == syncer::SyncChange::ACTION_DELETE) { |
281 syncer::SyncError error = | 281 syncer::SyncError error = |
282 AttemptDelete(change, type, type_str, &sync_node, | 282 AttemptDelete(change, type, type_str, &sync_node, |
283 error_handler()); | 283 error_handler()); |
284 if (error.IsSet()) { | 284 if (error.IsSet()) { |
285 NOTREACHED(); | 285 NOTREACHED(); |
286 return error; | 286 return error; |
287 } | 287 } |
288 if (merge_result_) { | 288 if (merge_result_.get()) { |
289 merge_result_->set_num_items_deleted( | 289 merge_result_->set_num_items_deleted( |
290 merge_result_->num_items_deleted() + 1); | 290 merge_result_->num_items_deleted() + 1); |
291 } | 291 } |
292 } else if (change.change_type() == syncer::SyncChange::ACTION_ADD) { | 292 } else if (change.change_type() == syncer::SyncChange::ACTION_ADD) { |
293 // TODO(sync): Handle other types of creation (custom parents, folders, | 293 // TODO(sync): Handle other types of creation (custom parents, folders, |
294 // etc.). | 294 // etc.). |
295 syncer::ReadNode root_node(&trans); | 295 syncer::ReadNode root_node(&trans); |
296 if (root_node.InitByTagLookup( | 296 if (root_node.InitByTagLookup( |
297 syncer::ModelTypeToRootTag(change.sync_data().GetDataType())) != | 297 syncer::ModelTypeToRootTag(change.sync_data().GetDataType())) != |
298 syncer::BaseNode::INIT_OK) { | 298 syncer::BaseNode::INIT_OK) { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
352 error.Reset(FROM_HERE, error_prefix + "unknown error", type); | 352 error.Reset(FROM_HERE, error_prefix + "unknown error", type); |
353 error_handler()->OnSingleDatatypeUnrecoverableError( | 353 error_handler()->OnSingleDatatypeUnrecoverableError( |
354 FROM_HERE, error.message()); | 354 FROM_HERE, error.message()); |
355 LOG(ERROR) << "Create: Unknown error."; | 355 LOG(ERROR) << "Create: Unknown error."; |
356 return error; | 356 return error; |
357 } | 357 } |
358 } | 358 } |
359 } | 359 } |
360 sync_node.SetTitle(UTF8ToWide(change.sync_data().GetTitle())); | 360 sync_node.SetTitle(UTF8ToWide(change.sync_data().GetTitle())); |
361 sync_node.SetEntitySpecifics(change.sync_data().GetSpecifics()); | 361 sync_node.SetEntitySpecifics(change.sync_data().GetSpecifics()); |
362 if (merge_result_) { | 362 if (merge_result_.get()) { |
363 merge_result_->set_num_items_added( | 363 merge_result_->set_num_items_added(merge_result_->num_items_added() + |
364 merge_result_->num_items_added() + 1); | 364 1); |
365 } | 365 } |
366 } else if (change.change_type() == syncer::SyncChange::ACTION_UPDATE) { | 366 } else if (change.change_type() == syncer::SyncChange::ACTION_UPDATE) { |
367 // TODO(zea): consider having this logic for all possible changes? | 367 // TODO(zea): consider having this logic for all possible changes? |
368 syncer::BaseNode::InitByLookupResult result = | 368 syncer::BaseNode::InitByLookupResult result = |
369 sync_node.InitByClientTagLookup(change.sync_data().GetDataType(), | 369 sync_node.InitByClientTagLookup(change.sync_data().GetDataType(), |
370 change.sync_data().GetTag()); | 370 change.sync_data().GetTag()); |
371 if (result != syncer::BaseNode::INIT_OK) { | 371 if (result != syncer::BaseNode::INIT_OK) { |
372 std::string error_prefix = "Failed to load " + type_str + " node. " + | 372 std::string error_prefix = "Failed to load " + type_str + " node. " + |
373 change.location().ToString() + ", "; | 373 change.location().ToString() + ", "; |
374 if (result == syncer::BaseNode::INIT_FAILED_PRECONDITION) { | 374 if (result == syncer::BaseNode::INIT_FAILED_PRECONDITION) { |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 error_handler()->OnSingleDatatypeUnrecoverableError( | 445 error_handler()->OnSingleDatatypeUnrecoverableError( |
446 FROM_HERE, error.message()); | 446 FROM_HERE, error.message()); |
447 LOG(ERROR) << "Update: encr case 4."; | 447 LOG(ERROR) << "Update: encr case 4."; |
448 return error; | 448 return error; |
449 } | 449 } |
450 } | 450 } |
451 } | 451 } |
452 | 452 |
453 sync_node.SetTitle(UTF8ToWide(change.sync_data().GetTitle())); | 453 sync_node.SetTitle(UTF8ToWide(change.sync_data().GetTitle())); |
454 sync_node.SetEntitySpecifics(change.sync_data().GetSpecifics()); | 454 sync_node.SetEntitySpecifics(change.sync_data().GetSpecifics()); |
455 if (merge_result_) { | 455 if (merge_result_.get()) { |
456 merge_result_->set_num_items_modified( | 456 merge_result_->set_num_items_modified( |
457 merge_result_->num_items_modified() + 1); | 457 merge_result_->num_items_modified() + 1); |
458 } | 458 } |
459 // TODO(sync): Support updating other parts of the sync node (title, | 459 // TODO(sync): Support updating other parts of the sync node (title, |
460 // successor, parent, etc.). | 460 // successor, parent, etc.). |
461 } else { | 461 } else { |
462 syncer::SyncError error( | 462 syncer::SyncError error( |
463 FROM_HERE, | 463 FROM_HERE, |
464 "Received unset SyncChange in the change processor, " + | 464 "Received unset SyncChange in the change processor, " + |
465 change.location().ToString(), | 465 change.location().ToString(), |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
511 void GenericChangeProcessor::StartImpl(Profile* profile) { | 511 void GenericChangeProcessor::StartImpl(Profile* profile) { |
512 DCHECK(CalledOnValidThread()); | 512 DCHECK(CalledOnValidThread()); |
513 } | 513 } |
514 | 514 |
515 syncer::UserShare* GenericChangeProcessor::share_handle() const { | 515 syncer::UserShare* GenericChangeProcessor::share_handle() const { |
516 DCHECK(CalledOnValidThread()); | 516 DCHECK(CalledOnValidThread()); |
517 return share_handle_; | 517 return share_handle_; |
518 } | 518 } |
519 | 519 |
520 } // namespace browser_sync | 520 } // namespace browser_sync |
OLD | NEW |