Index: chrome/browser/ui/passwords/manage_passwords_bubble_model.cc |
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc |
index dd596716f4b297015f7051f80957d67a17fc3b4e..4c39768dba5c2fc99a9ce3936343e323ff436571 100644 |
--- a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc |
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc |
@@ -54,13 +54,13 @@ ManagePasswordsBubbleModel::ManagePasswordsBubbleModel( |
ManagePasswordsUIController* controller = |
ManagePasswordsUIController::FromWebContents(web_contents); |
- // TODO(mkwst): Reverse this logic. The controller should populate the model |
- // directly rather than the model pulling from the controller. Perhaps like |
- // `controller->PopulateModel(this)`. |
state_ = controller->state(); |
if (password_manager::ui::IsPendingState(state_)) |
- pending_credentials_ = controller->PendingCredentials(); |
- best_matches_ = controller->best_matches(); |
+ pending_password_ = controller->PendingPassword(); |
+ if (password_manager::ui::IsCredentialsState(state_)) |
+ pending_credentials_.swap(controller->new_password_forms()); |
+ else |
+ best_matches_ = controller->best_matches(); |
if (password_manager::ui::IsPendingState(state_)) { |
title_ = l10n_util::GetStringUTF16(IDS_SAVE_PASSWORD); |
@@ -69,6 +69,8 @@ ManagePasswordsBubbleModel::ManagePasswordsBubbleModel( |
} else if (state_ == password_manager::ui::CONFIRMATION_STATE) { |
title_ = |
l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_CONFIRM_GENERATED_TITLE); |
+ } else if (password_manager::ui::IsCredentialsState(state_)) { |
+ title_ = l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_CHOOSE_TITLE); |
} else { |
title_ = l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_TITLE); |
} |
@@ -102,6 +104,8 @@ void ManagePasswordsBubbleModel::OnBubbleShown( |
if (state_ == password_manager::ui::CONFIRMATION_STATE) { |
display_disposition_ = |
metrics_util::AUTOMATIC_GENERATED_PASSWORD_CONFIRMATION; |
+ } else if (password_manager::ui::IsCredentialsState(state_)) { |
+ display_disposition_ = metrics_util::AUTOMATIC_CREDENTIAL_REQUEST; |
} else { |
display_disposition_ = metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING; |
} |
@@ -112,9 +116,22 @@ void ManagePasswordsBubbleModel::OnBubbleShown( |
// with the button in such a way that it closes, we'll reset this value |
// accordingly. |
dismissal_reason_ = metrics_util::NO_DIRECT_INTERACTION; |
+ |
+ ManagePasswordsUIController* controller = |
+ ManagePasswordsUIController::FromWebContents(web_contents()); |
+ controller->OnBubbleShown(); |
} |
void ManagePasswordsBubbleModel::OnBubbleHidden() { |
+ if (password_manager::ui::IsCredentialsState(state_)) { |
+ // It's time to run the pending callback if it wasn't called in |
+ // OnChooseCredentials(). |
+ ManagePasswordsUIController* manage_passwords_ui_controller = |
+ ManagePasswordsUIController::FromWebContents(web_contents()); |
+ manage_passwords_ui_controller->ChooseCredential(false, |
+ autofill::PasswordForm()); |
+ state_ = password_manager::ui::INACTIVE_STATE; |
+ } |
if (dismissal_reason_ == metrics_util::NOT_DISPLAYED) |
return; |
@@ -127,7 +144,8 @@ void ManagePasswordsBubbleModel::OnBubbleHidden() { |
void ManagePasswordsBubbleModel::OnNopeClicked() { |
dismissal_reason_ = metrics_util::CLICKED_NOPE; |
RecordExperimentStatistics(web_contents(), dismissal_reason_); |
- state_ = password_manager::ui::PENDING_PASSWORD_STATE; |
+ if (!password_manager::ui::IsCredentialsState(state_)) |
+ state_ = password_manager::ui::PENDING_PASSWORD_STATE; |
} |
void ManagePasswordsBubbleModel::OnNeverForThisSiteClicked() { |
@@ -189,6 +207,16 @@ void ManagePasswordsBubbleModel::OnPasswordAction( |
password_store->AddLogin(password_form); |
} |
+void ManagePasswordsBubbleModel::OnChooseCredentials( |
+ const autofill::PasswordForm& password_form) { |
+ dismissal_reason_ = metrics_util::CLICKED_CREDENTIAL; |
+ RecordExperimentStatistics(web_contents(), dismissal_reason_); |
+ ManagePasswordsUIController* manage_passwords_ui_controller = |
+ ManagePasswordsUIController::FromWebContents(web_contents()); |
+ manage_passwords_ui_controller->ChooseCredential(true, password_form); |
+ state_ = password_manager::ui::INACTIVE_STATE; |
+} |
+ |
// static |
int ManagePasswordsBubbleModel::UsernameFieldWidth() { |
return GetFieldWidth(USERNAME_FIELD); |