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

Side by Side Diff: chrome/browser/ui/webui/sync_setup_handler.cc

Issue 14691004: [sync] Separate sign in from sync on Desktop Chrome (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/sync_setup_handler.h" 5 #include "chrome/browser/ui/webui/sync_setup_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 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 58
59 namespace { 59 namespace {
60 60
61 // A structure which contains all the configuration information for sync. 61 // A structure which contains all the configuration information for sync.
62 struct SyncConfigInfo { 62 struct SyncConfigInfo {
63 SyncConfigInfo(); 63 SyncConfigInfo();
64 ~SyncConfigInfo(); 64 ~SyncConfigInfo();
65 65
66 bool encrypt_all; 66 bool encrypt_all;
67 bool sync_everything; 67 bool sync_everything;
68 bool sync_nothing;
68 syncer::ModelTypeSet data_types; 69 syncer::ModelTypeSet data_types;
69 std::string passphrase; 70 std::string passphrase;
70 bool passphrase_is_gaia; 71 bool passphrase_is_gaia;
71 }; 72 };
72 73
73 SyncConfigInfo::SyncConfigInfo() 74 SyncConfigInfo::SyncConfigInfo()
74 : encrypt_all(false), 75 : encrypt_all(false),
75 sync_everything(false), 76 sync_everything(false),
77 sync_nothing(false),
76 passphrase_is_gaia(false) { 78 passphrase_is_gaia(false) {
77 } 79 }
78 80
79 SyncConfigInfo::~SyncConfigInfo() {} 81 SyncConfigInfo::~SyncConfigInfo() {}
80 82
81 // Note: The order of these types must match the ordering of 83 // Note: The order of these types must match the ordering of
82 // the respective types in ModelType 84 // the respective types in ModelType
83 const char* kDataTypeNames[] = { 85 const char* kDataTypeNames[] = {
84 "bookmarks", 86 "bookmarks",
85 "preferences", 87 "preferences",
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 if (!parsed_value.get() || !parsed_value->GetAsDictionary(&result)) { 140 if (!parsed_value.get() || !parsed_value->GetAsDictionary(&result)) {
139 DLOG(ERROR) << "GetConfiguration() not passed a Dictionary"; 141 DLOG(ERROR) << "GetConfiguration() not passed a Dictionary";
140 return false; 142 return false;
141 } 143 }
142 144
143 if (!result->GetBoolean("syncAllDataTypes", &config->sync_everything)) { 145 if (!result->GetBoolean("syncAllDataTypes", &config->sync_everything)) {
144 DLOG(ERROR) << "GetConfiguration() not passed a syncAllDataTypes value"; 146 DLOG(ERROR) << "GetConfiguration() not passed a syncAllDataTypes value";
145 return false; 147 return false;
146 } 148 }
147 149
150 if (!result->GetBoolean("syncNothing", &config->sync_nothing)) {
151 DLOG(ERROR) << "GetConfiguration() not passed a syncNothing value";
152 return false;
153 }
154
Andrew T Wilson (Slow) 2013/05/15 15:01:24 Add a DCHECK(!(sync_nothing && sync_everything)) s
Raghu Simha 2013/05/16 02:13:20 Done.
148 ModelTypeNameMap type_names = GetSelectableTypeNameMap(); 155 ModelTypeNameMap type_names = GetSelectableTypeNameMap();
149 156
150 for (ModelTypeNameMap::const_iterator it = type_names.begin(); 157 for (ModelTypeNameMap::const_iterator it = type_names.begin();
151 it != type_names.end(); ++it) { 158 it != type_names.end(); ++it) {
152 std::string key_name = it->second + std::string("Synced"); 159 std::string key_name = it->second + std::string("Synced");
153 bool sync_value; 160 bool sync_value;
154 if (!result->GetBoolean(key_name, &sync_value)) { 161 if (!result->GetBoolean(key_name, &sync_value)) {
155 DLOG(ERROR) << "GetConfiguration() not passed a value for " << key_name; 162 DLOG(ERROR) << "GetConfiguration() not passed a value for " << key_name;
156 return false; 163 return false;
157 } 164 }
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 { "invalidAccessCode", IDS_SYNC_INVALID_ACCESS_CODE_LABEL }, 356 { "invalidAccessCode", IDS_SYNC_INVALID_ACCESS_CODE_LABEL },
350 { "enterAccessCode", IDS_SYNC_ENTER_ACCESS_CODE_LABEL }, 357 { "enterAccessCode", IDS_SYNC_ENTER_ACCESS_CODE_LABEL },
351 { "getAccessCodeHelp", IDS_SYNC_ACCESS_CODE_HELP_LABEL }, 358 { "getAccessCodeHelp", IDS_SYNC_ACCESS_CODE_HELP_LABEL },
352 { "getAccessCodeURL", IDS_SYNC_GET_ACCESS_CODE_URL }, 359 { "getAccessCodeURL", IDS_SYNC_GET_ACCESS_CODE_URL },
353 { "invalidOtp", IDS_SYNC_INVALID_OTP_LABEL }, 360 { "invalidOtp", IDS_SYNC_INVALID_OTP_LABEL },
354 { "enterOtp", IDS_SYNC_ENTER_OTP_LABEL }, 361 { "enterOtp", IDS_SYNC_ENTER_OTP_LABEL },
355 { "getOtpHelp", IDS_SYNC_OTP_HELP_LABEL }, 362 { "getOtpHelp", IDS_SYNC_OTP_HELP_LABEL },
356 { "getOtpURL", IDS_SYNC_GET_OTP_URL }, 363 { "getOtpURL", IDS_SYNC_GET_OTP_URL },
357 { "syncAllDataTypes", IDS_SYNC_EVERYTHING }, 364 { "syncAllDataTypes", IDS_SYNC_EVERYTHING },
358 { "chooseDataTypes", IDS_SYNC_CHOOSE_DATATYPES }, 365 { "chooseDataTypes", IDS_SYNC_CHOOSE_DATATYPES },
366 { "syncNothing", IDS_SYNC_NOTHING },
359 { "bookmarks", IDS_SYNC_DATATYPE_BOOKMARKS }, 367 { "bookmarks", IDS_SYNC_DATATYPE_BOOKMARKS },
360 { "preferences", IDS_SYNC_DATATYPE_PREFERENCES }, 368 { "preferences", IDS_SYNC_DATATYPE_PREFERENCES },
361 { "autofill", IDS_SYNC_DATATYPE_AUTOFILL }, 369 { "autofill", IDS_SYNC_DATATYPE_AUTOFILL },
362 { "themes", IDS_SYNC_DATATYPE_THEMES }, 370 { "themes", IDS_SYNC_DATATYPE_THEMES },
363 { "passwords", IDS_SYNC_DATATYPE_PASSWORDS }, 371 { "passwords", IDS_SYNC_DATATYPE_PASSWORDS },
364 { "extensions", IDS_SYNC_DATATYPE_EXTENSIONS }, 372 { "extensions", IDS_SYNC_DATATYPE_EXTENSIONS },
365 { "typedURLs", IDS_SYNC_DATATYPE_TYPED_URLS }, 373 { "typedURLs", IDS_SYNC_DATATYPE_TYPED_URLS },
366 { "apps", IDS_SYNC_DATATYPE_APPS }, 374 { "apps", IDS_SYNC_DATATYPE_APPS },
367 { "openTabs", IDS_SYNC_DATATYPE_TABS }, 375 { "openTabs", IDS_SYNC_DATATYPE_TABS },
368 { "syncZeroDataTypesError", IDS_SYNC_ZERO_DATA_TYPES_ERROR }, 376 { "syncZeroDataTypesError", IDS_SYNC_ZERO_DATA_TYPES_ERROR },
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 // Should only be called if user is signed in, so no longer need our 442 // Should only be called if user is signed in, so no longer need our
435 // SigninTracker. 443 // SigninTracker.
436 signin_tracker_.reset(); 444 signin_tracker_.reset();
437 configuring_sync_ = true; 445 configuring_sync_ = true;
438 DCHECK(service->sync_initialized()) << 446 DCHECK(service->sync_initialized()) <<
439 "Cannot configure sync until the sync backend is initialized"; 447 "Cannot configure sync until the sync backend is initialized";
440 448
441 // Setup args for the sync configure screen: 449 // Setup args for the sync configure screen:
442 // showSyncEverythingPage: false to skip directly to the configure screen 450 // showSyncEverythingPage: false to skip directly to the configure screen
443 // syncAllDataTypes: true if the user wants to sync everything 451 // syncAllDataTypes: true if the user wants to sync everything
452 // syncNothing: true if the user wants to sync nothing
444 // <data_type>Registered: true if the associated data type is supported 453 // <data_type>Registered: true if the associated data type is supported
445 // <data_type>Synced: true if the user wants to sync that specific data type 454 // <data_type>Synced: true if the user wants to sync that specific data type
446 // encryptionEnabled: true if sync supports encryption 455 // encryptionEnabled: true if sync supports encryption
447 // encryptAllData: true if user wants to encrypt all data (not just 456 // encryptAllData: true if user wants to encrypt all data (not just
448 // passwords) 457 // passwords)
449 // usePassphrase: true if the data is encrypted with a secondary passphrase 458 // usePassphrase: true if the data is encrypted with a secondary passphrase
450 // show_passphrase: true if a passphrase is needed to decrypt the sync data 459 // show_passphrase: true if a passphrase is needed to decrypt the sync data
451 DictionaryValue args; 460 DictionaryValue args;
452 461
453 // Tell the UI layer which data types are registered/enabled by the user. 462 // Tell the UI layer which data types are registered/enabled by the user.
454 const syncer::ModelTypeSet registered_types = 463 const syncer::ModelTypeSet registered_types =
455 service->GetRegisteredDataTypes(); 464 service->GetRegisteredDataTypes();
456 const syncer::ModelTypeSet preferred_types = 465 const syncer::ModelTypeSet preferred_types =
457 service->GetPreferredDataTypes(); 466 service->GetPreferredDataTypes();
458 ModelTypeNameMap type_names = GetSelectableTypeNameMap(); 467 ModelTypeNameMap type_names = GetSelectableTypeNameMap();
459 for (ModelTypeNameMap::const_iterator it = type_names.begin(); 468 for (ModelTypeNameMap::const_iterator it = type_names.begin();
460 it != type_names.end(); ++it) { 469 it != type_names.end(); ++it) {
461 syncer::ModelType sync_type = it->first; 470 syncer::ModelType sync_type = it->first;
462 const std::string key_name = it->second; 471 const std::string key_name = it->second;
463 args.SetBoolean(key_name + "Registered", 472 args.SetBoolean(key_name + "Registered",
464 registered_types.Has(sync_type)); 473 registered_types.Has(sync_type));
465 args.SetBoolean(key_name + "Synced", preferred_types.Has(sync_type)); 474 args.SetBoolean(key_name + "Synced", preferred_types.Has(sync_type));
466 } 475 }
467 browser_sync::SyncPrefs sync_prefs(GetProfile()->GetPrefs()); 476 browser_sync::SyncPrefs sync_prefs(GetProfile()->GetPrefs());
468 args.SetBoolean("passphraseFailed", passphrase_failed); 477 args.SetBoolean("passphraseFailed", passphrase_failed);
469 args.SetBoolean("showSyncEverythingPage", !show_advanced); 478 args.SetBoolean("showSyncEverythingPage", !show_advanced);
470 args.SetBoolean("syncAllDataTypes", sync_prefs.HasKeepEverythingSynced()); 479 args.SetBoolean("syncAllDataTypes", sync_prefs.HasKeepEverythingSynced());
480 args.SetBoolean("syncNothing", false); // Always false during initial setup.
471 args.SetBoolean("encryptAllData", service->EncryptEverythingEnabled()); 481 args.SetBoolean("encryptAllData", service->EncryptEverythingEnabled());
472 482
473 // We call IsPassphraseRequired() here, instead of calling 483 // We call IsPassphraseRequired() here, instead of calling
474 // IsPassphraseRequiredForDecryption(), because we want to show the passphrase 484 // IsPassphraseRequiredForDecryption(), because we want to show the passphrase
475 // UI even if no encrypted data types are enabled. 485 // UI even if no encrypted data types are enabled.
476 args.SetBoolean("showPassphrase", service->IsPassphraseRequired()); 486 args.SetBoolean("showPassphrase", service->IsPassphraseRequired());
477 // Keystore encryption is behind a flag. Only show the new encryption settings 487 // Keystore encryption is behind a flag. Only show the new encryption settings
478 // if keystore encryption is enabled. 488 // if keystore encryption is enabled.
479 args.SetBoolean("keystoreEncryptionEnabled", IsKeystoreEncryptionEnabled()); 489 args.SetBoolean("keystoreEncryptionEnabled", IsKeystoreEncryptionEnabled());
480 490
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 561
552 ProfileSyncService* service = GetSyncService(); 562 ProfileSyncService* service = GetSyncService();
553 DCHECK(service); 563 DCHECK(service);
554 if (!service->HasSyncSetupCompleted()) { 564 if (!service->HasSyncSetupCompleted()) {
555 // This is the first time configuring sync, so log it. 565 // This is the first time configuring sync, so log it.
556 base::FilePath profile_file_path = GetProfile()->GetPath(); 566 base::FilePath profile_file_path = GetProfile()->GetPath();
557 ProfileMetrics::LogProfileSyncSignIn(profile_file_path); 567 ProfileMetrics::LogProfileSyncSignIn(profile_file_path);
558 568
559 // We're done configuring, so notify ProfileSyncService that it is OK to 569 // We're done configuring, so notify ProfileSyncService that it is OK to
560 // start syncing. 570 // start syncing.
571 service->SetSetupInProgress(false);
561 service->SetSyncSetupCompleted(); 572 service->SetSyncSetupCompleted();
562 } 573 }
563 } 574 }
564 575
565 bool SyncSetupHandler::IsActiveLogin() const { 576 bool SyncSetupHandler::IsActiveLogin() const {
566 // LoginUIService can be NULL if page is brought up in incognito mode 577 // LoginUIService can be NULL if page is brought up in incognito mode
567 // (i.e. if the user is running in guest mode in cros and brings up settings). 578 // (i.e. if the user is running in guest mode in cros and brings up settings).
568 LoginUIService* service = GetLoginUIService(); 579 LoginUIService* service = GetLoginUIService();
569 return service && (service->current_login_ui() == this); 580 return service && (service->current_login_ui() == this);
570 } 581 }
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 // Gaia credentials are valid - update the UI. 896 // Gaia credentials are valid - update the UI.
886 DisplayGaiaSuccessAndSettingUp(); 897 DisplayGaiaSuccessAndSettingUp();
887 } 898 }
888 899
889 void SyncSetupHandler::SigninFailed(const GoogleServiceAuthError& error) { 900 void SyncSetupHandler::SigninFailed(const GoogleServiceAuthError& error) {
890 // Stop a timer to handle timeout in waiting for checking network connection. 901 // Stop a timer to handle timeout in waiting for checking network connection.
891 backend_start_timer_.reset(); 902 backend_start_timer_.reset();
892 903
893 last_signin_error_ = error; 904 last_signin_error_ = error;
894 905
895 // If using web-based sign in flow, don't show the gaia sign in page again 906 if (!retry_on_signin_failure_ &&
896 // since there is no way to show the user an error message. 907 error.state() == GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS) {
Andrew T Wilson (Slow) 2013/05/15 15:01:24 Why would we only do this on INVALID_GAIA_CREDENTI
Raghu Simha 2013/05/16 02:13:20 Good catch. I've added those cases, and we now mat
897 if (SyncPromoUI::UseWebBasedSigninFlow()) { 908 // The user received an auth error while re-enabling sync after having
909 // chosen to "Sync nothing", and the gaia password has been changed since
910 // the user last signed in. Leave the sync backend initialized, and close
911 // the setup dialog. An error message will be shown on the settings page.
912 web_ui()->CallJavascriptFunction("OptionsPage.closeOverlay");
913 } else if (SyncPromoUI::UseWebBasedSigninFlow()) {
914 // If using web-based sign in flow, don't show the gaia sign in page again
915 // since there is no way to show the user an error message.
898 CloseSyncSetup(); 916 CloseSyncSetup();
899 } else if (retry_on_signin_failure_) { 917 } else if (retry_on_signin_failure_) {
900 // Got a failed signin - this is either just a typical auth error, or a 918 // Got a failed signin - this is either just a typical auth error, or a
901 // sync error (treat sync errors as "fatal errors" - i.e. non-auth errors). 919 // sync error (treat sync errors as "fatal errors" - i.e. non-auth errors).
902 // On ChromeOS, this condition can happen when auth token is invalid and 920 // On ChromeOS, this condition can happen when auth token is invalid and
903 // cannot start sync backend. 921 // cannot start sync backend.
904 // If using web-based sign in flow, don't show the gaia sign in page again
905 // since there is no way to show the user an error message.
906 ProfileSyncService* service = GetSyncService(); 922 ProfileSyncService* service = GetSyncService();
907 DisplayGaiaLogin(service && service->HasUnrecoverableError()); 923 DisplayGaiaLogin(service && service->HasUnrecoverableError());
908 } else { 924 } else {
909 // TODO(peria): Show error dialog for prompting sign in and out on 925 // TODO(peria): Show error dialog for prompting sign in and out on
910 // Chrome OS. http://crbug.com/128692 926 // Chrome OS. http://crbug.com/128692
911 CloseOverlay(); 927 CloseOverlay();
912 } 928 }
913 } 929 }
914 930
915 Profile* SyncSetupHandler::GetProfile() const { 931 Profile* SyncSetupHandler::GetProfile() const {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
960 // to us from the JS layer. 976 // to us from the JS layer.
961 ProfileSyncService* service = GetSyncService(); 977 ProfileSyncService* service = GetSyncService();
962 978
963 // If the sync engine has shutdown for some reason, just close the sync 979 // If the sync engine has shutdown for some reason, just close the sync
964 // dialog. 980 // dialog.
965 if (!service || !service->sync_initialized()) { 981 if (!service || !service->sync_initialized()) {
966 CloseOverlay(); 982 CloseOverlay();
967 return; 983 return;
968 } 984 }
969 985
986 // Disable sync, but remain signed in if the user selected "Sync nothing" in
987 // the advanced settings dialog.
988 if (configuration.sync_nothing) {
989 ProfileSyncService::SyncEvent(
990 ProfileSyncService::STOP_FROM_ADVANCED_DIALOG);
991 CloseOverlay();
992 service->DisableForUser();
993 service->SetSetupInProgress(false);
994 return;
995 }
996
970 // Note: Data encryption will not occur until configuration is complete 997 // Note: Data encryption will not occur until configuration is complete
971 // (when the PSS receives its CONFIGURE_DONE notification from the sync 998 // (when the PSS receives its CONFIGURE_DONE notification from the sync
972 // backend), so the user still has a chance to cancel out of the operation 999 // backend), so the user still has a chance to cancel out of the operation
973 // if (for example) some kind of passphrase error is encountered. 1000 // if (for example) some kind of passphrase error is encountered.
974 if (configuration.encrypt_all) 1001 if (configuration.encrypt_all)
975 service->EnableEncryptEverything(); 1002 service->EnableEncryptEverything();
976 1003
977 bool passphrase_failed = false; 1004 bool passphrase_failed = false;
978 if (!configuration.passphrase.empty()) { 1005 if (!configuration.passphrase.empty()) {
979 // We call IsPassphraseRequired() here (instead of 1006 // We call IsPassphraseRequired() here (instead of
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1095 #endif 1122 #endif
1096 } 1123 }
1097 1124
1098 void SyncSetupHandler::HandleCloseTimeout(const ListValue* args) { 1125 void SyncSetupHandler::HandleCloseTimeout(const ListValue* args) {
1099 CloseSyncSetup(); 1126 CloseSyncSetup();
1100 } 1127 }
1101 1128
1102 void SyncSetupHandler::CloseSyncSetup() { 1129 void SyncSetupHandler::CloseSyncSetup() {
1103 // TODO(atwilson): Move UMA tracking of signin events out of sync module. 1130 // TODO(atwilson): Move UMA tracking of signin events out of sync module.
1104 ProfileSyncService* sync_service = GetSyncService(); 1131 ProfileSyncService* sync_service = GetSyncService();
1105 if (IsActiveLogin()) { 1132 // If there was a sign in error, do not log a cancel event.
1133 if (IsActiveLogin() &&
1134 last_signin_error_.state() == GoogleServiceAuthError::NONE) {
1106 if (!sync_service || !sync_service->HasSyncSetupCompleted()) { 1135 if (!sync_service || !sync_service->HasSyncSetupCompleted()) {
1107 if (signin_tracker_.get()) { 1136 if (signin_tracker_.get()) {
1108 ProfileSyncService::SyncEvent( 1137 ProfileSyncService::SyncEvent(
1109 ProfileSyncService::CANCEL_DURING_SIGNON); 1138 ProfileSyncService::CANCEL_DURING_SIGNON);
1110 } else if (configuring_sync_) { 1139 } else if (configuring_sync_) {
1111 ProfileSyncService::SyncEvent( 1140 ProfileSyncService::SyncEvent(
1112 ProfileSyncService::CANCEL_DURING_CONFIGURE); 1141 ProfileSyncService::CANCEL_DURING_CONFIGURE);
1113 } else { 1142 } else {
1114 ProfileSyncService::SyncEvent( 1143 ProfileSyncService::SyncEvent(
1115 ProfileSyncService::CANCEL_FROM_SIGNON_WITHOUT_AUTH); 1144 ProfileSyncService::CANCEL_FROM_SIGNON_WITHOUT_AUTH);
1116 } 1145 }
1117 } 1146 }
1118 1147
1119 // Let the various services know that we're no longer active. 1148 // Let the various services know that we're no longer active.
1120 if (SyncPromoUI::UseWebBasedSigninFlow()) 1149 if (SyncPromoUI::UseWebBasedSigninFlow())
1121 CloseGaiaSigninPage(); 1150 CloseGaiaSigninPage();
1122 1151
1123 GetLoginUIService()->LoginUIClosed(this); 1152 GetLoginUIService()->LoginUIClosed(this);
1124 } 1153 }
1125 1154
1126 if (sync_service) { 1155 // If the setup dialog is being closed during configuration, and sync setup is
1127 // Make sure user isn't left half-logged-in (signed in, but without sync 1156 // incomplete, and there is no signin error, it's because the user clicked
1128 // started up). If the user hasn't finished setting up sync, then sign out 1157 // "Cancel" while setting up sync. In this case, we don't want the sync
1129 // and shut down sync. 1158 // backend to remain in the initialized state.
1130 if (!sync_service->HasSyncSetupCompleted()) { 1159 // Note: If we get here and there is a signin error, it's because a signed in
1131 DVLOG(1) << "Signin aborted by user action"; 1160 // user is trying to set up sync, and their gaia password has been changed
1132 // We can get here on Chrome OS (e.g dashboard clear), but "do nothing" 1161 // since they last signed in. In this case, we leave the backend initialized
1133 // is the correct behavior. 1162 // and allow the user to respond to the error message via the settings page.
1134 #if !defined(OS_CHROMEOS) 1163 if (sync_service &&
1135 if (signin_tracker_.get() || sync_service->FirstSetupInProgress()) { 1164 !sync_service->HasSyncSetupCompleted() &&
1136 // User was still in the process of signing in, so sign him out again. 1165 configuring_sync_ &&
Andrew T Wilson (Slow) 2013/05/15 15:01:24 You can't really rely on configuring_sync_ - it's
Raghu Simha 2013/05/16 02:13:20 If the user clicks cancel, we want to disable sync
1137 // This makes sure that the user isn't left signed in but with sync 1166 last_signin_error_.state() == GoogleServiceAuthError::NONE) {
1138 // un-configured. 1167 DVLOG(1) << "Sync setup aborted by user action";
1139 // 1168 sync_service->DisableForUser();
1140 // This has the side-effect of signing out the user in the following
1141 // scenario:
1142 // * User signs in while sync is disabled by policy.
1143 // * Sync is re-enabled by policy.
1144 // * User brings up sync setup dialog to do initial sync config.
1145 // * User cancels out of the dialog.
1146 //
1147 // This case is indistinguishable from the "one click signin" case where
1148 // the user checks the "advanced setup" checkbox, then cancels out of
1149 // the setup box, which is a much more common scenario, so we do the
1150 // right thing for the one-click case.
1151 SigninManagerFactory::GetForProfile(GetProfile())->SignOut();
1152 }
1153 #endif
1154 sync_service->DisableForUser();
1155 browser_sync::SyncPrefs sync_prefs(GetProfile()->GetPrefs());
1156 sync_prefs.SetStartSuppressed(true);
1157 }
1158 sync_service->SetSetupInProgress(false); 1169 sync_service->SetSetupInProgress(false);
1159 } 1170 }
1160 1171
1161 // Reset the attempted email address and error, otherwise the sync setup 1172 // Reset the attempted email address and error, otherwise the sync setup
1162 // overlay in the settings page will stay in whatever error state it was last 1173 // overlay in the settings page will stay in whatever error state it was last
1163 // when it is reopened. 1174 // when it is reopened.
1164 last_attempted_user_email_.clear(); 1175 last_attempted_user_email_.clear();
1165 last_signin_error_ = GoogleServiceAuthError::AuthErrorNone(); 1176 last_signin_error_ = GoogleServiceAuthError::AuthErrorNone();
1166 1177
1167 configuring_sync_ = false; 1178 configuring_sync_ = false;
(...skipping 11 matching lines...) Expand all
1179 // 1) Signin promo. 1190 // 1) Signin promo.
1180 // 2) Normal signin through settings page (GetAuthenticatedUsername() is 1191 // 2) Normal signin through settings page (GetAuthenticatedUsername() is
1181 // empty). 1192 // empty).
1182 // 3) Previously working credentials have expired. 1193 // 3) Previously working credentials have expired.
1183 // 4) User is signed in, but has stopped sync via the google dashboard, and 1194 // 4) User is signed in, but has stopped sync via the google dashboard, and
1184 // signout is prohibited by policy so we need to force a re-auth. 1195 // signout is prohibited by policy so we need to force a re-auth.
1185 // 5) User clicks [Advanced Settings] button on options page while already 1196 // 5) User clicks [Advanced Settings] button on options page while already
1186 // logged in. 1197 // logged in.
1187 // 6) One-click signin (credentials are already available, so should display 1198 // 6) One-click signin (credentials are already available, so should display
1188 // sync configure UI, not login UI). 1199 // sync configure UI, not login UI).
1189 // 7) ChromeOS re-enable after disabling sync. 1200 // 7) User re-enables sync after disabling it via advanced settings.
1190 SigninManagerBase* signin = 1201 SigninManagerBase* signin =
1191 SigninManagerFactory::GetForProfile(GetProfile()); 1202 SigninManagerFactory::GetForProfile(GetProfile());
1192 if (signin->GetAuthenticatedUsername().empty() || 1203 if (signin->GetAuthenticatedUsername().empty() ||
1193 #if !defined(OS_CHROMEOS)
1194 (GetSyncService() && GetSyncService()->IsStartSuppressed()) ||
1195 #endif
1196 signin->signin_global_error()->HasMenuItem()) { 1204 signin->signin_global_error()->HasMenuItem()) {
1197 // User is not logged in, or login has been specially requested - need to 1205 // User is not logged in, or login has been specially requested - need to
1198 // display login UI (cases 1-3). 1206 // display login UI (cases 1-3).
1199 DisplayGaiaLogin(false); 1207 DisplayGaiaLogin(false);
1200 } else { 1208 } else {
1201 if (!GetSyncService()) { 1209 if (!GetSyncService()) {
1202 // This can happen if the user directly navigates to /settings/syncSetup. 1210 // This can happen if the user directly navigates to /settings/syncSetup.
1203 DLOG(WARNING) << "Cannot display sync UI when sync is disabled"; 1211 DLOG(WARNING) << "Cannot display sync UI when sync is disabled";
1204 CloseOverlay(); 1212 CloseOverlay();
1205 return; 1213 return;
1206 } 1214 }
1207 1215
1208 // User is already logged in. They must have brought up the config wizard 1216 // User is already logged in. They must have brought up the config wizard
1209 // via the "Advanced..." button or through One-Click signin (cases 4-6), or 1217 // via the "Advanced..." button or through One-Click signin (cases 4-6), or
1210 // they are re-enabling sync on Chrome OS. 1218 // they are re-enabling sync after having disabled it (case 7).
1211 DisplayConfigureSync(true, false); 1219 DisplayConfigureSync(true, false);
1212 } 1220 }
1213 1221
1214 if (!SyncPromoUI::UseWebBasedSigninFlow()) 1222 if (!SyncPromoUI::UseWebBasedSigninFlow())
1215 ShowSetupUI(); 1223 ShowSetupUI();
1216 } 1224 }
1217 1225
1218 void SyncSetupHandler::OpenConfigureSync() { 1226 void SyncSetupHandler::OpenConfigureSync() {
1219 if (!PrepareSyncSetup()) 1227 if (!PrepareSyncSetup())
1220 return; 1228 return;
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
1348 *error_message = l10n_util::GetStringUTF16( 1356 *error_message = l10n_util::GetStringUTF16(
1349 IDS_SYNC_USER_NAME_IN_USE_ERROR); 1357 IDS_SYNC_USER_NAME_IN_USE_ERROR);
1350 return false; 1358 return false;
1351 } 1359 }
1352 } 1360 }
1353 1361
1354 return true; 1362 return true;
1355 } 1363 }
1356 1364
1357 #endif // !defined(OS_CHROMEOS) 1365 #endif // !defined(OS_CHROMEOS)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698