| 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).
|
|
|