Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3282)

Unified Diff: chrome/browser/sync/glue/password_model_associator.cc

Issue 9978017: [Sync] - Upload the callstacks for errors so that the line number of error is in callstack. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « chrome/browser/sync/glue/password_model_associator.h ('k') | chrome/browser/sync/glue/session_change_processor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698