Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(318)

Unified Diff: chrome/browser/ui/passwords/manage_passwords_bubble_model.cc

Issue 2036323002: Implement the UI logic behind the Sign In promo in the password bubble (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
index 6620362e234028a890c0149edc8f35363f159ef7..94430d5d71c61aeec4bc2c8066d3ea02bf006565 100644
--- a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
@@ -11,6 +11,7 @@
#include <string>
#include <vector>
+#include "base/metrics/histogram_macros.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/default_clock.h"
#include "chrome/browser/password_manager/password_store_factory.h"
@@ -96,6 +97,11 @@ class ManagePasswordsBubbleModel::InteractionKeeper {
update_password_submission_event_ = event;
}
+ void set_sign_in_promo_dismissal_reason(
+ password_manager::metrics_util::SyncSignInUserAction reason) {
+ sign_in_promo_dismissal_reason_ = reason;
+ }
+
void SetClockForTesting(std::unique_ptr<base::Clock> clock) {
clock_ = std::move(clock);
}
@@ -112,6 +118,10 @@ class ManagePasswordsBubbleModel::InteractionKeeper {
password_manager::metrics_util::UpdatePasswordSubmissionEvent
update_password_submission_event_;
+ // Dismissal reason for the Chrome Sign in bubble.
+ password_manager::metrics_util::SyncSignInUserAction
+ sign_in_promo_dismissal_reason_;
+
// Current statistics for the save password bubble;
password_manager::InteractionsStats interaction_stats_;
@@ -127,9 +137,9 @@ ManagePasswordsBubbleModel::InteractionKeeper::InteractionKeeper(
: display_disposition_(display_disposition),
dismissal_reason_(metrics_util::NO_DIRECT_INTERACTION),
update_password_submission_event_(metrics_util::NO_UPDATE_SUBMISSION),
+ sign_in_promo_dismissal_reason_(metrics_util::CHROME_SIGNIN_DISMISSED),
interaction_stats_(std::move(stats)),
- clock_(new base::DefaultClock) {
-}
+ clock_(new base::DefaultClock) {}
void ManagePasswordsBubbleModel::InteractionKeeper::ReportInteractions(
const ManagePasswordsBubbleModel* model) {
@@ -157,27 +167,43 @@ void ManagePasswordsBubbleModel::InteractionKeeper::ReportInteractions(
}
}
- if (model->state() != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) {
+ if (model->state() == password_manager::ui::CHROME_SIGN_IN_PROMO_STATE) {
+ metrics_util::LogAutoSigninPromoUserAction(sign_in_promo_dismissal_reason_);
+ if (sign_in_promo_dismissal_reason_ ==
+ password_manager::metrics_util::CHROME_SIGNIN_OK ||
+ sign_in_promo_dismissal_reason_ ==
+ password_manager::metrics_util::CHROME_SIGNIN_CANCEL) {
+ DCHECK(model->web_contents());
+ int show_count = model->GetProfile()->GetPrefs()->GetInteger(
+ password_manager::prefs::kNumberSignInPasswordPromoShown);
+ UMA_HISTOGRAM_COUNTS_100("PasswordManager.SignInPromoCountTilClick",
+ show_count);
+ }
+ } else if (model->state() !=
+ password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) {
// We have separate metrics for the Update bubble so do not record dismissal
// reason for it.
metrics_util::LogUIDismissalReason(dismissal_reason_);
}
- PasswordsModelDelegate* delegate = model->web_contents()
- ? PasswordsModelDelegateFromWebContents(model->web_contents())
- : nullptr;
- // Check if this was update password and record update statistics.
- if (update_password_submission_event_ == metrics_util::NO_UPDATE_SUBMISSION &&
- (model->state() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE ||
- model->state() == password_manager::ui::PENDING_PASSWORD_STATE)) {
- update_password_submission_event_ =
- model->GetUpdateDismissalReason(NO_INTERACTION);
- if (model->state() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE &&
- delegate)
- delegate->OnNoInteractionOnUpdate();
+ if (model->state() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE ||
+ model->state() == password_manager::ui::PENDING_PASSWORD_STATE) {
+ if (update_password_submission_event_ ==
+ metrics_util::NO_UPDATE_SUBMISSION) {
+ update_password_submission_event_ =
+ model->GetUpdateDismissalReason(NO_INTERACTION);
+ PasswordsModelDelegate* delegate =
+ model->web_contents()
+ ? PasswordsModelDelegateFromWebContents(model->web_contents())
+ : nullptr;
+ if (delegate &&
+ model->state() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE)
+ delegate->OnNoInteractionOnUpdate();
+ }
+
+ if (update_password_submission_event_ != metrics_util::NO_UPDATE_SUBMISSION)
+ LogUpdatePasswordSubmissionEvent(update_password_submission_event_);
}
- if (update_password_submission_event_ != metrics_util::NO_UPDATE_SUBMISSION)
- LogUpdatePasswordSubmissionEvent(update_password_submission_event_);
}
ManagePasswordsBubbleModel::ManagePasswordsBubbleModel(
@@ -396,11 +422,19 @@ void ManagePasswordsBubbleModel::OnPasswordAction(
}
void ManagePasswordsBubbleModel::OnSignInToChromeClicked() {
-
+ interaction_keeper_->set_sign_in_promo_dismissal_reason(
+ metrics_util::CHROME_SIGNIN_OK);
+ GetProfile()->GetPrefs()->SetBoolean(
+ password_manager::prefs::kWasSignInPasswordPromoClicked, true);
+ PasswordsModelDelegateFromWebContents(web_contents())
+ ->NavigateToChromeSignIn();
}
void ManagePasswordsBubbleModel::OnSkipSignInClicked() {
-
+ interaction_keeper_->set_sign_in_promo_dismissal_reason(
+ metrics_util::CHROME_SIGNIN_CANCEL);
+ GetProfile()->GetPrefs()->SetBoolean(
+ password_manager::prefs::kWasSignInPasswordPromoClicked, true);
}
Profile* ManagePasswordsBubbleModel::GetProfile() const {
@@ -425,10 +459,16 @@ bool ManagePasswordsBubbleModel::ShouldShowGoogleSmartLockWelcome() const {
bool ManagePasswordsBubbleModel::ReplaceToShowSignInPromoIfNeeded() {
DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, state_);
- if (false /*TODO(crbug.com/615825): there will be a real condition soon*/) {
+ PrefService* prefs = GetProfile()->GetPrefs();
+ if (password_bubble_experiment::ShouldShowChromeSignInPasswordPromo(prefs)) {
+ interaction_keeper_->ReportInteractions(this);
title_brand_link_range_ = gfx::Range();
title_ = l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_SIGNIN_PROMO_TITLE);
state_ = password_manager::ui::CHROME_SIGN_IN_PROMO_STATE;
+ int show_count = prefs->GetInteger(
+ password_manager::prefs::kNumberSignInPasswordPromoShown);
+ prefs->SetInteger(password_manager::prefs::kNumberSignInPasswordPromoShown,
+ show_count + 1);
return true;
}
return false;
« no previous file with comments | « no previous file | chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698