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: { |
| 541 syncer::SyncError error; |
| 542 error.Reset(FROM_HERE, error_prefix + "failed to decrypt", type_); |
| 543 error_handler()->OnSingleDataTypeUnrecoverableError(error); |
| 544 LOG(ERROR) << "Create: Failed to decrypt."; |
| 545 return error; |
| 546 } |
540 default: { | 547 default: { |
541 syncer::SyncError error; | 548 syncer::SyncError error; |
542 error.Reset(FROM_HERE, error_prefix + "unknown error", type_); | 549 error.Reset(FROM_HERE, error_prefix + "unknown error", type_); |
543 error_handler()->OnSingleDataTypeUnrecoverableError(error); | 550 error_handler()->OnSingleDataTypeUnrecoverableError(error); |
544 LOG(ERROR) << "Create: Unknown error."; | 551 LOG(ERROR) << "Create: Unknown error."; |
545 return error; | 552 return error; |
546 } | 553 } |
547 } | 554 } |
548 } | 555 } |
549 sync_node->SetTitle(change.sync_data().GetTitle()); | 556 sync_node->SetTitle(change.sync_data().GetTitle()); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
587 error.Reset(FROM_HERE, error_prefix + "bad entry", type_); | 594 error.Reset(FROM_HERE, error_prefix + "bad entry", type_); |
588 error_handler()->OnSingleDataTypeUnrecoverableError(error); | 595 error_handler()->OnSingleDataTypeUnrecoverableError(error); |
589 LOG(ERROR) << "Update: bad entry."; | 596 LOG(ERROR) << "Update: bad entry."; |
590 return error; | 597 return error; |
591 } else if (result == syncer::BaseNode::INIT_FAILED_ENTRY_IS_DEL) { | 598 } else if (result == syncer::BaseNode::INIT_FAILED_ENTRY_IS_DEL) { |
592 syncer::SyncError error; | 599 syncer::SyncError error; |
593 error.Reset(FROM_HERE, error_prefix + "deleted entry", type_); | 600 error.Reset(FROM_HERE, error_prefix + "deleted entry", type_); |
594 error_handler()->OnSingleDataTypeUnrecoverableError(error); | 601 error_handler()->OnSingleDataTypeUnrecoverableError(error); |
595 LOG(ERROR) << "Update: deleted entry."; | 602 LOG(ERROR) << "Update: deleted entry."; |
596 return error; | 603 return error; |
| 604 } else if (result == syncer::BaseNode::INIT_FAILED_DECRYPT_IF_NECESSARY) { |
| 605 syncer::SyncError error; |
| 606 error.Reset(FROM_HERE, error_prefix + "failed to decrypt", type_); |
| 607 error_handler()->OnSingleDataTypeUnrecoverableError(error); |
| 608 LOG(ERROR) << "Update: Failed to decrypt."; |
| 609 return error; |
597 } else { | 610 } else { |
598 syncer::Cryptographer* crypto = trans.GetCryptographer(); | 611 NOTREACHED(); |
599 syncer::ModelTypeSet encrypted_types(trans.GetEncryptedTypes()); | 612 syncer::SyncError error; |
600 const sync_pb::EntitySpecifics& specifics = | 613 error.Reset(FROM_HERE, error_prefix + "unknown error", type_); |
601 sync_node->GetEntitySpecifics(); | 614 error_handler()->OnSingleDataTypeUnrecoverableError(error); |
602 CHECK(specifics.has_encrypted()); | 615 LOG(ERROR) << "Update: Unknown error."; |
603 const bool can_decrypt = crypto->CanDecrypt(specifics.encrypted()); | 616 return error; |
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 } | 617 } |
647 } | 618 } |
648 | 619 |
649 sync_node->SetTitle(change.sync_data().GetTitle()); | 620 sync_node->SetTitle(change.sync_data().GetTitle()); |
650 SetNodeSpecifics(sync_data_local.GetSpecifics(), sync_node); | 621 SetNodeSpecifics(sync_data_local.GetSpecifics(), sync_node); |
651 syncer::AttachmentIdList attachment_ids = sync_data_local.GetAttachmentIds(); | 622 syncer::AttachmentIdList attachment_ids = sync_data_local.GetAttachmentIds(); |
652 SetAttachmentMetadata(attachment_ids, sync_node); | 623 SetAttachmentMetadata(attachment_ids, sync_node); |
653 | 624 |
654 // Return any newly added attachments. | 625 // Return any newly added attachments. |
655 new_attachments->insert(attachment_ids.begin(), attachment_ids.end()); | 626 new_attachments->insert(attachment_ids.begin(), attachment_ids.end()); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
712 } | 683 } |
713 } | 684 } |
714 | 685 |
715 scoped_ptr<syncer::AttachmentService> | 686 scoped_ptr<syncer::AttachmentService> |
716 GenericChangeProcessor::GetAttachmentService() const { | 687 GenericChangeProcessor::GetAttachmentService() const { |
717 return scoped_ptr<syncer::AttachmentService>( | 688 return scoped_ptr<syncer::AttachmentService>( |
718 new syncer::AttachmentServiceProxy(attachment_service_proxy_)); | 689 new syncer::AttachmentServiceProxy(attachment_service_proxy_)); |
719 } | 690 } |
720 | 691 |
721 } // namespace sync_driver | 692 } // namespace sync_driver |
OLD | NEW |