| 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 3546bfe79bfb3e55ab159168001b38cc0d95608c..c406e009e616d3a144f36a12258fd08214472434 100644
|
| --- a/components/password_manager/core/browser/password_manager.cc
|
| +++ b/components/password_manager/core/browser/password_manager.cc
|
| @@ -137,6 +137,16 @@ bool AreAllFieldsEmpty(const PasswordForm& form) {
|
| form.new_password_value.empty();
|
| }
|
|
|
| +// Helper function that determines whether update or save prompt should be
|
| +// shown for credentials in |provisional_save_manager|.
|
| +bool IsPasswordUpdate(const PasswordFormManager& provisional_save_manager) {
|
| + return (!provisional_save_manager.best_matches().empty() &&
|
| + provisional_save_manager
|
| + .is_possible_change_password_form_without_username()) ||
|
| + provisional_save_manager.password_overridden() ||
|
| + provisional_save_manager.retry_password_form_password_update();
|
| +}
|
| +
|
| } // namespace
|
|
|
| // static
|
| @@ -470,6 +480,27 @@ void PasswordManager::OnPasswordFormForceSaveRequested(
|
| OnLoginSuccessful();
|
| }
|
|
|
| +void PasswordManager::ShowManualFallbackForSaving(
|
| + password_manager::PasswordManagerDriver* driver,
|
| + const PasswordForm& password_form) {
|
| + ProvisionallySavePassword(password_form, driver);
|
| + DCHECK(provisional_save_manager_);
|
| + DCHECK(provisional_save_manager_->form_fetcher());
|
| + // TODO(crbug.com/741537): Process manual saving request even if there is
|
| + // still no response from the store.
|
| + if (provisional_save_manager_->form_fetcher()->GetState() ==
|
| + FormFetcher::State::WAITING) {
|
| + return;
|
| + }
|
| + bool is_update = IsPasswordUpdate(*provisional_save_manager_);
|
| + client_->ShowManualFallbackForSaving(std::move(provisional_save_manager_),
|
| + is_update);
|
| +}
|
| +
|
| +void PasswordManager::HideManualFallbackForSaving() {
|
| + client_->HideManualFallbackForSaving();
|
| +}
|
| +
|
| void PasswordManager::OnPasswordFormsParsed(
|
| password_manager::PasswordManagerDriver* driver,
|
| const std::vector<PasswordForm>& forms) {
|
| @@ -753,12 +784,7 @@ void PasswordManager::OnLoginSuccessful() {
|
| empty_password);
|
| if (logger)
|
| logger->LogMessage(Logger::STRING_DECISION_ASK);
|
| - bool update_password =
|
| - (!provisional_save_manager_->best_matches().empty() &&
|
| - provisional_save_manager_
|
| - ->is_possible_change_password_form_without_username()) ||
|
| - provisional_save_manager_->password_overridden() ||
|
| - provisional_save_manager_->retry_password_form_password_update();
|
| + bool update_password = IsPasswordUpdate(*provisional_save_manager_);
|
| if (client_->PromptUserToSaveOrUpdatePassword(
|
| std::move(provisional_save_manager_), update_password)) {
|
| if (logger)
|
|
|