Index: chrome/browser/ui/sync/one_click_signin_helper.cc |
diff --git a/chrome/browser/ui/sync/one_click_signin_helper.cc b/chrome/browser/ui/sync/one_click_signin_helper.cc |
index 7a898bad89ee47a1e4956eb38230e2c40297c99f..a5cd58d183ea40198c5641baa3b4428c4d69b459 100644 |
--- a/chrome/browser/ui/sync/one_click_signin_helper.cc |
+++ b/chrome/browser/ui/sync/one_click_signin_helper.cc |
@@ -91,6 +91,51 @@ void AddEmailToOneClickRejectedList(Profile* profile, |
updater->AppendIfNotPresent(new base::StringValue(email)); |
} |
+void LogHistogramValue(SyncPromoUI::Source source, int action) { |
+ switch (source) { |
+ case SyncPromoUI::SOURCE_START_PAGE: |
+ UMA_HISTOGRAM_ENUMERATION("Signin.StartPageActions", action, |
+ one_click_signin::HISTOGRAM_MAX); |
+ break; |
+ case SyncPromoUI::SOURCE_NTP_LINK: |
+ UMA_HISTOGRAM_ENUMERATION("Signin.NTPLinkActions", action, |
+ one_click_signin::HISTOGRAM_MAX); |
+ break; |
+ case SyncPromoUI::SOURCE_MENU: |
+ UMA_HISTOGRAM_ENUMERATION("Signin.MenuActions", action, |
+ one_click_signin::HISTOGRAM_MAX); |
+ break; |
+ case SyncPromoUI::SOURCE_SETTINGS: |
+ UMA_HISTOGRAM_ENUMERATION("Signin.SettingsActions", action, |
+ one_click_signin::HISTOGRAM_MAX); |
+ break; |
+ case SyncPromoUI::SOURCE_EXTENSION_INSTALL_BUBBLE: |
+ UMA_HISTOGRAM_ENUMERATION("Signin.ExtensionInstallBubbleActions", action, |
+ one_click_signin::HISTOGRAM_MAX); |
+ break; |
+ case SyncPromoUI::SOURCE_WEBSTORE_INSTALL: |
+ UMA_HISTOGRAM_ENUMERATION("Signin.WebstoreInstallActions", action, |
+ one_click_signin::HISTOGRAM_MAX); |
+ break; |
+ case SyncPromoUI::SOURCE_APP_LAUNCHER: |
+ UMA_HISTOGRAM_ENUMERATION("Signin.AppLauncherActions", action, |
+ one_click_signin::HISTOGRAM_MAX); |
+ break; |
+ default: |
+ NOTREACHED() << "Invalid Source"; |
+ return; |
+ } |
+ UMA_HISTOGRAM_ENUMERATION("Signin.AllAccessPointActions", action, |
+ one_click_signin::HISTOGRAM_MAX); |
+} |
+ |
+void LogOneClickHistogramValue(int action) { |
+ UMA_HISTOGRAM_ENUMERATION("Signin.OneClickActions", action, |
+ one_click_signin::HISTOGRAM_MAX); |
+ UMA_HISTOGRAM_ENUMERATION("Signin.AllAccessPointActions", action, |
+ one_click_signin::HISTOGRAM_MAX); |
+} |
+ |
// Arguments used with StartSync function. base::Bind() cannot support too |
// many args for performance reasons, so they are packaged up into a struct. |
struct StartSyncArgs { |
@@ -123,9 +168,7 @@ struct StartSyncArgs { |
void StartSync(const StartSyncArgs& args, |
OneClickSigninSyncStarter::StartSyncMode start_mode) { |
if (start_mode == OneClickSigninSyncStarter::UNDO_SYNC) { |
- UMA_HISTOGRAM_ENUMERATION("AutoLogin.Reverse", |
- one_click_signin::HISTOGRAM_UNDO, |
- one_click_signin::HISTOGRAM_MAX); |
+ LogOneClickHistogramValue(one_click_signin::HISTOGRAM_UNDO); |
return; |
} |
// The starter deletes itself once its done. |
@@ -136,20 +179,15 @@ void StartSync(const StartSyncArgs& args, |
int action = one_click_signin::HISTOGRAM_MAX; |
switch (args.auto_accept) { |
case OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT: |
+ break; |
+ case OneClickSigninHelper::AUTO_ACCEPT_ACCEPTED: |
action = |
start_mode == OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS ? |
one_click_signin::HISTOGRAM_AUTO_WITH_DEFAULTS : |
one_click_signin::HISTOGRAM_AUTO_WITH_ADVANCED; |
break; |
- case OneClickSigninHelper::AUTO_ACCEPT_ACCEPTED: |
action = one_click_signin::HISTOGRAM_AUTO_WITH_DEFAULTS; |
break; |
- case OneClickSigninHelper::AUTO_ACCEPT_NONE: |
- action = |
- start_mode == OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS ? |
- one_click_signin::HISTOGRAM_WITH_DEFAULTS : |
- one_click_signin::HISTOGRAM_WITH_ADVANCED; |
- break; |
case OneClickSigninHelper::AUTO_ACCEPT_CONFIGURE: |
DCHECK(start_mode == OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST); |
action = one_click_signin::HISTOGRAM_AUTO_WITH_ADVANCED; |
@@ -158,9 +196,8 @@ void StartSync(const StartSyncArgs& args, |
NOTREACHED() << "Invalid auto_accept: " << args.auto_accept; |
break; |
} |
- |
- UMA_HISTOGRAM_ENUMERATION("AutoLogin.Reverse", action, |
- one_click_signin::HISTOGRAM_MAX); |
+ if (action != one_click_signin::HISTOGRAM_MAX) |
+ LogOneClickHistogramValue(action); |
} |
void StartExplicitSync(const StartSyncArgs& args, |
@@ -327,6 +364,20 @@ ConfirmEmailDialogDelegate::ConfirmEmailDialogDelegate( |
callback_(callback) { |
} |
+// Tells when we are in the process of showing either the signin to chrome page |
+// or the one click sign in to chrome page. |
+bool AreWeShowingSignin(GURL url, SyncPromoUI::Source source, |
+ std::string email) { |
+ GURL::Replacements replacements; |
+ replacements.ClearQuery(); |
+ GURL clean_login_url = |
+ GURL(GaiaUrls::GetInstance()->service_login_url()).ReplaceComponents( |
+ replacements); |
+ |
+ return (url.ReplaceComponents(replacements) == clean_login_url && |
+ source != SyncPromoUI::SOURCE_UNKNOWN) || !email.empty(); |
+} |
+ |
} // namespace |
// The infobar asking the user if they want to use one-click sign in. |
@@ -502,8 +553,11 @@ void OneClickInfoBarDelegateImpl::RecordHistogramAction(int action) { |
OneClickSigninHelper::OneClickSigninHelper(content::WebContents* web_contents) |
: content::WebContentsObserver(web_contents), |
+ showing_signin_(false), |
auto_accept_(AUTO_ACCEPT_NONE), |
- source_(SyncPromoUI::SOURCE_UNKNOWN) { |
+ source_(SyncPromoUI::SOURCE_UNKNOWN), |
+ switched_to_advanced_(false), |
+ original_source_(SyncPromoUI::SOURCE_UNKNOWN) { |
} |
OneClickSigninHelper::~OneClickSigninHelper() { |
@@ -840,15 +894,6 @@ void OneClickSigninHelper::ShowInfoBarUIThread( |
if (!helper) |
return; |
- // Save the email in the one-click signin manager. The manager may |
- // not exist if the contents is incognito or if the profile is already |
- // connected to a Google account. |
- if (!session_index.empty()) |
- helper->session_index_ = session_index; |
- |
- if (!email.empty()) |
- helper->email_ = email; |
- |
if (auto_accept != AUTO_ACCEPT_NONE) { |
helper->auto_accept_ = auto_accept; |
helper->source_ = source; |
@@ -869,6 +914,15 @@ void OneClickSigninHelper::ShowInfoBarUIThread( |
return; |
} |
+ // Save the email in the one-click signin manager. The manager may |
+ // not exist if the contents is incognito or if the profile is already |
+ // connected to a Google account. |
+ if (!session_index.empty()) |
+ helper->session_index_ = session_index; |
+ |
+ if (!email.empty()) |
+ helper->email_ = email; |
+ |
if (continue_url.is_valid()) |
helper->continue_url_ = continue_url; |
} |
@@ -916,10 +970,13 @@ void OneClickSigninHelper::RedirectToSignin() { |
void OneClickSigninHelper::CleanTransientState() { |
VLOG(1) << "OneClickSigninHelper::CleanTransientState"; |
+ showing_signin_ = false; |
email_.clear(); |
password_.clear(); |
auto_accept_ = AUTO_ACCEPT_NONE; |
source_ = SyncPromoUI::SOURCE_UNKNOWN; |
+ switched_to_advanced_ = false; |
+ original_source_ = SyncPromoUI::SOURCE_UNKNOWN; |
continue_url_ = GURL(); |
// Post to IO thread to clear pending email. |
@@ -973,6 +1030,16 @@ void OneClickSigninHelper::DidStopLoading( |
return; |
} |
+ if (AreWeShowingSignin(url, source_, email_)) { |
+ if (!showing_signin_) { |
+ if (source_ == SyncPromoUI::SOURCE_UNKNOWN) |
+ LogOneClickHistogramValue(one_click_signin::HISTOGRAM_SHOWN); |
+ else |
+ LogHistogramValue(source_, one_click_signin::HISTOGRAM_SHOWN); |
+ } |
+ showing_signin_ = true; |
+ } |
+ |
// When Gaia finally redirects to the continue URL, Gaia will add some |
// extra query parameters. So ignore the parameters when checking to see |
// if the user has continued. |
@@ -986,6 +1053,7 @@ void OneClickSigninHelper::DidStopLoading( |
// If there is no valid email or password yet, there is nothing to do. |
if (email_.empty() || password_.empty()) { |
+ VLOG(1) << "OneClickSigninHelper::DidStopLoading: nothing to do"; |
if (continue_url_match_accept) |
RedirectToSignin(); |
std::string unused_value; |
@@ -1039,8 +1107,10 @@ void OneClickSigninHelper::DidStopLoading( |
SyncPromoUI::Source source = |
SyncPromoUI::GetSourceForSyncPromoURL(url); |
if (source != source_) { |
+ original_source_ = source_; |
source_ = source; |
- force_same_tab_navigation = source_ == SyncPromoUI::SOURCE_SETTINGS; |
+ force_same_tab_navigation = source == SyncPromoUI::SOURCE_SETTINGS; |
+ switched_to_advanced_ = source == SyncPromoUI::SOURCE_SETTINGS; |
} |
} |
} |
@@ -1063,9 +1133,7 @@ void OneClickSigninHelper::DidStopLoading( |
switch (auto_accept_) { |
case AUTO_ACCEPT_NONE: |
if (SyncPromoUI::UseWebBasedSigninFlow()) { |
- UMA_HISTOGRAM_ENUMERATION("AutoLogin.Reverse", |
- one_click_signin::HISTOGRAM_DISMISSED, |
- one_click_signin::HISTOGRAM_MAX); |
+ LogOneClickHistogramValue(one_click_signin::HISTOGRAM_DISMISSED); |
} else { |
OneClickInfoBarDelegateImpl::Create( |
InfoBarService::FromWebContents(contents), session_index_, email_, |
@@ -1073,6 +1141,8 @@ void OneClickSigninHelper::DidStopLoading( |
} |
break; |
case AUTO_ACCEPT_ACCEPTED: |
+ LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED); |
+ LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_DEFAULTS); |
SigninManager::DisableOneClickSignIn(profile); |
browser->window()->ShowOneClickSigninBubble( |
bubble_type, |
@@ -1082,6 +1152,8 @@ void OneClickSigninHelper::DidStopLoading( |
false /* force_same_tab_navigation */))); |
break; |
case AUTO_ACCEPT_CONFIGURE: |
+ LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED); |
+ LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_ADVANCED); |
SigninManager::DisableOneClickSignIn(profile); |
StartSync( |
StartSyncArgs(profile, browser, auto_accept_, session_index_, email_, |
@@ -1089,6 +1161,15 @@ void OneClickSigninHelper::DidStopLoading( |
OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST); |
break; |
case AUTO_ACCEPT_EXPLICIT: { |
+ if (switched_to_advanced_) { |
+ LogHistogramValue(original_source_, |
+ one_click_signin::HISTOGRAM_WITH_ADVANCED); |
+ LogHistogramValue(original_source_, |
+ one_click_signin::HISTOGRAM_ACCEPTED); |
+ } else { |
+ LogHistogramValue(source_, one_click_signin::HISTOGRAM_ACCEPTED); |
+ LogHistogramValue(source_, one_click_signin::HISTOGRAM_WITH_DEFAULTS); |
+ } |
OneClickSigninSyncStarter::StartSyncMode start_mode = |
source_ == SyncPromoUI::SOURCE_SETTINGS ? |
OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST : |
@@ -1142,9 +1223,7 @@ void OneClickSigninHelper::DidStopLoading( |
} |
case AUTO_ACCEPT_REJECTED_FOR_PROFILE: |
AddEmailToOneClickRejectedList(profile, email_); |
- UMA_HISTOGRAM_ENUMERATION("AutoLogin.Reverse", |
- one_click_signin::HISTOGRAM_REJECTED, |
- one_click_signin::HISTOGRAM_MAX); |
+ LogOneClickHistogramValue(one_click_signin::HISTOGRAM_REJECTED); |
break; |
default: |
NOTREACHED() << "Invalid auto_accept=" << auto_accept_; |