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

Unified Diff: chrome/browser/ui/passwords/manage_passwords_ui_controller.cc

Issue 952023002: Credential Manager API: pop up the new "Manage accounts" bubble. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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: 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);

Powered by Google App Engine
This is Rietveld 408576698