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..388c2d1a3e0fcf64cc054e867615c8915039c024 100644 |
--- a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc |
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc |
@@ -54,13 +54,7 @@ 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(); |
+ InitPasswordsModelFromController(controller, this); |
if (password_manager::ui::IsPendingState(state_)) { |
title_ = l10n_util::GetStringUTF16(IDS_SAVE_PASSWORD); |
@@ -69,6 +63,8 @@ ManagePasswordsBubbleModel::ManagePasswordsBubbleModel( |
} else if (state_ == password_manager::ui::CONFIRMATION_STATE) { |
title_ = |
l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_CONFIRM_GENERATED_TITLE); |
+ } else if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE) { |
+ title_ = l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_CHOOSE_TITLE); |
} else { |
title_ = l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_TITLE); |
} |
@@ -102,6 +98,8 @@ void ManagePasswordsBubbleModel::OnBubbleShown( |
if (state_ == password_manager::ui::CONFIRMATION_STATE) { |
display_disposition_ = |
metrics_util::AUTOMATIC_GENERATED_PASSWORD_CONFIRMATION; |
+ } else if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE) { |
+ display_disposition_ = metrics_util::AUTOMATIC_WITH_CREDENTIALS_PENDING; |
} else { |
display_disposition_ = metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING; |
} |
@@ -112,9 +110,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 (state_ == password_manager::ui::CREDENTIAL_REQUEST_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 +138,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 (state_ != password_manager::ui::CREDENTIAL_REQUEST_STATE) |
+ state_ = password_manager::ui::PENDING_PASSWORD_STATE; |
} |
void ManagePasswordsBubbleModel::OnNeverForThisSiteClicked() { |
@@ -189,6 +201,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); |
@@ -198,3 +220,14 @@ int ManagePasswordsBubbleModel::UsernameFieldWidth() { |
int ManagePasswordsBubbleModel::PasswordFieldWidth() { |
return GetFieldWidth(PASSWORD_FIELD); |
} |
+ |
+void InitPasswordsModelFromController(ManagePasswordsUIController* controller, |
+ ManagePasswordsBubbleModel* model) { |
Mike West
2014/11/21 11:21:12
I think I'd prefer to see this live either on the
vasilii
2014/11/21 16:45:37
Done.
|
+ model->state_ = controller->state(); |
+ if (password_manager::ui::IsPendingState(model->state_)) |
+ model->pending_password_ = controller->PendingPassword(); |
+ if (model->state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE) |
+ model->pending_credentials_.swap(controller->new_password_forms_); |
+ else |
+ model->best_matches_ = controller->best_matches(); |
+} |