Index: chrome/browser/sync/glue/password_change_processor.cc |
diff --git a/chrome/browser/sync/glue/password_change_processor.cc b/chrome/browser/sync/glue/password_change_processor.cc |
index a4d7805e474914a6f115dfeab6c25ee4d4c89be1..de47d0a2282b587506c998e1f73b88b1ca3166da 100644 |
--- a/chrome/browser/sync/glue/password_change_processor.cc |
+++ b/chrome/browser/sync/glue/password_change_processor.cc |
@@ -130,7 +130,6 @@ void PasswordChangeProcessor::ApplyChangesFromSyncModel( |
DCHECK(expected_loop_ == MessageLoop::current()); |
if (!running()) |
return; |
- StopObserving(); |
sync_api::ReadNode password_root(trans); |
if (!password_root.InitByTagLookup(kPasswordTag)) { |
@@ -139,9 +138,8 @@ void PasswordChangeProcessor::ApplyChangesFromSyncModel( |
return; |
} |
- PasswordModelAssociator::PasswordVector new_passwords; |
- PasswordModelAssociator::PasswordVector updated_passwords; |
- PasswordModelAssociator::PasswordVector deleted_passwords; |
+ DCHECK(deleted_passwords_.empty() && new_passwords_.empty() && |
+ updated_passwords_.empty()); |
for (int i = 0; i < change_count; ++i) { |
if (sync_api::SyncManager::ChangeRecord::ACTION_DELETE == |
@@ -154,7 +152,7 @@ void PasswordChangeProcessor::ApplyChangesFromSyncModel( |
const sync_pb::PasswordSpecificsData& password = extra->unencrypted(); |
webkit_glue::PasswordForm form; |
PasswordModelAssociator::CopyPassword(password, &form); |
- deleted_passwords.push_back(form); |
+ deleted_passwords_.push_back(form); |
model_associator_->Disassociate(changes[i].id); |
continue; |
} |
@@ -178,21 +176,32 @@ void PasswordChangeProcessor::ApplyChangesFromSyncModel( |
if (sync_api::SyncManager::ChangeRecord::ACTION_ADD == changes[i].action) { |
std::string tag(PasswordModelAssociator::MakeTag(password)); |
model_associator_->Associate(&tag, sync_node.GetId()); |
- new_passwords.push_back(password); |
+ new_passwords_.push_back(password); |
} else { |
DCHECK(sync_api::SyncManager::ChangeRecord::ACTION_UPDATE == |
changes[i].action); |
- updated_passwords.push_back(password); |
+ updated_passwords_.push_back(password); |
} |
} |
+} |
+ |
+void PasswordChangeProcessor::CommitChangesFromSyncModel() { |
+ DCHECK(expected_loop_ == MessageLoop::current()); |
+ if (!running()) |
+ return; |
+ StopObserving(); |
- if (!model_associator_->WriteToPasswordStore(&new_passwords, |
- &updated_passwords, |
- &deleted_passwords)) { |
+ if (!model_associator_->WriteToPasswordStore(&new_passwords_, |
+ &updated_passwords_, |
+ &deleted_passwords_)) { |
error_handler()->OnUnrecoverableError(FROM_HERE, "Error writing passwords"); |
return; |
} |
+ deleted_passwords_.clear(); |
+ new_passwords_.clear(); |
+ updated_passwords_.clear(); |
+ |
StartObserving(); |
} |