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..44759ad41889d65a31c2769d09c59451d9fad488 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,9 @@ 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::PENDING_CREDENTIALS_AND_BUBBLE_STATE) { |
+ title_ = l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_CHOOSE_TITLE); |
} else { |
title_ = l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_TITLE); |
} |
@@ -102,6 +99,9 @@ void ManagePasswordsBubbleModel::OnBubbleShown( |
if (state_ == password_manager::ui::CONFIRMATION_STATE) { |
display_disposition_ = |
metrics_util::AUTOMATIC_GENERATED_PASSWORD_CONFIRMATION; |
+ } else if (state_ == |
+ password_manager::ui::PENDING_CREDENTIALS_AND_BUBBLE_STATE) { |
+ display_disposition_ = metrics_util::AUTOMATIC_WITH_CREDENTIALS_PENDING; |
} else { |
display_disposition_ = metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING; |
} |
@@ -112,6 +112,10 @@ 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() { |
@@ -189,6 +193,17 @@ void ManagePasswordsBubbleModel::OnPasswordAction( |
password_store->AddLogin(password_form); |
} |
+void ManagePasswordsBubbleModel::OnChooseCredetials( |
Mike West
2014/11/20 08:19:31
s/OnChooseCredetials/OnChooseCredentials/ (missing
vasilii
2014/11/20 15:08:05
Done.
|
+ bool was_chosen, |
+ const autofill::PasswordForm& password_form) { |
+ dismissal_reason_ = was_chosen ? metrics_util::CLICKED_CREDENTIAL : |
+ metrics_util::CLICKED_NOPE; |
+ RecordExperimentStatistics(web_contents(), dismissal_reason_); |
+ ManagePasswordsUIController* manage_passwords_ui_controller = |
+ ManagePasswordsUIController::FromWebContents(web_contents()); |
+ manage_passwords_ui_controller->ChooseCredential(was_chosen, password_form); |
+} |
+ |
// static |
int ManagePasswordsBubbleModel::UsernameFieldWidth() { |
return GetFieldWidth(USERNAME_FIELD); |
@@ -198,3 +213,15 @@ int ManagePasswordsBubbleModel::UsernameFieldWidth() { |
int ManagePasswordsBubbleModel::PasswordFieldWidth() { |
return GetFieldWidth(PASSWORD_FIELD); |
} |
+ |
+void InitPasswordsModelFromController(ManagePasswordsUIController* controller, |
+ ManagePasswordsBubbleModel* model) { |
+ model->state_ = controller->state(); |
+ if (password_manager::ui::IsPendingState(model->state_)) |
+ model->pending_password_ = controller->PendingPassword(); |
+ if (model->state_ == |
+ password_manager::ui::PENDING_CREDENTIALS_AND_BUBBLE_STATE) |
+ model->pending_credentials_.swap(controller->new_password_forms_); |
+ else |
+ model->best_matches_ = controller->best_matches(); |
+} |