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

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

Issue 1213803006: [Password Generation] Always save generated passwords (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments Created 5 years, 5 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_manager.cc
diff --git a/components/password_manager/core/browser/password_manager.cc b/components/password_manager/core/browser/password_manager.cc
index fb8178bc02c49ada89127b90f3aa58ee54d92117..1e7ac9dab35dec9de67cda451f5ccdde0ce1ff7a 100644
--- a/components/password_manager/core/browser/password_manager.cc
+++ b/components/password_manager/core/browser/password_manager.cc
@@ -167,6 +167,14 @@ void PasswordManager::SetHasGeneratedPasswordForForm(
bool password_is_generated) {
DCHECK(client_->IsSavingEnabledForCurrentPage());
+ if (!password_is_generated) {
+ // Since this password was provisionally saved it was removed from
+ // |pending_login_managers_| and needs to be re-added.
+ provisional_save_manager_->set_has_generated_password(false);
+ pending_login_managers_.push_back(provisional_save_manager_.Pass());
+ return;
+ }
+
ScopedVector<PasswordFormManager>::iterator matched_manager_it =
pending_login_managers_.end();
PasswordFormManager::MatchResultMask current_match_result =
@@ -201,15 +209,15 @@ void PasswordManager::SetHasGeneratedPasswordForForm(
}
if (matched_manager_it != pending_login_managers_.end()) {
- (*matched_manager_it)->set_has_generated_password(password_is_generated);
+ (*matched_manager_it)->set_has_generated_password(true);
+
+ // Provisionally save generated passwords now, as they should always be
+ // saved.
+ ProvisionallySavePassword(form);
return;
}
- UMA_HISTOGRAM_BOOLEAN("PasswordManager.GeneratedFormHasNoFormManager",
- password_is_generated);
-
- if (!password_is_generated)
- return;
+ UMA_HISTOGRAM_BOOLEAN("PasswordManager.GeneratedFormHasNoFormManager", true);
// If there is no corresponding PasswordFormManager, we create one. This is
// not the common case, and should only happen when there is a bug in our
@@ -219,6 +227,7 @@ void PasswordManager::SetHasGeneratedPasswordForForm(
this, client_, driver->AsWeakPtr(), form, ssl_valid);
pending_login_managers_.push_back(manager);
manager->set_has_generated_password(true);
+ ProvisionallySavePassword(form);
}
void PasswordManager::ProvisionallySavePassword(const PasswordForm& form) {
@@ -602,6 +611,10 @@ void PasswordManager::OnPasswordFormsRendered(
if (did_stop_loading) {
if (provisional_save_manager_->pending_credentials().scheme ==
PasswordForm::SCHEME_HTML) {
+ // Generated passwords should always be saved.
+ if (provisional_save_manager_->has_generated_password())
+ all_visible_forms_.clear();
+
for (size_t i = 0; i < all_visible_forms_.size(); ++i) {
// TODO(vabr): The similarity check is just action equality up to
// HTTP<->HTTPS substitution for now. If it becomes more complex, it may

Powered by Google App Engine
This is Rietveld 408576698