summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgogerald <gogerald@chromium.org>2015-12-07 16:49:37 -0800
committerCommit bot <commit-bot@chromium.org>2015-12-08 00:50:39 +0000
commit71bf6c90880518262efc373771eb621617d09c39 (patch)
treed9f5c0dfb9d2d3b9b388f060d36d56a694c80a1b
parentf98b00b97ed4d2eb9747b8815265058bcedb1cbc (diff)
downloadchromium_src-71bf6c90880518262efc373771eb621617d09c39.zip
chromium_src-71bf6c90880518262efc373771eb621617d09c39.tar.gz
chromium_src-71bf6c90880518262efc373771eb621617d09c39.tar.bz2
Implement newly designed sign-in related histograms for desktop platorms.
This CL splits signin_metrics::Source into signin_metrics::AccessPoint and signin_metrics::Reason. It implements three new histograms Signin.SigninStartedAccessPoint, Signin.SigninCompletedAccessPoint and Signin.SigninReason. These histograms could replace Signin.SigninSource histogram with extra capabilities. https://docs.google.com/a/google.com/document/d/1-gXYAMXXgsJhk6jxO55RuYJ00JBGermevJZ0sIlk6ko/edit?usp=sharingusp=sharing contains details. BUG=532557 Review URL: https://codereview.chromium.org/1473543002 Cr-Commit-Position: refs/heads/master@{#363640}
-rw-r--r--chrome/browser/app_controller_mac.mm7
-rw-r--r--chrome/browser/extensions/api/principals_private/principals_private_api.cc4
-rw-r--r--chrome/browser/printing/print_dialog_cloud.cc4
-rw-r--r--chrome/browser/profiles/host_zoom_map_browsertest.cc12
-rw-r--r--chrome/browser/resources/options/browser_options.js2
-rw-r--r--chrome/browser/resources/options/manage_profile_overlay.js2
-rw-r--r--chrome/browser/resources/options/sync_setup_overlay.js42
-rw-r--r--chrome/browser/signin/chrome_signin_helper.cc5
-rw-r--r--chrome/browser/signin/signin_global_error.cc4
-rw-r--r--chrome/browser/signin/signin_promo.cc116
-rw-r--r--chrome/browser/signin/signin_promo.h35
-rw-r--r--chrome/browser/ui/bookmarks/bookmark_bubble_sign_in_delegate.cc3
-rw-r--r--chrome/browser/ui/browser_command_controller.cc3
-rw-r--r--chrome/browser/ui/browser_commands.cc7
-rw-r--r--chrome/browser/ui/browser_mac.cc5
-rw-r--r--chrome/browser/ui/browser_mac.h3
-rw-r--r--chrome/browser/ui/browser_window.h18
-rw-r--r--chrome/browser/ui/chrome_pages.cc25
-rw-r--r--chrome/browser/ui/chrome_pages.h5
-rw-r--r--chrome/browser/ui/cocoa/bookmarks/bookmark_sync_promo_controller.mm3
-rw-r--r--chrome/browser/ui/cocoa/browser_window_cocoa.h6
-rw-r--r--chrome/browser/ui/cocoa/browser_window_cocoa.mm10
-rw-r--r--chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller.mm5
-rw-r--r--chrome/browser/ui/cocoa/profiles/avatar_base_controller.h3
-rw-r--r--chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm14
-rw-r--r--chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h11
-rw-r--r--chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm17
-rw-r--r--chrome/browser/ui/cocoa/profiles/profile_chooser_controller_unittest.mm8
-rw-r--r--chrome/browser/ui/cocoa/profiles/user_manager_mac.mm4
-rw-r--r--chrome/browser/ui/startup/startup_browser_creator_browsertest.cc33
-rw-r--r--chrome/browser/ui/startup/startup_browser_creator_impl.cc3
-rw-r--r--chrome/browser/ui/startup/startup_browser_creator_triggered_reset_browsertest_win.cc4
-rw-r--r--chrome/browser/ui/sync/one_click_signin_sync_observer.cc4
-rw-r--r--chrome/browser/ui/sync/one_click_signin_sync_observer_unittest.cc3
-rw-r--r--chrome/browser/ui/sync/one_click_signin_sync_starter.cc8
-rw-r--r--chrome/browser/ui/sync/one_click_signin_sync_starter.h2
-rw-r--r--chrome/browser/ui/sync/one_click_signin_sync_starter_unittest.cc15
-rw-r--r--chrome/browser/ui/user_manager.cc5
-rw-r--r--chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc3
-rw-r--r--chrome/browser/ui/views/frame/browser_view.cc14
-rw-r--r--chrome/browser/ui/views/frame/browser_view.h6
-rw-r--r--chrome/browser/ui/views/frame/glass_browser_frame_view.cc4
-rw-r--r--chrome/browser/ui/views/frame/opaque_browser_frame_view.cc4
-rw-r--r--chrome/browser/ui/views/profiles/profile_chooser_view.cc16
-rw-r--r--chrome/browser/ui/views/profiles/profile_chooser_view.h7
-rw-r--r--chrome/browser/ui/views/profiles/profile_chooser_view_browsertest.cc3
-rw-r--r--chrome/browser/ui/views/profiles/signin_view_controller.cc13
-rw-r--r--chrome/browser/ui/views/profiles/signin_view_controller.h13
-rw-r--r--chrome/browser/ui/views/profiles/supervised_user_avatar_label.cc5
-rw-r--r--chrome/browser/ui/views/profiles/user_manager_view.cc4
-rw-r--r--chrome/browser/ui/webui/app_launcher_login_handler.cc23
-rw-r--r--chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc3
-rw-r--r--chrome/browser/ui/webui/ntp/new_tab_page_sync_handler.cc3
-rw-r--r--chrome/browser/ui/webui/options/sync_setup_handler.cc38
-rw-r--r--chrome/browser/ui/webui/options/sync_setup_handler.h11
-rw-r--r--chrome/browser/ui/webui/options/sync_setup_handler_unittest.cc33
-rw-r--r--chrome/browser/ui/webui/settings/sync_handler.cc37
-rw-r--r--chrome/browser/ui/webui/settings/sync_handler.h12
-rw-r--r--chrome/browser/ui/webui/settings/sync_handler_unittest.cc33
-rw-r--r--chrome/browser/ui/webui/signin/inline_login_handler.cc14
-rw-r--r--chrome/browser/ui/webui/signin/inline_login_handler_impl.cc105
-rw-r--r--chrome/browser/ui/webui/signin/inline_login_handler_impl.h5
-rw-r--r--chrome/browser/ui/webui/signin/inline_login_ui_browsertest.cc105
-rw-r--r--chrome/browser/ui/webui/signin/login_ui_service.cc10
-rw-r--r--chrome/browser/ui/webui/signin/login_ui_test_utils.cc10
-rw-r--r--chrome/browser/ui/webui/signin/login_ui_test_utils.h4
-rw-r--r--chrome/browser/ui/webui/sync_setup_browsertest.js8
-rw-r--r--chrome/browser/ui/webui/webui_webview_browsertest.cc5
-rw-r--r--chrome/browser/ui/zoom/zoom_controller_browsertest.cc4
-rw-r--r--chrome/test/base/test_browser_window.h7
-rw-r--r--components/signin/core/browser/signin_metrics.cc21
-rw-r--r--components/signin/core/browser/signin_metrics.h68
-rw-r--r--tools/metrics/histograms/histograms.xml50
73 files changed, 736 insertions, 425 deletions
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm
index 8ec1516..56b78e5 100644
--- a/chrome/browser/app_controller_mac.mm
+++ b/chrome/browser/app_controller_mac.mm
@@ -1126,10 +1126,11 @@ class AppControllerProfileObserver : public ProfileInfoCacheObserver {
break;
case IDC_SHOW_SYNC_SETUP:
if (Browser* browser = ActivateBrowser(lastProfile)) {
- chrome::ShowBrowserSigninOrSettings(browser,
- signin_metrics::SOURCE_MENU);
+ chrome::ShowBrowserSigninOrSettings(
+ browser, signin_metrics::AccessPoint::ACCESS_POINT_MENU);
} else {
- chrome::OpenSyncSetupWindow(lastProfile, signin_metrics::SOURCE_MENU);
+ chrome::OpenSyncSetupWindow(
+ lastProfile, signin_metrics::AccessPoint::ACCESS_POINT_MENU);
}
break;
case IDC_TASK_MANAGER:
diff --git a/chrome/browser/extensions/api/principals_private/principals_private_api.cc b/chrome/browser/extensions/api/principals_private/principals_private_api.cc
index 491f419..867990d 100644
--- a/chrome/browser/extensions/api/principals_private/principals_private_api.cc
+++ b/chrome/browser/extensions/api/principals_private/principals_private_api.cc
@@ -10,6 +10,7 @@
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_window.h"
#include "components/signin/core/browser/signin_header_helper.h"
+#include "components/signin/core/browser/signin_metrics.h"
#include "components/signin/core/common/profile_management_switches.h"
namespace extensions {
@@ -36,7 +37,8 @@ bool PrincipalsPrivateShowAvatarBubbleFunction::RunSyncSafe() {
if (browser) {
browser->window()->ShowAvatarBubbleFromAvatarButton(
BrowserWindow::AVATAR_BUBBLE_MODE_ACCOUNT_MANAGEMENT,
- signin::ManageAccountsParams());
+ signin::ManageAccountsParams(),
+ signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN);
}
return true;
}
diff --git a/chrome/browser/printing/print_dialog_cloud.cc b/chrome/browser/printing/print_dialog_cloud.cc
index b22feeb..1d061aa 100644
--- a/chrome/browser/printing/print_dialog_cloud.cc
+++ b/chrome/browser/printing/print_dialog_cloud.cc
@@ -13,6 +13,7 @@
#include "components/cloud_devices/common/cloud_devices_urls.h"
#include "components/google/core/browser/google_util.h"
#include "components/signin/core/browser/signin_header_helper.h"
+#include "components/signin/core/browser/signin_metrics.h"
#include "components/signin/core/common/profile_management_switches.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/web_contents.h"
@@ -69,7 +70,8 @@ void CreateCloudPrintSigninTab(Browser* browser,
browser->window()->ShowAvatarBubbleFromAvatarButton(
add_account ? BrowserWindow::AVATAR_BUBBLE_MODE_ADD_ACCOUNT
: BrowserWindow::AVATAR_BUBBLE_MODE_SIGNIN,
- signin::ManageAccountsParams());
+ signin::ManageAccountsParams(),
+ signin_metrics::AccessPoint::ACCESS_POINT_CLOUD_PRINT);
} else {
GURL url = add_account ? cloud_devices::GetCloudPrintAddAccountURL()
: cloud_devices::GetCloudPrintSigninURL();
diff --git a/chrome/browser/profiles/host_zoom_map_browsertest.cc b/chrome/browser/profiles/host_zoom_map_browsertest.cc
index f3d7764..aa2803a 100644
--- a/chrome/browser/profiles/host_zoom_map_browsertest.cc
+++ b/chrome/browser/profiles/host_zoom_map_browsertest.cc
@@ -20,6 +20,7 @@
#include "base/values.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_impl.h"
+#include "chrome/browser/signin/signin_promo.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h"
@@ -126,6 +127,13 @@ class HostZoomMapBrowserTest : public InProcessBrowserTest {
return results;
}
+ std::string GetSigninPromoURL() {
+ return signin::GetPromoURL(
+ signin_metrics::AccessPoint::ACCESS_POINT_START_PAGE,
+ signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT, false)
+ .spec();
+ }
+
GURL ConstructTestServerURL(const char* url_template) {
return GURL(base::StringPrintf(
url_template, embedded_test_server()->port()));
@@ -243,7 +251,7 @@ IN_PROC_BROWSER_TEST_F(HostZoomMapBrowserTest, ZoomEventsWorkForOffTheRecord) {
IN_PROC_BROWSER_TEST_F(
HostZoomMapBrowserTest,
WebviewBasedSigninUsesDefaultStoragePartitionForEmbedder) {
- GURL test_url = ConstructTestServerURL(chrome::kChromeUIChromeSigninURL);
+ GURL test_url = ConstructTestServerURL(GetSigninPromoURL().c_str());
std::string test_host(test_url.host());
std::string test_scheme(test_url.scheme());
ui_test_utils::NavigateToURL(browser(), test_url);
@@ -281,7 +289,7 @@ IN_PROC_BROWSER_TEST_F(HostZoomMapIframeSigninBrowserTest,
// test currently relies on the signin page being loaded into a non-default
// storage partition (and verifies this is the case), but ultimately it would
// be better not to rely on what the signin page is doing.
- GURL test_url = ConstructTestServerURL(chrome::kChromeUIChromeSigninURL);
+ GURL test_url = ConstructTestServerURL(GetSigninPromoURL().c_str());
std::string test_host(test_url.host());
std::string test_scheme(test_url.scheme());
ui_test_utils::NavigateToURL(browser(), test_url);
diff --git a/chrome/browser/resources/options/browser_options.js b/chrome/browser/resources/options/browser_options.js
index ae7c092..c9fa7ba 100644
--- a/chrome/browser/resources/options/browser_options.js
+++ b/chrome/browser/resources/options/browser_options.js
@@ -203,7 +203,7 @@ cr.define('options', function() {
} else if (cr.isChromeOS) {
SyncSetupOverlay.showSetupUI();
} else {
- SyncSetupOverlay.startSignIn();
+ SyncSetupOverlay.startSignIn('access-point-settings');
}
};
$('customize-sync').onclick = function(event) {
diff --git a/chrome/browser/resources/options/manage_profile_overlay.js b/chrome/browser/resources/options/manage_profile_overlay.js
index 1f80642..df9862b 100644
--- a/chrome/browser/resources/options/manage_profile_overlay.js
+++ b/chrome/browser/resources/options/manage_profile_overlay.js
@@ -95,7 +95,7 @@ cr.define('options', function() {
$('create-profile-supervised-sign-in-link').onclick =
function(event) {
- SyncSetupOverlay.startSignIn();
+ SyncSetupOverlay.startSignIn('access-point-supervised-user');
};
$('create-profile-supervised-sign-in-again-link').onclick =
diff --git a/chrome/browser/resources/options/sync_setup_overlay.js b/chrome/browser/resources/options/sync_setup_overlay.js
index 4b59449..d05b778 100644
--- a/chrome/browser/resources/options/sync_setup_overlay.js
+++ b/chrome/browser/resources/options/sync_setup_overlay.js
@@ -827,8 +827,8 @@ cr.define('options', function() {
* already signed in.
* @private
*/
- startSignIn_: function() {
- chrome.send('SyncSetupStartSignIn');
+ startSignIn_: function(accessPoint) {
+ chrome.send('SyncSetupStartSignIn', [accessPoint]);
},
/**
@@ -840,34 +840,16 @@ cr.define('options', function() {
},
};
- // These methods are for general consumption.
- SyncSetupOverlay.closeOverlay = function() {
- SyncSetupOverlay.getInstance().closeOverlay_();
- };
-
- SyncSetupOverlay.showSetupUI = function() {
- SyncSetupOverlay.getInstance().showSetupUI_();
- };
-
- SyncSetupOverlay.startSignIn = function() {
- SyncSetupOverlay.getInstance().startSignIn_();
- };
-
- SyncSetupOverlay.doSignOutOnAuthError = function() {
- SyncSetupOverlay.getInstance().doSignOutOnAuthError_();
- };
-
- SyncSetupOverlay.showSyncSetupPage = function(page, args) {
- SyncSetupOverlay.getInstance().showSyncSetupPage_(page, args);
- };
-
- SyncSetupOverlay.showCustomizePage = function(args, index) {
- SyncSetupOverlay.getInstance().showCustomizePage_(args, index);
- };
-
- SyncSetupOverlay.showStopSyncingUI = function() {
- SyncSetupOverlay.getInstance().showStopSyncingUI_();
- };
+ // Forward public APIs to private implementations.
+ cr.makePublic(SyncSetupOverlay, [
+ 'closeOverlay',
+ 'showSetupUI',
+ 'startSignIn',
+ 'doSignOutOnAuthError',
+ 'showSyncSetupPage',
+ 'showCustomizePage',
+ 'showStopSyncingUI',
+ ]);
// Export
return {
diff --git a/chrome/browser/signin/chrome_signin_helper.cc b/chrome/browser/signin/chrome_signin_helper.cc
index 4914aef..9118ea6 100644
--- a/chrome/browser/signin/chrome_signin_helper.cc
+++ b/chrome/browser/signin/chrome_signin_helper.cc
@@ -74,8 +74,9 @@ void ProcessMirrorHeaderUIThread(int child_id,
}
signin_metrics::LogAccountReconcilorStateOnGaiaResponse(
account_reconcilor->GetState());
- browser->window()->ShowAvatarBubbleFromAvatarButton(bubble_mode,
- manage_accounts_params);
+ browser->window()->ShowAvatarBubbleFromAvatarButton(
+ bubble_mode, manage_accounts_params,
+ signin_metrics::AccessPoint::ACCESS_POINT_CONTENT_AREA);
}
#else // BUILDFLAG(ANDROID_JAVA_UI)
if (service_type == signin::GAIA_SERVICE_TYPE_INCOGNITO) {
diff --git a/chrome/browser/signin/signin_global_error.cc b/chrome/browser/signin/signin_global_error.cc
index 71f8a46..9369b83a 100644
--- a/chrome/browser/signin/signin_global_error.cc
+++ b/chrome/browser/signin/signin_global_error.cc
@@ -98,8 +98,8 @@ void SigninGlobalError::ExecuteMenuItem(Browser* browser) {
signin_metrics::HISTOGRAM_REAUTH_SHOWN,
signin_metrics::HISTOGRAM_REAUTH_MAX);
browser->window()->ShowAvatarBubbleFromAvatarButton(
- BrowserWindow::AVATAR_BUBBLE_MODE_REAUTH,
- signin::ManageAccountsParams());
+ BrowserWindow::AVATAR_BUBBLE_MODE_REAUTH, signin::ManageAccountsParams(),
+ signin_metrics::AccessPoint::ACCESS_POINT_MENU);
#endif
}
diff --git a/chrome/browser/signin/signin_promo.cc b/chrome/browser/signin/signin_promo.cc
index 1377d70..657aaa8 100644
--- a/chrome/browser/signin/signin_promo.cc
+++ b/chrome/browser/signin/signin_promo.cc
@@ -165,25 +165,51 @@ void SetUserSkippedPromo(Profile* profile) {
profile->GetPrefs()->SetBoolean(prefs::kSignInPromoUserSkipped, true);
}
-GURL GetLandingURL(const char* option, int value) {
- std::string url = base::StringPrintf("%s/success.html?%s=%d",
- extensions::kGaiaAuthExtensionOrigin,
- option,
- value);
+GURL GetLandingURL(signin_metrics::AccessPoint access_point) {
+ std::string url = base::StringPrintf(
+ "%s/success.html?%s=%d", extensions::kGaiaAuthExtensionOrigin,
+ kSignInPromoQueryKeyAccessPoint, static_cast<int>(access_point));
+
+ // TODO(gogerald): right now, gaia server needs to distinguish the source from
+ // signin_metrics::SOURCE_START_PAGE, signin_metrics::SOURCE_SETTINGS and
+ // the others to show advanced sync settings, remove them after
+ // switching to Minute Maid sign in flow.
+ if (access_point == signin_metrics::AccessPoint::ACCESS_POINT_START_PAGE) {
+ base::StringAppendF(&url, "&%s=%d", kSignInPromoQueryKeySource,
+ signin_metrics::SOURCE_START_PAGE);
+ } else if (access_point ==
+ signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS) {
+ base::StringAppendF(&url, "&%s=%d", kSignInPromoQueryKeySource,
+ signin_metrics::SOURCE_SETTINGS);
+ } else {
+ base::StringAppendF(&url, "&%s=%d", kSignInPromoQueryKeySource,
+ signin_metrics::SOURCE_OTHERS);
+ }
+
return GURL(url);
}
-GURL GetPromoURL(signin_metrics::Source source, bool auto_close) {
- return GetPromoURL(source, auto_close, false /* is_constrained */);
+GURL GetPromoURL(signin_metrics::AccessPoint access_point,
+ signin_metrics::Reason reason,
+ bool auto_close) {
+ return GetPromoURL(access_point, reason, auto_close,
+ false /* is_constrained */);
}
-GURL GetPromoURL(signin_metrics::Source source,
+GURL GetPromoURL(signin_metrics::AccessPoint access_point,
+ signin_metrics::Reason reason,
bool auto_close,
bool is_constrained) {
- DCHECK_NE(signin_metrics::SOURCE_UNKNOWN, source);
+ CHECK_LT(static_cast<int>(access_point),
+ static_cast<int>(signin_metrics::AccessPoint::ACCESS_POINT_MAX));
+ CHECK_LT(static_cast<int>(reason),
+ static_cast<int>(signin_metrics::Reason::REASON_MAX));
std::string url(chrome::kChromeUIChromeSigninURL);
- base::StringAppendF(&url, "?%s=%d", kSignInPromoQueryKeySource, source);
+ base::StringAppendF(&url, "?%s=%d", kSignInPromoQueryKeyAccessPoint,
+ static_cast<int>(access_point));
+ base::StringAppendF(&url, "&%s=%d", kSignInPromoQueryKeyReason,
+ static_cast<int>(reason));
if (auto_close)
base::StringAppendF(&url, "&%s=1", kSignInPromoQueryKeyAutoClose);
if (is_constrained)
@@ -191,16 +217,20 @@ GURL GetPromoURL(signin_metrics::Source source,
return GURL(url);
}
-GURL GetReauthURL(Profile* profile, const std::string& account_id) {
+GURL GetReauthURL(signin_metrics::AccessPoint access_point,
+ signin_metrics::Reason reason,
+ Profile* profile,
+ const std::string& account_id) {
AccountInfo info = AccountTrackerServiceFactory::GetForProfile(profile)
->GetAccountInfo(account_id);
- return GetReauthURLWithEmail(info.email);
+ return GetReauthURLWithEmail(access_point, reason, info.email);
}
-GURL GetReauthURLWithEmail(const std::string& email) {
- GURL url = signin::GetPromoURL(
- signin_metrics::SOURCE_REAUTH, true /* auto_close */,
- true /* is_constrained */);
+GURL GetReauthURLWithEmail(signin_metrics::AccessPoint access_point,
+ signin_metrics::Reason reason,
+ const std::string& email) {
+ GURL url = signin::GetPromoURL(access_point, reason, true /* auto_close */,
+ true /* is_constrained */);
url = net::AppendQueryParameter(url, "email", email);
url = net::AppendQueryParameter(url, "validateEmail", "1");
@@ -223,24 +253,27 @@ GURL GetSigninPartitionURL() {
}
GURL GetSigninURLFromBubbleViewMode(Profile* profile,
- profiles::BubbleViewMode mode) {
+ profiles::BubbleViewMode mode,
+ signin_metrics::AccessPoint access_point) {
switch (mode) {
case profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN:
- return GetPromoURL(signin_metrics::SOURCE_AVATAR_BUBBLE_SIGN_IN,
- false /* auto_close */,
- true /* is_constrained */);
+ return GetPromoURL(access_point,
+ signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT,
+ false /* auto_close */, true /* is_constrained */);
break;
case profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT:
- return GetPromoURL(signin_metrics::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT,
- false /* auto_close */,
- true /* is_constrained */);
+ return GetPromoURL(access_point,
+ signin_metrics::Reason::REASON_ADD_SECONDARY_ACCOUNT,
+ false /* auto_close */, true /* is_constrained */);
break;
case profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH: {
const SigninErrorController* error_controller =
SigninErrorControllerFactory::GetForProfile(profile);
CHECK(error_controller);
DCHECK(error_controller->HasError());
- return GetReauthURL(profile, error_controller->error_account_id());
+ return GetReauthURL(access_point,
+ signin_metrics::Reason::REASON_REAUTHENTICATION,
+ profile, error_controller->error_account_id());
break;
}
default:
@@ -249,17 +282,34 @@ GURL GetSigninURLFromBubbleViewMode(Profile* profile,
}
}
-signin_metrics::Source GetSourceForPromoURL(const GURL& url) {
+signin_metrics::AccessPoint GetAccessPointForPromoURL(const GURL& url) {
std::string value;
- if (net::GetValueForKeyInQuery(url, kSignInPromoQueryKeySource, &value)) {
- int source = 0;
- if (base::StringToInt(value, &source) &&
- source >= signin_metrics::SOURCE_START_PAGE &&
- source < signin_metrics::SOURCE_UNKNOWN) {
- return static_cast<signin_metrics::Source>(source);
- }
+ if (!net::GetValueForKeyInQuery(url, kSignInPromoQueryKeyAccessPoint,
+ &value)) {
+ return signin_metrics::AccessPoint::ACCESS_POINT_MAX;
}
- return signin_metrics::SOURCE_UNKNOWN;
+
+ int access_point = 0;
+ CHECK(base::StringToInt(value, &access_point));
+ CHECK_GE(
+ access_point,
+ static_cast<int>(signin_metrics::AccessPoint::ACCESS_POINT_START_PAGE));
+ CHECK_LT(access_point,
+ static_cast<int>(signin_metrics::AccessPoint::ACCESS_POINT_MAX));
+ return static_cast<signin_metrics::AccessPoint>(access_point);
+}
+
+signin_metrics::Reason GetSigninReasonForPromoURL(const GURL& url) {
+ std::string value;
+ if (!net::GetValueForKeyInQuery(url, kSignInPromoQueryKeyReason, &value))
+ return signin_metrics::Reason::REASON_MAX;
+
+ int reason = 0;
+ CHECK(base::StringToInt(value, &reason));
+ CHECK_GE(reason, static_cast<int>(
+ signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT));
+ CHECK_LT(reason, static_cast<int>(signin_metrics::Reason::REASON_MAX));
+ return static_cast<signin_metrics::Reason>(reason);
}
bool IsAutoCloseEnabledInURL(const GURL& url) {
diff --git a/chrome/browser/signin/signin_promo.h b/chrome/browser/signin/signin_promo.h
index c4a77f9..f6f7143 100644
--- a/chrome/browser/signin/signin_promo.h
+++ b/chrome/browser/signin/signin_promo.h
@@ -21,8 +21,10 @@ class PrefRegistrySyncable;
// Utility functions for sign in promos.
namespace signin {
+const char kSignInPromoQueryKeyAccessPoint[] = "access_point";
const char kSignInPromoQueryKeyAutoClose[] = "auto_close";
const char kSignInPromoQueryKeyContinue[] = "continue";
+const char kSignInPromoQueryKeyReason[] = "reason";
const char kSignInPromoQueryKeySource[] = "source";
const char kSignInPromoQueryKeyConstrained[] = "constrained";
const char kSignInPromoQueryKeyShowAccountManagement[] =
@@ -43,24 +45,32 @@ void DidShowPromoAtStartup(Profile* profile);
void SetUserSkippedPromo(Profile* profile);
// Gets the sign in landing page URL.
-GURL GetLandingURL(const char* option, int value);
+GURL GetLandingURL(signin_metrics::AccessPoint access_point);
// Returns the sign in promo URL wth the given arguments in the query.
-// |source| identifies from where the sign in promo is being called, and is
-// used to record sync promo UMA stats in the context of the source.
+// |access_point| indicates where the sign in is being initiated.
+// |reason| indicates the purpose of using this URL.
// |auto_close| whether to close the sign in promo automatically when done.
// |is_constrained} whether to load the URL in a constrained window, false
// by default.
-GURL GetPromoURL(signin_metrics::Source source, bool auto_close);
-GURL GetPromoURL(signin_metrics::Source source,
+GURL GetPromoURL(signin_metrics::AccessPoint access_point,
+ signin_metrics::Reason reason,
+ bool auto_close);
+GURL GetPromoURL(signin_metrics::AccessPoint access_point,
+ signin_metrics::Reason reason,
bool auto_close,
bool is_constrained);
// Returns a sign in promo URL specifically for reauthenticating |account_id|.
-GURL GetReauthURL(Profile* profile, const std::string& account_id);
+GURL GetReauthURL(signin_metrics::AccessPoint access_point,
+ signin_metrics::Reason reason,
+ Profile* profile,
+ const std::string& account_id);
// Returns a sign in promo URL specifically for reauthenticating |email|.
-GURL GetReauthURLWithEmail(const std::string& email);
+GURL GetReauthURLWithEmail(signin_metrics::AccessPoint access_point,
+ signin_metrics::Reason reason,
+ const std::string& email);
// Gets the next page URL from the query portion of the sign in promo URL.
GURL GetNextPageURLForPromoURL(const GURL& url);
@@ -71,11 +81,14 @@ GURL GetSigninPartitionURL();
// Gets the signin URL to be used to display the sign in flow for |mode| in
// |profile|.
GURL GetSigninURLFromBubbleViewMode(Profile* profile,
- profiles::BubbleViewMode mode);
+ profiles::BubbleViewMode mode,
+ signin_metrics::AccessPoint access_point);
-// Gets the source from the query portion of the sign in promo URL.
-// The source identifies from where the sign in promo was opened.
-signin_metrics::Source GetSourceForPromoURL(const GURL& url);
+// Gets the access point from the query portion of the sign in promo URL.
+signin_metrics::AccessPoint GetAccessPointForPromoURL(const GURL& url);
+
+// Gets the sign in reason from the query portion of the sign in promo URL.
+signin_metrics::Reason GetSigninReasonForPromoURL(const GURL& url);
// Returns true if the auto_close parameter in the given URL is set to true.
bool IsAutoCloseEnabledInURL(const GURL& url);
diff --git a/chrome/browser/ui/bookmarks/bookmark_bubble_sign_in_delegate.cc b/chrome/browser/ui/bookmarks/bookmark_bubble_sign_in_delegate.cc
index 6400e2d..b78d631 100644
--- a/chrome/browser/ui/bookmarks/bookmark_bubble_sign_in_delegate.cc
+++ b/chrome/browser/ui/bookmarks/bookmark_bubble_sign_in_delegate.cc
@@ -25,7 +25,8 @@ BookmarkBubbleSignInDelegate::~BookmarkBubbleSignInDelegate() {
void BookmarkBubbleSignInDelegate::OnSignInLinkClicked() {
EnsureBrowser();
- chrome::ShowBrowserSignin(browser_, signin_metrics::SOURCE_BOOKMARK_BUBBLE);
+ chrome::ShowBrowserSignin(
+ browser_, signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_BUBBLE);
}
void BookmarkBubbleSignInDelegate::OnBrowserRemoved(Browser* browser) {
diff --git a/chrome/browser/ui/browser_command_controller.cc b/chrome/browser/ui/browser_command_controller.cc
index ac6ec7d..ac6d4e8 100644
--- a/chrome/browser/ui/browser_command_controller.cc
+++ b/chrome/browser/ui/browser_command_controller.cc
@@ -781,7 +781,8 @@ void BrowserCommandController::ExecuteCommandWithDisposition(
ShowHelp(browser_, HELP_SOURCE_MENU);
break;
case IDC_SHOW_SIGNIN:
- ShowBrowserSigninOrSettings(browser_, signin_metrics::SOURCE_MENU);
+ ShowBrowserSigninOrSettings(
+ browser_, signin_metrics::AccessPoint::ACCESS_POINT_MENU);
break;
case IDC_DISTILL_PAGE:
DistillCurrentPage(browser_);
diff --git a/chrome/browser/ui/browser_commands.cc b/chrome/browser/ui/browser_commands.cc
index 0af8c48..8ea5de4 100644
--- a/chrome/browser/ui/browser_commands.cc
+++ b/chrome/browser/ui/browser_commands.cc
@@ -1103,14 +1103,15 @@ void ShowAppMenu(Browser* browser) {
void ShowAvatarMenu(Browser* browser) {
browser->window()->ShowAvatarBubbleFromAvatarButton(
- BrowserWindow::AVATAR_BUBBLE_MODE_DEFAULT,
- signin::ManageAccountsParams());
+ BrowserWindow::AVATAR_BUBBLE_MODE_DEFAULT, signin::ManageAccountsParams(),
+ signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN);
}
void ShowFastUserSwitcher(Browser* browser) {
browser->window()->ShowAvatarBubbleFromAvatarButton(
BrowserWindow::AVATAR_BUBBLE_MODE_FAST_USER_SWITCH,
- signin::ManageAccountsParams());
+ signin::ManageAccountsParams(),
+ signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN);
}
void OpenUpdateChromeDialog(Browser* browser) {
diff --git a/chrome/browser/ui/browser_mac.cc b/chrome/browser/ui/browser_mac.cc
index 9606835..05f1a63 100644
--- a/chrome/browser/ui/browser_mac.cc
+++ b/chrome/browser/ui/browser_mac.cc
@@ -51,11 +51,12 @@ void OpenOptionsWindow(Profile* profile) {
browser->window()->Show();
}
-void OpenSyncSetupWindow(Profile* profile, signin_metrics::Source source) {
+void OpenSyncSetupWindow(Profile* profile,
+ signin_metrics::AccessPoint access_point) {
Browser* browser =
new Browser(Browser::CreateParams(profile,
chrome::HOST_DESKTOP_TYPE_NATIVE));
- ShowBrowserSigninOrSettings(browser, source);
+ ShowBrowserSigninOrSettings(browser, access_point);
browser->window()->Show();
}
diff --git a/chrome/browser/ui/browser_mac.h b/chrome/browser/ui/browser_mac.h
index 4ecd1b7..2c11822 100644
--- a/chrome/browser/ui/browser_mac.h
+++ b/chrome/browser/ui/browser_mac.h
@@ -19,7 +19,8 @@ void OpenHistoryWindow(Profile* profile);
void OpenDownloadsWindow(Profile* profile);
void OpenHelpWindow(Profile* profile, HelpSource source);
void OpenOptionsWindow(Profile* profile);
-void OpenSyncSetupWindow(Profile* profile, signin_metrics::Source source);
+void OpenSyncSetupWindow(Profile* profile,
+ signin_metrics::AccessPoint access_point);
void OpenClearBrowsingDataDialogWindow(Profile* profile);
void OpenImportSettingsDialogWindow(Profile* profile);
void OpenBookmarkManagerWindow(Profile* profile);
diff --git a/chrome/browser/ui/browser_window.h b/chrome/browser/ui/browser_window.h
index 668a98c..3301b13 100644
--- a/chrome/browser/ui/browser_window.h
+++ b/chrome/browser/ui/browser_window.h
@@ -57,6 +57,10 @@ class Rect;
class Size;
}
+namespace signin_metrics {
+enum class AccessPoint;
+}
+
namespace web_modal {
class WebContentsModalDialogHost;
}
@@ -363,6 +367,8 @@ class BrowserWindow : public ui::BaseWindow {
// Shows the avatar bubble on the window frame off of the avatar button with
// the given mode. The Service Type specified by GAIA is provided as well.
+ // |access_point| indicates the access point used to open the Gaia sign in
+ // page.
enum AvatarBubbleMode {
AVATAR_BUBBLE_MODE_DEFAULT,
AVATAR_BUBBLE_MODE_ACCOUNT_MANAGEMENT,
@@ -373,11 +379,17 @@ class BrowserWindow : public ui::BaseWindow {
AVATAR_BUBBLE_MODE_SHOW_ERROR,
AVATAR_BUBBLE_MODE_FAST_USER_SWITCH,
};
- virtual void ShowAvatarBubbleFromAvatarButton(AvatarBubbleMode mode,
- const signin::ManageAccountsParams& manage_accounts_params) = 0;
+ virtual void ShowAvatarBubbleFromAvatarButton(
+ AvatarBubbleMode mode,
+ const signin::ManageAccountsParams& manage_accounts_params,
+ signin_metrics::AccessPoint access_point) = 0;
// Shows the signin flow for |mode| in a tab-modal dialog.
- virtual void ShowModalSigninWindow(AvatarBubbleMode mode) = 0;
+ // |access_point| indicates the access point used to open the Gaia sign in
+ // page.
+ virtual void ShowModalSigninWindow(
+ AvatarBubbleMode mode,
+ signin_metrics::AccessPoint access_point) = 0;
// Closes the tab-modal signin flow opened with ShowModalSigninWindow, if it's
// open. Does nothing otherwise.
diff --git a/chrome/browser/ui/chrome_pages.cc b/chrome/browser/ui/chrome_pages.cc
index 35609ea..80a3a9f 100644
--- a/chrome/browser/ui/chrome_pages.cc
+++ b/chrome/browser/ui/chrome_pages.cc
@@ -357,7 +357,8 @@ void ShowSearchEngineSettings(Browser* browser) {
}
#if !defined(OS_ANDROID) && !defined(OS_IOS)
-void ShowBrowserSignin(Browser* browser, signin_metrics::Source source) {
+void ShowBrowserSignin(Browser* browser,
+ signin_metrics::AccessPoint access_point) {
Profile* original_profile = browser->profile()->GetOriginalProfile();
SigninManagerBase* manager =
SigninManagerFactory::GetForProfile(original_profile);
@@ -374,14 +375,13 @@ void ShowBrowserSignin(Browser* browser, signin_metrics::Source source) {
browser = displayer->browser();
}
- signin_metrics::LogSigninSource(source);
-
- // Since the app launcher is a separate application, it might steal focus
+ // Since the extension is a separate application, it might steal focus
// away from Chrome, and accidentally close the avatar bubble. The same will
// happen if we had to switch browser windows to show the sign in page. In
// this case, fallback to the full-tab signin page.
bool show_avatar_bubble =
- source != signin_metrics::SOURCE_APP_LAUNCHER && !switched_browser;
+ access_point != signin_metrics::AccessPoint::ACCESS_POINT_EXTENSIONS &&
+ !switched_browser;
#if defined(OS_CHROMEOS)
// ChromeOS doesn't have the avatar bubble.
show_avatar_bubble = false;
@@ -390,16 +390,19 @@ void ShowBrowserSignin(Browser* browser, signin_metrics::Source source) {
if (show_avatar_bubble) {
browser->window()->ShowAvatarBubbleFromAvatarButton(
BrowserWindow::AVATAR_BUBBLE_MODE_SIGNIN,
- signin::ManageAccountsParams());
+ signin::ManageAccountsParams(), access_point);
} else {
- NavigateToSingletonTab(browser, GURL(signin::GetPromoURL(source, false)));
+ NavigateToSingletonTab(
+ browser,
+ signin::GetPromoURL(
+ access_point, signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT,
+ false));
DCHECK_GT(browser->tab_strip_model()->count(), 0);
}
}
-void ShowBrowserSigninOrSettings(
- Browser* browser,
- signin_metrics::Source source) {
+void ShowBrowserSigninOrSettings(Browser* browser,
+ signin_metrics::AccessPoint access_point) {
Profile* original_profile = browser->profile()->GetOriginalProfile();
SigninManagerBase* manager =
SigninManagerFactory::GetForProfile(original_profile);
@@ -407,7 +410,7 @@ void ShowBrowserSigninOrSettings(
if (manager->IsAuthenticated())
ShowSettings(browser);
else
- ShowBrowserSignin(browser, source);
+ ShowBrowserSignin(browser, access_point);
}
#endif
diff --git a/chrome/browser/ui/chrome_pages.h b/chrome/browser/ui/chrome_pages.h
index 72f4e03..4b2ff57 100644
--- a/chrome/browser/ui/chrome_pages.h
+++ b/chrome/browser/ui/chrome_pages.h
@@ -92,12 +92,13 @@ void ShowSearchEngineSettings(Browser* browser);
#if !defined(OS_ANDROID) && !defined(OS_IOS)
// Initiates signin in a new browser tab.
-void ShowBrowserSignin(Browser* browser, signin_metrics::Source source);
+void ShowBrowserSignin(Browser* browser,
+ signin_metrics::AccessPoint access_point);
// If the user is already signed in, shows the "Signin" portion of Settings,
// otherwise initiates signin in a new browser tab.
void ShowBrowserSigninOrSettings(Browser* browser,
- signin_metrics::Source source);
+ signin_metrics::AccessPoint access_point);
#endif
} // namespace chrome
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_sync_promo_controller.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_sync_promo_controller.mm
index be3a25d..be81a2e 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_sync_promo_controller.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_sync_promo_controller.mm
@@ -108,7 +108,8 @@ const int kFontSize = 11;
- (BOOL)textView:(NSTextView *)textView
clickedOnLink:(id)link
atIndex:(NSUInteger)charIndex {
- chrome::ShowBrowserSignin(browser_, signin_metrics::SOURCE_BOOKMARK_BUBBLE);
+ chrome::ShowBrowserSignin(
+ browser_, signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_BUBBLE);
return YES;
}
diff --git a/chrome/browser/ui/cocoa/browser_window_cocoa.h b/chrome/browser/ui/cocoa/browser_window_cocoa.h
index e6b9d2e..5a354b3 100644
--- a/chrome/browser/ui/cocoa/browser_window_cocoa.h
+++ b/chrome/browser/ui/cocoa/browser_window_cocoa.h
@@ -158,8 +158,10 @@ class BrowserWindowCocoa
override;
void ShowAvatarBubbleFromAvatarButton(
AvatarBubbleMode mode,
- const signin::ManageAccountsParams& manage_accounts_params) override;
- void ShowModalSigninWindow(AvatarBubbleMode mode) override;
+ const signin::ManageAccountsParams& manage_accounts_params,
+ signin_metrics::AccessPoint access_point) override;
+ void ShowModalSigninWindow(AvatarBubbleMode mode,
+ signin_metrics::AccessPoint access_point) override;
void CloseModalSigninWindow() override;
int GetRenderViewHeightInsetWithDetachedBookmarkBar() override;
void ExecuteExtensionCommand(const extensions::Extension* extension,
diff --git a/chrome/browser/ui/cocoa/browser_window_cocoa.mm b/chrome/browser/ui/cocoa/browser_window_cocoa.mm
index c1982e0c..9a6071a 100644
--- a/chrome/browser/ui/cocoa/browser_window_cocoa.mm
+++ b/chrome/browser/ui/cocoa/browser_window_cocoa.mm
@@ -840,17 +840,21 @@ NSWindow* BrowserWindowCocoa::window() const {
void BrowserWindowCocoa::ShowAvatarBubbleFromAvatarButton(
AvatarBubbleMode mode,
- const signin::ManageAccountsParams& manage_accounts_params) {
+ const signin::ManageAccountsParams& manage_accounts_params,
+ signin_metrics::AccessPoint access_point) {
AvatarBaseController* controller = [controller_ avatarButtonController];
NSView* anchor = [controller buttonView];
if ([anchor isHiddenOrHasHiddenAncestor])
anchor = [[controller_ toolbarController] wrenchButton];
[controller showAvatarBubbleAnchoredAt:anchor
withMode:mode
- withServiceType:manage_accounts_params.service_type];
+ withServiceType:manage_accounts_params.service_type
+ fromAccessPoint:access_point];
}
-void BrowserWindowCocoa::ShowModalSigninWindow(AvatarBubbleMode mode) {
+void BrowserWindowCocoa::ShowModalSigninWindow(
+ AvatarBubbleMode mode,
+ signin_metrics::AccessPoint access_point) {
NOTREACHED();
}
void BrowserWindowCocoa::CloseModalSigninWindow() {
diff --git a/chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller.mm b/chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller.mm
index 63883b0..77c9a1b 100644
--- a/chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller.mm
+++ b/chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller.mm
@@ -224,8 +224,9 @@ void ExtensionInstalledBubbleBridge::UpdateAnchorPosition() {
clickedOnLink:(id)link
atIndex:(NSUInteger)charIndex {
DCHECK_EQ(promo_.get(), aTextView);
- chrome::ShowBrowserSignin(browser_,
- signin_metrics::SOURCE_EXTENSION_INSTALL_BUBBLE);
+ chrome::ShowBrowserSignin(
+ browser_,
+ signin_metrics::AccessPoint::ACCESS_POINT_EXTENSION_INSTALL_BUBBLE);
return YES;
}
diff --git a/chrome/browser/ui/cocoa/profiles/avatar_base_controller.h b/chrome/browser/ui/cocoa/profiles/avatar_base_controller.h
index 01d2527..8d2fb97 100644
--- a/chrome/browser/ui/cocoa/profiles/avatar_base_controller.h
+++ b/chrome/browser/ui/cocoa/profiles/avatar_base_controller.h
@@ -44,7 +44,8 @@ class ProfileInfoUpdateObserver;
// Shows the avatar bubble in the given mode.
- (void)showAvatarBubbleAnchoredAt:(NSView*)anchor
withMode:(BrowserWindow::AvatarBubbleMode)mode
- withServiceType:(signin::GAIAServiceType)serviceType;
+ withServiceType:(signin::GAIAServiceType)serviceType
+ fromAccessPoint:(signin_metrics::AccessPoint)accessPoint;
@end
diff --git a/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm b/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm
index abda2f1..24a969d 100644
--- a/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm
+++ b/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm
@@ -145,7 +145,8 @@ class ProfileInfoUpdateObserver : public ProfileInfoCacheObserver,
- (void)showAvatarBubbleAnchoredAt:(NSView*)anchor
withMode:(BrowserWindow::AvatarBubbleMode)mode
- withServiceType:(signin::GAIAServiceType)serviceType {
+ withServiceType:(signin::GAIAServiceType)serviceType
+ fromAccessPoint:(signin_metrics::AccessPoint)accessPoint {
if (menuController_) {
profiles::BubbleViewMode viewMode;
profiles::TutorialMode tutorialMode;
@@ -196,7 +197,8 @@ class ProfileInfoUpdateObserver : public ProfileInfoCacheObserver,
anchoredAt:point
viewMode:viewMode
tutorialMode:tutorialMode
- serviceType:serviceType];
+ serviceType:serviceType
+ accessPoint:accessPoint];
[[NSNotificationCenter defaultCenter]
addObserver:self
@@ -220,7 +222,9 @@ class ProfileInfoUpdateObserver : public ProfileInfoCacheObserver,
[self showAvatarBubbleAnchoredAt:button_
withMode:mode
- withServiceType:signin::GAIA_SERVICE_TYPE_NONE];
+ withServiceType:signin::GAIA_SERVICE_TYPE_NONE
+ fromAccessPoint:signin_metrics::AccessPoint::
+ ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN];
}
- (IBAction)buttonRightClicked:(id)sender {
@@ -229,7 +233,9 @@ class ProfileInfoUpdateObserver : public ProfileInfoCacheObserver,
[self showAvatarBubbleAnchoredAt:button_
withMode:mode
- withServiceType:signin::GAIA_SERVICE_TYPE_NONE];
+ withServiceType:signin::GAIA_SERVICE_TYPE_NONE
+ fromAccessPoint:signin_metrics::AccessPoint::
+ ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN];
}
- (void)bubbleWillClose:(NSNotification*)notif {
diff --git a/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h b/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h
index 4df0939..722d129 100644
--- a/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h
+++ b/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h
@@ -23,6 +23,11 @@ class ProfileOAuth2TokenService;
namespace content {
class WebContents;
}
+
+namespace signin_metrics {
+enum class AccessPoint;
+}
+
class GaiaWebContentsDelegate;
// This window controller manages the bubble that displays a "menu" of profiles.
@@ -64,13 +69,17 @@ class GaiaWebContentsDelegate;
// The GAIA service type that caused this menu to open.
signin::GAIAServiceType serviceType_;
+
+ // The current access point of sign in.
+ signin_metrics::AccessPoint accessPoint_;
}
- (id)initWithBrowser:(Browser*)browser
anchoredAt:(NSPoint)point
viewMode:(profiles::BubbleViewMode)viewMode
tutorialMode:(profiles::TutorialMode)tutorialMode
- serviceType:(signin::GAIAServiceType)GAIAServiceType;
+ serviceType:(signin::GAIAServiceType)GAIAServiceType
+ accessPoint:(signin_metrics::AccessPoint)accessPoint;
// Creates all the subviews of the avatar bubble for |viewToDisplay|.
- (void)initMenuContentsWithView:(profiles::BubbleViewMode)viewToDisplay;
diff --git a/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm b/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm
index a4346b0..46cfa20 100644
--- a/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm
+++ b/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm
@@ -50,6 +50,7 @@
#include "chrome/grit/generated_resources.h"
#include "components/signin/core/browser/profile_oauth2_token_service.h"
#include "components/signin/core/browser/signin_manager.h"
+#include "components/signin/core/browser/signin_metrics.h"
#include "components/signin/core/common/profile_management_switches.h"
#include "content/public/browser/native_web_keyboard_event.h"
#include "content/public/browser/notification_service.h"
@@ -1194,7 +1195,8 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
anchoredAt:(NSPoint)point
viewMode:(profiles::BubbleViewMode)viewMode
tutorialMode:(profiles::TutorialMode)tutorialMode
- serviceType:(signin::GAIAServiceType)serviceType {
+ serviceType:(signin::GAIAServiceType)serviceType
+ accessPoint:(signin_metrics::AccessPoint)accessPoint {
base::scoped_nsobject<InfoBubbleWindow> window([[InfoBubbleWindow alloc]
initWithContentRect:ui::kWindowSizeDeterminedLater
styleMask:NSBorderlessWindowMask
@@ -1209,6 +1211,7 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
tutorialMode_ = tutorialMode;
observer_.reset(new ActiveProfileObserverBridge(self, browser_));
serviceType_ = serviceType;
+ accessPoint_ = accessPoint;
avatarMenu_.reset(new AvatarMenu(
&g_browser_process->profile_manager()->GetProfileInfoCache(),
@@ -2076,21 +2079,21 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
int messageId = -1;
switch (viewMode_) {
case profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN:
- url = signin::GetPromoURL(signin_metrics::SOURCE_AVATAR_BUBBLE_SIGN_IN,
- false /* auto_close */,
- true /* is_constrained */);
+ url = signin::GetPromoURL(
+ accessPoint_, signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT,
+ false /* auto_close */, true /* is_constrained */);
messageId = IDS_PROFILES_GAIA_SIGNIN_TITLE;
break;
case profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT:
url = signin::GetPromoURL(
- signin_metrics::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT,
- false /* auto_close */,
- true /* is_constrained */);
+ accessPoint_, signin_metrics::Reason::REASON_ADD_SECONDARY_ACCOUNT,
+ false /* auto_close */, true /* is_constrained */);
messageId = IDS_PROFILES_GAIA_ADD_ACCOUNT_TITLE;
break;
case profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH:
DCHECK(HasAuthError(browser_->profile()));
url = signin::GetReauthURL(
+ accessPoint_, signin_metrics::Reason::REASON_REAUTHENTICATION,
browser_->profile(), GetAuthErrorAccountId(browser_->profile()));
messageId = IDS_PROFILES_GAIA_REAUTH_TITLE;
break;
diff --git a/chrome/browser/ui/cocoa/profiles/profile_chooser_controller_unittest.mm b/chrome/browser/ui/cocoa/profiles/profile_chooser_controller_unittest.mm
index ee721b0..7520220 100644
--- a/chrome/browser/ui/cocoa/profiles/profile_chooser_controller_unittest.mm
+++ b/chrome/browser/ui/cocoa/profiles/profile_chooser_controller_unittest.mm
@@ -95,7 +95,9 @@ class ProfileChooserControllerTest : public CocoaProfileTest {
anchoredAt:point
viewMode:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER
tutorialMode:mode
- serviceType:signin::GAIA_SERVICE_TYPE_NONE]);
+ serviceType:signin::GAIA_SERVICE_TYPE_NONE
+ accessPoint:signin_metrics::AccessPoint::
+ ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN]);
[controller_ showWindow:nil];
}
@@ -134,7 +136,9 @@ class ProfileChooserControllerTest : public CocoaProfileTest {
anchoredAt:point
viewMode:profiles::BUBBLE_VIEW_MODE_FAST_PROFILE_CHOOSER
tutorialMode:profiles::TUTORIAL_MODE_NONE
- serviceType:signin::GAIA_SERVICE_TYPE_NONE]);
+ serviceType:signin::GAIA_SERVICE_TYPE_NONE
+ accessPoint:signin_metrics::AccessPoint::
+ ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN]);
[controller_ showWindow:nil];
}
diff --git a/chrome/browser/ui/cocoa/profiles/user_manager_mac.mm b/chrome/browser/ui/cocoa/profiles/user_manager_mac.mm
index e5bf1c2..aa80c6e 100644
--- a/chrome/browser/ui/cocoa/profiles/user_manager_mac.mm
+++ b/chrome/browser/ui/cocoa/profiles/user_manager_mac.mm
@@ -219,7 +219,9 @@ class ReauthDialogDelegate : public UserManager::ReauthDialogObserver,
}
- (void)show {
- GURL url = signin::GetReauthURLWithEmail(emailAddress_);
+ GURL url = signin::GetReauthURLWithEmail(
+ signin_metrics::AccessPoint::ACCESS_POINT_USER_MANAGER,
+ signin_metrics::Reason::REASON_UNLOCK, emailAddress_);
reauthWebContents_->GetController().LoadURL(url, content::Referrer(),
ui::PAGE_TRANSITION_AUTO_TOPLEVEL,
std::string());
diff --git a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
index e0fadee..afc324f 100644
--- a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
@@ -135,6 +135,12 @@ void ProcessCommandLineAlreadyRunningDefaultProfile(
}
#endif // defined(OS_WIN)
+GURL GetSigninPromoURL() {
+ return signin::GetPromoURL(
+ signin_metrics::AccessPoint::ACCESS_POINT_START_PAGE,
+ signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT, false);
+}
+
} // namespace
class StartupBrowserCreatorTest : public ExtensionBrowserTest {
@@ -614,8 +620,7 @@ IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, SyncPromoNoWelcomePage) {
if (signin::ShouldShowPromoAtStartup(browser()->profile(), true)) {
// The browser should show only the promo.
ASSERT_EQ(1, tab_strip->count());
- EXPECT_EQ(signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false),
- tab_strip->GetWebContentsAt(0)->GetURL());
+ EXPECT_EQ(GetSigninPromoURL(), tab_strip->GetWebContentsAt(0)->GetURL());
} else if (IsWindows10OrNewer()) {
// The browser should show the welcome page and the NTP.
ASSERT_EQ(2, tab_strip->count());
@@ -655,8 +660,7 @@ IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, SyncPromoWithWelcomePage) {
tab_strip->GetWebContentsAt(1)->GetURL());
} else {
if (signin::ShouldShowPromoAtStartup(browser()->profile(), true)) {
- EXPECT_EQ(signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false),
- tab_strip->GetWebContentsAt(0)->GetURL());
+ EXPECT_EQ(GetSigninPromoURL(), tab_strip->GetWebContentsAt(0)->GetURL());
} else {
EXPECT_EQ(GURL(chrome::kChromeUINewTabURL),
tab_strip->GetWebContentsAt(0)->GetURL());
@@ -691,8 +695,7 @@ IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, SyncPromoWithFirstRunTabs) {
TabStripModel* tab_strip = new_browser->tab_strip_model();
if (signin::ShouldShowPromoAtStartup(browser()->profile(), true)) {
EXPECT_EQ(2, tab_strip->count());
- EXPECT_EQ(signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false),
- tab_strip->GetWebContentsAt(0)->GetURL());
+ EXPECT_EQ(GetSigninPromoURL(), tab_strip->GetWebContentsAt(0)->GetURL());
EXPECT_EQ("title1.html",
tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName());
} else {
@@ -726,8 +729,7 @@ IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest,
TabStripModel* tab_strip = new_browser->tab_strip_model();
if (signin::ShouldShowPromoAtStartup(browser()->profile(), true)) {
EXPECT_EQ(3, tab_strip->count());
- EXPECT_EQ(signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false),
- tab_strip->GetWebContentsAt(0)->GetURL());
+ EXPECT_EQ(GetSigninPromoURL(), tab_strip->GetWebContentsAt(0)->GetURL());
EXPECT_EQ("title1.html",
tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName());
EXPECT_EQ(internals::GetWelcomePageURL(),
@@ -1407,8 +1409,7 @@ IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest,
// Verify that the sync promo and the welcome page are shown.
TabStripModel* tab_strip = new_browser->tab_strip_model();
ASSERT_EQ(2, tab_strip->count());
- EXPECT_EQ(signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false),
- tab_strip->GetWebContentsAt(0)->GetURL());
+ EXPECT_EQ(GetSigninPromoURL(), tab_strip->GetWebContentsAt(0)->GetURL());
EXPECT_EQ(internals::GetWelcomePageURL(),
tab_strip->GetWebContentsAt(1)->GetURL());
}
@@ -1453,8 +1454,7 @@ IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest,
// Verify that the first-run tab is shown and the sync promo has been added.
TabStripModel* tab_strip = new_browser->tab_strip_model();
ASSERT_EQ(2, tab_strip->count());
- EXPECT_EQ(signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false),
- tab_strip->GetWebContentsAt(0)->GetURL());
+ EXPECT_EQ(GetSigninPromoURL(), tab_strip->GetWebContentsAt(0)->GetURL());
EXPECT_EQ("title1.html",
tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName());
}
@@ -1484,8 +1484,7 @@ IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest,
StartupBrowserCreator browser_creator;
browser_creator.AddFirstRunTab(
embedded_test_server()->GetURL("/title1.html"));
- browser_creator.AddFirstRunTab(
- signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false));
+ browser_creator.AddFirstRunTab(GetSigninPromoURL());
browser()->profile()->GetPrefs()->SetBoolean(
prefs::kSignInPromoShowOnFirstRunAllowed, true);
@@ -1506,8 +1505,7 @@ IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest,
ASSERT_EQ(2, tab_strip->count());
EXPECT_EQ("title1.html",
tab_strip->GetWebContentsAt(0)->GetURL().ExtractFileName());
- EXPECT_EQ(signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false),
- tab_strip->GetWebContentsAt(1)->GetURL());
+ EXPECT_EQ(GetSigninPromoURL(), tab_strip->GetWebContentsAt(1)->GetURL());
}
#if defined(GOOGLE_CHROME_BUILD) && defined(OS_MACOSX)
@@ -1555,8 +1553,7 @@ IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorFirstRunTest,
// been replaced by the sync promo.
TabStripModel* tab_strip = new_browser->tab_strip_model();
ASSERT_EQ(2, tab_strip->count());
- EXPECT_EQ(signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false),
- tab_strip->GetWebContentsAt(0)->GetURL());
+ EXPECT_EQ(GetSigninPromoURL(), tab_strip->GetWebContentsAt(0)->GetURL());
EXPECT_EQ("title1.html",
tab_strip->GetWebContentsAt(1)->GetURL().ExtractFileName());
}
diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl.cc b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
index 95cae74..98cb2c4 100644
--- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
@@ -872,7 +872,8 @@ void StartupBrowserCreatorImpl::AddStartupURLs(
signin::DidShowPromoAtStartup(profile_);
const GURL sync_promo_url = signin::GetPromoURL(
- signin_metrics::SOURCE_START_PAGE, false);
+ signin_metrics::AccessPoint::ACCESS_POINT_START_PAGE,
+ signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT, false);
// No need to add if the sync promo is already in the startup list.
bool add_promo = true;
diff --git a/chrome/browser/ui/startup/startup_browser_creator_triggered_reset_browsertest_win.cc b/chrome/browser/ui/startup/startup_browser_creator_triggered_reset_browsertest_win.cc
index 6ebb1b9..36a7265 100644
--- a/chrome/browser/ui/startup/startup_browser_creator_triggered_reset_browsertest_win.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator_triggered_reset_browsertest_win.cc
@@ -175,7 +175,9 @@ IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTriggeredResetTest,
GURL expected_first_tab_url =
signin::ShouldShowPromoAtStartup(browser()->profile(), true)
- ? signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false)
+ ? signin::GetPromoURL(
+ signin_metrics::AccessPoint::ACCESS_POINT_START_PAGE,
+ signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT, false)
: GURL(chrome::kChromeUINewTabURL);
EXPECT_EQ(expected_first_tab_url, tab_strip->GetWebContentsAt(0)->GetURL());
diff --git a/chrome/browser/ui/sync/one_click_signin_sync_observer.cc b/chrome/browser/ui/sync/one_click_signin_sync_observer.cc
index 69069dd..38ed198 100644
--- a/chrome/browser/ui/sync/one_click_signin_sync_observer.cc
+++ b/chrome/browser/ui/sync/one_click_signin_sync_observer.cc
@@ -79,8 +79,8 @@ void OneClickSigninSyncObserver::OnStateChanged() {
}
if (sync_service->IsSyncActive() &&
- signin::GetSourceForPromoURL(continue_url_)
- != signin_metrics::SOURCE_SETTINGS) {
+ signin::GetAccessPointForPromoURL(continue_url_) !=
+ signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS) {
// TODO(isherman): Having multiple settings pages open can cause issues
// redirecting after Sync is set up: http://crbug.com/355885
LoadContinueUrl();
diff --git a/chrome/browser/ui/sync/one_click_signin_sync_observer_unittest.cc b/chrome/browser/ui/sync/one_click_signin_sync_observer_unittest.cc
index e1a0c32..ced33b0 100644
--- a/chrome/browser/ui/sync/one_click_signin_sync_observer_unittest.cc
+++ b/chrome/browser/ui/sync/one_click_signin_sync_observer_unittest.cc
@@ -236,7 +236,8 @@ TEST_F(OneClickSigninSyncObserverTest,
TEST_F(OneClickSigninSyncObserverTest,
OnSyncStateChanged_SyncConfiguredSuccessfully_SourceIsSettings) {
GURL continue_url = signin::GetPromoURL(
- signin_metrics::SOURCE_SETTINGS, false);
+ signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS,
+ signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT, false);
CreateSyncObserver(continue_url.spec());
sync_service_->set_first_setup_in_progress(false);
sync_service_->set_sync_active(true);
diff --git a/chrome/browser/ui/sync/one_click_signin_sync_starter.cc b/chrome/browser/ui/sync/one_click_signin_sync_starter.cc
index 61e6906..6a0c0e1 100644
--- a/chrome/browser/ui/sync/one_click_signin_sync_starter.cc
+++ b/chrome/browser/ui/sync/one_click_signin_sync_starter.cc
@@ -79,6 +79,7 @@ OneClickSigninSyncStarter::OneClickSigninSyncStarter(
StartSyncMode start_mode,
content::WebContents* web_contents,
ConfirmationRequired confirmation_required,
+ const GURL& current_url,
const GURL& continue_url,
Callback sync_setup_completed_callback)
: content::WebContentsObserver(web_contents),
@@ -86,6 +87,7 @@ OneClickSigninSyncStarter::OneClickSigninSyncStarter(
start_mode_(start_mode),
desktop_type_(chrome::HOST_DESKTOP_TYPE_NATIVE),
confirmation_required_(confirmation_required),
+ current_url_(current_url),
continue_url_(continue_url),
sync_setup_completed_callback_(sync_setup_completed_callback),
weak_pointer_factory_(this) {
@@ -429,6 +431,12 @@ void OneClickSigninSyncStarter::SigninFailed(
}
void OneClickSigninSyncStarter::SigninSuccess() {
+ if (!current_url_.is_valid()) // Could be invalid for tests.
+ return;
+ signin_metrics::LogSigninAccessPointCompleted(
+ signin::GetAccessPointForPromoURL(current_url_));
+ signin_metrics::LogSigninReason(
+ signin::GetSigninReasonForPromoURL(current_url_));
}
void OneClickSigninSyncStarter::AccountAddedToCookie(
diff --git a/chrome/browser/ui/sync/one_click_signin_sync_starter.h b/chrome/browser/ui/sync/one_click_signin_sync_starter.h
index 0e4c815..5309daa 100644
--- a/chrome/browser/ui/sync/one_click_signin_sync_starter.h
+++ b/chrome/browser/ui/sync/one_click_signin_sync_starter.h
@@ -101,6 +101,7 @@ class OneClickSigninSyncStarter : public SigninTracker::Observer,
StartSyncMode start_mode,
content::WebContents* web_contents,
ConfirmationRequired display_confirmation,
+ const GURL& current_url,
const GURL& continue_url,
Callback callback);
@@ -225,6 +226,7 @@ class OneClickSigninSyncStarter : public SigninTracker::Observer,
StartSyncMode start_mode_;
chrome::HostDesktopType desktop_type_;
ConfirmationRequired confirmation_required_;
+ GURL current_url_;
GURL continue_url_;
// Callback executed when sync setup succeeds or fails.
diff --git a/chrome/browser/ui/sync/one_click_signin_sync_starter_unittest.cc b/chrome/browser/ui/sync/one_click_signin_sync_starter_unittest.cc
index 861f648..9cbb628 100644
--- a/chrome/browser/ui/sync/one_click_signin_sync_starter_unittest.cc
+++ b/chrome/browser/ui/sync/one_click_signin_sync_starter_unittest.cc
@@ -75,17 +75,10 @@ class OneClickSigninSyncStarterTest : public ChromeRenderViewHostTestHarness {
void CreateSyncStarter(OneClickSigninSyncStarter::Callback callback,
const GURL& continue_url) {
sync_starter_ = new OneClickSigninSyncStarter(
- profile(),
- NULL,
- kTestingGaiaId,
- kTestingUsername,
- std::string(),
- "refresh_token",
- OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS,
- web_contents(),
- OneClickSigninSyncStarter::NO_CONFIRMATION,
- continue_url,
- callback);
+ profile(), NULL, kTestingGaiaId, kTestingUsername, std::string(),
+ "refresh_token", OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS,
+ web_contents(), OneClickSigninSyncStarter::NO_CONFIRMATION, GURL(),
+ continue_url, callback);
}
// Deletes itself when SigninFailed() or SigninSuccess() is called.
diff --git a/chrome/browser/ui/user_manager.cc b/chrome/browser/ui/user_manager.cc
index 2e826f8..9426c81 100644
--- a/chrome/browser/ui/user_manager.cc
+++ b/chrome/browser/ui/user_manager.cc
@@ -44,7 +44,10 @@ void UserManager::ReauthDialogObserver::DidStopLoading() {
// webview and observe it instead. The webview may not be found in the
// initial page load since it loads asynchronously.
if (url.GetOrigin() !=
- signin::GetReauthURLWithEmail(email_address_).GetOrigin()) {
+ signin::GetReauthURLWithEmail(
+ signin_metrics::AccessPoint::ACCESS_POINT_USER_MANAGER,
+ signin_metrics::Reason::REASON_UNLOCK, email_address_)
+ .GetOrigin()) {
return;
}
diff --git a/chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc b/chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc
index 7442f2b..46e291e 100644
--- a/chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc
+++ b/chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc
@@ -422,7 +422,8 @@ void InstalledBubbleContent::LinkClicked(views::Link* source, int event_flags) {
NOTIMPLEMENTED();
#else
chrome::ShowBrowserSignin(
- browser_, signin_metrics::SOURCE_EXTENSION_INSTALL_BUBBLE);
+ browser_,
+ signin_metrics::AccessPoint::ACCESS_POINT_EXTENSION_INSTALL_BUBBLE);
#endif
return;
}
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index 9769133..c260c67 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -2554,7 +2554,8 @@ void BrowserView::UpdateAcceleratorMetrics(const ui::Accelerator& accelerator,
void BrowserView::ShowAvatarBubbleFromAvatarButton(
AvatarBubbleMode mode,
- const signin::ManageAccountsParams& manage_accounts_params) {
+ const signin::ManageAccountsParams& manage_accounts_params,
+ signin_metrics::AccessPoint access_point) {
#if defined(FRAME_AVATAR_BUTTON)
// Do not show avatar bubble if there is no avatar menu button.
if (!frame_->GetNewAvatarMenuButton())
@@ -2566,10 +2567,10 @@ void BrowserView::ShowAvatarBubbleFromAvatarButton(
&tutorial_mode);
if (SigninViewController::ShouldShowModalSigninForMode(bubble_view_mode)) {
- ShowModalSigninWindow(mode);
+ ShowModalSigninWindow(mode, access_point);
} else {
ProfileChooserView::ShowBubble(
- bubble_view_mode, tutorial_mode, manage_accounts_params,
+ bubble_view_mode, tutorial_mode, manage_accounts_params, access_point,
frame_->GetNewAvatarMenuButton(), views::BubbleBorder::TOP_RIGHT,
views::BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE, browser());
ProfileMetrics::LogProfileOpenMethod(ProfileMetrics::ICON_AVATAR_BUBBLE);
@@ -2579,12 +2580,15 @@ void BrowserView::ShowAvatarBubbleFromAvatarButton(
#endif
}
-void BrowserView::ShowModalSigninWindow(AvatarBubbleMode mode) {
+void BrowserView::ShowModalSigninWindow(
+ AvatarBubbleMode mode,
+ signin_metrics::AccessPoint access_point) {
profiles::BubbleViewMode bubble_view_mode;
profiles::TutorialMode tutorial_mode;
profiles::BubbleViewModeFromAvatarBubbleMode(mode, &bubble_view_mode,
&tutorial_mode);
- signin_view_controller_.ShowModalSignin(bubble_view_mode, browser());
+ signin_view_controller_.ShowModalSignin(bubble_view_mode, browser(),
+ access_point);
}
void BrowserView::CloseModalSigninWindow() {
diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h
index 1374534..4f09d1c 100644
--- a/chrome/browser/ui/views/frame/browser_view.h
+++ b/chrome/browser/ui/views/frame/browser_view.h
@@ -364,8 +364,10 @@ class BrowserView : public BrowserWindow,
override;
void ShowAvatarBubbleFromAvatarButton(
AvatarBubbleMode mode,
- const signin::ManageAccountsParams& manage_accounts_params) override;
- void ShowModalSigninWindow(AvatarBubbleMode mode) override;
+ const signin::ManageAccountsParams& manage_accounts_params,
+ signin_metrics::AccessPoint access_point) override;
+ void ShowModalSigninWindow(AvatarBubbleMode mode,
+ signin_metrics::AccessPoint access_point) override;
void CloseModalSigninWindow() override;
int GetRenderViewHeightInsetWithDetachedBookmarkBar() override;
void ExecuteExtensionCommand(const extensions::Extension* extension,
diff --git a/chrome/browser/ui/views/frame/glass_browser_frame_view.cc b/chrome/browser/ui/views/frame/glass_browser_frame_view.cc
index eeff55f..801c90a 100644
--- a/chrome/browser/ui/views/frame/glass_browser_frame_view.cc
+++ b/chrome/browser/ui/views/frame/glass_browser_frame_view.cc
@@ -275,8 +275,8 @@ void GlassBrowserFrameView::ButtonPressed(views::Button* sender,
mode = BrowserWindow::AVATAR_BUBBLE_MODE_FAST_USER_SWITCH;
}
browser_view()->ShowAvatarBubbleFromAvatarButton(
- mode,
- signin::ManageAccountsParams());
+ mode, signin::ManageAccountsParams(),
+ signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN);
}
}
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
index 2129500..597fd14 100644
--- a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
+++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
@@ -328,8 +328,8 @@ void OpaqueBrowserFrameView::ButtonPressed(views::Button* sender,
mode = BrowserWindow::AVATAR_BUBBLE_MODE_FAST_USER_SWITCH;
}
browser_view()->ShowAvatarBubbleFromAvatarButton(
- mode,
- signin::ManageAccountsParams());
+ mode, signin::ManageAccountsParams(),
+ signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN);
#endif
}
}
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view.cc b/chrome/browser/ui/views/profiles/profile_chooser_view.cc
index e7a061e..ea09024 100644
--- a/chrome/browser/ui/views/profiles/profile_chooser_view.cc
+++ b/chrome/browser/ui/views/profiles/profile_chooser_view.cc
@@ -601,6 +601,7 @@ void ProfileChooserView::ShowBubble(
profiles::BubbleViewMode view_mode,
profiles::TutorialMode tutorial_mode,
const signin::ManageAccountsParams& manage_accounts_params,
+ signin_metrics::AccessPoint access_point,
views::View* anchor_view,
views::BubbleBorder::Arrow arrow,
views::BubbleBorder::BubbleAlignment border_alignment,
@@ -621,8 +622,9 @@ void ProfileChooserView::ShowBubble(
return;
}
- profile_bubble_ = new ProfileChooserView(anchor_view, arrow, browser,
- view_mode, tutorial_mode, manage_accounts_params.service_type);
+ profile_bubble_ = new ProfileChooserView(
+ anchor_view, arrow, browser, view_mode, tutorial_mode,
+ manage_accounts_params.service_type, access_point);
views::BubbleDelegateView::CreateBubble(profile_bubble_);
profile_bubble_->set_close_on_deactivate(close_on_deactivate_for_testing_);
profile_bubble_->SetAlignment(border_alignment);
@@ -646,12 +648,14 @@ ProfileChooserView::ProfileChooserView(views::View* anchor_view,
Browser* browser,
profiles::BubbleViewMode view_mode,
profiles::TutorialMode tutorial_mode,
- signin::GAIAServiceType service_type)
+ signin::GAIAServiceType service_type,
+ signin_metrics::AccessPoint access_point)
: BubbleDelegateView(anchor_view, arrow),
browser_(browser),
view_mode_(view_mode),
tutorial_mode_(tutorial_mode),
- gaia_service_type_(service_type) {
+ gaia_service_type_(service_type),
+ access_point_(access_point) {
// Reset the default margins inherited from the BubbleDelegateView.
// Add a small bottom inset so that the bubble's rounded corners show up.
set_margins(gfx::Insets(0, 0, 1, 0));
@@ -843,7 +847,7 @@ void ProfileChooserView::ShowViewFromMode(profiles::BubbleViewMode mode) {
converted_mode = BrowserWindow::AVATAR_BUBBLE_MODE_REAUTH;
}
- browser_->window()->ShowModalSigninWindow(converted_mode);
+ browser_->window()->ShowModalSigninWindow(converted_mode, access_point_);
} else {
ShowView(mode, avatar_menu_.get());
}
@@ -1637,7 +1641,7 @@ void ProfileChooserView::CreateAccountButton(views::GridLayout* layout,
views::View* ProfileChooserView::CreateGaiaSigninView(
views::View** signin_content_view) {
views::WebView* web_view = SigninViewController::CreateGaiaWebView(
- this, view_mode_, browser_->profile());
+ this, view_mode_, browser_->profile(), access_point_);
int message_id;
switch (view_mode_) {
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view.h b/chrome/browser/ui/views/profiles/profile_chooser_view.h
index 923989e..da0eee2 100644
--- a/chrome/browser/ui/views/profiles/profile_chooser_view.h
+++ b/chrome/browser/ui/views/profiles/profile_chooser_view.h
@@ -58,6 +58,7 @@ class ProfileChooserView : public content::WebContentsDelegate,
profiles::BubbleViewMode view_mode,
profiles::TutorialMode tutorial_mode,
const signin::ManageAccountsParams& manage_accounts_params,
+ signin_metrics::AccessPoint access_point,
views::View* anchor_view,
views::BubbleBorder::Arrow arrow,
views::BubbleBorder::BubbleAlignment border_alignment,
@@ -77,7 +78,8 @@ class ProfileChooserView : public content::WebContentsDelegate,
Browser* browser,
profiles::BubbleViewMode view_mode,
profiles::TutorialMode tutorial_mode,
- signin::GAIAServiceType service_type);
+ signin::GAIAServiceType service_type,
+ signin_metrics::AccessPoint access_point);
~ProfileChooserView() override;
// views::BubbleDelegateView:
@@ -272,6 +274,9 @@ class ProfileChooserView : public content::WebContentsDelegate,
// The GAIA service type provided in the response header.
signin::GAIAServiceType gaia_service_type_;
+ // The current access point of sign in.
+ const signin_metrics::AccessPoint access_point_;
+
DISALLOW_COPY_AND_ASSIGN(ProfileChooserView);
};
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view_browsertest.cc b/chrome/browser/ui/views/profiles/profile_chooser_view_browsertest.cc
index 23229a4..91aebea 100644
--- a/chrome/browser/ui/views/profiles/profile_chooser_view_browsertest.cc
+++ b/chrome/browser/ui/views/profiles/profile_chooser_view_browsertest.cc
@@ -205,7 +205,8 @@ IN_PROC_BROWSER_TEST_F(ProfileChooserViewExtensionsTest,
Browser* browser = CreateBrowser(new_profile);
browser->window()->ShowAvatarBubbleFromAvatarButton(
BrowserWindow::AVATAR_BUBBLE_MODE_CONFIRM_SIGNIN,
- signin::ManageAccountsParams());
+ signin::ManageAccountsParams(),
+ signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN);
ASSERT_FALSE(ProfileChooserView::IsShowing());
CloseBrowserSynchronously(browser);
}
diff --git a/chrome/browser/ui/views/profiles/signin_view_controller.cc b/chrome/browser/ui/views/profiles/signin_view_controller.cc
index d5fd524..18e9b5c 100644
--- a/chrome/browser/ui/views/profiles/signin_view_controller.cc
+++ b/chrome/browser/ui/views/profiles/signin_view_controller.cc
@@ -97,8 +97,10 @@ SigninViewController::~SigninViewController() {
views::WebView* SigninViewController::CreateGaiaWebView(
content::WebContentsDelegate* delegate,
profiles::BubbleViewMode mode,
- Profile* profile) {
- GURL url = signin::GetSigninURLFromBubbleViewMode(profile, mode);
+ Profile* profile,
+ signin_metrics::AccessPoint access_point) {
+ GURL url =
+ signin::GetSigninURLFromBubbleViewMode(profile, mode, access_point);
// Adds Gaia signin webview.
const gfx::Size pref_size = switches::UsePasswordSeparatedSigninFlow()
@@ -121,12 +123,15 @@ views::WebView* SigninViewController::CreateGaiaWebView(
}
void SigninViewController::ShowModalSignin(
- profiles::BubbleViewMode mode, Browser* browser) {
+ profiles::BubbleViewMode mode,
+ Browser* browser,
+ signin_metrics::AccessPoint access_point) {
CloseModalSignin();
// The delegate will delete itself on request of the views code when the
// widget is closed.
modal_signin_delegate_ = new ModalSigninDelegate(
- this, CreateGaiaWebView(nullptr, mode, browser->profile()), browser);
+ this, CreateGaiaWebView(nullptr, mode, browser->profile(), access_point),
+ browser);
}
void SigninViewController::CloseModalSignin() {
diff --git a/chrome/browser/ui/views/profiles/signin_view_controller.h b/chrome/browser/ui/views/profiles/signin_view_controller.h
index 668be14..fdc3b92 100644
--- a/chrome/browser/ui/views/profiles/signin_view_controller.h
+++ b/chrome/browser/ui/views/profiles/signin_view_controller.h
@@ -17,6 +17,10 @@ namespace content {
class WebContentsDelegate;
}
+namespace signin_metrics {
+enum class AccessPoint;
+}
+
namespace views {
class WebView;
}
@@ -35,11 +39,16 @@ class SigninViewController {
static views::WebView* CreateGaiaWebView(
content::WebContentsDelegate* delegate,
profiles::BubbleViewMode mode,
- Profile* profile);
+ Profile* profile,
+ signin_metrics::AccessPoint access_point);
// Shows the signin flow as a tab modal dialog attached to |browser|'s active
// web contents.
- void ShowModalSignin(profiles::BubbleViewMode mode, Browser* browser);
+ // |access_point| indicates the access point used to open the Gaia sign in
+ // page.
+ void ShowModalSignin(profiles::BubbleViewMode mode,
+ Browser* browser,
+ signin_metrics::AccessPoint access_point);
// Closes the tab-modal signin flow previously shown using this
// SigninViewController, if one exists. Does nothing otherwise.
diff --git a/chrome/browser/ui/views/profiles/supervised_user_avatar_label.cc b/chrome/browser/ui/views/profiles/supervised_user_avatar_label.cc
index ce4e839..8498e62 100644
--- a/chrome/browser/ui/views/profiles/supervised_user_avatar_label.cc
+++ b/chrome/browser/ui/views/profiles/supervised_user_avatar_label.cc
@@ -9,6 +9,7 @@
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/grit/generated_resources.h"
#include "components/signin/core/browser/signin_header_helper.h"
+#include "components/signin/core/browser/signin_metrics.h"
#include "grit/theme_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/theme_provider.h"
@@ -109,8 +110,8 @@ bool SupervisedUserAvatarLabel::OnMousePressed(const ui::MouseEvent& event) {
return false;
browser_view_->ShowAvatarBubbleFromAvatarButton(
- BrowserWindow::AVATAR_BUBBLE_MODE_DEFAULT,
- signin::ManageAccountsParams());
+ BrowserWindow::AVATAR_BUBBLE_MODE_DEFAULT, signin::ManageAccountsParams(),
+ signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN);
return true;
}
diff --git a/chrome/browser/ui/views/profiles/user_manager_view.cc b/chrome/browser/ui/views/profiles/user_manager_view.cc
index 8e6c6a74..2c0dfd4 100644
--- a/chrome/browser/ui/views/profiles/user_manager_view.cc
+++ b/chrome/browser/ui/views/profiles/user_manager_view.cc
@@ -98,7 +98,9 @@ ReauthDelegate::ReauthDelegate(views::WebView* web_view,
// Load the re-auth URL, prepopulated with the user's email address.
// Add the index of the profile to the URL so that the inline login page
// knows which profile to load and update the credentials.
- GURL url = signin::GetReauthURLWithEmail(email_address_);
+ GURL url = signin::GetReauthURLWithEmail(
+ signin_metrics::AccessPoint::ACCESS_POINT_USER_MANAGER,
+ signin_metrics::Reason::REASON_UNLOCK, email_address_);
web_view_->LoadInitialURL(url);
}
diff --git a/chrome/browser/ui/webui/app_launcher_login_handler.cc b/chrome/browser/ui/webui/app_launcher_login_handler.cc
index c5cdb44..460ec65 100644
--- a/chrome/browser/ui/webui/app_launcher_login_handler.cc
+++ b/chrome/browser/ui/webui/app_launcher_login_handler.cc
@@ -126,11 +126,11 @@ void AppLauncherLoginHandler::HandleShowSyncLoginUI(
return;
// The user isn't signed in, show the sign in promo.
- signin_metrics::Source source =
- web_contents->GetURL().spec() == chrome::kChromeUIAppsURL ?
- signin_metrics::SOURCE_APPS_PAGE_LINK :
- signin_metrics::SOURCE_NTP_LINK;
- chrome::ShowBrowserSignin(browser, source);
+ signin_metrics::AccessPoint access_point =
+ web_contents->GetURL().spec() == chrome::kChromeUIAppsURL
+ ? signin_metrics::AccessPoint::ACCESS_POINT_APPS_PAGE_LINK
+ : signin_metrics::AccessPoint::ACCESS_POINT_NTP_LINK;
+ chrome::ShowBrowserSignin(browser, access_point);
RecordInHistogram(NTP_SIGN_IN_PROMO_CLICKED);
}
@@ -157,10 +157,15 @@ void AppLauncherLoginHandler::HandleLoginMessageSeen(
void AppLauncherLoginHandler::HandleShowAdvancedLoginUI(
const base::ListValue* args) {
- Browser* browser =
- chrome::FindBrowserWithWebContents(web_ui()->GetWebContents());
- if (browser)
- chrome::ShowBrowserSignin(browser, signin_metrics::SOURCE_NTP_LINK);
+ content::WebContents* web_contents = web_ui()->GetWebContents();
+ Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
+ if (!browser)
+ return;
+ signin_metrics::AccessPoint access_point =
+ web_contents->GetURL().spec() == chrome::kChromeUIAppsURL
+ ? signin_metrics::AccessPoint::ACCESS_POINT_APPS_PAGE_LINK
+ : signin_metrics::AccessPoint::ACCESS_POINT_NTP_LINK;
+ chrome::ShowBrowserSignin(browser, access_point);
}
void AppLauncherLoginHandler::UpdateLogin() {
diff --git a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc
index ce801c8..1568401 100644
--- a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc
+++ b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc
@@ -261,7 +261,8 @@ void LocalDiscoveryUIHandler::HandleShowSyncUI(
Browser* browser = chrome::FindBrowserWithWebContents(
web_ui()->GetWebContents());
DCHECK(browser);
- chrome::ShowBrowserSignin(browser, signin_metrics::SOURCE_DEVICES_PAGE);
+ chrome::ShowBrowserSignin(
+ browser, signin_metrics::AccessPoint::ACCESS_POINT_DEVICES_PAGE);
}
void LocalDiscoveryUIHandler::StartRegisterHTTP(
diff --git a/chrome/browser/ui/webui/ntp/new_tab_page_sync_handler.cc b/chrome/browser/ui/webui/ntp/new_tab_page_sync_handler.cc
index d30cd2e..7dcad46 100644
--- a/chrome/browser/ui/webui/ntp/new_tab_page_sync_handler.cc
+++ b/chrome/browser/ui/webui/ntp/new_tab_page_sync_handler.cc
@@ -130,7 +130,8 @@ void NewTabPageSyncHandler::HandleSyncLinkClicked(const base::ListValue* args) {
chrome::FindBrowserWithWebContents(web_ui()->GetWebContents());
if (!browser || browser->IsAttemptingToCloseBrowser())
return;
- chrome::ShowBrowserSignin(browser, signin_metrics::SOURCE_NTP_LINK);
+ chrome::ShowBrowserSignin(browser,
+ signin_metrics::AccessPoint::ACCESS_POINT_NTP_LINK);
if (sync_service_->HasSyncSetupCompleted()) {
base::string16 user = base::UTF8ToUTF16(
diff --git a/chrome/browser/ui/webui/options/sync_setup_handler.cc b/chrome/browser/ui/webui/options/sync_setup_handler.cc
index 142ab3c..67ecc43 100644
--- a/chrome/browser/ui/webui/options/sync_setup_handler.cc
+++ b/chrome/browser/ui/webui/options/sync_setup_handler.cc
@@ -335,16 +335,18 @@ void SyncSetupHandler::RegisterMessages() {
}
#if !defined(OS_CHROMEOS)
-void SyncSetupHandler::DisplayGaiaLogin() {
+void SyncSetupHandler::DisplayGaiaLogin(
+ signin_metrics::AccessPoint access_point) {
DCHECK(!sync_startup_tracker_);
// Advanced options are no longer being configured if the login screen is
// visible. If the user exits the signin wizard after this without
// configuring sync, CloseSyncSetup() will ensure they are logged out.
configuring_sync_ = false;
- DisplayGaiaLoginInNewTabOrWindow();
+ DisplayGaiaLoginInNewTabOrWindow(access_point);
}
-void SyncSetupHandler::DisplayGaiaLoginInNewTabOrWindow() {
+void SyncSetupHandler::DisplayGaiaLoginInNewTabOrWindow(
+ signin_metrics::AccessPoint access_point) {
Browser* browser = chrome::FindBrowserWithWebContents(
web_ui()->GetWebContents());
bool force_new_tab = false;
@@ -371,19 +373,21 @@ void SyncSetupHandler::DisplayGaiaLoginInNewTabOrWindow() {
if (!force_new_tab) {
browser->window()->ShowAvatarBubbleFromAvatarButton(
BrowserWindow::AVATAR_BUBBLE_MODE_REAUTH,
- signin::ManageAccountsParams());
+ signin::ManageAccountsParams(), access_point);
} else {
- url = signin::GetReauthURL(browser->profile(),
- error_controller->error_account_id());
+ url = signin::GetReauthURL(
+ access_point, signin_metrics::Reason::REASON_REAUTHENTICATION,
+ browser->profile(), error_controller->error_account_id());
}
} else {
- signin_metrics::LogSigninSource(signin_metrics::SOURCE_SETTINGS);
if (!force_new_tab) {
browser->window()->ShowAvatarBubbleFromAvatarButton(
BrowserWindow::AVATAR_BUBBLE_MODE_SIGNIN,
- signin::ManageAccountsParams());
+ signin::ManageAccountsParams(), access_point);
} else {
- url = signin::GetPromoURL(signin_metrics::SOURCE_SETTINGS, true);
+ url = signin::GetPromoURL(
+ access_point, signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT,
+ true);
}
}
@@ -628,7 +632,7 @@ void SyncSetupHandler::HandleShowSetupUI(const base::ListValue* args) {
// If a setup wizard is present on this page or another, bring it to focus.
// Otherwise, display a new one on this page.
if (!FocusExistingWizardIfPresent())
- OpenSyncSetup();
+ OpenSyncSetup(args);
}
#if defined(OS_CHROMEOS)
@@ -645,7 +649,7 @@ void SyncSetupHandler::HandleStartSignin(const base::ListValue* args) {
// Should only be called if the user is not already signed in.
DCHECK(!SigninManagerFactory::GetForProfile(GetProfile())->
IsAuthenticated());
- OpenSyncSetup();
+ OpenSyncSetup(args);
}
void SyncSetupHandler::HandleStopSyncing(const base::ListValue* args) {
@@ -717,7 +721,7 @@ void SyncSetupHandler::CloseSyncSetup() {
configuring_sync_ = false;
}
-void SyncSetupHandler::OpenSyncSetup() {
+void SyncSetupHandler::OpenSyncSetup(const base::ListValue* args) {
if (!PrepareSyncSetup())
return;
@@ -743,7 +747,15 @@ void SyncSetupHandler::OpenSyncSetup() {
// setup including any visible overlays, and display the gaia auth page.
// Control will be returned to the sync settings page once auth is complete.
CloseUI();
- DisplayGaiaLogin();
+ if (args) {
+ std::string access_point = base::UTF16ToUTF8(ExtractStringValue(args));
+ if (access_point == "access-point-supervised-user") {
+ DisplayGaiaLogin(
+ signin_metrics::AccessPoint::ACCESS_POINT_SUPERVISED_USER);
+ return;
+ }
+ }
+ DisplayGaiaLogin(signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS);
return;
}
#endif
diff --git a/chrome/browser/ui/webui/options/sync_setup_handler.h b/chrome/browser/ui/webui/options/sync_setup_handler.h
index 0065ecc..86ac6bc 100644
--- a/chrome/browser/ui/webui/options/sync_setup_handler.h
+++ b/chrome/browser/ui/webui/options/sync_setup_handler.h
@@ -20,6 +20,10 @@ namespace content {
class WebContents;
}
+namespace signin_metrics {
+enum class AccessPoint;
+}
+
class SyncSetupHandler : public options::OptionsPageUIHandler,
public SyncStartupTracker::Observer,
public LoginUIService::LoginUI {
@@ -44,7 +48,7 @@ class SyncSetupHandler : public options::OptionsPageUIHandler,
content::WebUI* web_ui);
// Initializes the sync setup flow and shows the setup UI.
- void OpenSyncSetup();
+ void OpenSyncSetup(const base::ListValue* args);
// Shows advanced configuration dialog without going through sign in dialog.
// Kicks the sync backend if necessary with showing spinner dialog until it
@@ -105,11 +109,12 @@ class SyncSetupHandler : public options::OptionsPageUIHandler,
void HandleCloseTimeout(const base::ListValue* args);
#if !defined(OS_CHROMEOS)
// Displays the GAIA login form.
- void DisplayGaiaLogin();
+ void DisplayGaiaLogin(signin_metrics::AccessPoint access_point);
// When web-flow is enabled, displays the Gaia login form in a new tab.
// This function is virtual so that tests can override.
- virtual void DisplayGaiaLoginInNewTabOrWindow();
+ virtual void DisplayGaiaLoginInNewTabOrWindow(
+ signin_metrics::AccessPoint access_point);
#endif
// Helper routine that gets the Profile associated with this object (virtual
diff --git a/chrome/browser/ui/webui/options/sync_setup_handler_unittest.cc b/chrome/browser/ui/webui/options/sync_setup_handler_unittest.cc
index 233d473..99035ac 100644
--- a/chrome/browser/ui/webui/options/sync_setup_handler_unittest.cc
+++ b/chrome/browser/ui/webui/options/sync_setup_handler_unittest.cc
@@ -163,7 +163,8 @@ class TestingSyncSetupHandler : public SyncSetupHandler {
private:
#if !defined(OS_CHROMEOS)
- void DisplayGaiaLoginInNewTabOrWindow() override {}
+ void DisplayGaiaLoginInNewTabOrWindow(
+ signin_metrics::AccessPoint access_point) override {}
#endif
// Weak pointer to parent profile.
@@ -393,7 +394,7 @@ TEST_F(SyncSetupHandlerTest,
EXPECT_CALL(*mock_pss_, IsBackendInitialized()).WillRepeatedly(Return(false));
SetDefaultExpectationsForConfigPage();
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
// We expect a call to SyncSetupOverlay.showSyncSetupPage.
EXPECT_EQ(1U, web_ui_.call_data().size());
@@ -444,7 +445,7 @@ TEST_F(SyncSetupHandlerTest,
.WillOnce(Return(false))
.WillRepeatedly(Return(true));
SetDefaultExpectationsForConfigPage();
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
// It's important to tell sync the user cancelled the setup flow before we
// tell it we're through with the setup progress.
@@ -468,7 +469,7 @@ TEST_F(SyncSetupHandlerTest,
error_ = GoogleServiceAuthError::AuthErrorNone();
EXPECT_CALL(*mock_pss_, IsBackendInitialized()).WillRepeatedly(Return(false));
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
const content::TestWebUI::CallData& data = *web_ui_.call_data()[0];
EXPECT_EQ("SyncSetupOverlay.showSyncSetupPage", data.function_name());
std::string page;
@@ -502,7 +503,7 @@ TEST_F(SyncSetupHandlerNonCrosTest, HandleGaiaAuthFailure) {
EXPECT_CALL(*mock_pss_, HasSyncSetupCompleted())
.WillRepeatedly(Return(false));
// Open the web UI.
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ASSERT_FALSE(handler_->is_configuring_sync());
}
@@ -515,7 +516,7 @@ TEST_F(SyncSetupHandlerNonCrosTest, UnrecoverableErrorInitializingSync) {
EXPECT_CALL(*mock_pss_, HasSyncSetupCompleted())
.WillRepeatedly(Return(false));
// Open the web UI.
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ASSERT_FALSE(handler_->is_configuring_sync());
}
@@ -527,7 +528,7 @@ TEST_F(SyncSetupHandlerNonCrosTest, GaiaErrorInitializingSync) {
EXPECT_CALL(*mock_pss_, HasSyncSetupCompleted())
.WillRepeatedly(Return(false));
// Open the web UI.
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ASSERT_FALSE(handler_->is_configuring_sync());
}
@@ -756,7 +757,7 @@ TEST_F(SyncSetupHandlerTest, ShowSyncSetup) {
SetupInitializedProfileSyncService();
// This should display the sync setup dialog (not login).
SetDefaultExpectationsForConfigPage();
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ExpectConfig();
}
@@ -793,7 +794,7 @@ TEST_F(SyncSetupHandlerTest, ShowSigninOnAuthError) {
// On ChromeOS, this should display the spinner while we try to startup the
// sync backend, and on desktop this displays the login dialog.
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
// Sync setup is closed when re-auth is in progress.
EXPECT_EQ(NULL,
@@ -812,7 +813,7 @@ TEST_F(SyncSetupHandlerTest, ShowSetupSyncEverything) {
SetupInitializedProfileSyncService();
SetDefaultExpectationsForConfigPage();
// This should display the sync setup dialog (not login).
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ExpectConfig();
const content::TestWebUI::CallData& data = *web_ui_.call_data()[0];
@@ -846,7 +847,7 @@ TEST_F(SyncSetupHandlerTest, ShowSetupManuallySyncAll) {
sync_prefs.SetKeepEverythingSynced(false);
SetDefaultExpectationsForConfigPage();
// This should display the sync setup dialog (not login).
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ExpectConfig();
const content::TestWebUI::CallData& data = *web_ui_.call_data()[0];
@@ -873,7 +874,7 @@ TEST_F(SyncSetupHandlerTest, ShowSetupSyncForAllTypesIndividually) {
WillRepeatedly(Return(types));
// This should display the sync setup dialog (not login).
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ExpectConfig();
// Close the config overlay.
@@ -898,7 +899,7 @@ TEST_F(SyncSetupHandlerTest, ShowSetupGaiaPassphraseRequired) {
SetDefaultExpectationsForConfigPage();
// This should display the sync setup dialog (not login).
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ExpectConfig();
const content::TestWebUI::CallData& data = *web_ui_.call_data()[0];
@@ -920,7 +921,7 @@ TEST_F(SyncSetupHandlerTest, ShowSetupCustomPassphraseRequired) {
SetDefaultExpectationsForConfigPage();
// This should display the sync setup dialog (not login).
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ExpectConfig();
const content::TestWebUI::CallData& data = *web_ui_.call_data()[0];
@@ -942,7 +943,7 @@ TEST_F(SyncSetupHandlerTest, ShowSetupEncryptAll) {
.WillRepeatedly(Return(true));
// This should display the sync setup dialog (not login).
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ExpectConfig();
const content::TestWebUI::CallData& data = *web_ui_.call_data()[0];
@@ -962,7 +963,7 @@ TEST_F(SyncSetupHandlerTest, ShowSetupEncryptAllDisallowed) {
.WillRepeatedly(Return(false));
// This should display the sync setup dialog (not login).
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ExpectConfig();
const content::TestWebUI::CallData& data = *web_ui_.call_data()[0];
diff --git a/chrome/browser/ui/webui/settings/sync_handler.cc b/chrome/browser/ui/webui/settings/sync_handler.cc
index 3928f18..b60851a 100644
--- a/chrome/browser/ui/webui/settings/sync_handler.cc
+++ b/chrome/browser/ui/webui/settings/sync_handler.cc
@@ -244,16 +244,17 @@ void SyncHandler::RegisterMessages() {
}
#if !defined(OS_CHROMEOS)
-void SyncHandler::DisplayGaiaLogin() {
+void SyncHandler::DisplayGaiaLogin(signin_metrics::AccessPoint access_point) {
DCHECK(!sync_startup_tracker_);
// Advanced options are no longer being configured if the login screen is
// visible. If the user exits the signin wizard after this without
// configuring sync, CloseSyncSetup() will ensure they are logged out.
configuring_sync_ = false;
- DisplayGaiaLoginInNewTabOrWindow();
+ DisplayGaiaLoginInNewTabOrWindow(access_point);
}
-void SyncHandler::DisplayGaiaLoginInNewTabOrWindow() {
+void SyncHandler::DisplayGaiaLoginInNewTabOrWindow(
+ signin_metrics::AccessPoint access_point) {
Browser* browser = chrome::FindBrowserWithWebContents(
web_ui()->GetWebContents());
bool force_new_tab = false;
@@ -280,19 +281,21 @@ void SyncHandler::DisplayGaiaLoginInNewTabOrWindow() {
if (!force_new_tab) {
browser->window()->ShowAvatarBubbleFromAvatarButton(
BrowserWindow::AVATAR_BUBBLE_MODE_REAUTH,
- signin::ManageAccountsParams());
+ signin::ManageAccountsParams(), access_point);
} else {
- url = signin::GetReauthURL(browser->profile(),
- error_controller->error_account_id());
+ url = signin::GetReauthURL(
+ access_point, signin_metrics::Reason::REASON_REAUTHENTICATION,
+ browser->profile(), error_controller->error_account_id());
}
} else {
- signin_metrics::LogSigninSource(signin_metrics::SOURCE_SETTINGS);
if (!force_new_tab) {
browser->window()->ShowAvatarBubbleFromAvatarButton(
BrowserWindow::AVATAR_BUBBLE_MODE_SIGNIN,
- signin::ManageAccountsParams());
+ signin::ManageAccountsParams(), access_point);
} else {
- url = signin::GetPromoURL(signin_metrics::SOURCE_SETTINGS, true);
+ url = signin::GetPromoURL(
+ access_point, signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT,
+ true);
}
}
@@ -531,7 +534,7 @@ void SyncHandler::HandleShowSetupUI(const base::ListValue* args) {
// If a setup wizard is present on this page or another, bring it to focus.
// Otherwise, display a new one on this page.
if (!FocusExistingWizardIfPresent())
- OpenSyncSetup();
+ OpenSyncSetup(args);
}
#if defined(OS_CHROMEOS)
@@ -547,7 +550,7 @@ void SyncHandler::HandleDoSignOutOnAuthError(const base::ListValue* args) {
void SyncHandler::HandleStartSignin(const base::ListValue* args) {
// Should only be called if the user is not already signed in.
DCHECK(!SigninManagerFactory::GetForProfile(profile_)->IsAuthenticated());
- OpenSyncSetup();
+ OpenSyncSetup(args);
}
void SyncHandler::HandleStopSyncing(const base::ListValue* args) {
@@ -628,7 +631,7 @@ void SyncHandler::CloseSyncSetup() {
configuring_sync_ = false;
}
-void SyncHandler::OpenSyncSetup() {
+void SyncHandler::OpenSyncSetup(const base::ListValue* args) {
if (!PrepareSyncSetup())
return;
@@ -653,7 +656,15 @@ void SyncHandler::OpenSyncSetup() {
// setup including any visible overlays, and display the gaia auth page.
// Control will be returned to the sync settings page once auth is complete.
CloseUI();
- DisplayGaiaLogin();
+ if (args) {
+ std::string access_point = base::UTF16ToUTF8(ExtractStringValue(args));
+ if (access_point == "access-point-supervised-user") {
+ DisplayGaiaLogin(
+ signin_metrics::AccessPoint::ACCESS_POINT_SUPERVISED_USER);
+ return;
+ }
+ }
+ DisplayGaiaLogin(signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS);
return;
}
#endif
diff --git a/chrome/browser/ui/webui/settings/sync_handler.h b/chrome/browser/ui/webui/settings/sync_handler.h
index ec67f44..b17ddb8 100644
--- a/chrome/browser/ui/webui/settings/sync_handler.h
+++ b/chrome/browser/ui/webui/settings/sync_handler.h
@@ -10,6 +10,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/prefs/pref_change_registrar.h"
#include "base/scoped_observer.h"
+#include "base/strings/utf_string_conversions.h"
#include "base/timer/timer.h"
#include "chrome/browser/sync/sync_startup_tracker.h"
#include "chrome/browser/ui/webui/signin/login_ui_service.h"
@@ -26,6 +27,10 @@ class WebContents;
class WebUI;
}
+namespace signin_metrics {
+enum class AccessPoint;
+}
+
namespace settings {
class SyncHandler : public content::WebUIMessageHandler,
@@ -59,7 +64,7 @@ class SyncHandler : public content::WebUIMessageHandler,
void OnStateChanged() override;
// Initializes the sync setup flow and shows the setup UI.
- void OpenSyncSetup();
+ void OpenSyncSetup(const base::ListValue* args);
// Shows advanced configuration dialog without going through sign in dialog.
// Kicks the sync backend if necessary with showing spinner dialog until it
@@ -127,11 +132,12 @@ class SyncHandler : public content::WebUIMessageHandler,
#if !defined(OS_CHROMEOS)
// Displays the GAIA login form.
- void DisplayGaiaLogin();
+ void DisplayGaiaLogin(signin_metrics::AccessPoint access_point);
// When web-flow is enabled, displays the Gaia login form in a new tab.
// This function is virtual so that tests can override.
- virtual void DisplayGaiaLoginInNewTabOrWindow();
+ virtual void DisplayGaiaLoginInNewTabOrWindow(
+ signin_metrics::AccessPoint access_point);
#endif
// A utility function to call before actually showing setup dialog. Makes sure
diff --git a/chrome/browser/ui/webui/settings/sync_handler_unittest.cc b/chrome/browser/ui/webui/settings/sync_handler_unittest.cc
index d647b09..80d09aa 100644
--- a/chrome/browser/ui/webui/settings/sync_handler_unittest.cc
+++ b/chrome/browser/ui/webui/settings/sync_handler_unittest.cc
@@ -166,7 +166,8 @@ class TestingSyncHandler : public SyncHandler {
private:
#if !defined(OS_CHROMEOS)
- void DisplayGaiaLoginInNewTabOrWindow() override {}
+ void DisplayGaiaLoginInNewTabOrWindow(
+ signin_metrics::AccessPoint access_point) override {}
#endif
DISALLOW_COPY_AND_ASSIGN(TestingSyncHandler);
@@ -397,7 +398,7 @@ TEST_F(SyncHandlerTest,
EXPECT_CALL(*mock_pss_, IsBackendInitialized()).WillRepeatedly(Return(false));
SetDefaultExpectationsForConfigPage();
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
// We expect a call to settings.SyncPrivateApi.showSyncSetupPage.
EXPECT_EQ(1U, web_ui_.call_data().size());
@@ -448,7 +449,7 @@ TEST_F(SyncHandlerTest,
.WillOnce(Return(false))
.WillRepeatedly(Return(true));
SetDefaultExpectationsForConfigPage();
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
// It's important to tell sync the user cancelled the setup flow before we
// tell it we're through with the setup progress.
@@ -472,7 +473,7 @@ TEST_F(SyncHandlerTest,
error_ = GoogleServiceAuthError::AuthErrorNone();
EXPECT_CALL(*mock_pss_, IsBackendInitialized()).WillRepeatedly(Return(false));
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
const content::TestWebUI::CallData& data = *web_ui_.call_data()[0];
EXPECT_EQ("settings.SyncPrivateApi.showSyncSetupPage", data.function_name());
std::string page;
@@ -506,7 +507,7 @@ TEST_F(SyncHandlerNonCrosTest, HandleGaiaAuthFailure) {
EXPECT_CALL(*mock_pss_, HasSyncSetupCompleted())
.WillRepeatedly(Return(false));
// Open the web UI.
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ASSERT_FALSE(handler_->is_configuring_sync());
}
@@ -519,7 +520,7 @@ TEST_F(SyncHandlerNonCrosTest, UnrecoverableErrorInitializingSync) {
EXPECT_CALL(*mock_pss_, HasSyncSetupCompleted())
.WillRepeatedly(Return(false));
// Open the web UI.
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ASSERT_FALSE(handler_->is_configuring_sync());
}
@@ -531,7 +532,7 @@ TEST_F(SyncHandlerNonCrosTest, GaiaErrorInitializingSync) {
EXPECT_CALL(*mock_pss_, HasSyncSetupCompleted())
.WillRepeatedly(Return(false));
// Open the web UI.
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ASSERT_FALSE(handler_->is_configuring_sync());
}
@@ -760,7 +761,7 @@ TEST_F(SyncHandlerTest, ShowSyncSetup) {
SetupInitializedProfileSyncService();
// This should display the sync setup dialog (not login).
SetDefaultExpectationsForConfigPage();
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ExpectConfig();
}
@@ -797,7 +798,7 @@ TEST_F(SyncHandlerTest, ShowSigninOnAuthError) {
// On ChromeOS, this should display the spinner while we try to startup the
// sync backend, and on desktop this displays the login dialog.
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
// Sync setup is closed when re-auth is in progress.
EXPECT_EQ(NULL,
@@ -816,7 +817,7 @@ TEST_F(SyncHandlerTest, ShowSetupSyncEverything) {
SetupInitializedProfileSyncService();
SetDefaultExpectationsForConfigPage();
// This should display the sync setup dialog (not login).
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ExpectConfig();
const content::TestWebUI::CallData& data = *web_ui_.call_data()[0];
@@ -850,7 +851,7 @@ TEST_F(SyncHandlerTest, ShowSetupManuallySyncAll) {
sync_prefs.SetKeepEverythingSynced(false);
SetDefaultExpectationsForConfigPage();
// This should display the sync setup dialog (not login).
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ExpectConfig();
const content::TestWebUI::CallData& data = *web_ui_.call_data()[0];
@@ -877,7 +878,7 @@ TEST_F(SyncHandlerTest, ShowSetupSyncForAllTypesIndividually) {
WillRepeatedly(Return(types));
// This should display the sync setup dialog (not login).
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ExpectConfig();
// Close the config overlay.
@@ -902,7 +903,7 @@ TEST_F(SyncHandlerTest, ShowSetupGaiaPassphraseRequired) {
SetDefaultExpectationsForConfigPage();
// This should display the sync setup dialog (not login).
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ExpectConfig();
const content::TestWebUI::CallData& data = *web_ui_.call_data()[0];
@@ -924,7 +925,7 @@ TEST_F(SyncHandlerTest, ShowSetupCustomPassphraseRequired) {
SetDefaultExpectationsForConfigPage();
// This should display the sync setup dialog (not login).
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ExpectConfig();
const content::TestWebUI::CallData& data = *web_ui_.call_data()[0];
@@ -946,7 +947,7 @@ TEST_F(SyncHandlerTest, ShowSetupEncryptAll) {
.WillRepeatedly(Return(true));
// This should display the sync setup dialog (not login).
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ExpectConfig();
const content::TestWebUI::CallData& data = *web_ui_.call_data()[0];
@@ -966,7 +967,7 @@ TEST_F(SyncHandlerTest, ShowSetupEncryptAllDisallowed) {
.WillRepeatedly(Return(false));
// This should display the sync setup dialog (not login).
- handler_->OpenSyncSetup();
+ handler_->OpenSyncSetup(nullptr);
ExpectConfig();
const content::TestWebUI::CallData& data = *web_ui_.call_data()[0];
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler.cc b/chrome/browser/ui/webui/signin/inline_login_handler.cc
index f021456..89b171c 100644
--- a/chrome/browser/ui/webui/signin/inline_login_handler.cc
+++ b/chrome/browser/ui/webui/signin/inline_login_handler.cc
@@ -69,17 +69,17 @@ void InlineLoginHandler::ContinueHandleInitializeMessage() {
params.SetInteger("authMode", InlineLoginHandler::kDesktopAuthMode);
const GURL& current_url = web_ui()->GetWebContents()->GetURL();
- signin_metrics::Source source = signin::GetSourceForPromoURL(current_url);
+ signin_metrics::AccessPoint access_point =
+ signin::GetAccessPointForPromoURL(current_url);
+ signin_metrics::LogSigninAccessPointStarted(access_point);
- params.SetString(
- "continueUrl",
- signin::GetLandingURL(signin::kSignInPromoQueryKeySource,
- static_cast<int>(source)).spec());
+ params.SetString("continueUrl", signin::GetLandingURL(access_point).spec());
Profile* profile = Profile::FromWebUI(web_ui());
+ signin_metrics::Reason reason =
+ signin::GetSigninReasonForPromoURL(current_url);
std::string default_email;
- if (source != signin_metrics::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT &&
- source != signin_metrics::SOURCE_REAUTH) {
+ if (reason == signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT) {
default_email =
profile->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername);
} else {
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
index 9ec70e8..350905e 100644
--- a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
+++ b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
@@ -74,7 +74,7 @@ bool IsSystemProfile(Profile* profile) {
}
void RedirectToNtpOrAppsPage(content::WebContents* contents,
- signin_metrics::Source source) {
+ signin_metrics::AccessPoint access_point) {
// Do nothing if a navigation is pending, since this call can be triggered
// from DidStartLoading. This avoids deleting the pending entry while we are
// still navigating to it. See crbug/346632.
@@ -83,8 +83,10 @@ void RedirectToNtpOrAppsPage(content::WebContents* contents,
VLOG(1) << "RedirectToNtpOrAppsPage";
// Redirect to NTP/Apps page and display a confirmation bubble
- GURL url(source == signin_metrics::SOURCE_APPS_PAGE_LINK ?
- chrome::kChromeUIAppsURL : chrome::kChromeUINewTabURL);
+ GURL url(access_point ==
+ signin_metrics::AccessPoint::ACCESS_POINT_APPS_PAGE_LINK
+ ? chrome::kChromeUIAppsURL
+ : chrome::kChromeUINewTabURL);
content::OpenURLParams params(url,
content::Referrer(),
CURRENT_TAB,
@@ -93,10 +95,11 @@ void RedirectToNtpOrAppsPage(content::WebContents* contents,
contents->OpenURL(params);
}
-void RedirectToNtpOrAppsPageIfNecessary(content::WebContents* contents,
- signin_metrics::Source source) {
- if (source != signin_metrics::SOURCE_SETTINGS)
- RedirectToNtpOrAppsPage(contents, source);
+void RedirectToNtpOrAppsPageIfNecessary(
+ content::WebContents* contents,
+ signin_metrics::AccessPoint access_point) {
+ if (access_point != signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS)
+ RedirectToNtpOrAppsPage(contents, access_point);
}
class ConfirmEmailDialogDelegate : public TabModalConfirmDialogDelegate {
@@ -272,21 +275,25 @@ void InlineSigninHelper::OnClientOAuthSuccess(const ClientOAuthResult& result) {
AccountTrackerServiceFactory::GetForProfile(profile_)
->SeedAccountInfo(gaia_id_, email_);
- signin_metrics::Source source = signin::GetSourceForPromoURL(current_url_);
+ signin_metrics::AccessPoint access_point =
+ signin::GetAccessPointForPromoURL(current_url_);
+ signin_metrics::Reason reason =
+ signin::GetSigninReasonForPromoURL(current_url_);
SigninManager* signin_manager = SigninManagerFactory::GetForProfile(profile_);
std::string primary_email =
signin_manager->GetAuthenticatedAccountInfo().email;
if (gaia::AreEmailsSame(email_, primary_email) &&
- source == signin_metrics::SOURCE_REAUTH &&
- switches::IsNewProfileManagement() &&
- !password_.empty() &&
+ (reason == signin_metrics::Reason::REASON_REAUTHENTICATION ||
+ reason == signin_metrics::Reason::REASON_UNLOCK) &&
+ switches::IsNewProfileManagement() && !password_.empty() &&
profiles::IsLockAvailable(profile_)) {
LocalAuth::SetLocalAuthCredentials(profile_, password_);
}
- if (source == signin_metrics::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT ||
- source == signin_metrics::SOURCE_REAUTH) {
+ if (reason == signin_metrics::Reason::REASON_REAUTHENTICATION ||
+ reason == signin_metrics::Reason::REASON_UNLOCK ||
+ reason == signin_metrics::Reason::REASON_ADD_SECONDARY_ACCOUNT) {
ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)->
UpdateCredentials(account_id, result.refresh_token);
@@ -299,8 +306,10 @@ void InlineSigninHelper::OnClientOAuthSuccess(const ClientOAuthResult& result) {
signin::ShouldShowAccountManagement(current_url_)));
}
- if (source == signin_metrics::SOURCE_REAUTH)
+ if (reason == signin_metrics::Reason::REASON_REAUTHENTICATION ||
+ reason == signin_metrics::Reason::REASON_UNLOCK) {
signin_manager->MergeSigninCredentialIntoCookieJar();
+ }
} else {
ProfileSyncService* sync_service =
ProfileSyncServiceFactory::GetForProfile(profile_);
@@ -309,7 +318,8 @@ void InlineSigninHelper::OnClientOAuthSuccess(const ClientOAuthResult& result) {
OneClickSigninSyncStarter::StartSyncMode start_mode =
OneClickSigninSyncStarter::CONFIRM_SYNC_SETTINGS_FIRST;
- if (source == signin_metrics::SOURCE_SETTINGS || choose_what_to_sync_) {
+ if (access_point == signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS ||
+ choose_what_to_sync_) {
bool show_settings_without_configure =
error_controller->HasError() &&
sync_service &&
@@ -324,14 +334,12 @@ void InlineSigninHelper::OnClientOAuthSuccess(const ClientOAuthResult& result) {
OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN :
OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN;
- bool start_signin = !HandleCrossAccountError(result.refresh_token, source,
- confirmation_required, start_mode);
+ bool start_signin = !HandleCrossAccountError(
+ result.refresh_token, confirmation_required, start_mode);
if (start_signin) {
- CreateSyncStarter(browser,
- contents,
+ CreateSyncStarter(browser, contents, current_url_,
signin::GetNextPageURLForPromoURL(current_url_),
- result.refresh_token,
- start_mode,
+ result.refresh_token, start_mode,
confirmation_required);
base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this);
}
@@ -341,24 +349,20 @@ void InlineSigninHelper::OnClientOAuthSuccess(const ClientOAuthResult& result) {
void InlineSigninHelper::CreateSyncStarter(
Browser* browser,
content::WebContents* contents,
- const GURL& url,
+ const GURL& current_url,
+ const GURL& continue_url,
const std::string& refresh_token,
OneClickSigninSyncStarter::StartSyncMode start_mode,
OneClickSigninSyncStarter::ConfirmationRequired confirmation_required) {
// OneClickSigninSyncStarter will delete itself once the job is done.
new OneClickSigninSyncStarter(
- profile_, browser,
- gaia_id_, email_, password_, refresh_token,
- start_mode,
- contents,
- confirmation_required,
- url,
+ profile_, browser, gaia_id_, email_, password_, refresh_token, start_mode,
+ contents, confirmation_required, current_url, continue_url,
base::Bind(&InlineLoginHandlerImpl::SyncStarterCallback, handler_));
}
bool InlineSigninHelper::HandleCrossAccountError(
const std::string& refresh_token,
- signin_metrics::Source source,
OneClickSigninSyncStarter::ConfirmationRequired confirmation_required,
OneClickSigninSyncStarter::StartSyncMode start_mode) {
std::string last_email =
@@ -380,7 +384,6 @@ bool InlineSigninHelper::HandleCrossAccountError(
base::Unretained(this),
web_contents,
refresh_token,
- source,
confirmation_required,
start_mode));
return true;
@@ -389,7 +392,6 @@ bool InlineSigninHelper::HandleCrossAccountError(
void InlineSigninHelper::ConfirmEmailAction(
content::WebContents* web_contents,
const std::string& refresh_token,
- signin_metrics::Source source,
OneClickSigninSyncStarter::ConfirmationRequired confirmation_required,
OneClickSigninSyncStarter::StartSyncMode start_mode,
InlineSigninHelper::Action action) {
@@ -405,8 +407,8 @@ void InlineSigninHelper::ConfirmEmailAction(
std::string(chrome::kCreateProfileSubPage));
break;
case InlineSigninHelper::START_SYNC:
- CreateSyncStarter(browser, web_contents, GURL(), refresh_token,
- start_mode, confirmation_required);
+ CreateSyncStarter(browser, web_contents, current_url_, GURL(),
+ refresh_token, start_mode, confirmation_required);
break;
case InlineSigninHelper::CLOSE:
if (handler_) {
@@ -559,7 +561,8 @@ void InlineLoginHandlerImpl::SetExtraInitParams(base::DictionaryValue& params) {
content::WebContents* contents = web_ui()->GetWebContents();
const GURL& current_url = contents->GetURL();
- signin_metrics::Source source = signin::GetSourceForPromoURL(current_url);
+ signin_metrics::Reason reason =
+ signin::GetSigninReasonForPromoURL(current_url);
std::string is_constrained;
net::GetValueForKeyInQuery(current_url, "constrained", &is_constrained);
@@ -576,11 +579,12 @@ void InlineLoginHandlerImpl::SetExtraInitParams(base::DictionaryValue& params) {
params.SetString("gaiaPath", url.path().substr(1));
std::string flow;
- switch (source) {
- case signin_metrics::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT:
+ switch (reason) {
+ case signin_metrics::Reason::REASON_ADD_SECONDARY_ACCOUNT:
flow = "addaccount";
break;
- case signin_metrics::SOURCE_REAUTH:
+ case signin_metrics::Reason::REASON_REAUTHENTICATION:
+ case signin_metrics::Reason::REASON_UNLOCK:
flow = "reauth";
break;
default:
@@ -739,20 +743,25 @@ void InlineLoginHandlerImpl::FinishCompleteLogin(
}
}
- signin_metrics::Source source = signin::GetSourceForPromoURL(params.url);
+ signin_metrics::AccessPoint access_point =
+ signin::GetAccessPointForPromoURL(params.url);
+ signin_metrics::Reason reason =
+ signin::GetSigninReasonForPromoURL(params.url);
LogHistogramValue(signin_metrics::HISTOGRAM_ACCEPTED);
bool switch_to_advanced =
- params.choose_what_to_sync && (source != signin_metrics::SOURCE_SETTINGS);
+ params.choose_what_to_sync &&
+ (access_point != signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS);
LogHistogramValue(
switch_to_advanced ? signin_metrics::HISTOGRAM_WITH_ADVANCED :
signin_metrics::HISTOGRAM_WITH_DEFAULTS);
CanOfferFor can_offer_for = CAN_OFFER_FOR_ALL;
- switch (source) {
- case signin_metrics::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT:
+ switch (reason) {
+ case signin_metrics::Reason::REASON_ADD_SECONDARY_ACCOUNT:
can_offer_for = CAN_OFFER_FOR_SECONDARY_ACCOUNT;
break;
- case signin_metrics::SOURCE_REAUTH: {
+ case signin_metrics::Reason::REASON_REAUTHENTICATION:
+ case signin_metrics::Reason::REASON_UNLOCK: {
std::string primary_username =
SigninManagerFactory::GetForProfile(profile)
->GetAuthenticatedAccountInfo()
@@ -848,11 +857,12 @@ void InlineLoginHandlerImpl::SyncStarterCallback(
}
const GURL& current_url = contents->GetLastCommittedURL();
- signin_metrics::Source source = signin::GetSourceForPromoURL(current_url);
+ signin_metrics::AccessPoint access_point =
+ signin::GetAccessPointForPromoURL(current_url);
bool auto_close = signin::IsAutoCloseEnabledInURL(current_url);
if (result == OneClickSigninSyncStarter::SYNC_SETUP_FAILURE) {
- RedirectToNtpOrAppsPage(contents, source);
+ RedirectToNtpOrAppsPage(contents, access_point);
} else if (auto_close) {
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE,
@@ -860,7 +870,7 @@ void InlineLoginHandlerImpl::SyncStarterCallback(
weak_factory_.GetWeakPtr(),
signin::ShouldShowAccountManagement(current_url)));
} else {
- RedirectToNtpOrAppsPageIfNecessary(contents, source);
+ RedirectToNtpOrAppsPageIfNecessary(contents, access_point);
}
}
@@ -879,8 +889,9 @@ void InlineLoginHandlerImpl::CloseTab(bool show_account_management) {
if (show_account_management) {
browser->window()->ShowAvatarBubbleFromAvatarButton(
- BrowserWindow::AVATAR_BUBBLE_MODE_ACCOUNT_MANAGEMENT,
- signin::ManageAccountsParams());
+ BrowserWindow::AVATAR_BUBBLE_MODE_ACCOUNT_MANAGEMENT,
+ signin::ManageAccountsParams(),
+ signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN);
}
}
}
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_impl.h b/chrome/browser/ui/webui/signin/inline_login_handler_impl.h
index 138b4fb..f20256b 100644
--- a/chrome/browser/ui/webui/signin/inline_login_handler_impl.h
+++ b/chrome/browser/ui/webui/signin/inline_login_handler_impl.h
@@ -170,7 +170,6 @@ class InlineSigninHelper : public GaiaAuthConsumer {
// cross account error, and false otherwise.
bool HandleCrossAccountError(
const std::string& refresh_token,
- signin_metrics::Source source,
OneClickSigninSyncStarter::ConfirmationRequired confirmation_required,
OneClickSigninSyncStarter::StartSyncMode start_mode);
@@ -178,7 +177,6 @@ class InlineSigninHelper : public GaiaAuthConsumer {
void ConfirmEmailAction(
content::WebContents* web_contents,
const std::string& refresh_token,
- signin_metrics::Source source,
OneClickSigninSyncStarter::ConfirmationRequired confirmation_required,
OneClickSigninSyncStarter::StartSyncMode start_mode,
Action action);
@@ -193,7 +191,8 @@ class InlineSigninHelper : public GaiaAuthConsumer {
virtual void CreateSyncStarter(
Browser* browser,
content::WebContents* contents,
- const GURL& url,
+ const GURL& current_url,
+ const GURL& continue_url,
const std::string& refresh_token,
OneClickSigninSyncStarter::StartSyncMode start_mode,
OneClickSigninSyncStarter::ConfirmationRequired confirmation_required);
diff --git a/chrome/browser/ui/webui/signin/inline_login_ui_browsertest.cc b/chrome/browser/ui/webui/signin/inline_login_ui_browsertest.cc
index 6357b36..583234e 100644
--- a/chrome/browser/ui/webui/signin/inline_login_ui_browsertest.cc
+++ b/chrome/browser/ui/webui/signin/inline_login_ui_browsertest.cc
@@ -102,6 +102,12 @@ ACTION(ReturnNewWebUI) {
return new content::WebUIController(arg0);
}
+GURL GetSigninPromoURL() {
+ return signin::GetPromoURL(
+ signin_metrics::AccessPoint::ACCESS_POINT_START_PAGE,
+ signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT, false);
+}
+
// Mock the TestChromeWebUIControllerFactory::WebUIProvider to prove that we are
// not called as expected.
class FooWebUIProvider
@@ -144,10 +150,11 @@ class MockInlineSigninHelper : public InlineSigninHelper {
MOCK_METHOD1(OnClientOAuthSuccess, void(const ClientOAuthResult& result));
MOCK_METHOD1(OnClientOAuthFailure, void(const GoogleServiceAuthError& error));
- MOCK_METHOD6(CreateSyncStarter,
+ MOCK_METHOD7(CreateSyncStarter,
void(Browser*,
content::WebContents*,
const GURL&,
+ const GURL&,
const std::string&,
OneClickSigninSyncStarter::StartSyncMode,
OneClickSigninSyncStarter::ConfirmationRequired));
@@ -200,10 +207,11 @@ class MockSyncStarterInlineSigninHelper : public InlineSigninHelper {
bool choose_what_to_sync,
bool confirm_untrusted_signin);
- MOCK_METHOD6(CreateSyncStarter,
+ MOCK_METHOD7(CreateSyncStarter,
void(Browser*,
content::WebContents*,
const GURL&,
+ const GURL&,
const std::string&,
OneClickSigninSyncStarter::StartSyncMode,
OneClickSigninSyncStarter::ConfirmationRequired));
@@ -303,10 +311,8 @@ void InlineLoginUIBrowserTest::SetAllowedUsernamePattern(
#endif
IN_PROC_BROWSER_TEST_F(InlineLoginUIBrowserTest, MAYBE_DifferentStorageId) {
if (switches::IsEnableWebviewBasedSignin()) {
- ContentInfo info = NavigateAndGetInfo(
- browser(),
- signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false),
- CURRENT_TAB);
+ ContentInfo info =
+ NavigateAndGetInfo(browser(), GetSigninPromoURL(), CURRENT_TAB);
WaitUntilUIReady(browser());
// Make sure storage partition of embedded webview is different from
@@ -328,15 +334,11 @@ IN_PROC_BROWSER_TEST_F(InlineLoginUIBrowserTest, MAYBE_DifferentStorageId) {
ContentInfo info1 =
NavigateAndGetInfo(browser(), test_url, CURRENT_TAB);
- ContentInfo info2 = NavigateAndGetInfo(
- browser(),
- signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false),
- CURRENT_TAB);
+ ContentInfo info2 =
+ NavigateAndGetInfo(browser(), GetSigninPromoURL(), CURRENT_TAB);
NavigateAndGetInfo(browser(), test_url, CURRENT_TAB);
- ContentInfo info3 = NavigateAndGetInfo(
- browser(),
- signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false),
- NEW_FOREGROUND_TAB);
+ ContentInfo info3 =
+ NavigateAndGetInfo(browser(), GetSigninPromoURL(), NEW_FOREGROUND_TAB);
// The info for signin should be the same.
ASSERT_EQ(info2.storage_partition, info3.storage_partition);
@@ -361,10 +363,8 @@ IN_PROC_BROWSER_TEST_F(InlineLoginUIBrowserTest, OneProcessLimit) {
NavigateAndGetInfo(browser(), test_url_1, CURRENT_TAB);
ContentInfo info2 =
NavigateAndGetInfo(browser(), test_url_2, CURRENT_TAB);
- ContentInfo info3 = NavigateAndGetInfo(
- browser(),
- signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false),
- CURRENT_TAB);
+ ContentInfo info3 =
+ NavigateAndGetInfo(browser(), GetSigninPromoURL(), CURRENT_TAB);
ASSERT_EQ(info1.pid, info2.pid);
ASSERT_NE(info1.pid, info3.pid);
@@ -587,8 +587,8 @@ IN_PROC_BROWSER_TEST_F(InlineLoginHelperBrowserTest, WithAuthCode) {
IN_PROC_BROWSER_TEST_F(InlineLoginHelperBrowserTest,
SigninCreatesSyncStarter1) {
// See Source enum in components/signin/core/browser/signin_metrics.h for
- // possible values of source=.
- GURL url("chrome://chrome-signin/?source=0");
+ // possible values of access_point=, reason=.
+ GURL url("chrome://chrome-signin/?access_point=0&reason=0");
base::WeakPtr<InlineLoginHandlerImpl> handler;
// MockSyncStarterInlineSigninHelper will delete itself when done using
// base::ThreadTaskRunnerHandle::DeleteSoon(), so need to delete here. But
@@ -607,10 +607,11 @@ IN_PROC_BROWSER_TEST_F(InlineLoginHelperBrowserTest,
std::string(),
false, // choose what to sync
false); // confirm untrusted signin
- EXPECT_CALL(*helper, CreateSyncStarter(
- _, _, _, "refresh_token",
- OneClickSigninSyncStarter::CONFIRM_SYNC_SETTINGS_FIRST,
- OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN));
+ EXPECT_CALL(
+ *helper,
+ CreateSyncStarter(_, _, _, _, "refresh_token",
+ OneClickSigninSyncStarter::CONFIRM_SYNC_SETTINGS_FIRST,
+ OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN));
SimulateOnClientOAuthSuccess(helper, "refresh_token");
base::MessageLoop::current()->RunUntilIdle();
@@ -621,8 +622,8 @@ IN_PROC_BROWSER_TEST_F(InlineLoginHelperBrowserTest,
IN_PROC_BROWSER_TEST_F(InlineLoginHelperBrowserTest,
SigninCreatesSyncStarter2) {
// See Source enum in components/signin/core/browser/signin_metrics.h for
- // possible values of source=.
- const GURL url("chrome://chrome-signin/?source=0");
+ // possible values of access_point=, reason=.
+ const GURL url("chrome://chrome-signin/?access_point=0&reason=0");
base::WeakPtr<InlineLoginHandlerImpl> handler;
// MockSyncStarterInlineSigninHelper will delete itself when done using
// base::ThreadTaskRunnerHandle::DeleteSoon(), so need to delete here. But
@@ -642,9 +643,9 @@ IN_PROC_BROWSER_TEST_F(InlineLoginHelperBrowserTest,
true, // choose what to sync
false); // confirm untrusted signin
EXPECT_CALL(*helper, CreateSyncStarter(
- _, _, _, "refresh_token",
- OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST,
- OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN));
+ _, _, _, _, "refresh_token",
+ OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST,
+ OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN));
SimulateOnClientOAuthSuccess(helper, "refresh_token");
base::MessageLoop::current()->RunUntilIdle();
@@ -655,8 +656,8 @@ IN_PROC_BROWSER_TEST_F(InlineLoginHelperBrowserTest,
IN_PROC_BROWSER_TEST_F(InlineLoginHelperBrowserTest,
SigninCreatesSyncStarter3) {
// See Source enum in components/signin/core/browser/signin_metrics.h for
- // possible values of source=.
- GURL url("chrome://chrome-signin/?source=0");
+ // possible values of access_point=, reason=.
+ GURL url("chrome://chrome-signin/?access_point=0&reason=0");
base::WeakPtr<InlineLoginHandlerImpl> handler;
// MockSyncStarterInlineSigninHelper will delete itself when done using
// base::ThreadTaskRunnerHandle::DeleteSoon(), so need to delete here. But
@@ -675,10 +676,11 @@ IN_PROC_BROWSER_TEST_F(InlineLoginHelperBrowserTest,
std::string(),
false, // choose what to sync
true); // confirm untrusted signin
- EXPECT_CALL(*helper, CreateSyncStarter(
- _, _, _, "refresh_token",
- OneClickSigninSyncStarter::CONFIRM_SYNC_SETTINGS_FIRST,
- OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN));
+ EXPECT_CALL(
+ *helper,
+ CreateSyncStarter(_, _, _, _, "refresh_token",
+ OneClickSigninSyncStarter::CONFIRM_SYNC_SETTINGS_FIRST,
+ OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN));
SimulateOnClientOAuthSuccess(helper, "refresh_token");
base::MessageLoop::current()->RunUntilIdle();
@@ -689,8 +691,8 @@ IN_PROC_BROWSER_TEST_F(InlineLoginHelperBrowserTest,
IN_PROC_BROWSER_TEST_F(InlineLoginHelperBrowserTest,
SigninCreatesSyncStarter4) {
// See Source enum in components/signin/core/browser/signin_metrics.h for
- // possible values of source=.
- const GURL url("chrome://chrome-signin/?source=3");
+ // possible values of access_point=, reason=.
+ const GURL url("chrome://chrome-signin/?access_point=3&reason=0");
base::WeakPtr<InlineLoginHandlerImpl> handler;
// MockSyncStarterInlineSigninHelper will delete itself when done using
// base::ThreadTaskRunnerHandle::DeleteSoon(), so need to delete here. But
@@ -713,9 +715,9 @@ IN_PROC_BROWSER_TEST_F(InlineLoginHelperBrowserTest,
// Even though "choose what to sync" is false, the source of the URL is
// settings, which means the user wants to CONFIGURE_SYNC_FIRST.
EXPECT_CALL(*helper, CreateSyncStarter(
- _, _, _, "refresh_token",
- OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST,
- OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN));
+ _, _, _, _, "refresh_token",
+ OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST,
+ OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN));
SimulateOnClientOAuthSuccess(helper, "refresh_token");
base::MessageLoop::current()->RunUntilIdle();
@@ -727,8 +729,8 @@ IN_PROC_BROWSER_TEST_F(InlineLoginHelperBrowserTest,
ASSERT_EQ(0ul, token_service()->GetAccounts().size());
// See Source enum in components/signin/core/browser/signin_metrics.h for
- // possible values of source=.
- GURL url("chrome://chrome-signin/?source=11");
+ // possible values of access_point=, reason=.
+ GURL url("chrome://chrome-signin/?access_point=3&reason=2");
base::WeakPtr<InlineLoginHandlerImpl> handler;
InlineSigninHelper helper(handler,
browser()->profile()->GetRequestContext(),
@@ -754,8 +756,8 @@ IN_PROC_BROWSER_TEST_F(InlineLoginHelperBrowserTest,
ASSERT_EQ(0ul, token_service()->GetAccounts().size());
// See Source enum in components/signin/core/browser/signin_metrics.h for
- // possible values of source=.
- GURL url("chrome://chrome-signin/?source=9");
+ // possible values of access_point=, reason=.
+ GURL url("chrome://chrome-signin/?access_point=10&reason=1");
base::WeakPtr<InlineLoginHandlerImpl> handler;
InlineSigninHelper helper(handler,
browser()->profile()->GetRequestContext(),
@@ -832,8 +834,8 @@ IN_PROC_BROWSER_TEST_F(InlineLoginUISafeIframeBrowserTest, Basic) {
// Make sure that the foo webui handler does not get created when we try to
// load it inside the iframe of the login ui.
IN_PROC_BROWSER_TEST_F(InlineLoginUISafeIframeBrowserTest, NoWebUIInIframe) {
- GURL url = signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false).
- Resolve("?source=0&frameUrl=chrome://foo");
+ GURL url = GetSigninPromoURL().Resolve(
+ "?source=0&access_point=0&reason=0&frameUrl=chrome://foo");
EXPECT_CALL(foo_provider(), NewWebUI(_, _)).Times(0);
ui_test_utils::NavigateToURL(browser(), url);
}
@@ -851,9 +853,8 @@ IN_PROC_BROWSER_TEST_F(InlineLoginUISafeIframeBrowserTest,
MAYBE_TopFrameNavigationDisallowed) {
// Loads into gaia iframe a web page that attempts to deframe on load.
GURL deframe_url(embedded_test_server()->GetURL("/login/deframe.html"));
- GURL url(net::AppendOrReplaceQueryParameter(
- signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false),
- "frameUrl", deframe_url.spec()));
+ GURL url(net::AppendOrReplaceQueryParameter(GetSigninPromoURL(), "frameUrl",
+ deframe_url.spec()));
ui_test_utils::NavigateToURL(browser(), url);
WaitUntilUIReady(browser());
@@ -870,8 +871,7 @@ IN_PROC_BROWSER_TEST_F(InlineLoginUISafeIframeBrowserTest,
// Also flaky on Linux which is just too flaky
IN_PROC_BROWSER_TEST_F(InlineLoginUISafeIframeBrowserTest,
DISABLED_NavigationToOtherChromeURLDisallowed) {
- ui_test_utils::NavigateToURL(
- browser(), signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false));
+ ui_test_utils::NavigateToURL(browser(), GetSigninPromoURL());
WaitUntilUIReady(browser());
content::WebContents* contents =
@@ -900,8 +900,7 @@ IN_PROC_BROWSER_TEST_F(InlineLoginUISafeIframeBrowserTest,
// Navigates to the Chrome signin page which loads the fake gaia auth page.
// Since the fake gaia auth page is served over HTTP, thus expects to see an
// untrusted signin confirmation dialog upon submitting credentials below.
- ui_test_utils::NavigateToURL(
- browser(), signin::GetPromoURL(signin_metrics::SOURCE_START_PAGE, false));
+ ui_test_utils::NavigateToURL(browser(), GetSigninPromoURL());
WaitUntilUIReady(browser());
MockLoginUIObserver observer;
diff --git a/chrome/browser/ui/webui/signin/login_ui_service.cc b/chrome/browser/ui/webui/signin/login_ui_service.cc
index cc1681d..115396b 100644
--- a/chrome/browser/ui/webui/signin/login_ui_service.cc
+++ b/chrome/browser/ui/webui/signin/login_ui_service.cc
@@ -68,7 +68,8 @@ void LoginUIService::ShowLoginPopup() {
chrome::ScopedTabbedBrowserDisplayer displayer(
profile_, chrome::GetActiveDesktop());
chrome::ShowBrowserSignin(
- displayer.browser(), signin_metrics::SOURCE_APP_LAUNCHER);
+ displayer.browser(),
+ signin_metrics::AccessPoint::ACCESS_POINT_EXTENSIONS);
#endif
}
@@ -80,9 +81,10 @@ void LoginUIService::DisplayLoginResult(Browser* browser,
#endif
last_login_result_ = message;
browser->window()->ShowAvatarBubbleFromAvatarButton(
- message.empty() ? BrowserWindow::AVATAR_BUBBLE_MODE_CONFIRM_SIGNIN :
- BrowserWindow::AVATAR_BUBBLE_MODE_SHOW_ERROR,
- signin::ManageAccountsParams());
+ message.empty() ? BrowserWindow::AVATAR_BUBBLE_MODE_CONFIRM_SIGNIN
+ : BrowserWindow::AVATAR_BUBBLE_MODE_SHOW_ERROR,
+ signin::ManageAccountsParams(),
+ signin_metrics::AccessPoint::ACCESS_POINT_EXTENSIONS);
}
const base::string16& LoginUIService::GetLastLoginResult() {
diff --git a/chrome/browser/ui/webui/signin/login_ui_test_utils.cc b/chrome/browser/ui/webui/signin/login_ui_test_utils.cc
index c154837..44dcc6b 100644
--- a/chrome/browser/ui/webui/signin/login_ui_test_utils.cc
+++ b/chrome/browser/ui/webui/signin/login_ui_test_utils.cc
@@ -206,13 +206,15 @@ bool SignInWithUI(Browser* browser,
const std::string& username,
const std::string& password,
bool wait_for_account_cookies,
- signin_metrics::Source signin_source) {
+ signin_metrics::AccessPoint access_point) {
SignInObserver signin_observer(wait_for_account_cookies);
scoped_ptr<SigninTracker> tracker =
SigninTrackerFactory::CreateForProfile(browser->profile(),
&signin_observer);
- GURL signin_url = signin::GetPromoURL(signin_source, false);
+ GURL signin_url = signin::GetPromoURL(
+ access_point, signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT,
+ false);
DVLOG(1) << "Navigating to " << signin_url;
// For some tests, the window is not shown yet and this might be the first tab
// navigation, so GetActiveWebContents() for CURRENT_TAB is NULL. That's why
@@ -236,8 +238,8 @@ bool SignInWithUI(Browser* browser,
const std::string& username,
const std::string& password) {
return SignInWithUI(browser, username, password,
- false /* wait_for_account_cookies */,
- signin_metrics::SOURCE_START_PAGE);
+ false /* wait_for_account_cookies */,
+ signin_metrics::AccessPoint::ACCESS_POINT_START_PAGE);
}
} // namespace login_ui_test_utils
diff --git a/chrome/browser/ui/webui/signin/login_ui_test_utils.h b/chrome/browser/ui/webui/signin/login_ui_test_utils.h
index acddd39..9fdc689 100644
--- a/chrome/browser/ui/webui/signin/login_ui_test_utils.h
+++ b/chrome/browser/ui/webui/signin/login_ui_test_utils.h
@@ -45,12 +45,12 @@ void SigninInOldGaiaFlow(Browser* browser,
// This will block until a signin succeeded or failed notification is observed.
// In case |wait_for_account_cookies|, the call will block until the account
// cookies have been written to the cookie jar.
-// |signin_source| identifies the source used to load the signin page.
+// |access_point| identifies the access point used to load the signin page.
bool SignInWithUI(Browser* browser,
const std::string& email,
const std::string& password,
bool wait_for_account_cookies,
- signin_metrics::Source signin_source);
+ signin_metrics::AccessPoint access_point);
// Most common way to sign in a user, it does not wait for cookies to be set
// and uses the SOURCE_START_PAGE as signin source.
diff --git a/chrome/browser/ui/webui/sync_setup_browsertest.js b/chrome/browser/ui/webui/sync_setup_browsertest.js
index e65c402..528c2fe 100644
--- a/chrome/browser/ui/webui/sync_setup_browsertest.js
+++ b/chrome/browser/ui/webui/sync_setup_browsertest.js
@@ -85,8 +85,8 @@ TEST_F('SyncSetupWebUITestAsync', 'VerifySignIn', function() {
// Handle SyncSetupStartSignIn by displaying the sync setup dialog, verifying
// that a confirmation dialog appears, and clicking OK to dismiss the dialog.
// Note that this test doesn't actually do a gaia sign in.
- this.mockHandler.expects(once()).SyncSetupStartSignIn().will(callFunction(
- function() {
+ this.mockHandler.expects(once()).SyncSetupStartSignIn(
+ 'access-point-settings').will(callFunction(function() {
SyncSetupOverlay.showSyncSetupPage('configure');
var okButton = $('confirm-everything-ok');
assertNotEquals(null, okButton);
@@ -103,8 +103,8 @@ TEST_F('SyncSetupWebUITestAsync', 'VerifySignIn', function() {
// Test that switching to and from "Sync everything" saves and restores types.
TEST_F('SyncSetupWebUITestAsync', 'RestoreSyncDataTypes', function() {
- this.mockHandler.expects(once()).SyncSetupStartSignIn().will(callFunction(
- function() {
+ this.mockHandler.expects(once()).SyncSetupStartSignIn(
+ 'access-point-settings').will(callFunction(function() {
SyncSetupOverlay.showSyncSetupPage('configure', {});
$('sync-select-datatypes').selectedIndex = 1;
diff --git a/chrome/browser/ui/webui/webui_webview_browsertest.cc b/chrome/browser/ui/webui/webui_webview_browsertest.cc
index 2ed4fa8..7329d0f4 100644
--- a/chrome/browser/ui/webui/webui_webview_browsertest.cc
+++ b/chrome/browser/ui/webui/webui_webview_browsertest.cc
@@ -6,6 +6,7 @@
#include "base/path_service.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/renderer_context_menu/render_view_context_menu_test_util.h"
+#include "chrome/browser/signin/signin_promo.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/chrome_paths.h"
@@ -37,7 +38,9 @@ class WebUIWebViewBrowserTest : public WebUIBrowserTest {
}
GURL GetWebViewEnabledWebUIURL() const {
- return GURL(chrome::kChromeUIChromeSigninURL);
+ return GURL(signin::GetPromoURL(
+ signin_metrics::AccessPoint::ACCESS_POINT_START_PAGE,
+ signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT, false));
}
private:
diff --git a/chrome/browser/ui/zoom/zoom_controller_browsertest.cc b/chrome/browser/ui/zoom/zoom_controller_browsertest.cc
index d8bcbdd..68c43c4 100644
--- a/chrome/browser/ui/zoom/zoom_controller_browsertest.cc
+++ b/chrome/browser/ui/zoom/zoom_controller_browsertest.cc
@@ -276,8 +276,8 @@ IN_PROC_BROWSER_TEST_F(ZoomControllerBrowserTest, NavigationResetsManualMode) {
// Regression test: crbug.com/438979.
IN_PROC_BROWSER_TEST_F(ZoomControllerBrowserTest,
SettingsZoomAfterSigninWorks) {
- GURL signin_url(
- std::string(chrome::kChromeUIChromeSigninURL).append("?source=0"));
+ GURL signin_url(std::string(chrome::kChromeUIChromeSigninURL)
+ .append("?access_point=0&reason=0"));
// We open the signin page in a new tab so that the ZoomController is
// created against the HostZoomMap of the special StoragePartition that
// backs the signin page. When we subsequently navigate away from the
diff --git a/chrome/test/base/test_browser_window.h b/chrome/test/base/test_browser_window.h
index 51d6ead..a58e281 100644
--- a/chrome/test/base/test_browser_window.h
+++ b/chrome/test/base/test_browser_window.h
@@ -140,8 +140,11 @@ class TestBrowserWindow : public BrowserWindow {
override;
void ShowAvatarBubbleFromAvatarButton(
AvatarBubbleMode mode,
- const signin::ManageAccountsParams& manage_accounts_params) override {}
- void ShowModalSigninWindow(AvatarBubbleMode mode) override {}
+ const signin::ManageAccountsParams& manage_accounts_params,
+ signin_metrics::AccessPoint access_point) override {}
+ void ShowModalSigninWindow(
+ AvatarBubbleMode mode,
+ signin_metrics::AccessPoint access_point) override {}
void CloseModalSigninWindow() override {}
int GetRenderViewHeightInsetWithDetachedBookmarkBar() override;
void ExecuteExtensionCommand(const extensions::Extension* extension,
diff --git a/components/signin/core/browser/signin_metrics.cc b/components/signin/core/browser/signin_metrics.cc
index a154d11..e0fe72c6 100644
--- a/components/signin/core/browser/signin_metrics.cc
+++ b/components/signin/core/browser/signin_metrics.cc
@@ -21,6 +21,23 @@ DifferentPrimaryAccounts ComparePrimaryAccounts(bool primary_accounts_same,
return COOKIE_AND_TOKEN_PRIMARIES_DIFFERENT;
}
+void LogSigninAccessPointStarted(AccessPoint access_point) {
+ UMA_HISTOGRAM_ENUMERATION("Signin.SigninStartedAccessPoint",
+ static_cast<int>(access_point),
+ static_cast<int>(AccessPoint::ACCESS_POINT_MAX));
+}
+
+void LogSigninAccessPointCompleted(AccessPoint access_point) {
+ UMA_HISTOGRAM_ENUMERATION("Signin.SigninCompletedAccessPoint",
+ static_cast<int>(access_point),
+ static_cast<int>(AccessPoint::ACCESS_POINT_MAX));
+}
+
+void LogSigninReason(Reason reason) {
+ UMA_HISTOGRAM_ENUMERATION("Signin.SigninReason", static_cast<int>(reason),
+ static_cast<int>(Reason::REASON_MAX));
+}
+
void LogSigninAccountReconciliation(int total_number_accounts,
int count_added_to_cookie_jar,
int count_removed_from_cookie_jar,
@@ -73,10 +90,6 @@ void LogSigninProfile(bool is_first_run, base::Time install_date) {
elapsed_time.InMinutes());
}
-void LogSigninSource(Source source) {
- UMA_HISTOGRAM_ENUMERATION("Signin.SigninSource", source, HISTOGRAM_MAX);
-}
-
void LogSigninAddAccount() {
// Account signin may fail for a wide variety of reasons. There is no
// explicit false, but one can compare this value with the various UI
diff --git a/components/signin/core/browser/signin_metrics.h b/components/signin/core/browser/signin_metrics.h
index fa7242b..958fa0b 100644
--- a/components/signin/core/browser/signin_metrics.h
+++ b/components/signin/core/browser/signin_metrics.h
@@ -98,22 +98,50 @@ enum {
HISTOGRAM_CONFIRM_MAX
};
-// Enum valus used with the "Signin.SigninSource" histogram, which tracks the
-// source that launched a Gaia signin page.
+// TODO(gogerald): right now, gaia server needs to distinguish the source from
+// signin_metrics::SOURCE_START_PAGE, signin_metrics::SOURCE_SETTINGS and the
+// others to show advanced sync setting, remove them after switching to Minute
+// Maid sign in flow.
+// This was previously used in Signin.SigninSource UMA histogram, but no longer
+// used after having below AccessPoint and Reason related histograms.
enum Source {
- SOURCE_START_PAGE = 0, // This must be first.
- SOURCE_NTP_LINK,
- SOURCE_MENU,
- SOURCE_SETTINGS,
- SOURCE_EXTENSION_INSTALL_BUBBLE,
- SOURCE_APP_LAUNCHER,
- SOURCE_APPS_PAGE_LINK,
- SOURCE_BOOKMARK_BUBBLE,
- SOURCE_AVATAR_BUBBLE_SIGN_IN,
- SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT,
- SOURCE_DEVICES_PAGE,
- SOURCE_REAUTH,
- SOURCE_UNKNOWN, // This must be last.
+ SOURCE_START_PAGE = 0, // This must be first.
+ SOURCE_SETTINGS = 3,
+ SOURCE_OTHERS = 13,
+};
+
+// Enum values which enumerates all access points where sign in could be
+// initiated. Not all of them exist on all platforms. They are used with
+// "Signin.SigninStartedAccessPoint" and "Signin.SigninCompletedAccessPoint"
+// histograms.
+enum class AccessPoint : int {
+ ACCESS_POINT_START_PAGE = 0,
+ ACCESS_POINT_NTP_LINK,
+ ACCESS_POINT_MENU,
+ ACCESS_POINT_SETTINGS,
+ ACCESS_POINT_SUPERVISED_USER,
+ ACCESS_POINT_EXTENSION_INSTALL_BUBBLE,
+ ACCESS_POINT_EXTENSIONS,
+ ACCESS_POINT_APPS_PAGE_LINK,
+ ACCESS_POINT_BOOKMARK_BUBBLE,
+ ACCESS_POINT_BOOKMARK_MANAGER,
+ ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN,
+ ACCESS_POINT_USER_MANAGER,
+ ACCESS_POINT_DEVICES_PAGE,
+ ACCESS_POINT_CLOUD_PRINT,
+ ACCESS_POINT_CONTENT_AREA,
+ ACCESS_POINT_SIGNIN_PROMO,
+ ACCESS_POINT_RECENT_TABS,
+ ACCESS_POINT_MAX // This must be last.
+};
+
+// Enum values which enumerates all reasons to start sign in process.
+enum class Reason : int {
+ REASON_SIGNIN_PRIMARY_ACCOUNT = 0,
+ REASON_ADD_SECONDARY_ACCOUNT,
+ REASON_REAUTHENTICATION,
+ REASON_UNLOCK,
+ REASON_MAX // This must be last.
};
// Enum values used for use with the "Signin.Reauth" histogram.
@@ -177,6 +205,13 @@ enum AccountReconcilorState {
ACCOUNT_RECONCILOR_HISTOGRAM_COUNT,
};
+// Tracks the access point of sign in.
+void LogSigninAccessPointStarted(AccessPoint access_point);
+void LogSigninAccessPointCompleted(AccessPoint access_point);
+
+// Tracks the reason of sign in.
+void LogSigninReason(Reason reason);
+
// Log to UMA histograms and UserCounts stats about a single execution of the
// AccountReconciler.
// |total_number_accounts| - How many accounts are in the browser for this
@@ -207,9 +242,6 @@ void LogSigninAccountReconciliationDuration(base::TimeDelta duration,
// Track a successful signin.
void LogSigninAddAccount();
-// Tracks the original source that showed the signin page.
-void LogSigninSource(Source source);
-
// Track a successful signin of a profile.
void LogSigninProfile(bool is_first_run, base::Time install_date);
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index df007a5..1260e4d 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -44212,7 +44212,22 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries.
</summary>
</histogram>
+<histogram name="Signin.SigninCompletedAccessPoint" enum="SigninAccessPoint">
+ <owner>gogerald@chromium.org</owner>
+ <summary>Logs the original access point of each completed sign in.</summary>
+</histogram>
+
+<histogram name="Signin.SigninReason" enum="SigninReason">
+ <owner>gogerald@chromium.org</owner>
+ <summary>Logs the reason of each completed sign in.</summary>
+</histogram>
+
<histogram name="Signin.SigninSource" enum="SigninSource">
+ <obsolete>
+ Removed this histogram since we have had newly designed histograms
+ Signin.SigninStartedAccessPoint, Signin.SigninCompletedAccessPoint, and
+ Signin.SigninReason.
+ </obsolete>
<owner>noms@chromium.org</owner>
<summary>
Logs the original source that displayed the signin or reauth Gaia page,
@@ -44220,6 +44235,14 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries.
</summary>
</histogram>
+<histogram name="Signin.SigninStartedAccessPoint" enum="SigninAccessPoint">
+ <owner>gogerald@chromium.org</owner>
+ <summary>
+ Logs the original access point that displayed the signin or reauth Gaia
+ page, before the page is displayed.
+ </summary>
+</histogram>
+
<histogram name="Signin.SignoutProfile" enum="SigninSignoutProfile">
<owner>mlerman@chromium.org</owner>
<summary>Track how a profile gets signed out.</summary>
@@ -75240,6 +75263,26 @@ To add a new entry, add it with any value and run test to compute valid value.
<int value="2" label="Dismiss"/>
</enum>
+<enum name="SigninAccessPoint" type="int">
+ <int value="0" label="Start page"/>
+ <int value="1" label="NTP Link"/>
+ <int value="2" label="Menu"/>
+ <int value="3" label="Settings"/>
+ <int value="4" label="Supervised user"/>
+ <int value="5" label="Extension install bubble"/>
+ <int value="6" label="Extensions"/>
+ <int value="7" label="Apps page link"/>
+ <int value="8" label="Bookmark bubble"/>
+ <int value="9" label="Bookmark manager"/>
+ <int value="10" label="Avatar bubble sign in"/>
+ <int value="11" label="User manager"/>
+ <int value="12" label="Devices page"/>
+ <int value="13" label="Cloud print"/>
+ <int value="14" label="Content area"/>
+ <int value="15" label="Signin promo"/>
+ <int value="16" label="Recent tabs"/>
+</enum>
+
<enum name="SigninAccountReconcilorState" type="int">
<int value="0" label="OK">
The account reconcilor has finished running and is up-to-date.
@@ -75304,6 +75347,13 @@ To add a new entry, add it with any value and run test to compute valid value.
<int value="10" label="Undo">The sync was aborted with an undo button.</int>
</enum>
+<enum name="SigninReason" type="int">
+ <int value="0" label="Signin primary account"/>
+ <int value="1" label="Add secondary account"/>
+ <int value="2" label="Reauthentication"/>
+ <int value="3" label="Unlock profile"/>
+</enum>
+
<enum name="SigninReauthStates" type="int">
<int value="0" label="Account mismatch"/>
<int value="1" label="Reauth Shown"/>