OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h" | 5 #include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <limits> | 10 #include <limits> |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 | 96 |
97 void set_sign_in_promo_dismissal_reason( | 97 void set_sign_in_promo_dismissal_reason( |
98 password_manager::metrics_util::SyncSignInUserAction reason) { | 98 password_manager::metrics_util::SyncSignInUserAction reason) { |
99 sign_in_promo_dismissal_reason_ = reason; | 99 sign_in_promo_dismissal_reason_ = reason; |
100 } | 100 } |
101 | 101 |
102 void SetClockForTesting(std::unique_ptr<base::Clock> clock) { | 102 void SetClockForTesting(std::unique_ptr<base::Clock> clock) { |
103 clock_ = std::move(clock); | 103 clock_ = std::move(clock); |
104 } | 104 } |
105 | 105 |
| 106 void set_sign_in_promo_shown_count(int count) { |
| 107 sign_in_promo_shown_count = count; |
| 108 } |
| 109 |
106 private: | 110 private: |
107 // The way the bubble appeared. | 111 // The way the bubble appeared. |
108 const password_manager::metrics_util::UIDisplayDisposition | 112 const password_manager::metrics_util::UIDisplayDisposition |
109 display_disposition_; | 113 display_disposition_; |
110 | 114 |
111 // Dismissal reason for a bubble. | 115 // Dismissal reason for a bubble. |
112 password_manager::metrics_util::UIDismissalReason dismissal_reason_; | 116 password_manager::metrics_util::UIDismissalReason dismissal_reason_; |
113 | 117 |
114 // Dismissal reason for the update bubble. | 118 // Dismissal reason for the update bubble. |
115 password_manager::metrics_util::UpdatePasswordSubmissionEvent | 119 password_manager::metrics_util::UpdatePasswordSubmissionEvent |
116 update_password_submission_event_; | 120 update_password_submission_event_; |
117 | 121 |
118 // Dismissal reason for the Chrome Sign in bubble. | 122 // Dismissal reason for the Chrome Sign in bubble. |
119 password_manager::metrics_util::SyncSignInUserAction | 123 password_manager::metrics_util::SyncSignInUserAction |
120 sign_in_promo_dismissal_reason_; | 124 sign_in_promo_dismissal_reason_; |
121 | 125 |
122 // Current statistics for the save password bubble; | 126 // Current statistics for the save password bubble; |
123 password_manager::InteractionsStats interaction_stats_; | 127 password_manager::InteractionsStats interaction_stats_; |
124 | 128 |
125 // Used to retrieve the current time, in base::Time units. | 129 // Used to retrieve the current time, in base::Time units. |
126 std::unique_ptr<base::Clock> clock_; | 130 std::unique_ptr<base::Clock> clock_; |
127 | 131 |
| 132 // Number of times the sign-in promo was shown to the user. |
| 133 int sign_in_promo_shown_count; |
| 134 |
128 DISALLOW_COPY_AND_ASSIGN(InteractionKeeper); | 135 DISALLOW_COPY_AND_ASSIGN(InteractionKeeper); |
129 }; | 136 }; |
130 | 137 |
131 ManagePasswordsBubbleModel::InteractionKeeper::InteractionKeeper( | 138 ManagePasswordsBubbleModel::InteractionKeeper::InteractionKeeper( |
132 password_manager::InteractionsStats stats, | 139 password_manager::InteractionsStats stats, |
133 password_manager::metrics_util::UIDisplayDisposition display_disposition) | 140 password_manager::metrics_util::UIDisplayDisposition display_disposition) |
134 : display_disposition_(display_disposition), | 141 : display_disposition_(display_disposition), |
135 dismissal_reason_(metrics_util::NO_DIRECT_INTERACTION), | 142 dismissal_reason_(metrics_util::NO_DIRECT_INTERACTION), |
136 update_password_submission_event_(metrics_util::NO_UPDATE_SUBMISSION), | 143 update_password_submission_event_(metrics_util::NO_UPDATE_SUBMISSION), |
137 sign_in_promo_dismissal_reason_(metrics_util::CHROME_SIGNIN_DISMISSED), | 144 sign_in_promo_dismissal_reason_(metrics_util::CHROME_SIGNIN_DISMISSED), |
138 interaction_stats_(std::move(stats)), | 145 interaction_stats_(std::move(stats)), |
139 clock_(new base::DefaultClock) {} | 146 clock_(new base::DefaultClock), |
| 147 sign_in_promo_shown_count(0) {} |
140 | 148 |
141 void ManagePasswordsBubbleModel::InteractionKeeper::ReportInteractions( | 149 void ManagePasswordsBubbleModel::InteractionKeeper::ReportInteractions( |
142 const ManagePasswordsBubbleModel* model) { | 150 const ManagePasswordsBubbleModel* model) { |
143 if (model->state() == password_manager::ui::PENDING_PASSWORD_STATE) { | 151 if (model->state() == password_manager::ui::PENDING_PASSWORD_STATE) { |
144 Profile* profile = model->GetProfile(); | 152 Profile* profile = model->GetProfile(); |
145 if (profile) { | 153 if (profile) { |
146 if (GetSmartLockBrandingState(profile) == | 154 if (GetSmartLockBrandingState(profile) == |
147 password_bubble_experiment::SmartLockBranding::FULL) { | 155 password_bubble_experiment::SmartLockBranding::FULL) { |
148 password_bubble_experiment::RecordSavePromptFirstRunExperienceWasShown( | 156 password_bubble_experiment::RecordSavePromptFirstRunExperienceWasShown( |
149 profile->GetPrefs()); | 157 profile->GetPrefs()); |
(...skipping 13 matching lines...) Expand all Loading... |
163 } | 171 } |
164 } | 172 } |
165 } | 173 } |
166 | 174 |
167 if (model->state() == password_manager::ui::CHROME_SIGN_IN_PROMO_STATE) { | 175 if (model->state() == password_manager::ui::CHROME_SIGN_IN_PROMO_STATE) { |
168 metrics_util::LogAutoSigninPromoUserAction(sign_in_promo_dismissal_reason_); | 176 metrics_util::LogAutoSigninPromoUserAction(sign_in_promo_dismissal_reason_); |
169 if (sign_in_promo_dismissal_reason_ == | 177 if (sign_in_promo_dismissal_reason_ == |
170 password_manager::metrics_util::CHROME_SIGNIN_OK || | 178 password_manager::metrics_util::CHROME_SIGNIN_OK || |
171 sign_in_promo_dismissal_reason_ == | 179 sign_in_promo_dismissal_reason_ == |
172 password_manager::metrics_util::CHROME_SIGNIN_CANCEL) { | 180 password_manager::metrics_util::CHROME_SIGNIN_CANCEL) { |
173 DCHECK(model->delegate_); | |
174 int show_count = model->GetProfile()->GetPrefs()->GetInteger( | |
175 password_manager::prefs::kNumberSignInPasswordPromoShown); | |
176 UMA_HISTOGRAM_COUNTS_100("PasswordManager.SignInPromoCountTilClick", | 181 UMA_HISTOGRAM_COUNTS_100("PasswordManager.SignInPromoCountTilClick", |
177 show_count); | 182 sign_in_promo_shown_count); |
| 183 } else { |
| 184 UMA_HISTOGRAM_COUNTS_100("PasswordManager.SignInPromoDismissalCount", |
| 185 sign_in_promo_shown_count); |
178 } | 186 } |
179 } else if (model->state() != | 187 } else if (model->state() != |
180 password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { | 188 password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { |
181 // We have separate metrics for the Update bubble so do not record dismissal | 189 // We have separate metrics for the Update bubble so do not record dismissal |
182 // reason for it. | 190 // reason for it. |
183 metrics_util::LogUIDismissalReason(dismissal_reason_); | 191 metrics_util::LogUIDismissalReason(dismissal_reason_); |
184 } | 192 } |
185 | 193 |
186 if (model->state() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE || | 194 if (model->state() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE || |
187 model->state() == password_manager::ui::PENDING_PASSWORD_STATE) { | 195 model->state() == password_manager::ui::PENDING_PASSWORD_STATE) { |
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
439 const browser_sync::ProfileSyncService* sync_service = | 447 const browser_sync::ProfileSyncService* sync_service = |
440 ProfileSyncServiceFactory::GetForProfile(GetProfile()); | 448 ProfileSyncServiceFactory::GetForProfile(GetProfile()); |
441 if (password_bubble_experiment::ShouldShowChromeSignInPasswordPromo( | 449 if (password_bubble_experiment::ShouldShowChromeSignInPasswordPromo( |
442 prefs, sync_service)) { | 450 prefs, sync_service)) { |
443 interaction_keeper_->ReportInteractions(this); | 451 interaction_keeper_->ReportInteractions(this); |
444 title_brand_link_range_ = gfx::Range(); | 452 title_brand_link_range_ = gfx::Range(); |
445 title_ = l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_SIGNIN_PROMO_TITLE); | 453 title_ = l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_SIGNIN_PROMO_TITLE); |
446 state_ = password_manager::ui::CHROME_SIGN_IN_PROMO_STATE; | 454 state_ = password_manager::ui::CHROME_SIGN_IN_PROMO_STATE; |
447 int show_count = prefs->GetInteger( | 455 int show_count = prefs->GetInteger( |
448 password_manager::prefs::kNumberSignInPasswordPromoShown); | 456 password_manager::prefs::kNumberSignInPasswordPromoShown); |
| 457 show_count++; |
449 prefs->SetInteger(password_manager::prefs::kNumberSignInPasswordPromoShown, | 458 prefs->SetInteger(password_manager::prefs::kNumberSignInPasswordPromoShown, |
450 show_count + 1); | 459 show_count); |
| 460 interaction_keeper_->set_sign_in_promo_shown_count(show_count); |
451 return true; | 461 return true; |
452 } | 462 } |
453 return false; | 463 return false; |
454 } | 464 } |
455 | 465 |
456 void ManagePasswordsBubbleModel::SetClockForTesting( | 466 void ManagePasswordsBubbleModel::SetClockForTesting( |
457 std::unique_ptr<base::Clock> clock) { | 467 std::unique_ptr<base::Clock> clock) { |
458 interaction_keeper_->SetClockForTesting(std::move(clock)); | 468 interaction_keeper_->SetClockForTesting(std::move(clock)); |
459 } | 469 } |
460 | 470 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
501 return metrics_util::NO_UPDATE_SUBMISSION; | 511 return metrics_util::NO_UPDATE_SUBMISSION; |
502 } | 512 } |
503 if (state_ != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) | 513 if (state_ != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) |
504 return metrics_util::NO_UPDATE_SUBMISSION; | 514 return metrics_util::NO_UPDATE_SUBMISSION; |
505 if (password_overridden_) | 515 if (password_overridden_) |
506 return update_events[3][behavior]; | 516 return update_events[3][behavior]; |
507 if (ShouldShowMultipleAccountUpdateUI()) | 517 if (ShouldShowMultipleAccountUpdateUI()) |
508 return update_events[2][behavior]; | 518 return update_events[2][behavior]; |
509 return update_events[1][behavior]; | 519 return update_events[1][behavior]; |
510 } | 520 } |
OLD | NEW |