Index: sync/engine/net/server_connection_manager.cc |
diff --git a/sync/engine/net/server_connection_manager.cc b/sync/engine/net/server_connection_manager.cc |
index 4927acdaa75630bca9ed3fbee6c25060aa1553f5..b76e7f13d31ea30dc796f7dee905205463f55697 100644 |
--- a/sync/engine/net/server_connection_manager.cc |
+++ b/sync/engine/net/server_connection_manager.cc |
@@ -233,6 +233,14 @@ bool ServerConnectionManager::SetAuthToken(const std::string& auth_token) { |
previously_invalidated_token = std::string(); |
return true; |
} |
+ |
+ // This could happen in case like server outage/bug. E.g. token returned by |
+ // first request is considered invalid by sync server and because |
+ // of token server's caching policy, etc, same token is returned on second |
+ // request. Need to notify sync frontend again to request new token, |
+ // otherwise backend will stay in SYNC_AUTH_ERROR state while frontend thinks |
+ // everything is fine and takes no actions. |
+ SetServerStatus(HttpResponse::SYNC_AUTH_ERROR); |
return false; |
} |
@@ -252,8 +260,12 @@ void ServerConnectionManager::InvalidateAndClearAuthToken() { |
void ServerConnectionManager::SetServerStatus( |
HttpResponse::ServerConnectionCode server_status) { |
- if (server_status_ == server_status) |
+ // SYNC_AUTH_ERROR is permanent error. Need to notify observer to take |
+ // action externally to resolve. |
+ if (server_status != HttpResponse::SYNC_AUTH_ERROR && |
+ server_status_ == server_status) { |
return; |
+ } |
server_status_ = server_status; |
NotifyStatusChanged(); |
} |