| 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 24 matching lines...) Expand all Loading... |
| 61 | 62 |
| 62 } // namespace | 63 } // namespace |
| 63 | 64 |
| 64 ManagePasswordsBubbleModel::ManagePasswordsBubbleModel( | 65 ManagePasswordsBubbleModel::ManagePasswordsBubbleModel( |
| 65 content::WebContents* web_contents, | 66 content::WebContents* web_contents, |
| 66 DisplayReason display_reason) | 67 DisplayReason display_reason) |
| 67 : content::WebContentsObserver(web_contents), | 68 : content::WebContentsObserver(web_contents), |
| 68 display_disposition_(metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING), | 69 display_disposition_(metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING), |
| 69 dismissal_reason_(metrics_util::NO_DIRECT_INTERACTION), | 70 dismissal_reason_(metrics_util::NO_DIRECT_INTERACTION), |
| 70 update_password_submission_event_(metrics_util::NO_UPDATE_SUBMISSION) { | 71 update_password_submission_event_(metrics_util::NO_UPDATE_SUBMISSION) { |
| 71 ManagePasswordsUIController* controller = | 72 PasswordsModelDelegate* delegate = |
| 72 ManagePasswordsUIController::FromWebContents(web_contents); | 73 PasswordsModelDelegateFromWebContents(web_contents); |
| 73 | 74 |
| 74 origin_ = controller->origin(); | 75 origin_ = delegate->GetOrigin(); |
| 75 state_ = controller->state(); | 76 state_ = delegate->GetState(); |
| 76 password_overridden_ = controller->PasswordOverridden(); | 77 password_overridden_ = delegate->IsPasswordOverridden(); |
| 77 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE || | 78 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE || |
| 78 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { | 79 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { |
| 79 pending_password_ = controller->PendingPassword(); | 80 pending_password_ = delegate->GetPendingPassword(); |
| 80 local_credentials_ = DeepCopyForms(controller->GetCurrentForms()); | 81 local_credentials_ = DeepCopyForms(delegate->GetCurrentForms()); |
| 81 } else if (state_ == password_manager::ui::CONFIRMATION_STATE) { | 82 } else if (state_ == password_manager::ui::CONFIRMATION_STATE) { |
| 82 // We don't need anything. | 83 // We don't need anything. |
| 83 } else if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE) { | 84 } else if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE) { |
| 84 local_credentials_ = DeepCopyForms(controller->GetCurrentForms()); | 85 local_credentials_ = DeepCopyForms(delegate->GetCurrentForms()); |
| 85 federated_credentials_ = DeepCopyForms(controller->GetFederatedForms()); | 86 federated_credentials_ = DeepCopyForms(delegate->GetFederatedForms()); |
| 86 } else if (state_ == password_manager::ui::AUTO_SIGNIN_STATE) { | 87 } else if (state_ == password_manager::ui::AUTO_SIGNIN_STATE) { |
| 87 pending_password_ = controller->PendingPassword(); | 88 pending_password_ = delegate->GetPendingPassword(); |
| 88 } else { | 89 } else { |
| 89 local_credentials_ = DeepCopyForms(controller->GetCurrentForms()); | 90 local_credentials_ = DeepCopyForms(delegate->GetCurrentForms()); |
| 90 } | 91 } |
| 91 | 92 |
| 92 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE || | 93 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE || |
| 93 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { | 94 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { |
| 94 UpdatePendingStateTitle(); | 95 UpdatePendingStateTitle(); |
| 95 } else if (state_ == password_manager::ui::CONFIRMATION_STATE) { | 96 } else if (state_ == password_manager::ui::CONFIRMATION_STATE) { |
| 96 title_ = | 97 title_ = |
| 97 l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_CONFIRM_GENERATED_TITLE); | 98 l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_CONFIRM_GENERATED_TITLE); |
| 98 } else if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE) { | 99 } else if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE) { |
| 99 GetAccountChooserDialogTitleTextAndLinkRange( | 100 GetAccountChooserDialogTitleTextAndLinkRange( |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 break; | 171 break; |
| 171 case password_manager::ui::AUTO_SIGNIN_STATE: | 172 case password_manager::ui::AUTO_SIGNIN_STATE: |
| 172 display_disposition_ = metrics_util::AUTOMATIC_SIGNIN_TOAST; | 173 display_disposition_ = metrics_util::AUTOMATIC_SIGNIN_TOAST; |
| 173 break; | 174 break; |
| 174 default: | 175 default: |
| 175 break; | 176 break; |
| 176 } | 177 } |
| 177 } | 178 } |
| 178 metrics_util::LogUIDisplayDisposition(display_disposition_); | 179 metrics_util::LogUIDisplayDisposition(display_disposition_); |
| 179 | 180 |
| 180 controller->OnBubbleShown(); | 181 delegate->OnBubbleShown(); |
| 181 } | 182 } |
| 182 | 183 |
| 183 ManagePasswordsBubbleModel::~ManagePasswordsBubbleModel() { | 184 ManagePasswordsBubbleModel::~ManagePasswordsBubbleModel() { |
| 184 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE) { | 185 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE) { |
| 185 Profile* profile = GetProfile(); | 186 Profile* profile = GetProfile(); |
| 186 if (profile && (GetSmartLockBrandingState(profile) == | 187 if (profile && (GetSmartLockBrandingState(profile) == |
| 187 password_bubble_experiment::SmartLockBranding::FULL)) { | 188 password_bubble_experiment::SmartLockBranding::FULL)) { |
| 188 password_bubble_experiment::RecordSavePromptFirstRunExperienceWasShown( | 189 password_bubble_experiment::RecordSavePromptFirstRunExperienceWasShown( |
| 189 profile->GetPrefs()); | 190 profile->GetPrefs()); |
| 190 } | 191 } |
| 191 } | 192 } |
| 192 ManagePasswordsUIController* manage_passwords_ui_controller = | 193 PasswordsModelDelegate* delegate = |
| 193 web_contents() ? | 194 web_contents() ? PasswordsModelDelegateFromWebContents(web_contents()) |
| 194 ManagePasswordsUIController::FromWebContents(web_contents()) | 195 : nullptr; |
| 195 : nullptr; | 196 if (delegate) |
| 196 if (manage_passwords_ui_controller) | 197 delegate->OnBubbleHidden(); |
| 197 manage_passwords_ui_controller->OnBubbleHidden(); | |
| 198 if (dismissal_reason_ == metrics_util::NOT_DISPLAYED) | 198 if (dismissal_reason_ == metrics_util::NOT_DISPLAYED) |
| 199 return; | 199 return; |
| 200 | 200 |
| 201 if (state_ != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { | 201 if (state_ != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { |
| 202 // We have separate metrics for the Update bubble so do not record dismissal | 202 // We have separate metrics for the Update bubble so do not record dismissal |
| 203 // reason for it. | 203 // reason for it. |
| 204 metrics_util::LogUIDismissalReason(dismissal_reason_); | 204 metrics_util::LogUIDismissalReason(dismissal_reason_); |
| 205 } | 205 } |
| 206 // Other use cases have been reported in the callbacks like OnSaveClicked(). | 206 // Other use cases have been reported in the callbacks like OnSaveClicked(). |
| 207 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE && | 207 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE && |
| 208 dismissal_reason_ == metrics_util::NO_DIRECT_INTERACTION) | 208 dismissal_reason_ == metrics_util::NO_DIRECT_INTERACTION) |
| 209 RecordExperimentStatistics(web_contents(), dismissal_reason_); | 209 RecordExperimentStatistics(web_contents(), dismissal_reason_); |
| 210 // Check if this was update password and record update statistics. | 210 // Check if this was update password and record update statistics. |
| 211 if (update_password_submission_event_ == metrics_util::NO_UPDATE_SUBMISSION && | 211 if (update_password_submission_event_ == metrics_util::NO_UPDATE_SUBMISSION && |
| 212 (state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE || | 212 (state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE || |
| 213 state_ == password_manager::ui::PENDING_PASSWORD_STATE)) { | 213 state_ == password_manager::ui::PENDING_PASSWORD_STATE)) { |
| 214 update_password_submission_event_ = | 214 update_password_submission_event_ = |
| 215 GetUpdateDismissalReason(NO_INTERACTION); | 215 GetUpdateDismissalReason(NO_INTERACTION); |
| 216 if (state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE && | 216 if (state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE && |
| 217 manage_passwords_ui_controller) | 217 delegate) |
| 218 manage_passwords_ui_controller->OnNoInteractionOnUpdate(); | 218 delegate->OnNoInteractionOnUpdate(); |
| 219 } | 219 } |
| 220 if (update_password_submission_event_ != metrics_util::NO_UPDATE_SUBMISSION) | 220 if (update_password_submission_event_ != metrics_util::NO_UPDATE_SUBMISSION) |
| 221 LogUpdatePasswordSubmissionEvent(update_password_submission_event_); | 221 LogUpdatePasswordSubmissionEvent(update_password_submission_event_); |
| 222 } | 222 } |
| 223 | 223 |
| 224 void ManagePasswordsBubbleModel::OnCancelClicked() { | 224 void ManagePasswordsBubbleModel::OnCancelClicked() { |
| 225 DCHECK_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, state_); | 225 DCHECK_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, state_); |
| 226 dismissal_reason_ = metrics_util::CLICKED_CANCEL; | 226 dismissal_reason_ = metrics_util::CLICKED_CANCEL; |
| 227 } | 227 } |
| 228 | 228 |
| 229 void ManagePasswordsBubbleModel::OnNeverForThisSiteClicked() { | 229 void ManagePasswordsBubbleModel::OnNeverForThisSiteClicked() { |
| 230 dismissal_reason_ = metrics_util::CLICKED_NEVER; | 230 dismissal_reason_ = metrics_util::CLICKED_NEVER; |
| 231 update_password_submission_event_ = GetUpdateDismissalReason(NOPE_CLICKED); | 231 update_password_submission_event_ = GetUpdateDismissalReason(NOPE_CLICKED); |
| 232 RecordExperimentStatistics(web_contents(), dismissal_reason_); | 232 RecordExperimentStatistics(web_contents(), dismissal_reason_); |
| 233 ManagePasswordsUIController* manage_passwords_ui_controller = | 233 PasswordsModelDelegateFromWebContents(web_contents())->NeverSavePassword(); |
| 234 ManagePasswordsUIController::FromWebContents(web_contents()); | |
| 235 manage_passwords_ui_controller->NeverSavePassword(); | |
| 236 } | 234 } |
| 237 | 235 |
| 238 void ManagePasswordsBubbleModel::OnSaveClicked() { | 236 void ManagePasswordsBubbleModel::OnSaveClicked() { |
| 239 dismissal_reason_ = metrics_util::CLICKED_SAVE; | 237 dismissal_reason_ = metrics_util::CLICKED_SAVE; |
| 240 RecordExperimentStatistics(web_contents(), dismissal_reason_); | 238 RecordExperimentStatistics(web_contents(), dismissal_reason_); |
| 241 update_password_submission_event_ = GetUpdateDismissalReason(UPDATE_CLICKED); | 239 update_password_submission_event_ = GetUpdateDismissalReason(UPDATE_CLICKED); |
| 242 ManagePasswordsUIController* manage_passwords_ui_controller = | 240 PasswordsModelDelegateFromWebContents(web_contents())->SavePassword(); |
| 243 ManagePasswordsUIController::FromWebContents(web_contents()); | |
| 244 manage_passwords_ui_controller->SavePassword(); | |
| 245 } | 241 } |
| 246 | 242 |
| 247 void ManagePasswordsBubbleModel::OnNopeUpdateClicked() { | 243 void ManagePasswordsBubbleModel::OnNopeUpdateClicked() { |
| 248 update_password_submission_event_ = GetUpdateDismissalReason(NOPE_CLICKED); | 244 update_password_submission_event_ = GetUpdateDismissalReason(NOPE_CLICKED); |
| 249 ManagePasswordsUIController* manage_passwords_ui_controller = | 245 PasswordsModelDelegateFromWebContents(web_contents())->OnNopeUpdateClicked(); |
| 250 ManagePasswordsUIController::FromWebContents(web_contents()); | |
| 251 manage_passwords_ui_controller->OnNopeUpdateClicked(); | |
| 252 } | 246 } |
| 253 | 247 |
| 254 void ManagePasswordsBubbleModel::OnUpdateClicked( | 248 void ManagePasswordsBubbleModel::OnUpdateClicked( |
| 255 const autofill::PasswordForm& password_form) { | 249 const autofill::PasswordForm& password_form) { |
| 256 update_password_submission_event_ = GetUpdateDismissalReason(UPDATE_CLICKED); | 250 update_password_submission_event_ = GetUpdateDismissalReason(UPDATE_CLICKED); |
| 257 ManagePasswordsUIController* manage_passwords_ui_controller = | 251 PasswordsModelDelegateFromWebContents(web_contents())->UpdatePassword( |
| 258 ManagePasswordsUIController::FromWebContents(web_contents()); | 252 password_form); |
| 259 manage_passwords_ui_controller->UpdatePassword(password_form); | |
| 260 } | 253 } |
| 261 | 254 |
| 262 void ManagePasswordsBubbleModel::OnDoneClicked() { | 255 void ManagePasswordsBubbleModel::OnDoneClicked() { |
| 263 dismissal_reason_ = metrics_util::CLICKED_DONE; | 256 dismissal_reason_ = metrics_util::CLICKED_DONE; |
| 264 } | 257 } |
| 265 | 258 |
| 266 // TODO(gcasto): Is it worth having this be separate from OnDoneClicked()? | 259 // TODO(gcasto): Is it worth having this be separate from OnDoneClicked()? |
| 267 // User intent is pretty similar in both cases. | 260 // User intent is pretty similar in both cases. |
| 268 void ManagePasswordsBubbleModel::OnOKClicked() { | 261 void ManagePasswordsBubbleModel::OnOKClicked() { |
| 269 dismissal_reason_ = metrics_util::CLICKED_OK; | 262 dismissal_reason_ = metrics_util::CLICKED_OK; |
| 270 } | 263 } |
| 271 | 264 |
| 272 void ManagePasswordsBubbleModel::OnManageLinkClicked() { | 265 void ManagePasswordsBubbleModel::OnManageLinkClicked() { |
| 273 dismissal_reason_ = metrics_util::CLICKED_MANAGE; | 266 dismissal_reason_ = metrics_util::CLICKED_MANAGE; |
| 274 if (GetSmartLockBrandingState(GetProfile()) == | 267 if (GetSmartLockBrandingState(GetProfile()) == |
| 275 password_bubble_experiment::SmartLockBranding::FULL) { | 268 password_bubble_experiment::SmartLockBranding::FULL) { |
| 276 ManagePasswordsUIController::FromWebContents(web_contents()) | 269 PasswordsModelDelegateFromWebContents(web_contents()) |
| 277 ->NavigateToExternalPasswordManager(); | 270 ->NavigateToExternalPasswordManager(); |
| 278 } else { | 271 } else { |
| 279 ManagePasswordsUIController::FromWebContents(web_contents()) | 272 PasswordsModelDelegateFromWebContents(web_contents()) |
| 280 ->NavigateToPasswordManagerSettingsPage(); | 273 ->NavigateToPasswordManagerSettingsPage(); |
| 281 } | 274 } |
| 282 } | 275 } |
| 283 | 276 |
| 284 void ManagePasswordsBubbleModel::OnBrandLinkClicked() { | 277 void ManagePasswordsBubbleModel::OnBrandLinkClicked() { |
| 285 dismissal_reason_ = metrics_util::CLICKED_BRAND_NAME; | 278 dismissal_reason_ = metrics_util::CLICKED_BRAND_NAME; |
| 286 switch (GetSmartLockBrandingState(GetProfile())) { | 279 switch (GetSmartLockBrandingState(GetProfile())) { |
| 287 case password_bubble_experiment::SmartLockBranding::FULL: | 280 case password_bubble_experiment::SmartLockBranding::FULL: |
| 288 ManagePasswordsUIController::FromWebContents(web_contents()) | 281 PasswordsModelDelegateFromWebContents(web_contents()) |
| 289 ->NavigateToSmartLockPage(); | 282 ->NavigateToSmartLockPage(); |
| 290 break; | 283 break; |
| 291 case password_bubble_experiment::SmartLockBranding::SAVE_BUBBLE_ONLY: | 284 case password_bubble_experiment::SmartLockBranding::SAVE_BUBBLE_ONLY: |
| 292 ManagePasswordsUIController::FromWebContents(web_contents()) | 285 PasswordsModelDelegateFromWebContents(web_contents()) |
| 293 ->NavigateToSmartLockHelpPage(); | 286 ->NavigateToSmartLockHelpPage(); |
| 294 break; | 287 break; |
| 295 case password_bubble_experiment::SmartLockBranding::NONE: | 288 case password_bubble_experiment::SmartLockBranding::NONE: |
| 296 NOTREACHED(); | 289 NOTREACHED(); |
| 297 break; | 290 break; |
| 298 } | 291 } |
| 299 } | 292 } |
| 300 | 293 |
| 301 void ManagePasswordsBubbleModel::OnAutoSignInToastTimeout() { | 294 void ManagePasswordsBubbleModel::OnAutoSignInToastTimeout() { |
| 302 DCHECK_EQ(password_manager::ui::AUTO_SIGNIN_STATE, state_); | 295 DCHECK_EQ(password_manager::ui::AUTO_SIGNIN_STATE, state_); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 326 if (action == REMOVE_PASSWORD) | 319 if (action == REMOVE_PASSWORD) |
| 327 password_store->RemoveLogin(password_form); | 320 password_store->RemoveLogin(password_form); |
| 328 else | 321 else |
| 329 password_store->AddLogin(password_form); | 322 password_store->AddLogin(password_form); |
| 330 } | 323 } |
| 331 | 324 |
| 332 void ManagePasswordsBubbleModel::OnChooseCredentials( | 325 void ManagePasswordsBubbleModel::OnChooseCredentials( |
| 333 const autofill::PasswordForm& password_form, | 326 const autofill::PasswordForm& password_form, |
| 334 password_manager::CredentialType credential_type) { | 327 password_manager::CredentialType credential_type) { |
| 335 dismissal_reason_ = metrics_util::CLICKED_CREDENTIAL; | 328 dismissal_reason_ = metrics_util::CLICKED_CREDENTIAL; |
| 336 ManagePasswordsUIController* manage_passwords_ui_controller = | 329 PasswordsModelDelegateFromWebContents(web_contents())->ChooseCredential( |
| 337 ManagePasswordsUIController::FromWebContents(web_contents()); | 330 password_form, credential_type); |
| 338 manage_passwords_ui_controller->ChooseCredential(password_form, | |
| 339 credential_type); | |
| 340 } | 331 } |
| 341 | 332 |
| 342 Profile* ManagePasswordsBubbleModel::GetProfile() const { | 333 Profile* ManagePasswordsBubbleModel::GetProfile() const { |
| 343 return GetProfileFromWebContents(web_contents()); | 334 return GetProfileFromWebContents(web_contents()); |
| 344 } | 335 } |
| 345 | 336 |
| 346 bool ManagePasswordsBubbleModel::ShouldShowMultipleAccountUpdateUI() const { | 337 bool ManagePasswordsBubbleModel::ShouldShowMultipleAccountUpdateUI() const { |
| 347 return state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE && | 338 return state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE && |
| 348 local_credentials_.size() > 1 && !password_overridden_; | 339 local_credentials_.size() > 1 && !password_overridden_; |
| 349 } | 340 } |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 400 return metrics_util::NO_UPDATE_SUBMISSION; | 391 return metrics_util::NO_UPDATE_SUBMISSION; |
| 401 } | 392 } |
| 402 if (state_ != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) | 393 if (state_ != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) |
| 403 return metrics_util::NO_UPDATE_SUBMISSION; | 394 return metrics_util::NO_UPDATE_SUBMISSION; |
| 404 if (password_overridden_) | 395 if (password_overridden_) |
| 405 return update_events[3][behavior]; | 396 return update_events[3][behavior]; |
| 406 if (ShouldShowMultipleAccountUpdateUI()) | 397 if (ShouldShowMultipleAccountUpdateUI()) |
| 407 return update_events[2][behavior]; | 398 return update_events[2][behavior]; |
| 408 return update_events[1][behavior]; | 399 return update_events[1][behavior]; |
| 409 } | 400 } |
| OLD | NEW |