| 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 b48e6703da31a38b23ad61ce37c1cbca95ad9449..212e7f10a27b71f046fe25edc018cd371ad6a866 100644
|
| --- a/components/password_manager/core/browser/password_manager.cc
|
| +++ b/components/password_manager/core/browser/password_manager.cc
|
| @@ -564,7 +564,9 @@ bool PasswordManager::CanProvisionalManagerSave() {
|
|
|
| bool PasswordManager::ShouldPromptUserToSavePassword() const {
|
| return !client_->IsAutomaticPasswordSavingEnabled() &&
|
| - provisional_save_manager_->IsNewLogin() &&
|
| + (provisional_save_manager_->IsNewLogin() ||
|
| + provisional_save_manager_->observed_form()
|
| + .IsPossibleChangePasswordFormWithoutUsername()) &&
|
| !provisional_save_manager_->has_generated_password() &&
|
| !provisional_save_manager_->IsPendingCredentialsPublicSuffixMatch();
|
| }
|
| @@ -696,9 +698,13 @@ void PasswordManager::OnLoginSuccessful() {
|
| empty_password);
|
| if (logger)
|
| logger->LogMessage(Logger::STRING_DECISION_ASK);
|
| - if (client_->PromptUserToSavePassword(
|
| + bool update_password = !provisional_save_manager_->best_matches().empty() &&
|
| + provisional_save_manager_->observed_form()
|
| + .IsPossibleChangePasswordFormWithoutUsername();
|
| + if (client_->PromptUserToSaveOrUpdatePassword(
|
| provisional_save_manager_.Pass(),
|
| - CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER)) {
|
| + CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER,
|
| + update_password)) {
|
| if (logger)
|
| logger->LogMessage(Logger::STRING_SHOW_PASSWORD_PROMPT);
|
| }
|
|
|