Chromium Code Reviews| 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 ead0cf5aed34d91b3096d36b6c71d9d71e23f849..f744238547aa48018bf1e795a1e9f6ff123f751e 100644 |
| --- a/chrome/browser/sync/profile_sync_service.cc |
| +++ b/chrome/browser/sync/profile_sync_service.cc |
| @@ -643,8 +643,6 @@ void ProfileSyncService::OnGetTokenSuccess( |
| const base::Time& expiration_time) { |
| DCHECK_EQ(access_token_request_, request); |
| access_token_request_.reset(); |
| - // Reset backoff time after successful response. |
| - request_access_token_backoff_.Reset(); |
| access_token_ = access_token; |
| if (backend_) |
| backend_->UpdateCredentials(GetCredentials()); |
| @@ -1111,9 +1109,25 @@ void ProfileSyncService::OnConnectionStatusChange( |
| // Sync server returned error indicating that access token is invalid. It |
| // could be either expired or access is revoked. Let's request another |
| // access token and if access is revoked then request for token will fail |
| - // with corresponding error. |
| - RequestAccessToken(); |
| + // with corresponding error. If access token is repeatedly reported |
| + // invalid, there may be some issues with token server. In that case, we |
|
tim (not reviewing)
2013/11/06 19:35:32
In fact, if the access token is repeatedly reporte
haitaol1
2013/11/06 22:37:30
I think the root cause is still on server. If serv
tim (not reviewing)
2013/11/07 22:07:13
But there could be *no issue* with the *token* ser
haitaol1
2013/11/08 15:23:02
Removed token
On 2013/11/07 22:07:13, timsteele w
|
| + // backoff token requests exponentially to avoid hammering token server |
| + // too much. |
| + if (request_access_token_backoff_.failure_count() == 0) { |
| + RequestAccessToken(); |
| + } else { |
| + request_access_token_backoff_.InformOfRequest(false); |
| + request_access_token_retry_timer_.Start( |
| + FROM_HERE, |
| + request_access_token_backoff_.GetTimeUntilRelease(), |
| + base::Bind(&ProfileSyncService::RequestAccessToken, |
| + weak_factory_.GetWeakPtr())); |
| + } |
| } else { |
| + // Reset backoff time after successful connection. |
|
tim (not reviewing)
2013/11/06 19:35:32
This is where it gets dangerous and bug prone in m
haitaol1
2013/11/06 22:37:30
Good point. Changed to only reset if no request is
|
| + if (status == syncer::CONNECTION_OK) |
| + request_access_token_backoff_.Reset(); |
| + |
| const GoogleServiceAuthError auth_error = |
| ConnectionStatusToAuthError(status); |
| DVLOG(1) << "Connection status change: " << auth_error.ToString(); |