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

Side by Side Diff: chrome/browser/ui/webui/settings/sync_handler.cc

Issue 1473543002: Implement newly designed sign-in related histograms for desktop platorms. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: document signin.signinreason histogram Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/settings/sync_handler.h" 5 #include "chrome/browser/ui/webui/settings/sync_handler.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 web_ui()->RegisterMessageCallback("SyncSetupStopSyncing", 231 web_ui()->RegisterMessageCallback("SyncSetupStopSyncing",
232 base::Bind(&SyncHandler::HandleStopSyncing, 232 base::Bind(&SyncHandler::HandleStopSyncing,
233 base::Unretained(this))); 233 base::Unretained(this)));
234 web_ui()->RegisterMessageCallback("SyncSetupStartSignIn", 234 web_ui()->RegisterMessageCallback("SyncSetupStartSignIn",
235 base::Bind(&SyncHandler::HandleStartSignin, 235 base::Bind(&SyncHandler::HandleStartSignin,
236 base::Unretained(this))); 236 base::Unretained(this)));
237 #endif 237 #endif
238 } 238 }
239 239
240 #if !defined(OS_CHROMEOS) 240 #if !defined(OS_CHROMEOS)
241 void SyncHandler::DisplayGaiaLogin() { 241 void SyncHandler::DisplayGaiaLogin(signin_metrics::AccessPoint access_point) {
242 DCHECK(!sync_startup_tracker_); 242 DCHECK(!sync_startup_tracker_);
243 // Advanced options are no longer being configured if the login screen is 243 // Advanced options are no longer being configured if the login screen is
244 // visible. If the user exits the signin wizard after this without 244 // visible. If the user exits the signin wizard after this without
245 // configuring sync, CloseSyncSetup() will ensure they are logged out. 245 // configuring sync, CloseSyncSetup() will ensure they are logged out.
246 configuring_sync_ = false; 246 configuring_sync_ = false;
247 DisplayGaiaLoginInNewTabOrWindow(); 247 DisplayGaiaLoginInNewTabOrWindow(access_point);
248 } 248 }
249 249
250 void SyncHandler::DisplayGaiaLoginInNewTabOrWindow() { 250 void SyncHandler::DisplayGaiaLoginInNewTabOrWindow(
251 signin_metrics::AccessPoint access_point) {
251 Browser* browser = chrome::FindBrowserWithWebContents( 252 Browser* browser = chrome::FindBrowserWithWebContents(
252 web_ui()->GetWebContents()); 253 web_ui()->GetWebContents());
253 bool force_new_tab = false; 254 bool force_new_tab = false;
254 if (!browser) { 255 if (!browser) {
255 // Settings is not displayed in a browser window. Open a new window. 256 // Settings is not displayed in a browser window. Open a new window.
256 browser = new Browser(Browser::CreateParams(Browser::TYPE_TABBED, profile_, 257 browser = new Browser(Browser::CreateParams(Browser::TYPE_TABBED, profile_,
257 chrome::GetActiveDesktop())); 258 chrome::GetActiveDesktop()));
258 force_new_tab = true; 259 force_new_tab = true;
259 } 260 }
260 261
261 // If the signin manager already has an authenticated username, this is a 262 // If the signin manager already has an authenticated username, this is a
262 // re-auth scenario, and we need to ensure that the user signs in with the 263 // re-auth scenario, and we need to ensure that the user signs in with the
263 // same email address. 264 // same email address.
264 GURL url; 265 GURL url;
265 if (SigninManagerFactory::GetForProfile( 266 if (SigninManagerFactory::GetForProfile(
266 browser->profile())->IsAuthenticated()) { 267 browser->profile())->IsAuthenticated()) {
267 UMA_HISTOGRAM_ENUMERATION("Signin.Reauth", 268 UMA_HISTOGRAM_ENUMERATION("Signin.Reauth",
268 signin_metrics::HISTOGRAM_REAUTH_SHOWN, 269 signin_metrics::HISTOGRAM_REAUTH_SHOWN,
269 signin_metrics::HISTOGRAM_REAUTH_MAX); 270 signin_metrics::HISTOGRAM_REAUTH_MAX);
270 271
271 SigninErrorController* error_controller = 272 SigninErrorController* error_controller =
272 SigninErrorControllerFactory::GetForProfile(browser->profile()); 273 SigninErrorControllerFactory::GetForProfile(browser->profile());
273 DCHECK(error_controller->HasError()); 274 DCHECK(error_controller->HasError());
274 if (!force_new_tab) { 275 if (!force_new_tab) {
275 browser->window()->ShowAvatarBubbleFromAvatarButton( 276 browser->window()->ShowAvatarBubbleFromAvatarButton(
276 BrowserWindow::AVATAR_BUBBLE_MODE_REAUTH, 277 BrowserWindow::AVATAR_BUBBLE_MODE_REAUTH,
277 signin::ManageAccountsParams()); 278 signin::ManageAccountsParams(), access_point);
278 } else { 279 } else {
279 url = signin::GetReauthURL(browser->profile(), 280 url = signin::GetReauthURL(
280 error_controller->error_account_id()); 281 access_point, signin_metrics::Reason::REASON_REAUTHENTICATION,
282 browser->profile(), error_controller->error_account_id());
281 } 283 }
282 } else { 284 } else {
283 signin_metrics::LogSigninSource(signin_metrics::SOURCE_SETTINGS);
284 if (!force_new_tab) { 285 if (!force_new_tab) {
285 browser->window()->ShowAvatarBubbleFromAvatarButton( 286 browser->window()->ShowAvatarBubbleFromAvatarButton(
286 BrowserWindow::AVATAR_BUBBLE_MODE_SIGNIN, 287 BrowserWindow::AVATAR_BUBBLE_MODE_SIGNIN,
287 signin::ManageAccountsParams()); 288 signin::ManageAccountsParams(), access_point);
288 } else { 289 } else {
289 url = signin::GetPromoURL(signin_metrics::SOURCE_SETTINGS, true); 290 url = signin::GetPromoURL(
291 access_point, signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT,
292 true);
290 } 293 }
291 } 294 }
292 295
293 if (url.is_valid()) 296 if (url.is_valid())
294 chrome::ShowSingletonTab(browser, url); 297 chrome::ShowSingletonTab(browser, url);
295 } 298 }
296 #endif 299 #endif
297 300
298 bool SyncHandler::PrepareSyncSetup() { 301 bool SyncHandler::PrepareSyncSetup() {
299 // If the wizard is already visible, just focus that one. 302 // If the wizard is already visible, just focus that one.
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 // blank setup overlay on this page by showing the "done" page. This can 521 // blank setup overlay on this page by showing the "done" page. This can
519 // happen if the user navigates to chrome://settings/syncSetup in more than 522 // happen if the user navigates to chrome://settings/syncSetup in more than
520 // one tab. See crbug.com/261566. 523 // one tab. See crbug.com/261566.
521 // Note: The following block will transfer focus to the existing wizard. 524 // Note: The following block will transfer focus to the existing wizard.
522 if (IsExistingWizardPresent() && !IsActiveLogin()) 525 if (IsExistingWizardPresent() && !IsActiveLogin())
523 CloseUI(); 526 CloseUI();
524 527
525 // If a setup wizard is present on this page or another, bring it to focus. 528 // If a setup wizard is present on this page or another, bring it to focus.
526 // Otherwise, display a new one on this page. 529 // Otherwise, display a new one on this page.
527 if (!FocusExistingWizardIfPresent()) 530 if (!FocusExistingWizardIfPresent())
528 OpenSyncSetup(); 531 OpenSyncSetup(args);
529 } 532 }
530 533
531 #if defined(OS_CHROMEOS) 534 #if defined(OS_CHROMEOS)
532 // On ChromeOS, we need to sign out the user session to fix an auth error, so 535 // On ChromeOS, we need to sign out the user session to fix an auth error, so
533 // the user goes through the real signin flow to generate a new auth token. 536 // the user goes through the real signin flow to generate a new auth token.
534 void SyncHandler::HandleDoSignOutOnAuthError(const base::ListValue* args) { 537 void SyncHandler::HandleDoSignOutOnAuthError(const base::ListValue* args) {
535 DVLOG(1) << "Signing out the user to fix a sync error."; 538 DVLOG(1) << "Signing out the user to fix a sync error.";
536 chrome::AttemptUserExit(); 539 chrome::AttemptUserExit();
537 } 540 }
538 #endif 541 #endif
539 542
540 #if !defined(OS_CHROMEOS) 543 #if !defined(OS_CHROMEOS)
541 void SyncHandler::HandleStartSignin(const base::ListValue* args) { 544 void SyncHandler::HandleStartSignin(const base::ListValue* args) {
542 // Should only be called if the user is not already signed in. 545 // Should only be called if the user is not already signed in.
543 DCHECK(!SigninManagerFactory::GetForProfile(profile_)->IsAuthenticated()); 546 DCHECK(!SigninManagerFactory::GetForProfile(profile_)->IsAuthenticated());
544 OpenSyncSetup(); 547 OpenSyncSetup(args);
545 } 548 }
546 549
547 void SyncHandler::HandleStopSyncing(const base::ListValue* args) { 550 void SyncHandler::HandleStopSyncing(const base::ListValue* args) {
548 if (GetSyncService()) 551 if (GetSyncService())
549 ProfileSyncService::SyncEvent(ProfileSyncService::STOP_FROM_OPTIONS); 552 ProfileSyncService::SyncEvent(ProfileSyncService::STOP_FROM_OPTIONS);
550 SigninManagerFactory::GetForProfile(profile_) 553 SigninManagerFactory::GetForProfile(profile_)
551 ->SignOut(signin_metrics::USER_CLICKED_SIGNOUT_SETTINGS); 554 ->SignOut(signin_metrics::USER_CLICKED_SIGNOUT_SETTINGS);
552 555
553 bool delete_profile = false; 556 bool delete_profile = false;
554 if (args->GetBoolean(0, &delete_profile) && delete_profile) { 557 if (args->GetBoolean(0, &delete_profile) && delete_profile) {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 613
611 // Alert the sync service anytime the sync setup dialog is closed. This can 614 // Alert the sync service anytime the sync setup dialog is closed. This can
612 // happen due to the user clicking the OK or Cancel button, or due to the 615 // happen due to the user clicking the OK or Cancel button, or due to the
613 // dialog being closed by virtue of sync being disabled in the background. 616 // dialog being closed by virtue of sync being disabled in the background.
614 if (sync_service) 617 if (sync_service)
615 sync_service->SetSetupInProgress(false); 618 sync_service->SetSetupInProgress(false);
616 619
617 configuring_sync_ = false; 620 configuring_sync_ = false;
618 } 621 }
619 622
620 void SyncHandler::OpenSyncSetup() { 623 void SyncHandler::OpenSyncSetup(const base::ListValue* args) {
621 if (!PrepareSyncSetup()) 624 if (!PrepareSyncSetup())
622 return; 625 return;
623 626
624 // There are several different UI flows that can bring the user here: 627 // There are several different UI flows that can bring the user here:
625 // 1) Signin promo. 628 // 1) Signin promo.
626 // 2) Normal signin through settings page (IsAuthenticated() is false). 629 // 2) Normal signin through settings page (IsAuthenticated() is false).
627 // 3) Previously working credentials have expired. 630 // 3) Previously working credentials have expired.
628 // 4) User is signed in, but has stopped sync via the google dashboard, and 631 // 4) User is signed in, but has stopped sync via the google dashboard, and
629 // signout is prohibited by policy so we need to force a re-auth. 632 // signout is prohibited by policy so we need to force a re-auth.
630 // 5) User clicks [Advanced Settings] button on options page while already 633 // 5) User clicks [Advanced Settings] button on options page while already
631 // logged in. 634 // logged in.
632 // 6) One-click signin (credentials are already available, so should display 635 // 6) One-click signin (credentials are already available, so should display
633 // sync configure UI, not login UI). 636 // sync configure UI, not login UI).
634 // 7) User re-enables sync after disabling it via advanced settings. 637 // 7) User re-enables sync after disabling it via advanced settings.
635 #if !defined(OS_CHROMEOS) 638 #if !defined(OS_CHROMEOS)
636 SigninManagerBase* signin = SigninManagerFactory::GetForProfile(profile_); 639 SigninManagerBase* signin = SigninManagerFactory::GetForProfile(profile_);
637 640
638 if (!signin->IsAuthenticated() || 641 if (!signin->IsAuthenticated() ||
639 SigninErrorControllerFactory::GetForProfile(profile_)->HasError()) { 642 SigninErrorControllerFactory::GetForProfile(profile_)->HasError()) {
640 // User is not logged in (cases 1-2), or login has been specially requested 643 // User is not logged in (cases 1-2), or login has been specially requested
641 // because previously working credentials have expired (case 3). Close sync 644 // because previously working credentials have expired (case 3). Close sync
642 // setup including any visible overlays, and display the gaia auth page. 645 // setup including any visible overlays, and display the gaia auth page.
643 // Control will be returned to the sync settings page once auth is complete. 646 // Control will be returned to the sync settings page once auth is complete.
644 CloseUI(); 647 CloseUI();
645 DisplayGaiaLogin(); 648 if (args) {
649 std::string access_point = base::UTF16ToUTF8(ExtractStringValue(args));
650 if (access_point == "access-point-supervised-user") {
651 DisplayGaiaLogin(
652 signin_metrics::AccessPoint::ACCESS_POINT_SUPERVISED_USER);
653 return;
654 }
655 }
656 DisplayGaiaLogin(signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS);
646 return; 657 return;
647 } 658 }
648 #endif 659 #endif
649 if (!GetSyncService()) { 660 if (!GetSyncService()) {
650 // This can happen if the user directly navigates to /settings/syncSetup. 661 // This can happen if the user directly navigates to /settings/syncSetup.
651 DLOG(WARNING) << "Cannot display sync UI when sync is disabled"; 662 DLOG(WARNING) << "Cannot display sync UI when sync is disabled";
652 CloseUI(); 663 CloseUI();
653 return; 664 return;
654 } 665 }
655 666
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
895 void SyncHandler::UpdateSyncState() { 906 void SyncHandler::UpdateSyncState() {
896 web_ui()->CallJavascriptFunction("settings.SyncPrivateApi.sendSyncStatus", 907 web_ui()->CallJavascriptFunction("settings.SyncPrivateApi.sendSyncStatus",
897 *GetSyncStateDictionary()); 908 *GetSyncStateDictionary());
898 } 909 }
899 910
900 void SyncHandler::OnSigninAllowedPrefChange() { 911 void SyncHandler::OnSigninAllowedPrefChange() {
901 UpdateSyncState(); 912 UpdateSyncState();
902 } 913 }
903 914
904 } // namespace settings 915 } // namespace settings
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698