Index: chrome/browser/password_manager/native_backend_kwallet_x.cc |
diff --git a/chrome/browser/password_manager/native_backend_kwallet_x.cc b/chrome/browser/password_manager/native_backend_kwallet_x.cc |
index c9ec8c4d9ffdea5ed76df923fa62877505365503..08c23a98bdf26acc6bc0ebe77405e95ad7337eec 100644 |
--- a/chrome/browser/password_manager/native_backend_kwallet_x.cc |
+++ b/chrome/browser/password_manager/native_backend_kwallet_x.cc |
@@ -301,23 +301,35 @@ password_manager::PasswordStoreChangeList NativeBackendKWallet::AddLogin( |
return changes; |
} |
-bool NativeBackendKWallet::UpdateLogin(const PasswordForm& form) { |
+bool NativeBackendKWallet::UpdateLogin( |
+ const PasswordForm& form, |
+ password_manager::PasswordStoreChangeList* changes) { |
+ DCHECK(changes); |
+ changes->clear(); |
int wallet_handle = WalletHandle(); |
if (wallet_handle == kInvalidKWalletHandle) |
return false; |
- PasswordFormList forms; |
- GetLoginsList(&forms, form.signon_realm, wallet_handle); |
+ ScopedVector<autofill::PasswordForm> forms; |
+ GetLoginsList(&forms.get(), form.signon_realm, wallet_handle); |
+ bool updated = false; |
for (size_t i = 0; i < forms.size(); ++i) { |
- if (CompareForms(form, *forms[i], true)) |
+ if (CompareForms(form, *forms[i], true)) { |
*forms[i] = form; |
+ updated = true; |
+ } |
} |
+ if (!updated) |
+ return true; |
- bool ok = SetLoginsList(forms, form.signon_realm, wallet_handle); |
+ if (SetLoginsList(forms.get(), form.signon_realm, wallet_handle)) { |
+ changes->push_back(password_manager::PasswordStoreChange( |
+ password_manager::PasswordStoreChange::UPDATE, form)); |
+ return true; |
+ } |
- STLDeleteElements(&forms); |
- return ok; |
+ return false; |
} |
bool NativeBackendKWallet::RemoveLogin(const PasswordForm& form) { |