summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sync/glue/password_change_processor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/sync/glue/password_change_processor.cc')
-rw-r--r--chrome/browser/sync/glue/password_change_processor.cc24
1 files changed, 19 insertions, 5 deletions
diff --git a/chrome/browser/sync/glue/password_change_processor.cc b/chrome/browser/sync/glue/password_change_processor.cc
index 93143e6..0a42a94 100644
--- a/chrome/browser/sync/glue/password_change_processor.cc
+++ b/chrome/browser/sync/glue/password_change_processor.cc
@@ -141,6 +141,21 @@ void PasswordChangeProcessor::ApplyChangesFromSyncModel(
PasswordModelAssociator::PasswordVector deleted_passwords;
for (int i = 0; i < change_count; ++i) {
+ if (sync_api::SyncManager::ChangeRecord::ACTION_DELETE ==
+ changes[i].action) {
+ DCHECK(changes[i].specifics.HasExtension(sync_pb::password))
+ << "Password specifics data not present on delete!";
+ DCHECK(changes[i].extra.get());
+ sync_api::SyncManager::ExtraPasswordChangeRecordData* extra =
+ static_cast<sync_api::SyncManager::ExtraPasswordChangeRecordData*>(
+ changes[i].extra.get());
+ const sync_pb::PasswordSpecificsData& password = extra->unencrypted();
+ webkit_glue::PasswordForm form;
+ PasswordModelAssociator::CopyPassword(password, &form);
+ deleted_passwords.push_back(form);
+ model_associator_->Disassociate(changes[i].id);
+ continue;
+ }
sync_api::ReadNode sync_node(trans);
if (!sync_node.InitByIdLookup(changes[i].id)) {
@@ -156,20 +171,19 @@ void PasswordChangeProcessor::ApplyChangesFromSyncModel(
const sync_pb::PasswordSpecificsData& password_data =
sync_node.GetPasswordSpecifics();
webkit_glue::PasswordForm password;
- PasswordModelAssociator::CopyPassword(password_data,
- &password);
+ PasswordModelAssociator::CopyPassword(password_data, &password);
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);
- } else if (sync_api::SyncManager::ChangeRecord::ACTION_DELETE ==
- changes[i].action) {
- deleted_passwords.push_back(password);
} else {
DCHECK(sync_api::SyncManager::ChangeRecord::ACTION_UPDATE ==
changes[i].action);
updated_passwords.push_back(password);
}
}
+
if (!model_associator_->WriteToPasswordStore(&new_passwords,
&updated_passwords,
&deleted_passwords)) {