Index: trunk/src/chrome/browser/sync/glue/typed_url_change_processor.cc |
=================================================================== |
--- trunk/src/chrome/browser/sync/glue/typed_url_change_processor.cc (revision 289111) |
+++ trunk/src/chrome/browser/sync/glue/typed_url_change_processor.cc (working copy) |
@@ -113,11 +113,9 @@ |
syncer::ReadNode typed_url_root(trans); |
if (typed_url_root.InitTypeRoot(syncer::TYPED_URLS) != |
syncer::BaseNode::INIT_OK) { |
- syncer::SyncError error(FROM_HERE, |
- syncer::SyncError::DATATYPE_ERROR, |
- "No top level folder", |
- syncer::TYPED_URLS); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ "Server did not create the top-level typed_url node. We " |
+ "might be running against an out-of-date server."); |
return false; |
} |
@@ -132,24 +130,47 @@ |
if (result == syncer::BaseNode::INIT_OK) { |
model_associator_->WriteToSyncNode(url, visit_vector, &update_node); |
} else if (result == syncer::BaseNode::INIT_FAILED_DECRYPT_IF_NECESSARY) { |
- syncer::SyncError error(FROM_HERE, |
- syncer::SyncError::DATATYPE_ERROR, |
- "Failed to decrypt.", |
- syncer::TYPED_URLS); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
- return false; |
+ // TODO(tim): Investigating bug 121587. |
+ syncer::Cryptographer* crypto = trans->GetCryptographer(); |
+ syncer::ModelTypeSet encrypted_types(trans->GetEncryptedTypes()); |
+ const sync_pb::EntitySpecifics& specifics = |
+ update_node.GetEntry()->GetSpecifics(); |
+ CHECK(specifics.has_encrypted()); |
+ const bool can_decrypt = crypto->CanDecrypt(specifics.encrypted()); |
+ const bool agreement = encrypted_types.Has(syncer::TYPED_URLS); |
+ if (!agreement && !can_decrypt) { |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ "Could not InitByIdLookup in CreateOrUpdateSyncNode, " |
+ " Cryptographer thinks typed urls not encrypted, and CanDecrypt" |
+ " failed."); |
+ LOG(ERROR) << "Case 1."; |
+ } else if (agreement && can_decrypt) { |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ "Could not InitByIdLookup on CreateOrUpdateSyncNode, " |
+ " Cryptographer thinks typed urls are encrypted, and CanDecrypt" |
+ " succeeded (?!), but DecryptIfNecessary failed."); |
+ LOG(ERROR) << "Case 2."; |
+ } else if (agreement) { |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ "Could not InitByIdLookup on CreateOrUpdateSyncNode, " |
+ " Cryptographer thinks typed urls are encrypted, but CanDecrypt" |
+ " failed."); |
+ LOG(ERROR) << "Case 3."; |
+ } else { |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ "Could not InitByIdLookup on CreateOrUpdateSyncNode, " |
+ " Cryptographer thinks typed urls not encrypted, but CanDecrypt" |
+ " succeeded (super weird, btw)"); |
+ LOG(ERROR) << "Case 4."; |
+ } |
} else { |
syncer::WriteNode create_node(trans); |
syncer::WriteNode::InitUniqueByCreationResult result = |
create_node.InitUniqueByCreation(syncer::TYPED_URLS, |
typed_url_root, tag); |
if (result != syncer::WriteNode::INIT_SUCCESS) { |
- |
- syncer::SyncError error(FROM_HERE, |
- syncer::SyncError::DATATYPE_ERROR, |
- "Failed to create sync node", |
- syncer::TYPED_URLS); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ "Failed to create typed_url sync node."); |
return false; |
} |
@@ -173,11 +194,8 @@ |
if (details->all_history) { |
if (!model_associator_->DeleteAllNodes(&trans)) { |
- syncer::SyncError error(FROM_HERE, |
- syncer::SyncError::DATATYPE_ERROR, |
- "Failed to delete local nodes.", |
- syncer::TYPED_URLS); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ std::string()); |
return; |
} |
} else { |
@@ -236,11 +254,8 @@ |
syncer::ReadNode typed_url_root(trans); |
if (typed_url_root.InitTypeRoot(syncer::TYPED_URLS) != |
syncer::BaseNode::INIT_OK) { |
- syncer::SyncError error(FROM_HERE, |
- syncer::SyncError::DATATYPE_ERROR, |
- "Failed to init type root.", |
- syncer::TYPED_URLS); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ "TypedUrl root node lookup failed."); |
return; |
} |
@@ -261,11 +276,8 @@ |
syncer::ReadNode sync_node(trans); |
if (sync_node.InitByIdLookup(it->id) != syncer::BaseNode::INIT_OK) { |
- syncer::SyncError error(FROM_HERE, |
- syncer::SyncError::DATATYPE_ERROR, |
- "Failed to init sync node.", |
- syncer::TYPED_URLS); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ "TypedUrl node lookup failed."); |
return; |
} |