| Index: chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
|
| diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
|
| index 1d5ae15a79ac4f13e5e4b3e83a6fcf29a7a8ecfb..e50eccac160af9f052718bad13ecebddccecaf5c 100644
|
| --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
|
| +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
|
| @@ -62,6 +62,17 @@ void DeepCopyMap(const autofill::PasswordFormMap& map,
|
| }
|
| }
|
|
|
| +void RemoveFormFromVector(const autofill::PasswordForm& form_to_delete,
|
| + ScopedVector<autofill::PasswordForm>* forms) {
|
| + ScopedVector<autofill::PasswordForm>::iterator it = std::find_if(
|
| + forms->begin(), forms->end(),
|
| + [&form_to_delete](autofill::PasswordForm* form) {
|
| + return IsEqualUniqueKey(*form, form_to_delete);
|
| + });
|
| + if (it != forms->end())
|
| + forms->erase(it);
|
| +}
|
| +
|
| } // namespace
|
|
|
| DEFINE_WEB_CONTENTS_USER_DATA_KEY(ManagePasswordsUIController);
|
| @@ -205,19 +216,34 @@ void ManagePasswordsUIController::OnLoginsChanged(
|
| if (changed_form.origin != origin_)
|
| continue;
|
|
|
| + // TODO(vasilii): refactor this messy code after deciding how to transition
|
| + // within the new Credential Manager API states.
|
| if (it->type() == password_manager::PasswordStoreChange::REMOVE) {
|
| - password_form_map_.erase(changed_form.username_value);
|
| + if (current_state == password_manager::ui::AUTO_SIGNIN_STATE ||
|
| + current_state == password_manager::ui::MANAGE_ACCOUNTS_STATE) {
|
| + RemoveFormFromVector(changed_form, &local_credentials_forms_);
|
| + } else {
|
| + password_form_map_.erase(changed_form.username_value);
|
| + }
|
| if (changed_form.blacklisted_by_user)
|
| SetState(password_manager::ui::MANAGE_STATE);
|
| } else {
|
| - new_password_forms_.push_back(new autofill::PasswordForm(changed_form));
|
| - password_form_map_[changed_form.username_value] =
|
| - new_password_forms_.back();
|
| + if (current_state == password_manager::ui::AUTO_SIGNIN_STATE ||
|
| + current_state == password_manager::ui::MANAGE_ACCOUNTS_STATE) {
|
| + if (it->type() == password_manager::PasswordStoreChange::UPDATE) {
|
| + RemoveFormFromVector(changed_form, &local_credentials_forms_);
|
| + }
|
| + local_credentials_forms_.push_back(
|
| + new autofill::PasswordForm(changed_form));
|
| + } else {
|
| + new_password_forms_.push_back(new autofill::PasswordForm(changed_form));
|
| + password_form_map_[changed_form.username_value] =
|
| + new_password_forms_.back();
|
| + }
|
| if (changed_form.blacklisted_by_user)
|
| SetState(password_manager::ui::BLACKLIST_STATE);
|
| }
|
| }
|
| - // TODO(vasilii): handle CREDENTIAL_REQUEST_STATE.
|
| if (current_state != state_)
|
| UpdateBubbleAndIconVisibility();
|
| }
|
| @@ -315,6 +341,13 @@ void ManagePasswordsUIController::UnblacklistSite() {
|
| UpdateBubbleAndIconVisibility();
|
| }
|
|
|
| +void ManagePasswordsUIController::ManageAccounts() {
|
| + DCHECK_EQ(password_manager::ui::AUTO_SIGNIN_STATE, state_);
|
| + SetState(password_manager::ui::MANAGE_ACCOUNTS_STATE);
|
| + base::AutoReset<bool> resetter(&should_pop_up_bubble_, true);
|
| + UpdateBubbleAndIconVisibility();
|
| +}
|
| +
|
| void ManagePasswordsUIController::DidNavigateMainFrame(
|
| const content::LoadCommittedDetails& details,
|
| const content::FrameNavigateParams& params) {
|
| @@ -393,7 +426,7 @@ void ManagePasswordsUIController::OnBubbleHidden() {
|
| else if (state_ == password_manager::ui::CONFIRMATION_STATE)
|
| next_state = password_manager::ui::MANAGE_STATE;
|
| else if (state_ == password_manager::ui::AUTO_SIGNIN_STATE)
|
| - next_state = password_manager::ui::INACTIVE_STATE;
|
| + next_state = password_manager::ui::MANAGE_ACCOUNTS_STATE;
|
|
|
| if (next_state != state_) {
|
| SetState(next_state);
|
|
|