Index: chrome/browser/sync/profile_sync_service.cc |
diff --git a/chrome/browser/sync/profile_sync_service.cc b/chrome/browser/sync/profile_sync_service.cc |
index 0f5b9a42f57b89a2e43e6bb15d142e2387060d3e..4722da9adcada3d15251b3639b5872e840d613e3 100644 |
--- a/chrome/browser/sync/profile_sync_service.cc |
+++ b/chrome/browser/sync/profile_sync_service.cc |
@@ -206,8 +206,12 @@ void ProfileSyncService::TryStart() { |
return; |
// Don't start the backend if the token service hasn't finished loading tokens |
// yet (if the backend is started before the sync token has been loaded, |
- // GetCredentials() will return bogus credentials). |
- if (IsSyncTokenAvailable() || token_service->TokensLoadedFromDB()) { |
+ // GetCredentials() will return bogus credentials). On auto_start platforms |
+ // (like ChromeOS) we don't start sync until tokens are loaded, because the |
+ // user can be "signed in" on those platforms long before the tokens get |
+ // loaded, and we don't want to generate spurious auth errors. |
+ if (IsSyncTokenAvailable() || |
+ (!auto_start_enabled_ && token_service->TokensLoadedFromDB())) { |
if (HasSyncSetupCompleted() || auto_start_enabled_) { |
// If sync setup has completed we always start the backend. |
// If autostart is enabled, but we haven't completed sync setup, we try to |
@@ -1548,6 +1552,12 @@ void ProfileSyncService::Observe(int type, |
// This notification gets fired when TokenService loads the tokens |
// from storage. |
if (IsSyncEnabledAndLoggedIn()) { |
+ // Don't start up sync and generate an auth error on auto_start |
+ // platforms as they have their own way to resolve TokenService errors. |
+ // (crbug.com/128592). |
+ if (auto_start_enabled_ && !IsSyncTokenAvailable()) |
+ break; |
+ |
// Initialize the backend if sync is enabled. If the sync token was |
// not loaded, GetCredentials() will generate invalid credentials to |
// cause the backend to generate an auth error (crbug.com/121755). |