| Index: chrome/browser/password_manager/password_form_manager.cc
|
| ===================================================================
|
| --- chrome/browser/password_manager/password_form_manager.cc (revision 33050)
|
| +++ chrome/browser/password_manager/password_form_manager.cc (working copy)
|
| @@ -120,7 +120,7 @@
|
| }
|
|
|
| // Save the pending_credentials_ entry marked as blacklisted.
|
| - SaveAsNewLogin();
|
| + SaveAsNewLogin(false);
|
| }
|
|
|
| bool PasswordFormManager::IsNewLogin() {
|
| @@ -161,7 +161,7 @@
|
| DCHECK(!profile_->IsOffTheRecord());
|
|
|
| if (IsNewLogin())
|
| - SaveAsNewLogin();
|
| + SaveAsNewLogin(true);
|
| else
|
| UpdateLogin();
|
| }
|
| @@ -293,7 +293,7 @@
|
| return false;
|
| }
|
|
|
| -void PasswordFormManager::SaveAsNewLogin() {
|
| +void PasswordFormManager::SaveAsNewLogin(bool reset_preferred_login) {
|
| DCHECK_EQ(state_, POST_MATCHING_PHASE);
|
| DCHECK(IsNewLogin());
|
| // The new_form is being used to sign in, so it is preferred.
|
| @@ -312,8 +312,26 @@
|
|
|
| pending_credentials_.date_created = Time::Now();
|
| password_store->AddLogin(pending_credentials_);
|
| +
|
| + if (reset_preferred_login) {
|
| + UpdatePreferredLoginState(password_store);
|
| + }
|
| }
|
|
|
| +void PasswordFormManager::UpdatePreferredLoginState(
|
| + PasswordStore* password_store) {
|
| + DCHECK(password_store);
|
| + PasswordFormMap::iterator iter;
|
| + for (iter = best_matches_.begin(); iter != best_matches_.end(); iter++) {
|
| + if (iter->second->username_value != pending_credentials_.username_value &&
|
| + iter->second->preferred) {
|
| + // This wasn't the selected login but it used to be preferred.
|
| + iter->second->preferred = false;
|
| + password_store->UpdateLogin(*iter->second);
|
| + }
|
| + }
|
| +}
|
| +
|
| void PasswordFormManager::UpdateLogin() {
|
| DCHECK_EQ(state_, POST_MATCHING_PHASE);
|
| DCHECK(preferred_match_);
|
| @@ -330,16 +348,8 @@
|
| return;
|
| }
|
|
|
| - // Update all matches to reflect new preferred status.
|
| - PasswordFormMap::iterator iter;
|
| - for (iter = best_matches_.begin(); iter != best_matches_.end(); iter++) {
|
| - if ((iter->second->username_value != pending_credentials_.username_value) &&
|
| - iter->second->preferred) {
|
| - // This wasn't the selected login but it used to be preferred.
|
| - iter->second->preferred = false;
|
| - password_store->UpdateLogin(*iter->second);
|
| - }
|
| - }
|
| + UpdatePreferredLoginState(password_store);
|
| +
|
| // Update the new preferred login.
|
| // Note origin.spec().length > signon_realm.length implies the origin has a
|
| // path, since signon_realm is a prefix of origin for HTML password forms.
|
|
|