| 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(); | 
| } | 
|  | 
|  |