Chromium Code Reviews| 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 76e5707e5837537c28d60834276402b23dc043e4..a308590673529d2882c393960eaf76de65a63405 100644 |
| --- a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc |
| +++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc |
| @@ -85,8 +85,10 @@ bool IsSmartLockBrandingEnabled(Profile* profile) { |
| ManagePasswordsBubbleModel::ManagePasswordsBubbleModel( |
| content::WebContents* web_contents) |
| : content::WebContentsObserver(web_contents), |
| + is_update_bubble_(false), |
| display_disposition_(metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING), |
| - dismissal_reason_(metrics_util::NOT_DISPLAYED) { |
| + dismissal_reason_(metrics_util::NOT_DISPLAYED), |
| + update_password_submission_event_(metrics_util::NO_UPDATE_SUBMISSION) { |
| ManagePasswordsUIController* controller = |
| ManagePasswordsUIController::FromWebContents(web_contents); |
| @@ -147,6 +149,9 @@ ManagePasswordsBubbleModel::ManagePasswordsBubbleModel( |
| manage_link_ = |
| l10n_util::GetStringUTF16(IDS_OPTIONS_PASSWORDS_MANAGE_PASSWORDS_LINK); |
| + |
| + is_update_bubble_ = |
| + state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE; |
| } |
| ManagePasswordsBubbleModel::~ManagePasswordsBubbleModel() {} |
| @@ -154,21 +159,41 @@ ManagePasswordsBubbleModel::~ManagePasswordsBubbleModel() {} |
| void ManagePasswordsBubbleModel::OnBubbleShown( |
| ManagePasswordsBubble::DisplayReason reason) { |
| if (reason == ManagePasswordsBubble::USER_ACTION) { |
| - if (state_ == password_manager::ui::PENDING_PASSWORD_STATE) { |
| - display_disposition_ = metrics_util::MANUAL_WITH_PASSWORD_PENDING; |
| - } else { |
| - display_disposition_ = metrics_util::MANUAL_MANAGE_PASSWORDS; |
| + switch (state_) { |
| + case password_manager::ui::PENDING_PASSWORD_STATE: |
| + display_disposition_ = metrics_util::MANUAL_WITH_PASSWORD_PENDING; |
| + break; |
| + case password_manager::ui::PENDING_PASSWORD_UPDATE_STATE: |
| + display_disposition_ = |
| + metrics_util::MANUAL_WITH_PASSWORD_PENDING_UPDATE; |
| + break; |
| + case password_manager::ui::MANAGE_STATE: |
| + display_disposition_ = metrics_util::MANUAL_MANAGE_PASSWORDS; |
| + break; |
| + default: |
| + NOTREACHED(); |
| } |
| } else { |
| - 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_CREDENTIAL_REQUEST; |
| - } else if (state_ == password_manager::ui::AUTO_SIGNIN_STATE) { |
| - display_disposition_ = metrics_util::AUTOMATIC_SIGNIN_TOAST; |
| - } else { |
| - display_disposition_ = metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING; |
| + switch (state_) { |
| + case password_manager::ui::PENDING_PASSWORD_STATE: |
| + display_disposition_ = metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING; |
| + break; |
| + case password_manager::ui::PENDING_PASSWORD_UPDATE_STATE: |
| + display_disposition_ = |
| + metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING_UPDATE; |
| + break; |
| + case password_manager::ui::CONFIRMATION_STATE: |
| + display_disposition_ = |
| + metrics_util::AUTOMATIC_GENERATED_PASSWORD_CONFIRMATION; |
| + break; |
| + case password_manager::ui::CREDENTIAL_REQUEST_STATE: |
| + display_disposition_ = metrics_util::AUTOMATIC_CREDENTIAL_REQUEST; |
| + break; |
| + case password_manager::ui::AUTO_SIGNIN_STATE: |
| + display_disposition_ = metrics_util::AUTOMATIC_SIGNIN_TOAST; |
| + break; |
| + default: |
| + NOTREACHED(); |
| } |
| } |
| metrics_util::LogUIDisplayDisposition(display_disposition_); |
| @@ -193,15 +218,30 @@ void ManagePasswordsBubbleModel::OnBubbleHidden() { |
| if (dismissal_reason_ == metrics_util::NOT_DISPLAYED) |
| return; |
| - metrics_util::LogUIDismissalReason(dismissal_reason_); |
| + if (!is_update_bubble_) { |
| + // We have separate metrics for the Update bubble so do not record dismissal |
| + // reason for it. |
| + metrics_util::LogUIDismissalReason(dismissal_reason_); |
| + } |
| // Other use cases have been reported in the callbacks like OnSaveClicked(). |
| if (state_ == password_manager::ui::PENDING_PASSWORD_STATE && |
| dismissal_reason_ == metrics_util::NO_DIRECT_INTERACTION) |
| RecordExperimentStatistics(web_contents(), dismissal_reason_); |
| + // Check if this was update password and record update statistics. |
| + if (update_password_submission_event_ == metrics_util::NO_UPDATE_SUBMISSION) { |
| + if (state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE || |
| + state_ == password_manager::ui::PENDING_PASSWORD_STATE) |
|
vasilii
2015/08/21 14:59:22
Make this 'if' the outer one.
dvadym
2015/08/21 15:31:13
Done.
|
| + update_password_submission_event_ = |
| + GetUpdateDismissalReason(NO_INTERACTION); |
| + } |
| + |
| + if (update_password_submission_event_ != metrics_util::NO_UPDATE_SUBMISSION) |
| + LogUpdatePasswordSubmissionEvent(update_password_submission_event_); |
| } |
| void ManagePasswordsBubbleModel::OnCancelClicked() { |
| DCHECK_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, state_); |
| + update_password_submission_event_ = GetUpdateDismissalReason(NOPE_CLICKED); |
|
vasilii
2015/08/21 14:59:22
This is 100% error.
dvadym
2015/08/21 15:31:13
Thanks, moved to OnNeverForThisSiteClicked()
|
| dismissal_reason_ = metrics_util::CLICKED_CANCEL; |
| } |
| @@ -216,6 +256,7 @@ void ManagePasswordsBubbleModel::OnNeverForThisSiteClicked() { |
| void ManagePasswordsBubbleModel::OnSaveClicked() { |
| dismissal_reason_ = metrics_util::CLICKED_SAVE; |
| RecordExperimentStatistics(web_contents(), dismissal_reason_); |
| + update_password_submission_event_ = GetUpdateDismissalReason(UPDATE_CLICKED); |
| ManagePasswordsUIController* manage_passwords_ui_controller = |
| ManagePasswordsUIController::FromWebContents(web_contents()); |
| manage_passwords_ui_controller->SavePassword(); |
| @@ -224,6 +265,8 @@ void ManagePasswordsBubbleModel::OnSaveClicked() { |
| void ManagePasswordsBubbleModel::OnUpdateClicked( |
| const autofill::PasswordForm& password_form) { |
| + update_password_submission_event_ = GetUpdateDismissalReason(UPDATE_CLICKED); |
| + |
| ManagePasswordsUIController* manage_passwords_ui_controller = |
| ManagePasswordsUIController::FromWebContents(web_contents()); |
| manage_passwords_ui_controller->UpdatePassword(password_form); |
| @@ -329,3 +372,30 @@ void ManagePasswordsBubbleModel::UpdatePendingStateTitle() { |
| state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE, &title_, |
| &title_brand_link_range_); |
| } |
| + |
| +password_manager::metrics_util::UpdatePasswordSubmissionEvent |
| +ManagePasswordsBubbleModel::GetUpdateDismissalReason( |
| + UserBehaviorOnUpdateBubble behavior) { |
| + using namespace password_manager::metrics_util; |
| + static const password_manager::metrics_util::UpdatePasswordSubmissionEvent |
| + update_events[4][3] = { |
| + {NO_ACCOUNTS_CLICKED_UPDATE, NO_ACCOUNTS_CLICKED_NOPE, |
| + NO_ACCOUNTS_NO_INTERACTION}, |
| + {ONE_ACCOUNT_CLICKED_UPDATE, ONE_ACCOUNT_CLICKED_NOPE, |
| + ONE_ACCOUNT_NO_INTERACTION}, |
| + {MULTIPLE_ACCOUNTS_CLICKED_UPDATE, MULTIPLE_ACCOUNTS_CLICKED_NOPE, |
| + MULTIPLE_ACCOUNTS_NO_INTERACTION}, |
| + {PASSWORD_OVERRIDDEN_CLICKED_UPDATE, PASSWORD_OVERRIDDEN_CLICKED_NOPE, |
| + PASSWORD_OVERRIDDEN_NO_INTERACTION}}; |
| + |
| + if (state_ == password_manager::ui::PENDING_PASSWORD_STATE) { |
| + if (pending_password_.IsPossibleChangePasswordFormWithoutUsername()) |
| + return update_events[0][behavior]; |
| + return NO_UPDATE_SUBMISSION; |
| + } |
| + if (password_overridden_) |
| + return update_events[3][behavior]; |
| + if (ShouldShowMultipleAccountUpdateUI()) |
| + return update_events[2][behavior]; |
| + return update_events[1][behavior]; |
| +} |