Index: chrome/browser/sync/glue/password_model_associator.cc |
diff --git a/chrome/browser/sync/glue/password_model_associator.cc b/chrome/browser/sync/glue/password_model_associator.cc |
index 4181f33823728a13231ba4420ffb2c4032526c91..1e12f7c251cf7552a325cfb6af9b670900af7e05 100644 |
--- a/chrome/browser/sync/glue/password_model_associator.cc |
+++ b/chrome/browser/sync/glue/password_model_associator.cc |
@@ -28,12 +28,14 @@ const char kPasswordTag[] = "google_chrome_passwords"; |
PasswordModelAssociator::PasswordModelAssociator( |
ProfileSyncService* sync_service, |
- PasswordStore* password_store) |
+ PasswordStore* password_store, |
+ DataTypeErrorHandler* error_handler) |
: sync_service_(sync_service), |
password_store_(password_store), |
password_node_id_(sync_api::kInvalidId), |
abort_association_pending_(false), |
- expected_loop_(MessageLoop::current()) { |
+ expected_loop_(MessageLoop::current()), |
+ error_handler_(error_handler) { |
DCHECK(sync_service_); |
DCHECK(password_store_); |
#if defined(OS_MACOSX) |
@@ -45,7 +47,8 @@ PasswordModelAssociator::PasswordModelAssociator( |
PasswordModelAssociator::~PasswordModelAssociator() {} |
-bool PasswordModelAssociator::AssociateModels(SyncError* error) { |
+SyncError PasswordModelAssociator::AssociateModels() { |
+ SyncError error; |
DCHECK(expected_loop_ == MessageLoop::current()); |
{ |
base::AutoLock lock(abort_association_pending_lock_); |
@@ -59,10 +62,10 @@ bool PasswordModelAssociator::AssociateModels(SyncError* error) { |
if (!password_store_->FillAutofillableLogins(&passwords) || |
!password_store_->FillBlacklistLogins(&passwords)) { |
STLDeleteElements(&passwords); |
- error->Reset(FROM_HERE, |
- "Could not get the password entries.", |
- model_type()); |
- return false; |
+ return error_handler_->CreateAndUploadError( |
+ FROM_HERE, |
+ "Could not get the password entries.", |
+ model_type()); |
} |
std::set<std::string> current_passwords; |
@@ -72,19 +75,18 @@ bool PasswordModelAssociator::AssociateModels(SyncError* error) { |
sync_api::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare()); |
sync_api::ReadNode password_root(&trans); |
if (!password_root.InitByTagLookup(kPasswordTag)) { |
- error->Reset(FROM_HERE, |
- "Server did not create the top-level password node. We " |
- "might be running against an out-of-date server.", |
- model_type()); |
- return false; |
+ return error_handler_->CreateAndUploadError( |
+ FROM_HERE, |
+ "Server did not create the top-level password node. We " |
+ "might be running against an out-of-date server.", |
+ model_type()); |
} |
for (std::vector<webkit::forms::PasswordForm*>::iterator ix = |
passwords.begin(); |
ix != passwords.end(); ++ix) { |
if (IsAbortPending()) { |
- error->Reset(FROM_HERE, "Abort pending", model_type()); |
- return false; |
+ return SyncError(); |
} |
std::string tag = MakeTag(**ix); |
@@ -100,10 +102,10 @@ bool PasswordModelAssociator::AssociateModels(SyncError* error) { |
sync_api::WriteNode write_node(&trans); |
if (!write_node.InitByClientTagLookup(syncable::PASSWORDS, tag)) { |
STLDeleteElements(&passwords); |
- error->Reset(FROM_HERE, |
- "Failed to edit password sync node.", |
- model_type()); |
- return false; |
+ return error_handler_->CreateAndUploadError( |
+ FROM_HERE, |
+ "Failed to edit password sync node.", |
+ model_type()); |
} |
WriteToSyncNode(new_password, &write_node); |
updated_passwords.push_back(new_password); |
@@ -115,10 +117,10 @@ bool PasswordModelAssociator::AssociateModels(SyncError* error) { |
if (!node.InitUniqueByCreation(syncable::PASSWORDS, |
password_root, tag)) { |
STLDeleteElements(&passwords); |
- error->Reset(FROM_HERE, |
- "Failed to create password sync node.", |
- model_type()); |
- return false; |
+ return error_handler_->CreateAndUploadError( |
+ FROM_HERE, |
+ "Failed to create password sync node.", |
+ model_type()); |
} |
WriteToSyncNode(**ix, &node); |
@@ -135,8 +137,10 @@ bool PasswordModelAssociator::AssociateModels(SyncError* error) { |
while (sync_child_id != sync_api::kInvalidId) { |
sync_api::ReadNode sync_child_node(&trans); |
if (!sync_child_node.InitByIdLookup(sync_child_id)) { |
- error->Reset(FROM_HERE, "Failed to fetch child node.", model_type()); |
- return false; |
+ return error_handler_->CreateAndUploadError( |
+ FROM_HERE, |
+ "Failed to fetch child node.", |
+ model_type()); |
} |
const sync_pb::PasswordSpecificsData& password = |
sync_child_node.GetPasswordSpecifics(); |
@@ -159,12 +163,14 @@ bool PasswordModelAssociator::AssociateModels(SyncError* error) { |
// We must not be holding a transaction when we interact with the password |
// store, as it can post tasks to the UI thread which can itself be blocked |
// on our transaction, resulting in deadlock. (http://crbug.com/70658) |
- if (!WriteToPasswordStore(&new_passwords, &updated_passwords, NULL)) { |
- error->Reset(FROM_HERE, "Failed to write passwords.", model_type()); |
- return false; |
+ error = WriteToPasswordStore(&new_passwords, |
+ &updated_passwords, |
+ NULL); |
+ if (error.IsSet()) { |
+ return error; |
} |
- return true; |
+ return error; |
} |
bool PasswordModelAssociator::DeleteAllNodes( |
@@ -185,10 +191,10 @@ bool PasswordModelAssociator::DeleteAllNodes( |
return true; |
} |
-bool PasswordModelAssociator::DisassociateModels(SyncError* error) { |
+SyncError PasswordModelAssociator::DisassociateModels() { |
id_map_.clear(); |
id_map_inverse_.clear(); |
- return true; |
+ return SyncError(); |
} |
bool PasswordModelAssociator::SyncModelHasUserCreatedNodes(bool* has_nodes) { |
@@ -279,10 +285,10 @@ bool PasswordModelAssociator::GetSyncIdForTaggedNode(const std::string& tag, |
return true; |
} |
-bool PasswordModelAssociator::WriteToPasswordStore( |
- const PasswordVector* new_passwords, |
- const PasswordVector* updated_passwords, |
- const PasswordVector* deleted_passwords) { |
+SyncError PasswordModelAssociator::WriteToPasswordStore( |
+ const PasswordVector* new_passwords, |
+ const PasswordVector* updated_passwords, |
+ const PasswordVector* deleted_passwords) { |
if (new_passwords) { |
for (PasswordVector::const_iterator password = new_passwords->begin(); |
password != new_passwords->end(); ++password) { |
@@ -309,7 +315,7 @@ bool PasswordModelAssociator::WriteToPasswordStore( |
// we use internal password store interfaces to make changes synchronously. |
password_store_->PostNotifyLoginsChanged(); |
} |
- return true; |
+ return SyncError(); |
} |
// static |