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

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

Issue 1151373006: Update Confirmation UI for saved password change (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Clean up Created 5 years, 7 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_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 163bc71bf973bf47f5b237cb6ba36c014fb74b8e..ecaa1504905901097c982bfab673a15a38d0363f 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
+ // 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;
vasilii 2015/06/03 18:32:02 You found the credential with |provisionally_saved
dvadym 2015/06/19 15:27:29 It was implemented earlier, so I just need to use
+ }
+ pending_credentials_.is_password_change_form_without_username = true;
+ // We don't care about |pending_credentials| if we didn't find best match,
+ // 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
+ // 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();
}
@@ -878,6 +905,7 @@ void PasswordFormManager::CreatePendingCredentials() {
pending_credentials_.action = observed_form_.action;
pending_credentials_.password_value = password_to_save;
+
vabr (Chromium) 2015/06/03 16:33:26 nit: Any particular reason to introduce this blank
dvadym 2015/06/19 15:27:29 Done.
pending_credentials_.preferred = provisionally_saved_form_->preferred;
if (user_action_ == kUserActionOverridePassword &&
@@ -946,6 +974,31 @@ 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 credentials.
vabr (Chromium) 2015/06/03 16:33:26 nit: credentials -> credential (or alternatively "
dvadym 2015/06/19 15:27:29 Changed to piece of credentials
+ return best_matches_.begin();
+ } else {
vasilii 2015/06/03 18:32:02 We don't write "else" after "return".
dvadym 2015/06/19 15:27:29 Done.
+ return best_matches_.end();
vabr (Chromium) 2015/06/03 16:33:26 Why exactly end()? Also what if best_matches_ is e
dvadym 2015/06/19 15:27:29 .end() is returned in order to comply with standar
vabr (Chromium) 2015/06/19 18:03:16 Acknowledged.
+ }
+ }
+ PasswordFormMap::const_iterator best_password_match_it = best_matches_.end();
+ for (auto it = best_matches_.cbegin(); it != best_matches_.cend(); ++it) {
vasilii 2015/06/03 18:32:02 What is the reason to go backwards?
dvadym 2015/06/19 15:27:29 It would be rbegin() and rend() for going backward
+ if (it->second->password_value == password) {
+ if (best_password_match_it != best_matches_.end()) {
+ // Found the second credentials with the same password, do nothing.
vabr (Chromium) 2015/06/03 16:33:26 nit: credential
dvadym 2015/06/19 15:27:29 Done.
+ return best_matches_.end();
+ }
+ best_password_match_it = it;
+ }
+ }
+ return best_password_match_it;
+}
+
void PasswordFormManager::SubmitPassed() {
submit_result_ = kSubmitResultPassed;
if (has_generated_password_)

Powered by Google App Engine
This is Rietveld 408576698