Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Side by Side Diff: chrome/browser/ui/passwords/manage_passwords_bubble_model.cc

Issue 1304573004: Added UMA statistics for change passwords in the Password Manager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed reviewers comments Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/browser/password_manager/password_store_factory.h" 9 #include "chrome/browser/password_manager/password_store_factory.h"
10 #include "chrome/browser/profiles/profile.h" 10 #include "chrome/browser/profiles/profile.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 return password_bubble_experiment::IsSmartLockBrandingEnabled(sync_service); 83 return password_bubble_experiment::IsSmartLockBrandingEnabled(sync_service);
84 } 84 }
85 85
86 } // namespace 86 } // namespace
87 87
88 ManagePasswordsBubbleModel::ManagePasswordsBubbleModel( 88 ManagePasswordsBubbleModel::ManagePasswordsBubbleModel(
89 content::WebContents* web_contents) 89 content::WebContents* web_contents)
90 : content::WebContentsObserver(web_contents), 90 : content::WebContentsObserver(web_contents),
91 never_save_passwords_(false), 91 never_save_passwords_(false),
92 display_disposition_(metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING), 92 display_disposition_(metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING),
93 dismissal_reason_(metrics_util::NOT_DISPLAYED) { 93 dismissal_reason_(metrics_util::NOT_DISPLAYED),
94 update_password_submission_event_(metrics_util::NO_UPDATE_SUBMISSION) {
94 ManagePasswordsUIController* controller = 95 ManagePasswordsUIController* controller =
95 ManagePasswordsUIController::FromWebContents(web_contents); 96 ManagePasswordsUIController::FromWebContents(web_contents);
96 97
97 origin_ = controller->origin(); 98 origin_ = controller->origin();
98 state_ = controller->state(); 99 state_ = controller->state();
99 password_overridden_ = controller->PasswordOverridden(); 100 password_overridden_ = controller->PasswordOverridden();
100 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE || 101 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE ||
101 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { 102 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) {
102 pending_password_ = controller->PendingPassword(); 103 pending_password_ = controller->PendingPassword();
103 local_credentials_ = DeepCopyForms(controller->GetCurrentForms()); 104 local_credentials_ = DeepCopyForms(controller->GetCurrentForms());
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 154
154 manage_link_ = 155 manage_link_ =
155 l10n_util::GetStringUTF16(IDS_OPTIONS_PASSWORDS_MANAGE_PASSWORDS_LINK); 156 l10n_util::GetStringUTF16(IDS_OPTIONS_PASSWORDS_MANAGE_PASSWORDS_LINK);
156 } 157 }
157 158
158 ManagePasswordsBubbleModel::~ManagePasswordsBubbleModel() {} 159 ManagePasswordsBubbleModel::~ManagePasswordsBubbleModel() {}
159 160
160 void ManagePasswordsBubbleModel::OnBubbleShown( 161 void ManagePasswordsBubbleModel::OnBubbleShown(
161 ManagePasswordsBubble::DisplayReason reason) { 162 ManagePasswordsBubble::DisplayReason reason) {
162 if (reason == ManagePasswordsBubble::USER_ACTION) { 163 if (reason == ManagePasswordsBubble::USER_ACTION) {
163 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE) { 164 switch (state_) {
164 display_disposition_ = metrics_util::MANUAL_WITH_PASSWORD_PENDING; 165 case password_manager::ui::PENDING_PASSWORD_STATE:
165 } else if (state_ == password_manager::ui::BLACKLIST_STATE) { 166 display_disposition_ = metrics_util::MANUAL_WITH_PASSWORD_PENDING;
166 display_disposition_ = metrics_util::MANUAL_BLACKLISTED; 167 break;
167 } else { 168 case password_manager::ui::PENDING_PASSWORD_UPDATE_STATE:
168 display_disposition_ = metrics_util::MANUAL_MANAGE_PASSWORDS; 169 display_disposition_ =
170 metrics_util::MANUAL_WITH_PASSWORD_PENDING_UPDATE;
171 break;
172 case password_manager::ui::BLACKLIST_STATE:
173 display_disposition_ = metrics_util::MANUAL_BLACKLISTED;
174 break;
175 case password_manager::ui::MANAGE_STATE:
176 display_disposition_ = metrics_util::MANUAL_MANAGE_PASSWORDS;
177 break;
178 default:
179 NOTREACHED();
169 } 180 }
170 } else { 181 } else {
171 if (state_ == password_manager::ui::CONFIRMATION_STATE) { 182 switch (state_) {
172 display_disposition_ = 183 case password_manager::ui::PENDING_PASSWORD_STATE:
173 metrics_util::AUTOMATIC_GENERATED_PASSWORD_CONFIRMATION; 184 display_disposition_ = metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING;
174 } else if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE) { 185 break;
175 display_disposition_ = metrics_util::AUTOMATIC_CREDENTIAL_REQUEST; 186 case password_manager::ui::PENDING_PASSWORD_UPDATE_STATE:
176 } else if (state_ == password_manager::ui::AUTO_SIGNIN_STATE) { 187 display_disposition_ =
177 display_disposition_ = metrics_util::AUTOMATIC_SIGNIN_TOAST; 188 metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING_UPDATE;
178 } else { 189 break;
179 display_disposition_ = metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING; 190 case password_manager::ui::CONFIRMATION_STATE:
191 display_disposition_ =
192 metrics_util::AUTOMATIC_GENERATED_PASSWORD_CONFIRMATION;
193 break;
194 case password_manager::ui::CREDENTIAL_REQUEST_STATE:
195 display_disposition_ = metrics_util::AUTOMATIC_CREDENTIAL_REQUEST;
196 break;
197 case password_manager::ui::AUTO_SIGNIN_STATE:
198 display_disposition_ = metrics_util::AUTOMATIC_SIGNIN_TOAST;
199 break;
200 default:
201 NOTREACHED();
180 } 202 }
181 } 203 }
182 metrics_util::LogUIDisplayDisposition(display_disposition_); 204 metrics_util::LogUIDisplayDisposition(display_disposition_);
183 205
184 // Default to a dismissal reason of "no interaction". If the user interacts 206 // Default to a dismissal reason of "no interaction". If the user interacts
185 // with the button in such a way that it closes, we'll reset this value 207 // with the button in such a way that it closes, we'll reset this value
186 // accordingly. 208 // accordingly.
187 dismissal_reason_ = metrics_util::NO_DIRECT_INTERACTION; 209 dismissal_reason_ = metrics_util::NO_DIRECT_INTERACTION;
188 210
189 ManagePasswordsUIController* controller = 211 ManagePasswordsUIController* controller =
190 ManagePasswordsUIController::FromWebContents(web_contents()); 212 ManagePasswordsUIController::FromWebContents(web_contents());
191 controller->OnBubbleShown(); 213 controller->OnBubbleShown();
192 } 214 }
193 215
194 void ManagePasswordsBubbleModel::OnBubbleHidden() { 216 void ManagePasswordsBubbleModel::OnBubbleHidden() {
195 ManagePasswordsUIController* manage_passwords_ui_controller = 217 ManagePasswordsUIController* manage_passwords_ui_controller =
196 web_contents() ? 218 web_contents() ?
197 ManagePasswordsUIController::FromWebContents(web_contents()) 219 ManagePasswordsUIController::FromWebContents(web_contents())
198 : nullptr; 220 : nullptr;
199 if (manage_passwords_ui_controller) 221 if (manage_passwords_ui_controller)
200 manage_passwords_ui_controller->OnBubbleHidden(); 222 manage_passwords_ui_controller->OnBubbleHidden();
201 if (dismissal_reason_ == metrics_util::NOT_DISPLAYED) 223 if (dismissal_reason_ == metrics_util::NOT_DISPLAYED)
202 return; 224 return;
203 225
204 metrics_util::LogUIDismissalReason(dismissal_reason_); 226 metrics_util::LogUIDismissalReason(dismissal_reason_);
205 // Other use cases have been reported in the callbacks like OnSaveClicked(). 227 // Other use cases have been reported in the callbacks like OnSaveClicked().
206 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE && 228 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE &&
207 dismissal_reason_ == metrics_util::NO_DIRECT_INTERACTION) 229 dismissal_reason_ == metrics_util::NO_DIRECT_INTERACTION)
208 RecordExperimentStatistics(web_contents(), dismissal_reason_); 230 RecordExperimentStatistics(web_contents(), dismissal_reason_);
231 // Check if this was update password and record update statistics.
232 if (update_password_submission_event_ == metrics_util::NO_UPDATE_SUBMISSION) {
233 if (state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) {
234 update_password_submission_event_ =
235 password_overridden_
vasilii 2015/08/20 15:23:03 If you separate this construction into a method th
dvadym 2015/08/21 14:09:53 Agree,it make perfect sense. Done
236 ? metrics_util::PASSWORD_OVERRIDDEN_NO_INTERACTION
237 : (ShouldShowMultipleAccountUpdateUI()
238 ? metrics_util::MULTIPLE_ACCOUNTS_NO_INTERACTION
239 : metrics_util::ONE_ACCOUNT_NO_INTERACTION);
240 } else if (state_ == password_manager::ui::PENDING_PASSWORD_STATE ||
241 pending_password_
242 .IsPossibleChangePasswordFormWithoutUsername()) {
243 update_password_submission_event_ =
244 metrics_util::NO_ACCOUNTS_NO_INTERACTION;
245 }
246 }
247 if (update_password_submission_event_ != metrics_util::NO_UPDATE_SUBMISSION)
vasilii 2015/08/20 15:23:03 I think here there is always a reason why the bubb
dvadym 2015/08/21 14:09:53 It can be not update bubble, this is simply verifi
248 LogUpdatePasswordSubmissionEvent(update_password_submission_event_);
209 } 249 }
210 250
211 void ManagePasswordsBubbleModel::OnNopeClicked() { 251 void ManagePasswordsBubbleModel::OnNopeClicked() {
212 dismissal_reason_ = metrics_util::CLICKED_NOPE; 252 dismissal_reason_ = metrics_util::CLICKED_NOPE;
213 RecordExperimentStatistics(web_contents(), dismissal_reason_); 253 RecordExperimentStatistics(web_contents(), dismissal_reason_);
254 if (pending_password_.IsPossibleChangePasswordFormWithoutUsername())
255 update_password_submission_event_ = metrics_util::NO_ACCOUNTS_CLICKED_NOPE;
214 if (state_ != password_manager::ui::CREDENTIAL_REQUEST_STATE) 256 if (state_ != password_manager::ui::CREDENTIAL_REQUEST_STATE)
215 state_ = password_manager::ui::PENDING_PASSWORD_STATE; 257 state_ = password_manager::ui::PENDING_PASSWORD_STATE;
216 } 258 }
217 259
260 void ManagePasswordsBubbleModel::OnNopeUpdateClicked() {
261 update_password_submission_event_ =
262 password_overridden_ ? metrics_util::PASSWORD_OVERRIDDEN_CLICKED_NOPE
263 : (ShouldShowMultipleAccountUpdateUI()
264 ? metrics_util::MULTIPLE_ACCOUNTS_CLICKED_NOPE
265 : metrics_util::ONE_ACCOUNT_CLICKED_NOPE);
266 }
267
218 void ManagePasswordsBubbleModel::OnConfirmationForNeverForThisSite() { 268 void ManagePasswordsBubbleModel::OnConfirmationForNeverForThisSite() {
219 never_save_passwords_ = true; 269 never_save_passwords_ = true;
220 UpdatePendingStateTitle(); 270 UpdatePendingStateTitle();
221 } 271 }
222 272
223 void ManagePasswordsBubbleModel::OnUndoNeverForThisSite() { 273 void ManagePasswordsBubbleModel::OnUndoNeverForThisSite() {
224 never_save_passwords_ = false; 274 never_save_passwords_ = false;
225 UpdatePendingStateTitle(); 275 UpdatePendingStateTitle();
226 } 276 }
227 277
(...skipping 10 matching lines...) Expand all
238 dismissal_reason_ = metrics_util::CLICKED_UNBLACKLIST; 288 dismissal_reason_ = metrics_util::CLICKED_UNBLACKLIST;
239 ManagePasswordsUIController* manage_passwords_ui_controller = 289 ManagePasswordsUIController* manage_passwords_ui_controller =
240 ManagePasswordsUIController::FromWebContents(web_contents()); 290 ManagePasswordsUIController::FromWebContents(web_contents());
241 manage_passwords_ui_controller->UnblacklistSite(); 291 manage_passwords_ui_controller->UnblacklistSite();
242 state_ = password_manager::ui::MANAGE_STATE; 292 state_ = password_manager::ui::MANAGE_STATE;
243 } 293 }
244 294
245 void ManagePasswordsBubbleModel::OnSaveClicked() { 295 void ManagePasswordsBubbleModel::OnSaveClicked() {
246 dismissal_reason_ = metrics_util::CLICKED_SAVE; 296 dismissal_reason_ = metrics_util::CLICKED_SAVE;
247 RecordExperimentStatistics(web_contents(), dismissal_reason_); 297 RecordExperimentStatistics(web_contents(), dismissal_reason_);
298 if (pending_password_.IsPossibleChangePasswordFormWithoutUsername()) {
299 update_password_submission_event_ =
vasilii 2015/08/20 15:23:03 As discussed, the save bubble shouldn't participat
300 metrics_util::NO_ACCOUNTS_CLICKED_UPDATE;
301 }
248 ManagePasswordsUIController* manage_passwords_ui_controller = 302 ManagePasswordsUIController* manage_passwords_ui_controller =
249 ManagePasswordsUIController::FromWebContents(web_contents()); 303 ManagePasswordsUIController::FromWebContents(web_contents());
250 manage_passwords_ui_controller->SavePassword(); 304 manage_passwords_ui_controller->SavePassword();
251 state_ = password_manager::ui::MANAGE_STATE; 305 state_ = password_manager::ui::MANAGE_STATE;
252 } 306 }
253 307
254 void ManagePasswordsBubbleModel::OnUpdateClicked( 308 void ManagePasswordsBubbleModel::OnUpdateClicked(
255 const autofill::PasswordForm& password_form) { 309 const autofill::PasswordForm& password_form) {
310 update_password_submission_event_ =
311 password_overridden_
312 ? metrics_util::PASSWORD_OVERRIDDEN_CLICKED_UPDATE
313 : (ShouldShowMultipleAccountUpdateUI()
314 ? metrics_util::MULTIPLE_ACCOUNTS_CLICKED_UPDATE
315 : metrics_util::ONE_ACCOUNT_CLICKED_UPDATE);
256 ManagePasswordsUIController* manage_passwords_ui_controller = 316 ManagePasswordsUIController* manage_passwords_ui_controller =
257 ManagePasswordsUIController::FromWebContents(web_contents()); 317 ManagePasswordsUIController::FromWebContents(web_contents());
258 manage_passwords_ui_controller->UpdatePassword(password_form); 318 manage_passwords_ui_controller->UpdatePassword(password_form);
259 state_ = password_manager::ui::MANAGE_STATE; 319 state_ = password_manager::ui::MANAGE_STATE;
260 } 320 }
261 321
262 void ManagePasswordsBubbleModel::OnDoneClicked() { 322 void ManagePasswordsBubbleModel::OnDoneClicked() {
263 dismissal_reason_ = metrics_util::CLICKED_DONE; 323 dismissal_reason_ = metrics_util::CLICKED_DONE;
264 } 324 }
265 325
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 title_ = l10n_util::GetStringUTF16( 416 title_ = l10n_util::GetStringUTF16(
357 IDS_MANAGE_PASSWORDS_BLACKLIST_CONFIRMATION_TITLE); 417 IDS_MANAGE_PASSWORDS_BLACKLIST_CONFIRMATION_TITLE);
358 } else { 418 } else {
359 GetSavePasswordDialogTitleTextAndLinkRange( 419 GetSavePasswordDialogTitleTextAndLinkRange(
360 web_contents()->GetVisibleURL(), origin(), 420 web_contents()->GetVisibleURL(), origin(),
361 IsSmartLockBrandingEnabled(GetProfile()), 421 IsSmartLockBrandingEnabled(GetProfile()),
362 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE, &title_, 422 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE, &title_,
363 &title_brand_link_range_); 423 &title_brand_link_range_);
364 } 424 }
365 } 425 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698