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

Unified Diff: components/password_manager/core/browser/password_form_manager.cc

Issue 1817483002: [Password Manager] Presave the form with generated password till successful login (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed CPMD_BAD_ORIGIN_UPDATE_PRESAVED_PASSWORD in bad_message.h Created 4 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: components/password_manager/core/browser/password_form_manager.cc
diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc
index 765afaa33f9c1e1718fa3264bbbfbd948fdd5cf9..dd9faa94bbfee8c1515fe22ca5a48c179ad3bb94 100644
--- a/components/password_manager/core/browser/password_form_manager.cc
+++ b/components/password_manager/core/browser/password_form_manager.cc
@@ -634,7 +634,10 @@ void PasswordFormManager::SaveAsNewLogin() {
pending_credentials_.date_created = Time::Now();
SanitizePossibleUsernames(&pending_credentials_);
- password_store->AddLogin(pending_credentials_);
+ if (presaved_form_)
+ ReplacePresavedPasswordWithPendingCredentials(password_store);
+ else
+ password_store->AddLogin(pending_credentials_);
UpdatePreferredLoginState(password_store);
}
@@ -704,7 +707,9 @@ void PasswordFormManager::UpdateLogin() {
bool password_was_updated = false;
// Update the new preferred login.
- if (!selected_username_.empty()) {
+ if (presaved_form_) {
+ ReplacePresavedPasswordWithPendingCredentials(password_store);
+ } else if (!selected_username_.empty()) {
// Username has changed. We set this selected username as the real
// username. Given that |username_value| is part of the Sync and
// PasswordStore primary key, the old primary key must be supplied.
@@ -1388,4 +1393,40 @@ void PasswordFormManager::WipeStoreCopyIfOutdated() {
}
}
+void PasswordFormManager::PresaveGeneratedPassword(
+ const autofill::PasswordForm& form) {
+ PasswordStore* store = client_->GetPasswordStore();
+ if (!store) {
+ NOTREACHED();
+ return;
+ }
+ if (presaved_form_)
+ store->UpdateLoginWithPrimaryKey(form, *presaved_form_);
+ else
+ store->AddLogin(form);
+ presaved_form_.reset(new autofill::PasswordForm(form));
+}
+
+void PasswordFormManager::RemovePresavedPassword() {
+ if (!presaved_form_)
+ return;
+
+ PasswordStore* store = client_->GetPasswordStore();
+ if (!store) {
+ NOTREACHED();
+ return;
+ }
+ store->RemoveLogin(*presaved_form_);
+ presaved_form_.reset();
+}
+
+void PasswordFormManager::ReplacePresavedPasswordWithPendingCredentials(
+ PasswordStore* store) {
+ DCHECK(store);
+ DCHECK(presaved_form_);
+
+ store->UpdateLoginWithPrimaryKey(pending_credentials_, *presaved_form_);
+ presaved_form_.reset();
+}
+
} // namespace password_manager

Powered by Google App Engine
This is Rietveld 408576698