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

Side by Side Diff: chrome/browser/sync/profile_sync_service.cc

Issue 7792093: Moved the handling of the initial passphrase into SyncSetupFlow. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Reverted unnecessary change to domui code. Created 9 years, 3 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/sync/profile_sync_service.h" 5 #include "chrome/browser/sync/profile_sync_service.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <map> 8 #include <map>
9 #include <set> 9 #include <set>
10 #include <utility> 10 #include <utility>
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 cros_user_(cros_user), 88 cros_user_(cros_user),
89 sync_service_url_(kDevServerUrl), 89 sync_service_url_(kDevServerUrl),
90 backend_initialized_(false), 90 backend_initialized_(false),
91 is_auth_in_progress_(false), 91 is_auth_in_progress_(false),
92 wizard_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 92 wizard_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
93 signin_(signin_manager), 93 signin_(signin_manager),
94 unrecoverable_error_detected_(false), 94 unrecoverable_error_detected_(false),
95 scoped_runnable_method_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 95 scoped_runnable_method_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
96 expect_sync_configuration_aborted_(false), 96 expect_sync_configuration_aborted_(false),
97 clear_server_data_state_(CLEAR_NOT_STARTED), 97 clear_server_data_state_(CLEAR_NOT_STARTED),
98 set_backend_encrypted_types_(false) { 98 set_backend_encrypted_types_(false),
99 auto_start_enabled_(false) {
99 // By default, dev, canary, and unbranded Chromium users will go to the 100 // By default, dev, canary, and unbranded Chromium users will go to the
100 // development servers. Development servers have more features than standard 101 // development servers. Development servers have more features than standard
101 // sync servers. Users with officially-branded Chrome stable and beta builds 102 // sync servers. Users with officially-branded Chrome stable and beta builds
102 // will go to the standard sync servers. 103 // will go to the standard sync servers.
103 // 104 //
104 // GetChannel hits the registry on Windows. See http://crbug.com/70380. 105 // GetChannel hits the registry on Windows. See http://crbug.com/70380.
105 base::ThreadRestrictions::ScopedAllowIO allow_io; 106 base::ThreadRestrictions::ScopedAllowIO allow_io;
106 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); 107 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
107 if (channel == chrome::VersionInfo::CHANNEL_STABLE || 108 if (channel == chrome::VersionInfo::CHANNEL_STABLE ||
108 channel == chrome::VersionInfo::CHANNEL_BETA) { 109 channel == chrome::VersionInfo::CHANNEL_BETA) {
109 sync_service_url_ = GURL(kSyncServerUrl); 110 sync_service_url_ = GURL(kSyncServerUrl);
110 } 111 }
112
113 // TODO(atwilson): Set auto_start_enabled_ for other platforms that want this
114 // functionality.
115 if (!cros_user_.empty())
116 auto_start_enabled_ = true;
111 } 117 }
112 118
113 ProfileSyncService::~ProfileSyncService() { 119 ProfileSyncService::~ProfileSyncService() {
114 Shutdown(false); 120 Shutdown(false);
115 } 121 }
116 122
117 bool ProfileSyncService::AreCredentialsAvailable() { 123 bool ProfileSyncService::AreCredentialsAvailable() {
118 if (IsManaged()) { 124 if (IsManaged()) {
119 return false; 125 return false;
120 } 126 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 // so only initialize this if the token service has not been initialized 167 // so only initialize this if the token service has not been initialized
162 // (e.g. the browser crashed or is being debugged). 168 // (e.g. the browser crashed or is being debugged).
163 if (cros_user_.empty() || 169 if (cros_user_.empty() ||
164 !profile_->GetTokenService()->Initialized()) { 170 !profile_->GetTokenService()->Initialized()) {
165 // Will load tokens from DB and broadcast Token events after. 171 // Will load tokens from DB and broadcast Token events after.
166 // Note: We rely on signin_ != NULL unless !cros_user_.empty(). 172 // Note: We rely on signin_ != NULL unless !cros_user_.empty().
167 signin_->Initialize(profile_); 173 signin_->Initialize(profile_);
168 } 174 }
169 175
170 if (!HasSyncSetupCompleted()) { 176 if (!HasSyncSetupCompleted()) {
171 // Under ChromeOS, just autostart it anyway if creds are here and start 177 // If autostart is enabled, but we haven't completed sync setup, try to
172 // is not being suppressed by preferences. 178 // start sync anyway (it's possible we crashed/shutdown after logging in
173 if (!cros_user_.empty() && 179 // but before the backend finished initializing the last time).
180 if (auto_start_enabled_ &&
174 !profile_->GetPrefs()->GetBoolean(prefs::kSyncSuppressStart) && 181 !profile_->GetPrefs()->GetBoolean(prefs::kSyncSuppressStart) &&
175 AreCredentialsAvailable()) { 182 AreCredentialsAvailable()) {
176 StartUp(); 183 StartUp();
177 } 184 }
178 } else if (AreCredentialsAvailable()) { 185 } else if (AreCredentialsAvailable()) {
179 // If we have credentials and sync setup finished, autostart the backend. 186 // If we have credentials and sync setup finished, autostart the backend.
180 // Note that if we haven't finished setting up sync, backend bring up will 187 // Note that if we haven't finished setting up sync, backend bring up will
181 // be done by the wizard. 188 // be done by the wizard.
182 StartUp(); 189 StartUp();
183 } 190 }
184 } 191 }
185 192
186 void ProfileSyncService::RegisterAuthNotifications() { 193 void ProfileSyncService::RegisterAuthNotifications() {
187 registrar_.Add(this, 194 registrar_.Add(this,
188 chrome::NOTIFICATION_TOKEN_AVAILABLE, 195 chrome::NOTIFICATION_TOKEN_AVAILABLE,
189 Source<TokenService>(profile_->GetTokenService())); 196 Source<TokenService>(profile_->GetTokenService()));
190 registrar_.Add(this, 197 registrar_.Add(this,
191 chrome::NOTIFICATION_TOKEN_LOADING_FINISHED, 198 chrome::NOTIFICATION_TOKEN_LOADING_FINISHED,
192 Source<TokenService>(profile_->GetTokenService())); 199 Source<TokenService>(profile_->GetTokenService()));
193 registrar_.Add(this, 200 registrar_.Add(this,
194 chrome::NOTIFICATION_TOKEN_REQUEST_FAILED, 201 chrome::NOTIFICATION_TOKEN_REQUEST_FAILED,
195 Source<TokenService>(profile_->GetTokenService())); 202 Source<TokenService>(profile_->GetTokenService()));
196 registrar_.Add(this, 203 registrar_.Add(this,
197 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL,
198 Source<Profile>(profile_));
199 registrar_.Add(this,
200 chrome::NOTIFICATION_GOOGLE_SIGNIN_FAILED, 204 chrome::NOTIFICATION_GOOGLE_SIGNIN_FAILED,
201 Source<Profile>(profile_)); 205 Source<Profile>(profile_));
202 } 206 }
203 207
204 void ProfileSyncService::RegisterDataTypeController( 208 void ProfileSyncService::RegisterDataTypeController(
205 DataTypeController* data_type_controller) { 209 DataTypeController* data_type_controller) {
206 DCHECK_EQ(data_type_controllers_.count(data_type_controller->type()), 0U); 210 DCHECK_EQ(data_type_controllers_.count(data_type_controller->type()), 0U);
207 data_type_controllers_[data_type_controller->type()] = 211 data_type_controllers_[data_type_controller->type()] =
208 data_type_controller; 212 data_type_controller;
209 } 213 }
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 463
460 doomed_backend.reset(); 464 doomed_backend.reset();
461 } 465 }
462 466
463 scoped_runnable_method_factory_.RevokeAll(); 467 scoped_runnable_method_factory_.RevokeAll();
464 468
465 // Clear various flags. 469 // Clear various flags.
466 expect_sync_configuration_aborted_ = false; 470 expect_sync_configuration_aborted_ = false;
467 is_auth_in_progress_ = false; 471 is_auth_in_progress_ = false;
468 backend_initialized_ = false; 472 backend_initialized_ = false;
469 cached_passphrase_ = CachedPassphrase(); 473 cached_passphrases_ = CachedPassphrases();
470 gaia_password_.clear();
471 pending_types_for_encryption_.clear(); 474 pending_types_for_encryption_.clear();
472 set_backend_encrypted_types_ = false; 475 set_backend_encrypted_types_ = false;
473 passphrase_required_reason_ = sync_api::REASON_PASSPHRASE_NOT_REQUIRED; 476 passphrase_required_reason_ = sync_api::REASON_PASSPHRASE_NOT_REQUIRED;
474 last_attempted_user_email_.clear(); 477 last_attempted_user_email_.clear();
475 last_auth_error_ = GoogleServiceAuthError::None(); 478 last_auth_error_ = GoogleServiceAuthError::None();
476 } 479 }
477 480
478 void ProfileSyncService::ClearServerData() { 481 void ProfileSyncService::ClearServerData() {
479 clear_server_data_state_ = CLEAR_CLEARING; 482 clear_server_data_state_ = CLEAR_CLEARING;
480 clear_server_data_timer_.Start( 483 clear_server_data_timer_.Start(
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 sync_js_controller_.AttachJsBackend(js_backend); 634 sync_js_controller_.AttachJsBackend(js_backend);
632 635
633 // The very first time the backend initializes is effectively the first time 636 // The very first time the backend initializes is effectively the first time
634 // we can say we successfully "synced". last_synced_time_ will only be null 637 // we can say we successfully "synced". last_synced_time_ will only be null
635 // in this case, because the pref wasn't restored on StartUp. 638 // in this case, because the pref wasn't restored on StartUp.
636 if (last_synced_time_.is_null()) { 639 if (last_synced_time_.is_null()) {
637 UpdateLastSyncedTime(); 640 UpdateLastSyncedTime();
638 } 641 }
639 NotifyObservers(); 642 NotifyObservers();
640 643
641 if (!cros_user_.empty()) { 644 if (auto_start_enabled_ && !SetupInProgress()) {
645 // Backend is initialized but we're not in sync setup, so this must be an
646 // autostart - mark our sync setup as completed.
642 if (profile_->GetPrefs()->GetBoolean(prefs::kSyncSuppressStart)) { 647 if (profile_->GetPrefs()->GetBoolean(prefs::kSyncSuppressStart)) {
648 // TODO(sync): This call to ShowConfigure() should go away in favor
Rick Campbell 2011/09/02 18:31:29 Bug number?
Andrew T Wilson (Slow) 2011/09/02 21:40:46 Done.
649 // of the code below that calls wizard_.Step().
643 ShowConfigure(true); 650 ShowConfigure(true);
644 return; 651 return;
645 } else { 652 } else {
646 SetSyncSetupCompleted(); 653 SetSyncSetupCompleted();
647 } 654 }
648 } 655 }
649 656
650 if (HasSyncSetupCompleted()) { 657 if (HasSyncSetupCompleted()) {
651 ConfigureDataTypeManager(); 658 ConfigureDataTypeManager();
652 } else if (SetupInProgress()) { 659 } else if (SetupInProgress()) {
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
796 if (unrecoverable_error_detected_) { 803 if (unrecoverable_error_detected_) {
797 // When unrecoverable error is detected we post a task to shutdown the 804 // When unrecoverable error is detected we post a task to shutdown the
798 // backend. The task might not have executed yet. 805 // backend. The task might not have executed yet.
799 return; 806 return;
800 } 807 }
801 808
802 VLOG(1) << "Passphrase required with reason: " 809 VLOG(1) << "Passphrase required with reason: "
803 << sync_api::PassphraseRequiredReasonToString(reason); 810 << sync_api::PassphraseRequiredReasonToString(reason);
804 passphrase_required_reason_ = reason; 811 passphrase_required_reason_ = reason;
805 812
806 // Store any passphrases we have into temps and clear out the originals so
807 // we don't hold on to the passphrases any longer than we have to. We
808 // then use the passphrases if they're present (after OnPassphraseAccepted).
809 std::string gaia_password = gaia_password_;
810 std::string cached_passphrase = cached_passphrase_.value;
811 bool is_explicit = cached_passphrase_.is_explicit;
812 bool is_creation = cached_passphrase_.is_creation;
813 gaia_password_ = std::string();
814 cached_passphrase_ = CachedPassphrase();
815
816 // We will skip the passphrase prompt and suppress the warning if the 813 // We will skip the passphrase prompt and suppress the warning if the
817 // passphrase is needed for decryption but the user is not syncing an 814 // passphrase is needed for decryption but the user is not syncing an
818 // encrypted data type on this machine. Otherwise we look for one. 815 // encrypted data type on this machine. Otherwise we look for one.
819 if (!IsEncryptedDatatypeEnabled() && IsPassphraseRequiredForDecryption()) { 816 if (!IsEncryptedDatatypeEnabled() && IsPassphraseRequiredForDecryption()) {
820 VLOG(1) << "Decrypting and no encrypted datatypes enabled" 817 VLOG(1) << "Decrypting and no encrypted datatypes enabled"
821 << ", accepted passphrase."; 818 << ", accepted passphrase.";
822 OnPassphraseAccepted(); 819 OnPassphraseAccepted();
823 } 820 }
824 821
825 // First try supplying gaia password as the passphrase. 822 // First try supplying gaia password as the passphrase.
826 if (!gaia_password.empty()) { 823 if (!cached_passphrases_.gaia_passphrase.empty()) {
Rick Campbell 2011/09/02 18:31:29 Submit a bug to follow-up on the logic here? We m
Andrew T Wilson (Slow) 2011/09/02 21:40:46 Done.
824 std::string gaia_passphrase = cached_passphrases_.gaia_passphrase;
825 cached_passphrases_.gaia_passphrase.clear();
827 VLOG(1) << "Attempting gaia passphrase."; 826 VLOG(1) << "Attempting gaia passphrase.";
828 // SetPassphrase will set gaia_password_ if the syncer isn't ready. 827 // SetPassphrase will re-cache this passphrase if the syncer isn't ready.
829 SetPassphrase(gaia_password, false, true); 828 SetPassphrase(gaia_passphrase, false);
830 return; 829 return;
831 } 830 }
832 831
833 // If the above failed then try the custom passphrase the user might have 832 // If the above failed then try the custom passphrase the user might have
834 // entered in setup. 833 // entered in setup.
835 if (!cached_passphrase.empty()) { 834 if (!cached_passphrases_.explicit_passphrase.empty()) {
836 VLOG(1) << "Attempting cached passphrase."; 835 std::string explicit_passphrase = cached_passphrases_.explicit_passphrase;
837 // SetPassphrase will set cached_passphrase_ if the syncer isn't ready. 836 cached_passphrases_.explicit_passphrase.clear();
838 SetPassphrase(cached_passphrase, is_explicit, is_creation); 837 VLOG(1) << "Attempting explicit passphrase.";
838 // SetPassphrase will re-cache this passphrase if the syncer isn't ready.
839 SetPassphrase(explicit_passphrase, true);
839 return; 840 return;
840 } 841 }
841 842
842 // Prompt the user for a password. 843 // Prompt the user for a password.
843 if (WizardIsVisible() && IsEncryptedDatatypeEnabled() && 844 if (WizardIsVisible() && IsEncryptedDatatypeEnabled() &&
844 IsPassphraseRequiredForDecryption()) { 845 IsPassphraseRequiredForDecryption()) {
845 VLOG(1) << "Prompting user for passphrase."; 846 VLOG(1) << "Prompting user for passphrase.";
846 wizard_.Step(SyncSetupWizard::ENTER_PASSPHRASE); 847 wizard_.Step(SyncSetupWizard::ENTER_PASSPHRASE);
847 } 848 }
848 849
849 NotifyObservers(); 850 NotifyObservers();
850 } 851 }
851 852
852 void ProfileSyncService::OnPassphraseAccepted() { 853 void ProfileSyncService::OnPassphraseAccepted() {
853 VLOG(1) << "Received OnPassphraseAccepted."; 854 VLOG(1) << "Received OnPassphraseAccepted.";
854 // Don't hold on to a passphrase in raw form longer than needed. 855 // Don't hold on to a passphrase in raw form longer than needed.
855 gaia_password_ = std::string(); 856 cached_passphrases_ = CachedPassphrases();
856 cached_passphrase_ = CachedPassphrase();
857 857
858 // Make sure the data types that depend on the passphrase are started at 858 // Make sure the data types that depend on the passphrase are started at
859 // this time. 859 // this time.
860 syncable::ModelTypeSet types; 860 syncable::ModelTypeSet types;
861 GetPreferredDataTypes(&types); 861 GetPreferredDataTypes(&types);
862 862
863 // Reset passphrase_required_reason_ before configuring the DataTypeManager 863 // Reset passphrase_required_reason_ before configuring the DataTypeManager
864 // since we know we no longer require the passphrase. 864 // since we know we no longer require the passphrase.
865 passphrase_required_reason_ = sync_api::REASON_PASSPHRASE_NOT_REQUIRED; 865 passphrase_required_reason_ = sync_api::REASON_PASSPHRASE_NOT_REQUIRED;
866 866
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after
1321 backend_->ActivateDataType(type, group, change_processor); 1321 backend_->ActivateDataType(type, group, change_processor);
1322 } 1322 }
1323 1323
1324 void ProfileSyncService::DeactivateDataType(syncable::ModelType type) { 1324 void ProfileSyncService::DeactivateDataType(syncable::ModelType type) {
1325 if (!backend_.get()) 1325 if (!backend_.get())
1326 return; 1326 return;
1327 backend_->DeactivateDataType(type); 1327 backend_->DeactivateDataType(type);
1328 } 1328 }
1329 1329
1330 void ProfileSyncService::SetPassphrase(const std::string& passphrase, 1330 void ProfileSyncService::SetPassphrase(const std::string& passphrase,
1331 bool is_explicit, 1331 bool is_explicit) {
1332 bool is_creation) {
1333 if (ShouldPushChanges() || IsPassphraseRequired()) { 1332 if (ShouldPushChanges() || IsPassphraseRequired()) {
1334 VLOG(1) << "Setting " << (is_explicit ? "explicit" : "implicit") 1333 VLOG(1) << "Setting " << (is_explicit ? "explicit" : "implicit");
1335 << " passphrase" << (is_creation ? " for creation" : "");
1336 backend_->SetPassphrase(passphrase, is_explicit); 1334 backend_->SetPassphrase(passphrase, is_explicit);
1337 } else { 1335 } else {
1338 if (is_explicit) { 1336 if (is_explicit) {
1339 cached_passphrase_.value = passphrase; 1337 cached_passphrases_.explicit_passphrase = passphrase;
1340 cached_passphrase_.is_explicit = is_explicit;
1341 cached_passphrase_.is_creation = is_creation;
1342 } else { 1338 } else {
1343 gaia_password_ = passphrase; 1339 cached_passphrases_.gaia_passphrase = passphrase;
1344 } 1340 }
1345 } 1341 }
1346 } 1342 }
1347 1343
1348 void ProfileSyncService::set_pending_types_for_encryption( 1344 void ProfileSyncService::set_pending_types_for_encryption(
1349 const syncable::ModelTypeSet& encrypted_types) { 1345 const syncable::ModelTypeSet& encrypted_types) {
1350 set_backend_encrypted_types_ = false; 1346 set_backend_encrypted_types_ = false;
1351 if (encrypted_types.empty()) { 1347 if (encrypted_types.empty()) {
1352 // We can't unencrypt types. 1348 // We can't unencrypt types.
1353 VLOG(1) << "No datatypes set for encryption, dropping encryption request."; 1349 VLOG(1) << "No datatypes set for encryption, dropping encryption request.";
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1402 expect_sync_configuration_aborted_ = false; 1398 expect_sync_configuration_aborted_ = false;
1403 return; 1399 return;
1404 } 1400 }
1405 if (status != DataTypeManager::OK) { 1401 if (status != DataTypeManager::OK) {
1406 VLOG(0) << "ProfileSyncService::Observe: Unrecoverable error detected"; 1402 VLOG(0) << "ProfileSyncService::Observe: Unrecoverable error detected";
1407 std::string message = 1403 std::string message =
1408 "Sync Configuration failed while configuring " + 1404 "Sync Configuration failed while configuring " +
1409 syncable::ModelTypeSetToString(result->failed_types) + 1405 syncable::ModelTypeSetToString(result->failed_types) +
1410 ": " + DataTypeManager::ConfigureStatusToString(status); 1406 ": " + DataTypeManager::ConfigureStatusToString(status);
1411 OnUnrecoverableError(result->location, message); 1407 OnUnrecoverableError(result->location, message);
1412 cached_passphrase_ = CachedPassphrase(); 1408 cached_passphrases_ = CachedPassphrases();
1413 return; 1409 return;
1414 } 1410 }
1415 1411
1416 // We should never get in a state where we have no encrypted datatypes 1412 // We should never get in a state where we have no encrypted datatypes
1417 // enabled, and yet we still think we require a passphrase for decryption. 1413 // enabled, and yet we still think we require a passphrase for decryption.
1418 DCHECK(!(IsPassphraseRequiredForDecryption() && 1414 DCHECK(!(IsPassphraseRequiredForDecryption() &&
1419 !IsEncryptedDatatypeEnabled())); 1415 !IsEncryptedDatatypeEnabled()));
1420 1416
1421 // In the old world, this would be a no-op. With new syncer thread, 1417 // In the old world, this would be a no-op. With new syncer thread,
1422 // this is the point where it is safe to switch from config-mode to 1418 // this is the point where it is safe to switch from config-mode to
(...skipping 18 matching lines...) Expand all
1441 if (*pref_name == prefs::kSyncManaged) { 1437 if (*pref_name == prefs::kSyncManaged) {
1442 NotifyObservers(); 1438 NotifyObservers();
1443 if (*pref_sync_managed_) { 1439 if (*pref_sync_managed_) {
1444 DisableForUser(); 1440 DisableForUser();
1445 } else if (HasSyncSetupCompleted() && AreCredentialsAvailable()) { 1441 } else if (HasSyncSetupCompleted() && AreCredentialsAvailable()) {
1446 StartUp(); 1442 StartUp();
1447 } 1443 }
1448 } 1444 }
1449 break; 1445 break;
1450 } 1446 }
1451 case chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL: {
1452 const GoogleServiceSigninSuccessDetails* successful =
1453 (Details<const GoogleServiceSigninSuccessDetails>(details).ptr());
1454 // We pass 'false' to SetPassphrase to denote that this is an implicit
1455 // request and shouldn't override an explicit one. Thus, we either
1456 // update the implicit passphrase (idempotent if the passphrase didn't
1457 // actually change), or the user has an explicit passphrase set so this
1458 // becomes a no-op.
1459 if (browser_sync::IsUsingOAuth()) {
1460 // TODO(rickcam): Bug 92323: Fetch password through special Gaia request
1461 DCHECK(successful->password.empty());
1462 LOG(WARNING) << "Not initializing sync passphrase.";
1463 } else {
1464 SetPassphrase(successful->password, false, true);
1465 }
1466 break;
1467 }
1468 case chrome::NOTIFICATION_GOOGLE_SIGNIN_FAILED: { 1447 case chrome::NOTIFICATION_GOOGLE_SIGNIN_FAILED: {
1469 GoogleServiceAuthError error = 1448 GoogleServiceAuthError error =
1470 *(Details<const GoogleServiceAuthError>(details).ptr()); 1449 *(Details<const GoogleServiceAuthError>(details).ptr());
1471 UpdateAuthErrorState(error); 1450 UpdateAuthErrorState(error);
1472 break; 1451 break;
1473 } 1452 }
1474 case chrome::NOTIFICATION_TOKEN_REQUEST_FAILED: { 1453 case chrome::NOTIFICATION_TOKEN_REQUEST_FAILED: {
1475 GoogleServiceAuthError error( 1454 GoogleServiceAuthError error(
1476 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS); 1455 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
1477 UpdateAuthErrorState(error); 1456 UpdateAuthErrorState(error);
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
1573 syncable::ModelTypeBitSetFromValue( 1552 syncable::ModelTypeBitSetFromValue(
1574 *profile_->GetPrefs()->GetList(prefs::kAcknowledgedSyncTypes)); 1553 *profile_->GetPrefs()->GetList(prefs::kAcknowledgedSyncTypes));
1575 syncable::ModelTypeSet registered; 1554 syncable::ModelTypeSet registered;
1576 GetRegisteredDataTypes(&registered); 1555 GetRegisteredDataTypes(&registered);
1577 syncable::ModelTypeBitSet registered_bit_set = 1556 syncable::ModelTypeBitSet registered_bit_set =
1578 syncable::ModelTypeBitSetFromSet(registered); 1557 syncable::ModelTypeBitSetFromSet(registered);
1579 unacknowledged = registered_bit_set & ~acknowledged; 1558 unacknowledged = registered_bit_set & ~acknowledged;
1580 } 1559 }
1581 return unacknowledged; 1560 return unacknowledged;
1582 } 1561 }
1583
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698