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); |