Index: chrome/browser/ui/passwords/manage_passwords_state.cc |
diff --git a/chrome/browser/ui/passwords/manage_passwords_state.cc b/chrome/browser/ui/passwords/manage_passwords_state.cc |
index a91801420b1bebb5bcba16b172c61b2f049770a2..113b46a8e6cbcd06a46986c305d92da90278ecc4 100644 |
--- a/chrome/browser/ui/passwords/manage_passwords_state.cc |
+++ b/chrome/browser/ui/passwords/manage_passwords_state.cc |
@@ -84,6 +84,17 @@ void RemoveFormFromVector(const autofill::PasswordForm& form_to_delete, |
forms->erase(it); |
} |
+// Inserts |form| to the beginning of |forms| if it's blacklisted or to the end |
+// otherwise. UnblacklistSite() expects the first saved password to be the |
+// blacklisted credential. |
+template <class Vector> |
+void InsertFormToVector(const autofill::PasswordForm* form, |
+ Vector* forms) { |
+ typename Vector::iterator it = form->blacklisted_by_user ? forms->begin() |
+ : forms->end(); |
+ forms->insert(it, form); |
+} |
+ |
} // namespace |
ManagePasswordsState::ManagePasswordsState() |
@@ -158,6 +169,7 @@ void ManagePasswordsState::OnBlacklistBlockedAutofill( |
ClearData(); |
local_credentials_forms_ = DeepCopyMapToVector(password_form_map); |
origin_ = local_credentials_forms_.front()->origin; |
+ DCHECK(local_credentials_forms_.front()->blacklisted_by_user); |
SetState(password_manager::ui::BLACKLIST_STATE); |
} |
@@ -172,10 +184,12 @@ void ManagePasswordsState::TransitionToState( |
DCHECK_NE(password_manager::ui::INACTIVE_STATE, state_); |
DCHECK(state == password_manager::ui::BLACKLIST_STATE || |
state == password_manager::ui::MANAGE_STATE); |
- if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE && |
- !credentials_callback_.is_null()) { |
- credentials_callback_.Run(password_manager::CredentialInfo()); |
- credentials_callback_.Reset(); |
+ if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE) { |
+ if (!credentials_callback_.is_null()) { |
+ credentials_callback_.Run(password_manager::CredentialInfo()); |
+ credentials_callback_.Reset(); |
+ } |
+ federated_credentials_forms_.clear(); |
} |
SetState(state); |
} |
@@ -220,9 +234,13 @@ void ManagePasswordsState::AddForm(const autofill::PasswordForm& form) { |
return; |
if (UpdateForm(form)) |
return; |
- local_credentials_forms_.push_back(new autofill::PasswordForm(form)); |
- if (form_manager_) |
- current_forms_weak_.push_back(local_credentials_forms_.back()); |
+ if (form_manager_) { |
+ local_credentials_forms_.push_back(new autofill::PasswordForm(form)); |
+ InsertFormToVector(local_credentials_forms_.back(), ¤t_forms_weak_); |
+ } else { |
+ InsertFormToVector(new autofill::PasswordForm(form), |
+ &local_credentials_forms_); |
+ } |
} |
bool ManagePasswordsState::UpdateForm(const autofill::PasswordForm& form) { |
@@ -255,7 +273,8 @@ void ManagePasswordsState::DeleteForm(const autofill::PasswordForm& form) { |
} |
void ManagePasswordsState::SetState(password_manager::ui::State state) { |
- if (client_ && client_->IsLoggingActive()) { |
+ DCHECK(client_); |
+ if (client_->IsLoggingActive()) { |
password_manager::BrowserSavePasswordProgressLogger logger(client_); |
logger.LogNumber( |
autofill::SavePasswordProgressLogger::STRING_NEW_UI_STATE, |