diff options
author | isherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-17 00:09:13 +0000 |
---|---|---|
committer | isherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-17 00:09:13 +0000 |
commit | 22a4ea9255df685f42c7805db8c1179964af6ff8 (patch) | |
tree | 7051bfef86003ddef8b271787c93da3bb611b34d | |
parent | d3f5bbc1736289a4f2d44a971acdb2dd0ffa1504 (diff) | |
download | chromium_src-22a4ea9255df685f42c7805db8c1179964af6ff8.zip chromium_src-22a4ea9255df685f42c7805db8c1179964af6ff8.tar.gz chromium_src-22a4ea9255df685f42c7805db8c1179964af6ff8.tar.bz2 |
Explode Autofill sync error messages for debugging
BUG=121592
TEST=none
Review URL: https://chromiumcodereview.appspot.com/10383127
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@137572 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/sync/glue/generic_change_processor.cc | 94 | ||||
-rw-r--r-- | chrome/browser/webdata/autofill_profile_syncable_service.cc | 9 |
2 files changed, 83 insertions, 20 deletions
diff --git a/chrome/browser/sync/glue/generic_change_processor.cc b/chrome/browser/sync/glue/generic_change_processor.cc index a8accd9..0c9ac04 100644 --- a/chrome/browser/sync/glue/generic_change_processor.cc +++ b/chrome/browser/sync/glue/generic_change_processor.cc @@ -128,26 +128,91 @@ SyncError GenericChangeProcessor::GetSyncDataForType( namespace { -bool AttemptDelete(const SyncChange& change, sync_api::WriteNode* node) { +// TODO(isherman): Investigating http://crbug.com/121592 +SyncError LogLookupFailure(sync_api::BaseNode::InitByLookupResult lookup_result, + const tracked_objects::Location& from_here, + const std::string& error_prefix, + syncable::ModelType type, + DataTypeErrorHandler* error_handler) { + SyncError error; + switch (lookup_result) { + case sync_api::BaseNode::INIT_FAILED_ENTRY_NOT_GOOD: + error.Reset(from_here, + error_prefix + + "could not find entry matching the lookup criteria.", + type); + error_handler->OnSingleDatatypeUnrecoverableError(error.location(), + error.message()); + return error; + + case sync_api::BaseNode::INIT_FAILED_ENTRY_IS_DEL: + error.Reset(from_here, error_prefix + "entry is already deleted.", type); + error_handler->OnSingleDatatypeUnrecoverableError(error.location(), + error.message()); + return error; + + case sync_api::BaseNode::INIT_FAILED_DECRYPT_IF_NECESSARY: + error.Reset(from_here, error_prefix + "unable to decrypt", type); + error_handler->OnSingleDatatypeUnrecoverableError(error.location(), + error.message()); + return error; + + case sync_api::BaseNode::INIT_FAILED_PRECONDITION: + error.Reset(from_here, + error_prefix + "a precondition was not met for calling init.", + type); + error_handler->OnSingleDatatypeUnrecoverableError(error.location(), + error.message()); + return error; + + default: + // Should have listed all the possible error cases above. + NOTREACHED(); + error.Reset(from_here, error_prefix + "unknown error", type); + error_handler->OnSingleDatatypeUnrecoverableError(error.location(), + error.message()); + return error; + } +} + +SyncError AttemptDelete(const SyncChange& change, + syncable::ModelType type, + const std::string& type_str, + sync_api::WriteNode* node, + DataTypeErrorHandler* error_handler) { DCHECK_EQ(change.change_type(), SyncChange::ACTION_DELETE); if (change.sync_data().IsLocal()) { const std::string& tag = change.sync_data().GetTag(); if (tag.empty()) { - return false; + SyncError error( + FROM_HERE, + "Failed to delete " + type_str + " node. Local data, empty tag.", + type); + error_handler->OnSingleDatatypeUnrecoverableError(error.location(), + error.message()); + return error; } - if (node->InitByClientTagLookup( - change.sync_data().GetDataType(), tag) != - sync_api::BaseNode::INIT_OK) { - return false; + + sync_api::BaseNode::InitByLookupResult result = + node->InitByClientTagLookup(change.sync_data().GetDataType(), tag); + if (result != sync_api::BaseNode::INIT_OK) { + return LogLookupFailure( + result, FROM_HERE, + "Failed to delete " + type_str + " node. Local data, ", + type, error_handler); } } else { - if (node->InitByIdLookup(change.sync_data().GetRemoteId()) != - sync_api::BaseNode::INIT_OK) { - return false; + sync_api::BaseNode::InitByLookupResult result = + node->InitByIdLookup(change.sync_data().GetRemoteId()); + if (result != sync_api::BaseNode::INIT_OK) { + return LogLookupFailure( + result, FROM_HERE, + "Failed to delete " + type_str + " node. Non-local data, ", + type, error_handler); } } node->Remove(); - return true; + return SyncError(); } } // namespace @@ -167,13 +232,10 @@ SyncError GenericChangeProcessor::ProcessSyncChanges( std::string type_str = syncable::ModelTypeToString(type); sync_api::WriteNode sync_node(&trans); if (change.change_type() == SyncChange::ACTION_DELETE) { - if (!AttemptDelete(change, &sync_node)) { + SyncError error = AttemptDelete(change, type, type_str, &sync_node, + error_handler()); + if (error.IsSet()) { NOTREACHED(); - SyncError error(FROM_HERE, - "Failed to delete " + type_str + " node.", - type); - error_handler()->OnSingleDatatypeUnrecoverableError(error.location(), - error.message()); return error; } } else if (change.change_type() == SyncChange::ACTION_ADD) { diff --git a/chrome/browser/webdata/autofill_profile_syncable_service.cc b/chrome/browser/webdata/autofill_profile_syncable_service.cc index 867bb16..8b352d5 100644 --- a/chrome/browser/webdata/autofill_profile_syncable_service.cc +++ b/chrome/browser/webdata/autofill_profile_syncable_service.cc @@ -458,10 +458,11 @@ void AutofillProfileSyncableService::ActOnChange( } SyncError error = sync_processor_->ProcessSyncChanges(FROM_HERE, new_changes); if (error.IsSet()) { - DLOG(WARNING) << "[AUTOFILL SYNC]" - << " Failed processing change:" - << " Error:" << error.message() - << " Guid:" << change.key(); + // TODO(isherman): Investigating http://crbug.com/121592 + VLOG(1) << "[AUTOFILL SYNC] " + << "Failed processing change:\n" + << " Error: " << error.message() << "\n" + << " Guid: " << change.key(); } } |