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 b83e1c0127d01440c882f90f931207abd081837a..5c6d122c1e3a8fed8b5b4ae0decb2a2fa1f4d1a7 100644 |
| --- a/components/password_manager/core/browser/password_form_manager.cc |
| +++ b/components/password_manager/core/browser/password_form_manager.cc |
| @@ -282,6 +282,16 @@ void PasswordFormManager::Save() { |
| UpdateLogin(); |
| } |
| +void PasswordFormManager::Update( |
| + const autofill::PasswordForm& credentials_to_update) { |
| + base::string16 password_to_save = pending_credentials_.password_value; |
| + pending_credentials_ = credentials_to_update; |
| + pending_credentials_.password_value = password_to_save; |
| + pending_credentials_.preferred = true; |
| + is_new_login_ = false; |
| + UpdateLogin(); |
| +} |
| + |
| void PasswordFormManager::FetchMatchingLoginsFromPasswordStore( |
| PasswordStore::AuthorizationPromptPolicy prompt_policy) { |
| DCHECK_EQ(state_, PRE_MATCHING_PHASE); |
| @@ -844,6 +854,22 @@ void PasswordFormManager::CreatePendingCredentials() { |
| // credential. |
| selected_username_ = provisionally_saved_form_->username_value; |
| is_new_login_ = false; |
| + } else if (client_->IsPasswordUpdateUIEnabled() && |
| + !provisionally_saved_form_->new_password_element.empty() && |
| + provisionally_saved_form_->username_value.empty()) { |
| + // This is password change form without username. If username is present |
|
vabr (Chromium)
2015/06/19 18:03:16
Please keep the comments short. If this block is f
dvadym
2015/06/22 14:43:33
Done.
|
| + // processing of password change form is almost the same as usual sign-in |
| + // forms. |
| + PasswordFormMap::const_iterator best_password_match_it = |
| + FindBestMatchForPasswordChange( |
| + provisionally_saved_form_->password_value); |
| + |
| + if (best_password_match_it != best_matches_.end()) { |
| + pending_credentials_ = *best_password_match_it->second; |
| + } |
| + pending_credentials_.is_password_change_form_without_username = true; |
| + // We don't care about |pending_credentials| if we didn't find best match, |
|
vabr (Chromium)
2015/06/19 18:03:17
If we don't care about |pending_credentials_| if t
vabr (Chromium)
2015/06/19 18:03:17
nit: |pending_credentials| -> |pending_credentials
vabr (Chromium)
2015/06/19 18:03:17
grammar: best match -> the best match
dvadym
2015/06/22 14:43:33
We need to set is_password_change_form_without_use
dvadym
2015/06/22 14:43:33
Done.
dvadym
2015/06/22 14:43:33
Done.
|
| + // since the user will select the correct one. |
| } else { |
| // User typed in a new, unknown username. |
| user_action_ = kUserActionOverrideUsernameAndPassword; |
| @@ -860,11 +886,12 @@ void PasswordFormManager::CreatePendingCredentials() { |
| pending_credentials_.password_value.clear(); |
| pending_credentials_.new_password_value.clear(); |
| - // If this was a sign-up or change password form, the names of the elements |
| - // are likely different than those on a login form, so do not bother saving |
| - // them. We will fill them with meaningful values in UpdateLogin() when the |
| - // user goes onto a real login form for the first time. |
| if (!provisionally_saved_form_->new_password_element.empty()) { |
| + // If this was a sign-up or change password form, the names of the |
|
vabr (Chromium)
2015/06/19 18:03:16
nit: Is there a real reason to move the block of c
dvadym
2015/06/22 14:43:33
Just traces of intermediate implementation, where
|
| + // elements are likely different than those on a login form, so do not |
| + // bother saving them. We will fill them with meaningful values in |
| + // UpdateLogin() when the user goes onto a real login form for the first |
| + // time. |
| pending_credentials_.password_element.clear(); |
| pending_credentials_.new_password_element.clear(); |
| } |
| @@ -946,6 +973,30 @@ int PasswordFormManager::ScoreResult(const PasswordForm& candidate) const { |
| return score; |
| } |
| +PasswordFormMap::const_iterator |
| +PasswordFormManager::FindBestMatchForPasswordChange( |
| + const base::string16& password) { |
| + if (password.empty()) { |
| + if (best_matches_.size() == 1) { |
| + // In case when there is no old password on the form and the user has only |
| + // 1 credentials, consider this as the same piece of credentials. |
|
vabr (Chromium)
2015/06/19 18:03:16
nit: Consider replacing line 982 with
// one piece
dvadym
2015/06/22 14:43:33
Done.
|
| + return best_matches_.begin(); |
| + } |
| + return best_matches_.end(); |
| + } |
| + PasswordFormMap::const_iterator best_password_match_it = best_matches_.end(); |
| + for (auto it = best_matches_.cbegin(); it != best_matches_.cend(); ++it) { |
| + if (it->second->password_value == password) { |
| + if (best_password_match_it != best_matches_.end()) { |
| + // Found the second credential with the same password, do nothing. |
| + return best_matches_.end(); |
| + } |
| + best_password_match_it = it; |
| + } |
| + } |
| + return best_password_match_it; |
| +} |
| + |
| void PasswordFormManager::SubmitPassed() { |
| submit_result_ = kSubmitResultPassed; |
| if (has_generated_password_) |