Chromium Code Reviews| Index: components/sync_driver/generic_change_processor.cc |
| diff --git a/components/sync_driver/generic_change_processor.cc b/components/sync_driver/generic_change_processor.cc |
| index 2df982022d69edcf38f818ec0f6d81ac73548e6b..4cc4269d61d64fa76872780f3fe60a00fdae0e52 100644 |
| --- a/components/sync_driver/generic_change_processor.cc |
| +++ b/components/sync_driver/generic_change_processor.cc |
| @@ -537,6 +537,9 @@ syncer::SyncError GenericChangeProcessor::HandleActionAdd( |
| LOG(ERROR) << "Create: Bad predecessor."; |
| return error; |
| } |
| + case syncer::WriteNode::INIT_FAILED_DECRYPT_EXISTING_ENTRY: { |
|
Nicolas Zea
2016/04/25 21:40:10
nit: no need for curly braces around return
|
| + return HandleDecryptionError(type_str, trans, sync_node); |
| + } |
| default: { |
| syncer::SyncError error; |
| error.Reset(FROM_HERE, error_prefix + "unknown error", type_); |
| @@ -595,54 +598,7 @@ syncer::SyncError GenericChangeProcessor::HandleActionUpdate( |
| LOG(ERROR) << "Update: deleted entry."; |
| return error; |
| } else { |
| - syncer::Cryptographer* crypto = trans.GetCryptographer(); |
| - syncer::ModelTypeSet encrypted_types(trans.GetEncryptedTypes()); |
| - const sync_pb::EntitySpecifics& specifics = |
| - sync_node->GetEntitySpecifics(); |
| - CHECK(specifics.has_encrypted()); |
| - const bool can_decrypt = crypto->CanDecrypt(specifics.encrypted()); |
| - const bool agreement = encrypted_types.Has(type_); |
| - if (!agreement && !can_decrypt) { |
| - syncer::SyncError error; |
| - error.Reset(FROM_HERE, |
| - "Failed to load encrypted entry, missing key and " |
| - "nigori mismatch for " + |
| - type_str + ".", |
| - type_); |
| - error_handler()->OnSingleDataTypeUnrecoverableError(error); |
| - LOG(ERROR) << "Update: encr case 1."; |
| - return error; |
| - } else if (agreement && can_decrypt) { |
| - syncer::SyncError error; |
| - error.Reset(FROM_HERE, |
| - "Failed to load encrypted entry, we have the key " |
| - "and the nigori matches (?!) for " + |
| - type_str + ".", |
| - type_); |
| - error_handler()->OnSingleDataTypeUnrecoverableError(error); |
| - LOG(ERROR) << "Update: encr case 2."; |
| - return error; |
| - } else if (agreement) { |
| - syncer::SyncError error; |
| - error.Reset(FROM_HERE, |
| - "Failed to load encrypted entry, missing key and " |
| - "the nigori matches for " + |
| - type_str + ".", |
| - type_); |
| - error_handler()->OnSingleDataTypeUnrecoverableError(error); |
| - LOG(ERROR) << "Update: encr case 3."; |
| - return error; |
| - } else { |
| - syncer::SyncError error; |
| - error.Reset(FROM_HERE, |
| - "Failed to load encrypted entry, we have the key" |
| - "(?!) and nigori mismatch for " + |
| - type_str + ".", |
| - type_); |
| - error_handler()->OnSingleDataTypeUnrecoverableError(error); |
| - LOG(ERROR) << "Update: encr case 4."; |
| - return error; |
| - } |
| + return HandleDecryptionError(type_str, trans, sync_node); |
| } |
| } |
| @@ -663,6 +619,59 @@ syncer::SyncError GenericChangeProcessor::HandleActionUpdate( |
| return syncer::SyncError(); |
| } |
| +syncer::SyncError GenericChangeProcessor::HandleDecryptionError( |
| + const std::string& type_str, |
| + const syncer::WriteTransaction& trans, |
| + syncer::WriteNode* sync_node) { |
| + syncer::Cryptographer* crypto = trans.GetCryptographer(); |
| + syncer::ModelTypeSet encrypted_types(trans.GetEncryptedTypes()); |
| + const sync_pb::EntitySpecifics& specifics = sync_node->GetEntitySpecifics(); |
| + CHECK(specifics.has_encrypted()); |
| + const bool can_decrypt = crypto->CanDecrypt(specifics.encrypted()); |
| + const bool agreement = encrypted_types.Has(type_); |
| + 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
|
| + syncer::SyncError error; |
| + error.Reset(FROM_HERE, |
| + "Failed to load encrypted entry, missing key and " |
| + "nigori mismatch for " + |
| + type_str + ".", |
| + type_); |
| + error_handler()->OnSingleDataTypeUnrecoverableError(error); |
| + LOG(ERROR) << "Update: encr case 1."; |
| + return error; |
| + } else if (agreement && can_decrypt) { |
| + syncer::SyncError error; |
| + error.Reset(FROM_HERE, |
| + "Failed to load encrypted entry, we have the key " |
| + "and the nigori matches (?!) for " + |
| + type_str + ".", |
| + type_); |
| + error_handler()->OnSingleDataTypeUnrecoverableError(error); |
| + LOG(ERROR) << "Update: encr case 2."; |
| + return error; |
| + } else if (agreement) { |
| + syncer::SyncError error; |
| + error.Reset(FROM_HERE, |
| + "Failed to load encrypted entry, missing key and " |
| + "the nigori matches for " + |
| + type_str + ".", |
| + type_); |
| + error_handler()->OnSingleDataTypeUnrecoverableError(error); |
| + LOG(ERROR) << "Update: encr case 3."; |
| + return error; |
| + } else { |
| + syncer::SyncError error; |
| + error.Reset(FROM_HERE, |
| + "Failed to load encrypted entry, we have the key" |
| + "(?!) and nigori mismatch for " + |
| + type_str + ".", |
| + type_); |
| + error_handler()->OnSingleDataTypeUnrecoverableError(error); |
| + LOG(ERROR) << "Update: encr case 4."; |
| + return error; |
| + } |
| +} |
| + |
| bool GenericChangeProcessor::SyncModelHasUserCreatedNodes(bool* has_nodes) { |
| DCHECK(CalledOnValidThread()); |
| DCHECK(has_nodes); |