Chromium Code Reviews| 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 "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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 } |
| OLD | NEW |