| 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> |
| 11 #include <string> | 11 #include <string> |
| 12 #include <vector> | 12 #include <vector> |
| 13 | 13 |
| 14 #include "base/metrics/histogram_macros.h" | 14 #include "base/metrics/histogram_macros.h" |
| 15 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
| 16 #include "base/time/default_clock.h" | 16 #include "base/time/default_clock.h" |
| 17 #include "chrome/browser/password_manager/password_store_factory.h" | 17 #include "chrome/browser/password_manager/password_store_factory.h" |
| 18 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
| 19 #include "chrome/browser/sync/profile_sync_service_factory.h" | 19 #include "chrome/browser/sync/profile_sync_service_factory.h" |
| 20 #include "chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_util.h" |
| 20 #include "chrome/browser/ui/passwords/manage_passwords_view_utils.h" | 21 #include "chrome/browser/ui/passwords/manage_passwords_view_utils.h" |
| 21 #include "chrome/browser/ui/passwords/passwords_model_delegate.h" | 22 #include "chrome/browser/ui/passwords/passwords_model_delegate.h" |
| 22 #include "chrome/grit/chromium_strings.h" | 23 #include "chrome/grit/chromium_strings.h" |
| 23 #include "chrome/grit/generated_resources.h" | 24 #include "chrome/grit/generated_resources.h" |
| 24 #include "components/browser_sync/profile_sync_service.h" | 25 #include "components/browser_sync/profile_sync_service.h" |
| 25 #include "components/password_manager/core/browser/password_bubble_experiment.h" | 26 #include "components/password_manager/core/browser/password_bubble_experiment.h" |
| 26 #include "components/password_manager/core/browser/password_manager_constants.h" | 27 #include "components/password_manager/core/browser/password_manager_constants.h" |
| 27 #include "components/password_manager/core/browser/password_store.h" | 28 #include "components/password_manager/core/browser/password_store.h" |
| 28 #include "components/password_manager/core/common/password_manager_pref_names.h" | 29 #include "components/password_manager/core/common/password_manager_pref_names.h" |
| 29 #include "components/password_manager/core/common/password_manager_ui.h" | 30 #include "components/password_manager/core/common/password_manager_ui.h" |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 275 display_disposition = | 276 display_disposition = |
| 276 metrics_util::MANUAL_WITH_PASSWORD_PENDING_UPDATE; | 277 metrics_util::MANUAL_WITH_PASSWORD_PENDING_UPDATE; |
| 277 break; | 278 break; |
| 278 case password_manager::ui::MANAGE_STATE: | 279 case password_manager::ui::MANAGE_STATE: |
| 279 display_disposition = metrics_util::MANUAL_MANAGE_PASSWORDS; | 280 display_disposition = metrics_util::MANUAL_MANAGE_PASSWORDS; |
| 280 break; | 281 break; |
| 281 case password_manager::ui::CONFIRMATION_STATE: | 282 case password_manager::ui::CONFIRMATION_STATE: |
| 282 case password_manager::ui::CREDENTIAL_REQUEST_STATE: | 283 case password_manager::ui::CREDENTIAL_REQUEST_STATE: |
| 283 case password_manager::ui::AUTO_SIGNIN_STATE: | 284 case password_manager::ui::AUTO_SIGNIN_STATE: |
| 284 case password_manager::ui::CHROME_SIGN_IN_PROMO_STATE: | 285 case password_manager::ui::CHROME_SIGN_IN_PROMO_STATE: |
| 286 case password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE: |
| 285 case password_manager::ui::INACTIVE_STATE: | 287 case password_manager::ui::INACTIVE_STATE: |
| 286 NOTREACHED(); | 288 NOTREACHED(); |
| 287 break; | 289 break; |
| 288 } | 290 } |
| 289 } else { | 291 } else { |
| 290 switch (state_) { | 292 switch (state_) { |
| 291 case password_manager::ui::PENDING_PASSWORD_STATE: | 293 case password_manager::ui::PENDING_PASSWORD_STATE: |
| 292 display_disposition = metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING; | 294 display_disposition = metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING; |
| 293 break; | 295 break; |
| 294 case password_manager::ui::PENDING_PASSWORD_UPDATE_STATE: | 296 case password_manager::ui::PENDING_PASSWORD_UPDATE_STATE: |
| 295 display_disposition = | 297 display_disposition = |
| 296 metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING_UPDATE; | 298 metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING_UPDATE; |
| 297 break; | 299 break; |
| 298 case password_manager::ui::CONFIRMATION_STATE: | 300 case password_manager::ui::CONFIRMATION_STATE: |
| 299 display_disposition = | 301 display_disposition = |
| 300 metrics_util::AUTOMATIC_GENERATED_PASSWORD_CONFIRMATION; | 302 metrics_util::AUTOMATIC_GENERATED_PASSWORD_CONFIRMATION; |
| 301 break; | 303 break; |
| 302 case password_manager::ui::AUTO_SIGNIN_STATE: | 304 case password_manager::ui::AUTO_SIGNIN_STATE: |
| 303 display_disposition = metrics_util::AUTOMATIC_SIGNIN_TOAST; | 305 display_disposition = metrics_util::AUTOMATIC_SIGNIN_TOAST; |
| 304 break; | 306 break; |
| 305 case password_manager::ui::MANAGE_STATE: | 307 case password_manager::ui::MANAGE_STATE: |
| 306 case password_manager::ui::CREDENTIAL_REQUEST_STATE: | 308 case password_manager::ui::CREDENTIAL_REQUEST_STATE: |
| 307 case password_manager::ui::CHROME_SIGN_IN_PROMO_STATE: | 309 case password_manager::ui::CHROME_SIGN_IN_PROMO_STATE: |
| 310 case password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE: |
| 308 case password_manager::ui::INACTIVE_STATE: | 311 case password_manager::ui::INACTIVE_STATE: |
| 309 NOTREACHED(); | 312 NOTREACHED(); |
| 310 break; | 313 break; |
| 311 } | 314 } |
| 312 } | 315 } |
| 313 metrics_util::LogUIDisplayDisposition(display_disposition); | 316 metrics_util::LogUIDisplayDisposition(display_disposition); |
| 314 interaction_keeper_.reset(new InteractionKeeper(std::move(interaction_stats), | 317 interaction_keeper_.reset(new InteractionKeeper(std::move(interaction_stats), |
| 315 display_disposition)); | 318 display_disposition)); |
| 316 | 319 |
| 317 delegate_->OnBubbleShown(); | 320 delegate_->OnBubbleShown(); |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 | 419 |
| 417 content::WebContents* ManagePasswordsBubbleModel::GetWebContents() const { | 420 content::WebContents* ManagePasswordsBubbleModel::GetWebContents() const { |
| 418 return delegate_ ? delegate_->GetWebContents() : nullptr; | 421 return delegate_ ? delegate_->GetWebContents() : nullptr; |
| 419 } | 422 } |
| 420 | 423 |
| 421 bool ManagePasswordsBubbleModel::ShouldShowMultipleAccountUpdateUI() const { | 424 bool ManagePasswordsBubbleModel::ShouldShowMultipleAccountUpdateUI() const { |
| 422 return state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE && | 425 return state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE && |
| 423 local_credentials_.size() > 1 && !password_overridden_; | 426 local_credentials_.size() > 1 && !password_overridden_; |
| 424 } | 427 } |
| 425 | 428 |
| 426 bool ManagePasswordsBubbleModel::ReplaceToShowSignInPromoIfNeeded() { | 429 bool ManagePasswordsBubbleModel::ReplaceToShowPromotionIfNeeded() { |
| 427 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, state_); | 430 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, state_); |
| 428 PrefService* prefs = GetProfile()->GetPrefs(); | 431 PrefService* prefs = GetProfile()->GetPrefs(); |
| 429 const browser_sync::ProfileSyncService* sync_service = | 432 const browser_sync::ProfileSyncService* sync_service = |
| 430 ProfileSyncServiceFactory::GetForProfile(GetProfile()); | 433 ProfileSyncServiceFactory::GetForProfile(GetProfile()); |
| 434 // Signin promotion. |
| 431 if (password_bubble_experiment::ShouldShowChromeSignInPasswordPromo( | 435 if (password_bubble_experiment::ShouldShowChromeSignInPasswordPromo( |
| 432 prefs, sync_service)) { | 436 prefs, sync_service)) { |
| 433 interaction_keeper_->ReportInteractions(this); | 437 interaction_keeper_->ReportInteractions(this); |
| 434 title_brand_link_range_ = gfx::Range(); | 438 title_brand_link_range_ = gfx::Range(); |
| 435 title_ = l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_SIGNIN_PROMO_TITLE); | 439 title_ = l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_SIGNIN_PROMO_TITLE); |
| 436 state_ = password_manager::ui::CHROME_SIGN_IN_PROMO_STATE; | 440 state_ = password_manager::ui::CHROME_SIGN_IN_PROMO_STATE; |
| 437 int show_count = prefs->GetInteger( | 441 int show_count = prefs->GetInteger( |
| 438 password_manager::prefs::kNumberSignInPasswordPromoShown); | 442 password_manager::prefs::kNumberSignInPasswordPromoShown); |
| 439 show_count++; | 443 show_count++; |
| 440 prefs->SetInteger(password_manager::prefs::kNumberSignInPasswordPromoShown, | 444 prefs->SetInteger(password_manager::prefs::kNumberSignInPasswordPromoShown, |
| 441 show_count); | 445 show_count); |
| 442 interaction_keeper_->set_sign_in_promo_shown_count(show_count); | 446 interaction_keeper_->set_sign_in_promo_shown_count(show_count); |
| 443 return true; | 447 return true; |
| 444 } | 448 } |
| 449 // Desktop to mobile promotion. |
| 450 if (desktop_ios_promotion::IsEligibleForIOSPromotion()) { |
| 451 interaction_keeper_->ReportInteractions(this); |
| 452 title_brand_link_range_ = gfx::Range(); |
| 453 title_ = l10n_util::GetStringUTF16( |
| 454 IDS_PASSWORD_MANAGER_DESKTOP_TO_IOS_PROMO_TITLE); |
| 455 state_ = password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE; |
| 456 // TODO(crbug.com/676655): Update impression count. |
| 457 // TODO(crbug.com/676655): Add required logging. |
| 458 return true; |
| 459 } |
| 445 return false; | 460 return false; |
| 446 } | 461 } |
| 447 | 462 |
| 448 void ManagePasswordsBubbleModel::SetClockForTesting( | 463 void ManagePasswordsBubbleModel::SetClockForTesting( |
| 449 std::unique_ptr<base::Clock> clock) { | 464 std::unique_ptr<base::Clock> clock) { |
| 450 interaction_keeper_->SetClockForTesting(std::move(clock)); | 465 interaction_keeper_->SetClockForTesting(std::move(clock)); |
| 451 } | 466 } |
| 452 | 467 |
| 453 void ManagePasswordsBubbleModel::UpdatePendingStateTitle() { | 468 void ManagePasswordsBubbleModel::UpdatePendingStateTitle() { |
| 454 title_brand_link_range_ = gfx::Range(); | 469 title_brand_link_range_ = gfx::Range(); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 491 return metrics_util::NO_UPDATE_SUBMISSION; | 506 return metrics_util::NO_UPDATE_SUBMISSION; |
| 492 } | 507 } |
| 493 if (state_ != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) | 508 if (state_ != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) |
| 494 return metrics_util::NO_UPDATE_SUBMISSION; | 509 return metrics_util::NO_UPDATE_SUBMISSION; |
| 495 if (password_overridden_) | 510 if (password_overridden_) |
| 496 return update_events[3][behavior]; | 511 return update_events[3][behavior]; |
| 497 if (ShouldShowMultipleAccountUpdateUI()) | 512 if (ShouldShowMultipleAccountUpdateUI()) |
| 498 return update_events[2][behavior]; | 513 return update_events[2][behavior]; |
| 499 return update_events[1][behavior]; | 514 return update_events[1][behavior]; |
| 500 } | 515 } |
| OLD | NEW |