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_ = |
| 454 l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_DESKTOP_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 |