Chromium Code Reviews| Index: chrome/browser/ui/views/passwords/credentials_selection_view.cc |
| diff --git a/chrome/browser/ui/views/passwords/credentials_selection_view.cc b/chrome/browser/ui/views/passwords/credentials_selection_view.cc |
| index 483b731ee5dcac1a3ed7b51204b700685215926a..591a175cbc4f2072c7d5de9b24cd1fd3a8ece1c9 100644 |
| --- a/chrome/browser/ui/views/passwords/credentials_selection_view.cc |
| +++ b/chrome/browser/ui/views/passwords/credentials_selection_view.cc |
| @@ -7,6 +7,7 @@ |
| #include <stddef.h> |
| #include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h" |
| +#include "components/password_manager/core/browser/password_manager_metrics_util.h" |
| #include "ui/base/models/simple_combobox_model.h" |
| #include "ui/base/resource/resource_bundle.h" |
| #include "ui/views/controls/button/button.h" |
| @@ -28,7 +29,10 @@ views::Label* GeneratePasswordLabel(const autofill::PasswordForm& form) { |
| views::Combobox* GenerateUsernameCombobox( |
| const std::vector<const autofill::PasswordForm*>& forms, |
| - const base::string16& best_matched_username) { |
| + const base::string16& best_matched_username, |
| + int& default_index, |
| + bool& is_default_best_match, |
| + bool& is_default_preferred) { |
|
vasilii
2016/01/13 13:54:25
Move the function to the class.
dvadym
2016/01/13 14:55:37
Thanks, it makes sense
|
| std::vector<base::string16> usernames; |
| size_t best_matched_username_index = forms.size(); |
| size_t preferred_form_index = forms.size(); |
| @@ -45,9 +49,17 @@ views::Combobox* GenerateUsernameCombobox( |
| views::Combobox* combobox = |
| new views::Combobox(new ui::SimpleComboboxModel(usernames)); |
| + default_index = 0; |
| + is_default_best_match = false; |
| + is_default_preferred = false; |
| + |
| if (best_matched_username_index < forms.size()) { |
| + is_default_best_match = true; |
| + default_index = best_matched_username_index; |
| combobox->SetSelectedIndex(best_matched_username_index); |
| } else if (preferred_form_index < forms.size()) { |
| + is_default_preferred = true; |
| + default_index = preferred_form_index; |
| combobox->SetSelectedIndex(preferred_form_index); |
| } |
| return combobox; |
| @@ -59,7 +71,7 @@ CredentialsSelectionView::CredentialsSelectionView( |
| ManagePasswordsBubbleModel* manage_passwords_bubble_model, |
| const std::vector<const autofill::PasswordForm*>& password_forms, |
| const base::string16& best_matched_username) |
| - : password_forms_(password_forms) { |
| + : password_forms_(password_forms), action_reported(false) { |
|
vasilii
2016/01/13 13:54:25
line break.
dvadym
2016/01/13 14:55:37
Done.
|
| DCHECK(!password_forms.empty()); |
| // Layout. |
| @@ -81,7 +93,8 @@ CredentialsSelectionView::CredentialsSelectionView( |
| views::kRelatedControlVerticalSpacing); |
| combobox_ = GenerateUsernameCombobox( |
| manage_passwords_bubble_model->local_credentials().get(), |
| - best_matched_username); |
| + best_matched_username, default_index, is_default_best_match, |
| + is_default_preferred); |
| layout->AddView(combobox_); |
| views::Label* label = |
| GeneratePasswordLabel(manage_passwords_bubble_model->pending_password()); |
| @@ -90,9 +103,55 @@ CredentialsSelectionView::CredentialsSelectionView( |
| GetLayoutManager()->Layout(this); |
| } |
| +CredentialsSelectionView::~CredentialsSelectionView() { |
| + ReportUserAction(true, -1); |
| +} |
| + |
| const autofill::PasswordForm* |
| CredentialsSelectionView::GetSelectedCredentials() { |
| DCHECK_EQ(password_forms_.size(), |
| static_cast<size_t>(combobox_->model()->GetItemCount())); |
| + ReportUserAction(false, combobox_->selected_index()); |
| return password_forms_[combobox_->selected_index()]; |
| } |
| + |
| +void CredentialsSelectionView::ReportUserAction(bool was_update_rejected, |
| + int selected_index) { |
| + if (action_reported) |
| + return; |
| + bool did_user_change_selection = selected_index != default_index; |
| + password_manager::metrics_util::MultiAccountUpdateBubbleUserAction action; |
| + if (was_update_rejected) { |
| + if (is_default_best_match) |
| + action = password_manager::metrics_util:: |
|
vasilii
2016/01/13 13:54:25
if the block is 2-lines then you need {}
dvadym
2016/01/13 14:55:37
Done.
|
| + DEFAULT_ACCOUNT_MATCHED_BY_PASSWORD_USER_REJECTED_UPDATE; |
|
vasilii
2016/01/13 13:54:25
the account is matched by username not by password
dvadym
2016/01/13 14:55:37
Maybe name |best_matched_username| is a little bit
|
| + else if (is_default_preferred) |
| + action = password_manager::metrics_util:: |
| + DEFAULT_ACCOUNT_PREFERRED_USER_REJECTED_UPDATE; |
| + else |
| + action = password_manager::metrics_util:: |
| + DEFAULT_ACCOUNT_FIRST_USER_REJECTED_UPDATE; |
| + } else if (did_user_change_selection) { |
|
vasilii
2016/01/13 13:54:25
I'd inline did_user_change_selection here.
dvadym
2016/01/13 14:55:37
Done.
|
| + if (is_default_best_match) |
| + action = password_manager::metrics_util:: |
| + DEFAULT_ACCOUNT_MATCHED_BY_PASSWORD_USER_CHANGED; |
| + else if (is_default_preferred) |
| + action = password_manager::metrics_util:: |
| + DEFAULT_ACCOUNT_PREFERRED_USER_CHANGED; |
| + else |
| + action = |
| + password_manager::metrics_util::DEFAULT_ACCOUNT_FIRST_USER_CHANGED; |
| + } else { |
| + if (is_default_best_match) |
| + action = password_manager::metrics_util:: |
| + DEFAULT_ACCOUNT_MATCHED_BY_PASSWORD_USER_NOT_CHANGED; |
| + else if (is_default_preferred) |
| + action = password_manager::metrics_util:: |
| + DEFAULT_ACCOUNT_PREFERRED_USER_NOT_CHANGED; |
| + else |
| + action = password_manager::metrics_util:: |
| + DEFAULT_ACCOUNT_FIRST_USER_NOT_CHANGED; |
| + } |
| + password_manager::metrics_util::LogMultiAccountUpdateBubbleUserAction(action); |
| + action_reported = true; |
| +} |