Chromium Code Reviews| OLD | NEW |
|---|---|
| 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_driver/generic_change_processor.h" | 5 #include "components/sync_driver/generic_change_processor.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 530 return error; | 530 return error; |
| 531 } | 531 } |
| 532 case syncer::WriteNode::INIT_FAILED_SET_PREDECESSOR: { | 532 case syncer::WriteNode::INIT_FAILED_SET_PREDECESSOR: { |
| 533 syncer::SyncError error; | 533 syncer::SyncError error; |
| 534 error.Reset( | 534 error.Reset( |
| 535 FROM_HERE, error_prefix + "failed to set predecessor", type_); | 535 FROM_HERE, error_prefix + "failed to set predecessor", type_); |
| 536 error_handler()->OnSingleDataTypeUnrecoverableError(error); | 536 error_handler()->OnSingleDataTypeUnrecoverableError(error); |
| 537 LOG(ERROR) << "Create: Bad predecessor."; | 537 LOG(ERROR) << "Create: Bad predecessor."; |
| 538 return error; | 538 return error; |
| 539 } | 539 } |
| 540 case syncer::WriteNode::INIT_FAILED_DECRYPT_EXISTING_ENTRY: { | |
|
Nicolas Zea
2016/04/25 21:40:10
nit: no need for curly braces around return
| |
| 541 return HandleDecryptionError(type_str, trans, sync_node); | |
| 542 } | |
| 540 default: { | 543 default: { |
| 541 syncer::SyncError error; | 544 syncer::SyncError error; |
| 542 error.Reset(FROM_HERE, error_prefix + "unknown error", type_); | 545 error.Reset(FROM_HERE, error_prefix + "unknown error", type_); |
| 543 error_handler()->OnSingleDataTypeUnrecoverableError(error); | 546 error_handler()->OnSingleDataTypeUnrecoverableError(error); |
| 544 LOG(ERROR) << "Create: Unknown error."; | 547 LOG(ERROR) << "Create: Unknown error."; |
| 545 return error; | 548 return error; |
| 546 } | 549 } |
| 547 } | 550 } |
| 548 } | 551 } |
| 549 sync_node->SetTitle(change.sync_data().GetTitle()); | 552 sync_node->SetTitle(change.sync_data().GetTitle()); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 588 error_handler()->OnSingleDataTypeUnrecoverableError(error); | 591 error_handler()->OnSingleDataTypeUnrecoverableError(error); |
| 589 LOG(ERROR) << "Update: bad entry."; | 592 LOG(ERROR) << "Update: bad entry."; |
| 590 return error; | 593 return error; |
| 591 } else if (result == syncer::BaseNode::INIT_FAILED_ENTRY_IS_DEL) { | 594 } else if (result == syncer::BaseNode::INIT_FAILED_ENTRY_IS_DEL) { |
| 592 syncer::SyncError error; | 595 syncer::SyncError error; |
| 593 error.Reset(FROM_HERE, error_prefix + "deleted entry", type_); | 596 error.Reset(FROM_HERE, error_prefix + "deleted entry", type_); |
| 594 error_handler()->OnSingleDataTypeUnrecoverableError(error); | 597 error_handler()->OnSingleDataTypeUnrecoverableError(error); |
| 595 LOG(ERROR) << "Update: deleted entry."; | 598 LOG(ERROR) << "Update: deleted entry."; |
| 596 return error; | 599 return error; |
| 597 } else { | 600 } else { |
| 598 syncer::Cryptographer* crypto = trans.GetCryptographer(); | 601 return HandleDecryptionError(type_str, trans, sync_node); |
| 599 syncer::ModelTypeSet encrypted_types(trans.GetEncryptedTypes()); | |
| 600 const sync_pb::EntitySpecifics& specifics = | |
| 601 sync_node->GetEntitySpecifics(); | |
| 602 CHECK(specifics.has_encrypted()); | |
| 603 const bool can_decrypt = crypto->CanDecrypt(specifics.encrypted()); | |
| 604 const bool agreement = encrypted_types.Has(type_); | |
| 605 if (!agreement && !can_decrypt) { | |
| 606 syncer::SyncError error; | |
| 607 error.Reset(FROM_HERE, | |
| 608 "Failed to load encrypted entry, missing key and " | |
| 609 "nigori mismatch for " + | |
| 610 type_str + ".", | |
| 611 type_); | |
| 612 error_handler()->OnSingleDataTypeUnrecoverableError(error); | |
| 613 LOG(ERROR) << "Update: encr case 1."; | |
| 614 return error; | |
| 615 } else if (agreement && can_decrypt) { | |
| 616 syncer::SyncError error; | |
| 617 error.Reset(FROM_HERE, | |
| 618 "Failed to load encrypted entry, we have the key " | |
| 619 "and the nigori matches (?!) for " + | |
| 620 type_str + ".", | |
| 621 type_); | |
| 622 error_handler()->OnSingleDataTypeUnrecoverableError(error); | |
| 623 LOG(ERROR) << "Update: encr case 2."; | |
| 624 return error; | |
| 625 } else if (agreement) { | |
| 626 syncer::SyncError error; | |
| 627 error.Reset(FROM_HERE, | |
| 628 "Failed to load encrypted entry, missing key and " | |
| 629 "the nigori matches for " + | |
| 630 type_str + ".", | |
| 631 type_); | |
| 632 error_handler()->OnSingleDataTypeUnrecoverableError(error); | |
| 633 LOG(ERROR) << "Update: encr case 3."; | |
| 634 return error; | |
| 635 } else { | |
| 636 syncer::SyncError error; | |
| 637 error.Reset(FROM_HERE, | |
| 638 "Failed to load encrypted entry, we have the key" | |
| 639 "(?!) and nigori mismatch for " + | |
| 640 type_str + ".", | |
| 641 type_); | |
| 642 error_handler()->OnSingleDataTypeUnrecoverableError(error); | |
| 643 LOG(ERROR) << "Update: encr case 4."; | |
| 644 return error; | |
| 645 } | |
| 646 } | 602 } |
| 647 } | 603 } |
| 648 | 604 |
| 649 sync_node->SetTitle(change.sync_data().GetTitle()); | 605 sync_node->SetTitle(change.sync_data().GetTitle()); |
| 650 SetNodeSpecifics(sync_data_local.GetSpecifics(), sync_node); | 606 SetNodeSpecifics(sync_data_local.GetSpecifics(), sync_node); |
| 651 syncer::AttachmentIdList attachment_ids = sync_data_local.GetAttachmentIds(); | 607 syncer::AttachmentIdList attachment_ids = sync_data_local.GetAttachmentIds(); |
| 652 SetAttachmentMetadata(attachment_ids, sync_node); | 608 SetAttachmentMetadata(attachment_ids, sync_node); |
| 653 | 609 |
| 654 // Return any newly added attachments. | 610 // Return any newly added attachments. |
| 655 new_attachments->insert(attachment_ids.begin(), attachment_ids.end()); | 611 new_attachments->insert(attachment_ids.begin(), attachment_ids.end()); |
| 656 | 612 |
| 657 if (merge_result_.get()) { | 613 if (merge_result_.get()) { |
| 658 merge_result_->set_num_items_modified(merge_result_->num_items_modified() + | 614 merge_result_->set_num_items_modified(merge_result_->num_items_modified() + |
| 659 1); | 615 1); |
| 660 } | 616 } |
| 661 // TODO(sync): Support updating other parts of the sync node (title, | 617 // TODO(sync): Support updating other parts of the sync node (title, |
| 662 // successor, parent, etc.). | 618 // successor, parent, etc.). |
| 663 return syncer::SyncError(); | 619 return syncer::SyncError(); |
| 664 } | 620 } |
| 665 | 621 |
| 622 syncer::SyncError GenericChangeProcessor::HandleDecryptionError( | |
| 623 const std::string& type_str, | |
| 624 const syncer::WriteTransaction& trans, | |
| 625 syncer::WriteNode* sync_node) { | |
| 626 syncer::Cryptographer* crypto = trans.GetCryptographer(); | |
| 627 syncer::ModelTypeSet encrypted_types(trans.GetEncryptedTypes()); | |
| 628 const sync_pb::EntitySpecifics& specifics = sync_node->GetEntitySpecifics(); | |
| 629 CHECK(specifics.has_encrypted()); | |
| 630 const bool can_decrypt = crypto->CanDecrypt(specifics.encrypted()); | |
| 631 const bool agreement = encrypted_types.Has(type_); | |
| 632 if (!agreement && !can_decrypt) { | |
|
Nicolas Zea
2016/04/25 21:40:10
Honestly, I think we don't need this level of verb
pavely
2016/04/26 00:33:25
I removed this function and added simpler fragment
| |
| 633 syncer::SyncError error; | |
| 634 error.Reset(FROM_HERE, | |
| 635 "Failed to load encrypted entry, missing key and " | |
| 636 "nigori mismatch for " + | |
| 637 type_str + ".", | |
| 638 type_); | |
| 639 error_handler()->OnSingleDataTypeUnrecoverableError(error); | |
| 640 LOG(ERROR) << "Update: encr case 1."; | |
| 641 return error; | |
| 642 } else if (agreement && can_decrypt) { | |
| 643 syncer::SyncError error; | |
| 644 error.Reset(FROM_HERE, | |
| 645 "Failed to load encrypted entry, we have the key " | |
| 646 "and the nigori matches (?!) for " + | |
| 647 type_str + ".", | |
| 648 type_); | |
| 649 error_handler()->OnSingleDataTypeUnrecoverableError(error); | |
| 650 LOG(ERROR) << "Update: encr case 2."; | |
| 651 return error; | |
| 652 } else if (agreement) { | |
| 653 syncer::SyncError error; | |
| 654 error.Reset(FROM_HERE, | |
| 655 "Failed to load encrypted entry, missing key and " | |
| 656 "the nigori matches for " + | |
| 657 type_str + ".", | |
| 658 type_); | |
| 659 error_handler()->OnSingleDataTypeUnrecoverableError(error); | |
| 660 LOG(ERROR) << "Update: encr case 3."; | |
| 661 return error; | |
| 662 } else { | |
| 663 syncer::SyncError error; | |
| 664 error.Reset(FROM_HERE, | |
| 665 "Failed to load encrypted entry, we have the key" | |
| 666 "(?!) and nigori mismatch for " + | |
| 667 type_str + ".", | |
| 668 type_); | |
| 669 error_handler()->OnSingleDataTypeUnrecoverableError(error); | |
| 670 LOG(ERROR) << "Update: encr case 4."; | |
| 671 return error; | |
| 672 } | |
| 673 } | |
| 674 | |
| 666 bool GenericChangeProcessor::SyncModelHasUserCreatedNodes(bool* has_nodes) { | 675 bool GenericChangeProcessor::SyncModelHasUserCreatedNodes(bool* has_nodes) { |
| 667 DCHECK(CalledOnValidThread()); | 676 DCHECK(CalledOnValidThread()); |
| 668 DCHECK(has_nodes); | 677 DCHECK(has_nodes); |
| 669 std::string type_name = syncer::ModelTypeToString(type_); | 678 std::string type_name = syncer::ModelTypeToString(type_); |
| 670 std::string err_str = "Server did not create the top-level " + type_name + | 679 std::string err_str = "Server did not create the top-level " + type_name + |
| 671 " node. We might be running against an out-of-date server."; | 680 " node. We might be running against an out-of-date server."; |
| 672 *has_nodes = false; | 681 *has_nodes = false; |
| 673 syncer::ReadTransaction trans(FROM_HERE, share_handle()); | 682 syncer::ReadTransaction trans(FROM_HERE, share_handle()); |
| 674 syncer::ReadNode type_root_node(&trans); | 683 syncer::ReadNode type_root_node(&trans); |
| 675 if (type_root_node.InitTypeRoot(type_) != syncer::BaseNode::INIT_OK) { | 684 if (type_root_node.InitTypeRoot(type_) != syncer::BaseNode::INIT_OK) { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 712 } | 721 } |
| 713 } | 722 } |
| 714 | 723 |
| 715 scoped_ptr<syncer::AttachmentService> | 724 scoped_ptr<syncer::AttachmentService> |
| 716 GenericChangeProcessor::GetAttachmentService() const { | 725 GenericChangeProcessor::GetAttachmentService() const { |
| 717 return scoped_ptr<syncer::AttachmentService>( | 726 return scoped_ptr<syncer::AttachmentService>( |
| 718 new syncer::AttachmentServiceProxy(attachment_service_proxy_)); | 727 new syncer::AttachmentServiceProxy(attachment_service_proxy_)); |
| 719 } | 728 } |
| 720 | 729 |
| 721 } // namespace sync_driver | 730 } // namespace sync_driver |
| OLD | NEW |