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

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: format 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 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 web_ui()->RegisterMessageCallback("SyncSetupStopSyncing", 237 web_ui()->RegisterMessageCallback("SyncSetupStopSyncing",
238 base::Bind(&SyncHandler::HandleStopSyncing, 238 base::Bind(&SyncHandler::HandleStopSyncing,
239 base::Unretained(this))); 239 base::Unretained(this)));
240 web_ui()->RegisterMessageCallback("SyncSetupStartSignIn", 240 web_ui()->RegisterMessageCallback("SyncSetupStartSignIn",
241 base::Bind(&SyncHandler::HandleStartSignin, 241 base::Bind(&SyncHandler::HandleStartSignin,
242 base::Unretained(this))); 242 base::Unretained(this)));
243 #endif 243 #endif
244 } 244 }
245 245
246 #if !defined(OS_CHROMEOS) 246 #if !defined(OS_CHROMEOS)
247 void SyncHandler::DisplayGaiaLogin() { 247 void SyncHandler::DisplayGaiaLogin(signin_metrics::AccessPoint access_point) {
248 DCHECK(!sync_startup_tracker_); 248 DCHECK(!sync_startup_tracker_);
249 // Advanced options are no longer being configured if the login screen is 249 // Advanced options are no longer being configured if the login screen is
250 // visible. If the user exits the signin wizard after this without 250 // visible. If the user exits the signin wizard after this without
251 // configuring sync, CloseSyncSetup() will ensure they are logged out. 251 // configuring sync, CloseSyncSetup() will ensure they are logged out.
252 configuring_sync_ = false; 252 configuring_sync_ = false;
253 DisplayGaiaLoginInNewTabOrWindow(); 253 DisplayGaiaLoginInNewTabOrWindow(access_point);
254 } 254 }
255 255
256 void SyncHandler::DisplayGaiaLoginInNewTabOrWindow() { 256 void SyncHandler::DisplayGaiaLoginInNewTabOrWindow(
257 signin_metrics::AccessPoint access_point) {
257 Browser* browser = chrome::FindBrowserWithWebContents( 258 Browser* browser = chrome::FindBrowserWithWebContents(
258 web_ui()->GetWebContents()); 259 web_ui()->GetWebContents());
259 bool force_new_tab = false; 260 bool force_new_tab = false;
260 if (!browser) { 261 if (!browser) {
261 // Settings is not displayed in a browser window. Open a new window. 262 // Settings is not displayed in a browser window. Open a new window.
262 browser = new Browser(Browser::CreateParams(Browser::TYPE_TABBED, profile_, 263 browser = new Browser(Browser::CreateParams(Browser::TYPE_TABBED, profile_,
263 chrome::GetActiveDesktop())); 264 chrome::GetActiveDesktop()));
264 force_new_tab = true; 265 force_new_tab = true;
265 } 266 }
266 267
267 // If the signin manager already has an authenticated username, this is a 268 // If the signin manager already has an authenticated username, this is a
268 // re-auth scenario, and we need to ensure that the user signs in with the 269 // re-auth scenario, and we need to ensure that the user signs in with the
269 // same email address. 270 // same email address.
270 GURL url; 271 GURL url;
271 if (SigninManagerFactory::GetForProfile( 272 if (SigninManagerFactory::GetForProfile(
272 browser->profile())->IsAuthenticated()) { 273 browser->profile())->IsAuthenticated()) {
273 UMA_HISTOGRAM_ENUMERATION("Signin.Reauth", 274 UMA_HISTOGRAM_ENUMERATION("Signin.Reauth",
274 signin_metrics::HISTOGRAM_REAUTH_SHOWN, 275 signin_metrics::HISTOGRAM_REAUTH_SHOWN,
275 signin_metrics::HISTOGRAM_REAUTH_MAX); 276 signin_metrics::HISTOGRAM_REAUTH_MAX);
276 277
277 SigninErrorController* error_controller = 278 SigninErrorController* error_controller =
278 SigninErrorControllerFactory::GetForProfile(browser->profile()); 279 SigninErrorControllerFactory::GetForProfile(browser->profile());
279 DCHECK(error_controller->HasError()); 280 DCHECK(error_controller->HasError());
280 if (!force_new_tab) { 281 if (!force_new_tab) {
281 browser->window()->ShowAvatarBubbleFromAvatarButton( 282 browser->window()->ShowAvatarBubbleFromAvatarButton(
282 BrowserWindow::AVATAR_BUBBLE_MODE_REAUTH, 283 BrowserWindow::AVATAR_BUBBLE_MODE_REAUTH,
283 signin::ManageAccountsParams()); 284 signin::ManageAccountsParams(), access_point);
284 } else { 285 } else {
285 url = signin::GetReauthURL(browser->profile(), 286 url = signin::GetReauthURL(
286 error_controller->error_account_id()); 287 access_point, signin_metrics::Reason::REASON_REAUTHENTICATION,
288 browser->profile(), error_controller->error_account_id());
287 } 289 }
288 } else { 290 } else {
289 signin_metrics::LogSigninSource(signin_metrics::SOURCE_SETTINGS);
290 if (!force_new_tab) { 291 if (!force_new_tab) {
291 browser->window()->ShowAvatarBubbleFromAvatarButton( 292 browser->window()->ShowAvatarBubbleFromAvatarButton(
292 BrowserWindow::AVATAR_BUBBLE_MODE_SIGNIN, 293 BrowserWindow::AVATAR_BUBBLE_MODE_SIGNIN,
293 signin::ManageAccountsParams()); 294 signin::ManageAccountsParams(), access_point);
294 } else { 295 } else {
295 url = signin::GetPromoURL(signin_metrics::SOURCE_SETTINGS, true); 296 url = signin::GetPromoURL(
297 access_point, signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT,
298 true);
296 } 299 }
297 } 300 }
298 301
299 if (url.is_valid()) 302 if (url.is_valid())
300 chrome::ShowSingletonTab(browser, url); 303 chrome::ShowSingletonTab(browser, url);
301 } 304 }
302 #endif 305 #endif
303 306
304 bool SyncHandler::PrepareSyncSetup() { 307 bool SyncHandler::PrepareSyncSetup() {
305 // If the wizard is already visible, just focus that one. 308 // If the wizard is already visible, just focus that one.
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 // blank setup overlay on this page by showing the "done" page. This can 527 // blank setup overlay on this page by showing the "done" page. This can
525 // happen if the user navigates to chrome://settings/syncSetup in more than 528 // happen if the user navigates to chrome://settings/syncSetup in more than
526 // one tab. See crbug.com/261566. 529 // one tab. See crbug.com/261566.
527 // Note: The following block will transfer focus to the existing wizard. 530 // Note: The following block will transfer focus to the existing wizard.
528 if (IsExistingWizardPresent() && !IsActiveLogin()) 531 if (IsExistingWizardPresent() && !IsActiveLogin())
529 CloseUI(); 532 CloseUI();
530 533
531 // If a setup wizard is present on this page or another, bring it to focus. 534 // If a setup wizard is present on this page or another, bring it to focus.
532 // Otherwise, display a new one on this page. 535 // Otherwise, display a new one on this page.
533 if (!FocusExistingWizardIfPresent()) 536 if (!FocusExistingWizardIfPresent())
534 OpenSyncSetup(); 537 OpenSyncSetup(args);
535 } 538 }
536 539
537 #if defined(OS_CHROMEOS) 540 #if defined(OS_CHROMEOS)
538 // On ChromeOS, we need to sign out the user session to fix an auth error, so 541 // On ChromeOS, we need to sign out the user session to fix an auth error, so
539 // the user goes through the real signin flow to generate a new auth token. 542 // the user goes through the real signin flow to generate a new auth token.
540 void SyncHandler::HandleDoSignOutOnAuthError(const base::ListValue* args) { 543 void SyncHandler::HandleDoSignOutOnAuthError(const base::ListValue* args) {
541 DVLOG(1) << "Signing out the user to fix a sync error."; 544 DVLOG(1) << "Signing out the user to fix a sync error.";
542 chrome::AttemptUserExit(); 545 chrome::AttemptUserExit();
543 } 546 }
544 #endif 547 #endif
545 548
546 #if !defined(OS_CHROMEOS) 549 #if !defined(OS_CHROMEOS)
547 void SyncHandler::HandleStartSignin(const base::ListValue* args) { 550 void SyncHandler::HandleStartSignin(const base::ListValue* args) {
548 // Should only be called if the user is not already signed in. 551 // Should only be called if the user is not already signed in.
549 DCHECK(!SigninManagerFactory::GetForProfile(profile_)->IsAuthenticated()); 552 DCHECK(!SigninManagerFactory::GetForProfile(profile_)->IsAuthenticated());
550 OpenSyncSetup(); 553 OpenSyncSetup(args);
551 } 554 }
552 555
553 void SyncHandler::HandleStopSyncing(const base::ListValue* args) { 556 void SyncHandler::HandleStopSyncing(const base::ListValue* args) {
554 if (GetSyncService()) 557 if (GetSyncService())
555 ProfileSyncService::SyncEvent(ProfileSyncService::STOP_FROM_OPTIONS); 558 ProfileSyncService::SyncEvent(ProfileSyncService::STOP_FROM_OPTIONS);
556 SigninManagerFactory::GetForProfile(profile_) 559 SigninManagerFactory::GetForProfile(profile_)
557 ->SignOut(signin_metrics::USER_CLICKED_SIGNOUT_SETTINGS); 560 ->SignOut(signin_metrics::USER_CLICKED_SIGNOUT_SETTINGS);
558 561
559 bool delete_profile = false; 562 bool delete_profile = false;
560 if (args->GetBoolean(0, &delete_profile) && delete_profile) { 563 if (args->GetBoolean(0, &delete_profile) && delete_profile) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 624
622 // Alert the sync service anytime the sync setup dialog is closed. This can 625 // Alert the sync service anytime the sync setup dialog is closed. This can
623 // happen due to the user clicking the OK or Cancel button, or due to the 626 // happen due to the user clicking the OK or Cancel button, or due to the
624 // dialog being closed by virtue of sync being disabled in the background. 627 // dialog being closed by virtue of sync being disabled in the background.
625 if (sync_service) 628 if (sync_service)
626 sync_service->SetSetupInProgress(false); 629 sync_service->SetSetupInProgress(false);
627 630
628 configuring_sync_ = false; 631 configuring_sync_ = false;
629 } 632 }
630 633
631 void SyncHandler::OpenSyncSetup() { 634 void SyncHandler::OpenSyncSetup(const base::ListValue* args) {
632 if (!PrepareSyncSetup()) 635 if (!PrepareSyncSetup())
633 return; 636 return;
634 637
635 // There are several different UI flows that can bring the user here: 638 // There are several different UI flows that can bring the user here:
636 // 1) Signin promo. 639 // 1) Signin promo.
637 // 2) Normal signin through settings page (IsAuthenticated() is false). 640 // 2) Normal signin through settings page (IsAuthenticated() is false).
638 // 3) Previously working credentials have expired. 641 // 3) Previously working credentials have expired.
639 // 4) User is signed in, but has stopped sync via the google dashboard, and 642 // 4) User is signed in, but has stopped sync via the google dashboard, and
640 // signout is prohibited by policy so we need to force a re-auth. 643 // signout is prohibited by policy so we need to force a re-auth.
641 // 5) User clicks [Advanced Settings] button on options page while already 644 // 5) User clicks [Advanced Settings] button on options page while already
642 // logged in. 645 // logged in.
643 // 6) One-click signin (credentials are already available, so should display 646 // 6) One-click signin (credentials are already available, so should display
644 // sync configure UI, not login UI). 647 // sync configure UI, not login UI).
645 // 7) User re-enables sync after disabling it via advanced settings. 648 // 7) User re-enables sync after disabling it via advanced settings.
646 #if !defined(OS_CHROMEOS) 649 #if !defined(OS_CHROMEOS)
647 SigninManagerBase* signin = SigninManagerFactory::GetForProfile(profile_); 650 SigninManagerBase* signin = SigninManagerFactory::GetForProfile(profile_);
648 651
649 if (!signin->IsAuthenticated() || 652 if (!signin->IsAuthenticated() ||
650 SigninErrorControllerFactory::GetForProfile(profile_)->HasError()) { 653 SigninErrorControllerFactory::GetForProfile(profile_)->HasError()) {
651 // User is not logged in (cases 1-2), or login has been specially requested 654 // User is not logged in (cases 1-2), or login has been specially requested
652 // because previously working credentials have expired (case 3). Close sync 655 // because previously working credentials have expired (case 3). Close sync
653 // setup including any visible overlays, and display the gaia auth page. 656 // setup including any visible overlays, and display the gaia auth page.
654 // Control will be returned to the sync settings page once auth is complete. 657 // Control will be returned to the sync settings page once auth is complete.
655 CloseUI(); 658 CloseUI();
656 DisplayGaiaLogin(); 659 if (args) {
660 std::string access_point = base::UTF16ToUTF8(ExtractStringValue(args));
661 if (access_point == "access-point-supervised-user") {
662 DisplayGaiaLogin(
663 signin_metrics::AccessPoint::ACCESS_POINT_SUPERVISED_USER);
664 return;
665 }
666 }
667 DisplayGaiaLogin(signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS);
657 return; 668 return;
658 } 669 }
659 #endif 670 #endif
660 if (!GetSyncService()) { 671 if (!GetSyncService()) {
661 // This can happen if the user directly navigates to /settings/syncSetup. 672 // This can happen if the user directly navigates to /settings/syncSetup.
662 DLOG(WARNING) << "Cannot display sync UI when sync is disabled"; 673 DLOG(WARNING) << "Cannot display sync UI when sync is disabled";
663 CloseUI(); 674 CloseUI();
664 return; 675 return;
665 } 676 }
666 677
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
906 void SyncHandler::UpdateSyncState() { 917 void SyncHandler::UpdateSyncState() {
907 web_ui()->CallJavascriptFunction("settings.SyncPrivateApi.sendSyncStatus", 918 web_ui()->CallJavascriptFunction("settings.SyncPrivateApi.sendSyncStatus",
908 *GetSyncStateDictionary()); 919 *GetSyncStateDictionary());
909 } 920 }
910 921
911 void SyncHandler::OnSigninAllowedPrefChange() { 922 void SyncHandler::OnSigninAllowedPrefChange() {
912 UpdateSyncState(); 923 UpdateSyncState();
913 } 924 }
914 925
915 } // namespace settings 926 } // namespace settings
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/settings/sync_handler.h ('k') | chrome/browser/ui/webui/settings/sync_handler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698