Chromium Code Reviews| 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 bb1b4b872a2da1d575182bfdcf326f09b529637e..012162b1c4d62cbeafef92098708d8639c15b1c5 100644 |
| --- a/components/password_manager/core/browser/password_form_manager.cc |
| +++ b/components/password_manager/core/browser/password_form_manager.cc |
| @@ -105,6 +105,7 @@ PasswordFormManager::PasswordFormManager( |
| is_new_login_(true), |
| has_generated_password_(false), |
| password_overridden_(false), |
| + retry_password_form_password_update_(false), |
| generation_available_(false), |
| password_manager_(password_manager), |
| preferred_match_(nullptr), |
| @@ -975,11 +976,11 @@ void PasswordFormManager::CreatePendingCredentials() { |
| // autofilled ones, as they may have changed if the user experienced a login |
| // failure. |
| // Look for these credentials in the list containing auto-fill entries. |
| - PasswordFormMap::const_iterator it = |
| - best_matches_.find(provisionally_saved_form_->username_value); |
| - if (it != best_matches_.end()) { |
| + PasswordForm* saved_form = |
| + FindBestSavedMatch(provisionally_saved_form_.get()); |
| + if (saved_form != nullptr) { |
| // The user signed in with a login we autofilled. |
| - pending_credentials_ = *it->second; |
| + pending_credentials_ = *saved_form; |
| password_overridden_ = |
| pending_credentials_.password_value != password_to_save; |
| if (IsPendingCredentialsPublicSuffixMatch() || |
| @@ -1053,11 +1054,16 @@ void PasswordFormManager::CreatePendingCredentials() { |
| selected_username_ = provisionally_saved_form_->username_value; |
| is_new_login_ = false; |
| } else if (client_->IsUpdatePasswordUIEnabled() && !best_matches_.empty() && |
| - provisionally_saved_form_ |
| - ->IsPossibleChangePasswordFormWithoutUsername()) { |
| + (provisionally_saved_form_ |
| + ->IsPossibleChangePasswordFormWithoutUsername() || |
| + provisionally_saved_form_->username_element.empty())) { |
| PasswordForm* best_update_match = FindBestMatchForUpdatePassword( |
| provisionally_saved_form_->password_value); |
| + retry_password_form_password_update_ = |
| + provisionally_saved_form_->username_element.empty() && |
| + provisionally_saved_form_->new_password_element.empty(); |
| + |
| if (best_update_match) |
| pending_credentials_ = *best_update_match; |
| else |
| @@ -1252,6 +1258,21 @@ PasswordForm* PasswordFormManager::FindBestMatchForUpdatePassword( |
| : best_password_match_it->second; |
| } |
| +PasswordForm* PasswordFormManager::FindBestSavedMatch( |
| + const PasswordForm* form) const { |
| + PasswordFormMap::const_iterator it = |
| + best_matches_.find(provisionally_saved_form_->username_value); |
| + if (it != best_matches_.end()) |
| + return it->second; |
| + if (!form->username_value.empty()) |
| + return nullptr; |
| + for (auto it = best_matches_.begin(); it != best_matches_.end(); ++it) { |
|
vabr (Chromium)
2015/11/26 14:35:54
nit: You are occluding the |it| from line 1263. Pl
vabr (Chromium)
2015/11/26 14:35:54
From this point until the end of the method, the c
vabr (Chromium)
2015/11/26 14:35:54
nit: Please use a range-based loop for better read
dvadym
2015/11/26 15:19:55
Yeah, I saw that this functions are quite similar,
dvadym
2015/11/26 15:19:55
Thanks it will make code cleaner
dvadym
2015/11/26 15:19:55
Done.
vabr (Chromium)
2015/11/26 17:10:37
Acknowledged.
|
| + if (it->second->password_value == form->password_value) |
| + return it->second; |
| + } |
| + return nullptr; |
| +} |
| + |
| void PasswordFormManager::OnNopeUpdateClicked() { |
| UploadChangePasswordForm(autofill::NOT_NEW_PASSWORD, std::string()); |
| } |