| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
| 12 #include "base/prefs/pref_service.h" | 12 #include "base/prefs/pref_service.h" |
| 13 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
| 14 #include "chrome/browser/password_manager/password_store_factory.h" | 14 #include "chrome/browser/password_manager/password_store_factory.h" |
| 15 #include "chrome/browser/profiles/profile.h" | 15 #include "chrome/browser/profiles/profile.h" |
| 16 #include "chrome/browser/sync/profile_sync_service_factory.h" | 16 #include "chrome/browser/sync/profile_sync_service_factory.h" |
| 17 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" | |
| 18 #include "chrome/browser/ui/passwords/manage_passwords_view_utils.h" | 17 #include "chrome/browser/ui/passwords/manage_passwords_view_utils.h" |
| 18 #include "chrome/browser/ui/passwords/passwords_model_delegate.h" |
| 19 #include "chrome/common/url_constants.h" | 19 #include "chrome/common/url_constants.h" |
| 20 #include "chrome/grit/chromium_strings.h" | 20 #include "chrome/grit/chromium_strings.h" |
| 21 #include "chrome/grit/generated_resources.h" | 21 #include "chrome/grit/generated_resources.h" |
| 22 #include "components/browser_sync/browser/profile_sync_service.h" | 22 #include "components/browser_sync/browser/profile_sync_service.h" |
| 23 #include "components/password_manager/core/browser/password_bubble_experiment.h" | 23 #include "components/password_manager/core/browser/password_bubble_experiment.h" |
| 24 #include "components/password_manager/core/browser/password_store.h" | 24 #include "components/password_manager/core/browser/password_store.h" |
| 25 #include "components/password_manager/core/common/credential_manager_types.h" | 25 #include "components/password_manager/core/common/credential_manager_types.h" |
| 26 #include "components/password_manager/core/common/password_manager_ui.h" | 26 #include "components/password_manager/core/common/password_manager_ui.h" |
| 27 #include "content/public/browser/web_contents.h" |
| 27 #include "ui/base/l10n/l10n_util.h" | 28 #include "ui/base/l10n/l10n_util.h" |
| 28 | 29 |
| 29 namespace metrics_util = password_manager::metrics_util; | 30 namespace metrics_util = password_manager::metrics_util; |
| 30 | 31 |
| 31 namespace { | 32 namespace { |
| 32 | 33 |
| 33 Profile* GetProfileFromWebContents(content::WebContents* web_contents) { | 34 Profile* GetProfileFromWebContents(content::WebContents* web_contents) { |
| 34 if (!web_contents) | 35 if (!web_contents) |
| 35 return nullptr; | 36 return nullptr; |
| 36 return Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 37 return Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 | 69 |
| 69 } // namespace | 70 } // namespace |
| 70 | 71 |
| 71 ManagePasswordsBubbleModel::ManagePasswordsBubbleModel( | 72 ManagePasswordsBubbleModel::ManagePasswordsBubbleModel( |
| 72 content::WebContents* web_contents, | 73 content::WebContents* web_contents, |
| 73 DisplayReason display_reason) | 74 DisplayReason display_reason) |
| 74 : content::WebContentsObserver(web_contents), | 75 : content::WebContentsObserver(web_contents), |
| 75 display_disposition_(metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING), | 76 display_disposition_(metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING), |
| 76 dismissal_reason_(metrics_util::NO_DIRECT_INTERACTION), | 77 dismissal_reason_(metrics_util::NO_DIRECT_INTERACTION), |
| 77 update_password_submission_event_(metrics_util::NO_UPDATE_SUBMISSION) { | 78 update_password_submission_event_(metrics_util::NO_UPDATE_SUBMISSION) { |
| 78 ManagePasswordsUIController* controller = | 79 PasswordsModelDelegate* delegate = |
| 79 ManagePasswordsUIController::FromWebContents(web_contents); | 80 PasswordsModelDelegateFromWebContents(web_contents); |
| 80 | 81 |
| 81 origin_ = controller->origin(); | 82 origin_ = delegate->GetOrigin(); |
| 82 state_ = controller->state(); | 83 state_ = delegate->GetState(); |
| 83 password_overridden_ = controller->PasswordOverridden(); | 84 password_overridden_ = delegate->IsPasswordOverridden(); |
| 84 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE || | 85 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE || |
| 85 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { | 86 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { |
| 86 pending_password_ = controller->PendingPassword(); | 87 pending_password_ = delegate->GetPendingPassword(); |
| 87 local_credentials_ = DeepCopyForms(controller->GetCurrentForms()); | 88 local_credentials_ = DeepCopyForms(delegate->GetCurrentForms()); |
| 88 } else if (state_ == password_manager::ui::CONFIRMATION_STATE) { | 89 } else if (state_ == password_manager::ui::CONFIRMATION_STATE) { |
| 89 // We don't need anything. | 90 // We don't need anything. |
| 90 } else if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE) { | 91 } else if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE) { |
| 91 local_credentials_ = DeepCopyForms(controller->GetCurrentForms()); | 92 local_credentials_ = DeepCopyForms(delegate->GetCurrentForms()); |
| 92 federated_credentials_ = DeepCopyForms(controller->GetFederatedForms()); | 93 federated_credentials_ = DeepCopyForms(delegate->GetFederatedForms()); |
| 93 } else if (state_ == password_manager::ui::AUTO_SIGNIN_STATE) { | 94 } else if (state_ == password_manager::ui::AUTO_SIGNIN_STATE) { |
| 94 pending_password_ = controller->PendingPassword(); | 95 pending_password_ = delegate->GetPendingPassword(); |
| 95 } else { | 96 } else { |
| 96 local_credentials_ = DeepCopyForms(controller->GetCurrentForms()); | 97 local_credentials_ = DeepCopyForms(delegate->GetCurrentForms()); |
| 97 } | 98 } |
| 98 | 99 |
| 99 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE || | 100 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE || |
| 100 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { | 101 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { |
| 101 UpdatePendingStateTitle(); | 102 UpdatePendingStateTitle(); |
| 102 } else if (state_ == password_manager::ui::CONFIRMATION_STATE) { | 103 } else if (state_ == password_manager::ui::CONFIRMATION_STATE) { |
| 103 title_ = | 104 title_ = |
| 104 l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_CONFIRM_GENERATED_TITLE); | 105 l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_CONFIRM_GENERATED_TITLE); |
| 105 } else if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE) { | 106 } else if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE) { |
| 106 GetAccountChooserDialogTitleTextAndLinkRange( | 107 GetAccountChooserDialogTitleTextAndLinkRange( |
| (...skipping 30 matching lines...) Expand all Loading... |
| 137 GetAutoSigninPromptFirstRunExperienceExplanation( | 138 GetAutoSigninPromptFirstRunExperienceExplanation( |
| 138 GetSmartLockBrandingState(GetProfile()) == | 139 GetSmartLockBrandingState(GetProfile()) == |
| 139 password_bubble_experiment::SmartLockBranding::FULL, | 140 password_bubble_experiment::SmartLockBranding::FULL, |
| 140 &autosignin_welcome_text_, | 141 &autosignin_welcome_text_, |
| 141 &autosignin_welcome_link_range_); | 142 &autosignin_welcome_link_range_); |
| 142 } else if (state_ == password_manager::ui::PENDING_PASSWORD_STATE) { | 143 } else if (state_ == password_manager::ui::PENDING_PASSWORD_STATE) { |
| 143 interaction_stats_.origin_domain = origin_.GetOrigin(); | 144 interaction_stats_.origin_domain = origin_.GetOrigin(); |
| 144 interaction_stats_.username_value = pending_password_.username_value; | 145 interaction_stats_.username_value = pending_password_.username_value; |
| 145 interaction_stats_.update_time = base::Time::Now(); | 146 interaction_stats_.update_time = base::Time::Now(); |
| 146 password_manager::InteractionsStats* stats = | 147 password_manager::InteractionsStats* stats = |
| 147 controller->GetCurrentInteractionStats(); | 148 delegate->GetCurrentInteractionStats(); |
| 148 if (stats) { | 149 if (stats) { |
| 149 // TODO(vasilii): DCHECK that username and origin are the same. | 150 // TODO(vasilii): DCHECK that username and origin are the same. |
| 150 interaction_stats_.dismissal_count = stats->dismissal_count; | 151 interaction_stats_.dismissal_count = stats->dismissal_count; |
| 151 } | 152 } |
| 152 } | 153 } |
| 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 if (display_reason == USER_ACTION) { | 158 if (display_reason == USER_ACTION) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 display_disposition_ = metrics_util::AUTOMATIC_SIGNIN_TOAST; | 194 display_disposition_ = metrics_util::AUTOMATIC_SIGNIN_TOAST; |
| 194 break; | 195 break; |
| 195 case password_manager::ui::MANAGE_STATE: | 196 case password_manager::ui::MANAGE_STATE: |
| 196 case password_manager::ui::INACTIVE_STATE: | 197 case password_manager::ui::INACTIVE_STATE: |
| 197 NOTREACHED(); | 198 NOTREACHED(); |
| 198 break; | 199 break; |
| 199 } | 200 } |
| 200 } | 201 } |
| 201 metrics_util::LogUIDisplayDisposition(display_disposition_); | 202 metrics_util::LogUIDisplayDisposition(display_disposition_); |
| 202 | 203 |
| 203 controller->OnBubbleShown(); | 204 delegate->OnBubbleShown(); |
| 204 } | 205 } |
| 205 | 206 |
| 206 ManagePasswordsBubbleModel::~ManagePasswordsBubbleModel() { | 207 ManagePasswordsBubbleModel::~ManagePasswordsBubbleModel() { |
| 207 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE) { | 208 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE) { |
| 208 Profile* profile = GetProfile(); | 209 Profile* profile = GetProfile(); |
| 209 if (profile) { | 210 if (profile) { |
| 210 if (GetSmartLockBrandingState(profile) == | 211 if (GetSmartLockBrandingState(profile) == |
| 211 password_bubble_experiment::SmartLockBranding::FULL) { | 212 password_bubble_experiment::SmartLockBranding::FULL) { |
| 212 password_bubble_experiment::RecordSavePromptFirstRunExperienceWasShown( | 213 password_bubble_experiment::RecordSavePromptFirstRunExperienceWasShown( |
| 213 profile->GetPrefs()); | 214 profile->GetPrefs()); |
| 214 } | 215 } |
| 215 if (dismissal_reason_ == metrics_util::NO_DIRECT_INTERACTION && | 216 if (dismissal_reason_ == metrics_util::NO_DIRECT_INTERACTION && |
| 216 display_disposition_ == | 217 display_disposition_ == |
| 217 metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING) { | 218 metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING) { |
| 218 if (interaction_stats_.dismissal_count < | 219 if (interaction_stats_.dismissal_count < |
| 219 std::numeric_limits<decltype( | 220 std::numeric_limits<decltype( |
| 220 interaction_stats_.dismissal_count)>::max()) | 221 interaction_stats_.dismissal_count)>::max()) |
| 221 interaction_stats_.dismissal_count++; | 222 interaction_stats_.dismissal_count++; |
| 222 password_manager::PasswordStore* password_store = | 223 password_manager::PasswordStore* password_store = |
| 223 PasswordStoreFactory::GetForProfile( | 224 PasswordStoreFactory::GetForProfile( |
| 224 profile, ServiceAccessType::EXPLICIT_ACCESS) | 225 profile, ServiceAccessType::EXPLICIT_ACCESS) |
| 225 .get(); | 226 .get(); |
| 226 password_store->AddSiteStats(interaction_stats_); | 227 password_store->AddSiteStats(interaction_stats_); |
| 227 } | 228 } |
| 228 } | 229 } |
| 229 } | 230 } |
| 230 ManagePasswordsUIController* manage_passwords_ui_controller = | 231 PasswordsModelDelegate* delegate = |
| 231 web_contents() ? | 232 web_contents() ? PasswordsModelDelegateFromWebContents(web_contents()) |
| 232 ManagePasswordsUIController::FromWebContents(web_contents()) | 233 : nullptr; |
| 233 : nullptr; | 234 if (delegate) |
| 234 if (manage_passwords_ui_controller) | 235 delegate->OnBubbleHidden(); |
| 235 manage_passwords_ui_controller->OnBubbleHidden(); | |
| 236 if (dismissal_reason_ == metrics_util::NOT_DISPLAYED) | 236 if (dismissal_reason_ == metrics_util::NOT_DISPLAYED) |
| 237 return; | 237 return; |
| 238 | 238 |
| 239 if (state_ != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { | 239 if (state_ != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { |
| 240 // We have separate metrics for the Update bubble so do not record dismissal | 240 // We have separate metrics for the Update bubble so do not record dismissal |
| 241 // reason for it. | 241 // reason for it. |
| 242 metrics_util::LogUIDismissalReason(dismissal_reason_); | 242 metrics_util::LogUIDismissalReason(dismissal_reason_); |
| 243 } | 243 } |
| 244 // Check if this was update password and record update statistics. | 244 // Check if this was update password and record update statistics. |
| 245 if (update_password_submission_event_ == metrics_util::NO_UPDATE_SUBMISSION && | 245 if (update_password_submission_event_ == metrics_util::NO_UPDATE_SUBMISSION && |
| 246 (state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE || | 246 (state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE || |
| 247 state_ == password_manager::ui::PENDING_PASSWORD_STATE)) { | 247 state_ == password_manager::ui::PENDING_PASSWORD_STATE)) { |
| 248 update_password_submission_event_ = | 248 update_password_submission_event_ = |
| 249 GetUpdateDismissalReason(NO_INTERACTION); | 249 GetUpdateDismissalReason(NO_INTERACTION); |
| 250 if (state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE && | 250 if (state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE && |
| 251 manage_passwords_ui_controller) | 251 delegate) |
| 252 manage_passwords_ui_controller->OnNoInteractionOnUpdate(); | 252 delegate->OnNoInteractionOnUpdate(); |
| 253 } | 253 } |
| 254 if (update_password_submission_event_ != metrics_util::NO_UPDATE_SUBMISSION) | 254 if (update_password_submission_event_ != metrics_util::NO_UPDATE_SUBMISSION) |
| 255 LogUpdatePasswordSubmissionEvent(update_password_submission_event_); | 255 LogUpdatePasswordSubmissionEvent(update_password_submission_event_); |
| 256 } | 256 } |
| 257 | 257 |
| 258 void ManagePasswordsBubbleModel::OnCancelClicked() { | 258 void ManagePasswordsBubbleModel::OnCancelClicked() { |
| 259 DCHECK_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, state_); | 259 DCHECK_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, state_); |
| 260 dismissal_reason_ = metrics_util::CLICKED_CANCEL; | 260 dismissal_reason_ = metrics_util::CLICKED_CANCEL; |
| 261 } | 261 } |
| 262 | 262 |
| 263 void ManagePasswordsBubbleModel::OnNeverForThisSiteClicked() { | 263 void ManagePasswordsBubbleModel::OnNeverForThisSiteClicked() { |
| 264 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, state_); | 264 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, state_); |
| 265 dismissal_reason_ = metrics_util::CLICKED_NEVER; | 265 dismissal_reason_ = metrics_util::CLICKED_NEVER; |
| 266 update_password_submission_event_ = GetUpdateDismissalReason(NOPE_CLICKED); | 266 update_password_submission_event_ = GetUpdateDismissalReason(NOPE_CLICKED); |
| 267 CleanStatisticsForSite(web_contents(), origin_); | 267 CleanStatisticsForSite(web_contents(), origin_); |
| 268 ManagePasswordsUIController* manage_passwords_ui_controller = | 268 PasswordsModelDelegateFromWebContents(web_contents())->NeverSavePassword(); |
| 269 ManagePasswordsUIController::FromWebContents(web_contents()); | |
| 270 manage_passwords_ui_controller->NeverSavePassword(); | |
| 271 } | 269 } |
| 272 | 270 |
| 273 void ManagePasswordsBubbleModel::OnSaveClicked() { | 271 void ManagePasswordsBubbleModel::OnSaveClicked() { |
| 274 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, state_); | 272 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, state_); |
| 275 dismissal_reason_ = metrics_util::CLICKED_SAVE; | 273 dismissal_reason_ = metrics_util::CLICKED_SAVE; |
| 276 update_password_submission_event_ = GetUpdateDismissalReason(UPDATE_CLICKED); | 274 update_password_submission_event_ = GetUpdateDismissalReason(UPDATE_CLICKED); |
| 277 CleanStatisticsForSite(web_contents(), origin_); | 275 CleanStatisticsForSite(web_contents(), origin_); |
| 278 ManagePasswordsUIController* manage_passwords_ui_controller = | 276 PasswordsModelDelegateFromWebContents(web_contents())->SavePassword(); |
| 279 ManagePasswordsUIController::FromWebContents(web_contents()); | |
| 280 manage_passwords_ui_controller->SavePassword(); | |
| 281 } | 277 } |
| 282 | 278 |
| 283 void ManagePasswordsBubbleModel::OnNopeUpdateClicked() { | 279 void ManagePasswordsBubbleModel::OnNopeUpdateClicked() { |
| 284 update_password_submission_event_ = GetUpdateDismissalReason(NOPE_CLICKED); | 280 update_password_submission_event_ = GetUpdateDismissalReason(NOPE_CLICKED); |
| 285 ManagePasswordsUIController* manage_passwords_ui_controller = | 281 PasswordsModelDelegateFromWebContents(web_contents())->OnNopeUpdateClicked(); |
| 286 ManagePasswordsUIController::FromWebContents(web_contents()); | |
| 287 manage_passwords_ui_controller->OnNopeUpdateClicked(); | |
| 288 } | 282 } |
| 289 | 283 |
| 290 void ManagePasswordsBubbleModel::OnUpdateClicked( | 284 void ManagePasswordsBubbleModel::OnUpdateClicked( |
| 291 const autofill::PasswordForm& password_form) { | 285 const autofill::PasswordForm& password_form) { |
| 292 update_password_submission_event_ = GetUpdateDismissalReason(UPDATE_CLICKED); | 286 update_password_submission_event_ = GetUpdateDismissalReason(UPDATE_CLICKED); |
| 293 ManagePasswordsUIController* manage_passwords_ui_controller = | 287 PasswordsModelDelegateFromWebContents(web_contents())->UpdatePassword( |
| 294 ManagePasswordsUIController::FromWebContents(web_contents()); | 288 password_form); |
| 295 manage_passwords_ui_controller->UpdatePassword(password_form); | |
| 296 } | 289 } |
| 297 | 290 |
| 298 void ManagePasswordsBubbleModel::OnDoneClicked() { | 291 void ManagePasswordsBubbleModel::OnDoneClicked() { |
| 299 dismissal_reason_ = metrics_util::CLICKED_DONE; | 292 dismissal_reason_ = metrics_util::CLICKED_DONE; |
| 300 } | 293 } |
| 301 | 294 |
| 302 // TODO(gcasto): Is it worth having this be separate from OnDoneClicked()? | 295 // TODO(gcasto): Is it worth having this be separate from OnDoneClicked()? |
| 303 // User intent is pretty similar in both cases. | 296 // User intent is pretty similar in both cases. |
| 304 void ManagePasswordsBubbleModel::OnOKClicked() { | 297 void ManagePasswordsBubbleModel::OnOKClicked() { |
| 305 dismissal_reason_ = metrics_util::CLICKED_OK; | 298 dismissal_reason_ = metrics_util::CLICKED_OK; |
| 306 } | 299 } |
| 307 | 300 |
| 308 void ManagePasswordsBubbleModel::OnManageLinkClicked() { | 301 void ManagePasswordsBubbleModel::OnManageLinkClicked() { |
| 309 dismissal_reason_ = metrics_util::CLICKED_MANAGE; | 302 dismissal_reason_ = metrics_util::CLICKED_MANAGE; |
| 310 if (GetSmartLockBrandingState(GetProfile()) == | 303 if (GetSmartLockBrandingState(GetProfile()) == |
| 311 password_bubble_experiment::SmartLockBranding::FULL) { | 304 password_bubble_experiment::SmartLockBranding::FULL) { |
| 312 ManagePasswordsUIController::FromWebContents(web_contents()) | 305 PasswordsModelDelegateFromWebContents(web_contents()) |
| 313 ->NavigateToExternalPasswordManager(); | 306 ->NavigateToExternalPasswordManager(); |
| 314 } else { | 307 } else { |
| 315 ManagePasswordsUIController::FromWebContents(web_contents()) | 308 PasswordsModelDelegateFromWebContents(web_contents()) |
| 316 ->NavigateToPasswordManagerSettingsPage(); | 309 ->NavigateToPasswordManagerSettingsPage(); |
| 317 } | 310 } |
| 318 } | 311 } |
| 319 | 312 |
| 320 void ManagePasswordsBubbleModel::OnBrandLinkClicked() { | 313 void ManagePasswordsBubbleModel::OnBrandLinkClicked() { |
| 321 dismissal_reason_ = metrics_util::CLICKED_BRAND_NAME; | 314 dismissal_reason_ = metrics_util::CLICKED_BRAND_NAME; |
| 322 switch (GetSmartLockBrandingState(GetProfile())) { | 315 switch (GetSmartLockBrandingState(GetProfile())) { |
| 323 case password_bubble_experiment::SmartLockBranding::FULL: | 316 case password_bubble_experiment::SmartLockBranding::FULL: |
| 324 ManagePasswordsUIController::FromWebContents(web_contents()) | 317 PasswordsModelDelegateFromWebContents(web_contents()) |
| 325 ->NavigateToSmartLockPage(); | 318 ->NavigateToSmartLockPage(); |
| 326 break; | 319 break; |
| 327 case password_bubble_experiment::SmartLockBranding::SAVE_BUBBLE_ONLY: | 320 case password_bubble_experiment::SmartLockBranding::SAVE_BUBBLE_ONLY: |
| 328 ManagePasswordsUIController::FromWebContents(web_contents()) | 321 PasswordsModelDelegateFromWebContents(web_contents()) |
| 329 ->NavigateToSmartLockHelpPage(); | 322 ->NavigateToSmartLockHelpPage(); |
| 330 break; | 323 break; |
| 331 case password_bubble_experiment::SmartLockBranding::NONE: | 324 case password_bubble_experiment::SmartLockBranding::NONE: |
| 332 NOTREACHED(); | 325 NOTREACHED(); |
| 333 break; | 326 break; |
| 334 } | 327 } |
| 335 } | 328 } |
| 336 | 329 |
| 337 void ManagePasswordsBubbleModel::OnAutoSignInToastTimeout() { | 330 void ManagePasswordsBubbleModel::OnAutoSignInToastTimeout() { |
| 338 DCHECK_EQ(password_manager::ui::AUTO_SIGNIN_STATE, state_); | 331 DCHECK_EQ(password_manager::ui::AUTO_SIGNIN_STATE, state_); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 362 if (action == REMOVE_PASSWORD) | 355 if (action == REMOVE_PASSWORD) |
| 363 password_store->RemoveLogin(password_form); | 356 password_store->RemoveLogin(password_form); |
| 364 else | 357 else |
| 365 password_store->AddLogin(password_form); | 358 password_store->AddLogin(password_form); |
| 366 } | 359 } |
| 367 | 360 |
| 368 void ManagePasswordsBubbleModel::OnChooseCredentials( | 361 void ManagePasswordsBubbleModel::OnChooseCredentials( |
| 369 const autofill::PasswordForm& password_form, | 362 const autofill::PasswordForm& password_form, |
| 370 password_manager::CredentialType credential_type) { | 363 password_manager::CredentialType credential_type) { |
| 371 dismissal_reason_ = metrics_util::CLICKED_CREDENTIAL; | 364 dismissal_reason_ = metrics_util::CLICKED_CREDENTIAL; |
| 372 ManagePasswordsUIController* manage_passwords_ui_controller = | 365 PasswordsModelDelegateFromWebContents(web_contents())->ChooseCredential( |
| 373 ManagePasswordsUIController::FromWebContents(web_contents()); | 366 password_form, credential_type); |
| 374 manage_passwords_ui_controller->ChooseCredential(password_form, | |
| 375 credential_type); | |
| 376 } | 367 } |
| 377 | 368 |
| 378 Profile* ManagePasswordsBubbleModel::GetProfile() const { | 369 Profile* ManagePasswordsBubbleModel::GetProfile() const { |
| 379 return GetProfileFromWebContents(web_contents()); | 370 return GetProfileFromWebContents(web_contents()); |
| 380 } | 371 } |
| 381 | 372 |
| 382 bool ManagePasswordsBubbleModel::ShouldShowMultipleAccountUpdateUI() const { | 373 bool ManagePasswordsBubbleModel::ShouldShowMultipleAccountUpdateUI() const { |
| 383 return state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE && | 374 return state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE && |
| 384 local_credentials_.size() > 1 && !password_overridden_; | 375 local_credentials_.size() > 1 && !password_overridden_; |
| 385 } | 376 } |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 return metrics_util::NO_UPDATE_SUBMISSION; | 427 return metrics_util::NO_UPDATE_SUBMISSION; |
| 437 } | 428 } |
| 438 if (state_ != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) | 429 if (state_ != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) |
| 439 return metrics_util::NO_UPDATE_SUBMISSION; | 430 return metrics_util::NO_UPDATE_SUBMISSION; |
| 440 if (password_overridden_) | 431 if (password_overridden_) |
| 441 return update_events[3][behavior]; | 432 return update_events[3][behavior]; |
| 442 if (ShouldShowMultipleAccountUpdateUI()) | 433 if (ShouldShowMultipleAccountUpdateUI()) |
| 443 return update_events[2][behavior]; | 434 return update_events[2][behavior]; |
| 444 return update_events[1][behavior]; | 435 return update_events[1][behavior]; |
| 445 } | 436 } |
| OLD | NEW |