OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "sync/engine/net/server_connection_manager.h" | 5 #include "sync/engine/net/server_connection_manager.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 | 8 |
9 #include <ostream> | 9 #include <ostream> |
10 #include <string> | 10 #include <string> |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
226 active_connection_ = NULL; | 226 active_connection_ = NULL; |
227 } | 227 } |
228 | 228 |
229 bool ServerConnectionManager::SetAuthToken(const std::string& auth_token) { | 229 bool ServerConnectionManager::SetAuthToken(const std::string& auth_token) { |
230 DCHECK(thread_checker_.CalledOnValidThread()); | 230 DCHECK(thread_checker_.CalledOnValidThread()); |
231 if (previously_invalidated_token != auth_token) { | 231 if (previously_invalidated_token != auth_token) { |
232 auth_token_.assign(auth_token); | 232 auth_token_.assign(auth_token); |
233 previously_invalidated_token = std::string(); | 233 previously_invalidated_token = std::string(); |
234 return true; | 234 return true; |
235 } | 235 } |
236 | |
237 // This could happen in case like server outage/bug. Need to notify sync | |
tim (not reviewing)
2013/11/06 19:35:32
What is server outage/bug? Either explain the out
haitaol1
2013/11/06 22:37:30
Done.
| |
238 // frontend again to request new token, otherwise backend will stay in | |
239 // SYNC_AUTH_ERROR state while fronend thinks everything is fine and takes | |
240 // no actions. | |
241 SetServerStatus(HttpResponse::SYNC_AUTH_ERROR); | |
tim (not reviewing)
2013/11/06 19:35:32
I guess the only case that is implicitly in the "e
haitaol1
2013/11/06 22:37:30
Empty token shouldn't be possible because ProfileS
| |
236 return false; | 242 return false; |
237 } | 243 } |
238 | 244 |
239 void ServerConnectionManager::OnInvalidationCredentialsRejected() { | 245 void ServerConnectionManager::OnInvalidationCredentialsRejected() { |
240 InvalidateAndClearAuthToken(); | 246 InvalidateAndClearAuthToken(); |
241 SetServerStatus(HttpResponse::SYNC_AUTH_ERROR); | 247 SetServerStatus(HttpResponse::SYNC_AUTH_ERROR); |
242 } | 248 } |
243 | 249 |
244 void ServerConnectionManager::InvalidateAndClearAuthToken() { | 250 void ServerConnectionManager::InvalidateAndClearAuthToken() { |
245 DCHECK(thread_checker_.CalledOnValidThread()); | 251 DCHECK(thread_checker_.CalledOnValidThread()); |
246 // Copy over the token to previous invalid token. | 252 // Copy over the token to previous invalid token. |
247 if (!auth_token_.empty()) { | 253 if (!auth_token_.empty()) { |
248 previously_invalidated_token.assign(auth_token_); | 254 previously_invalidated_token.assign(auth_token_); |
249 auth_token_ = std::string(); | 255 auth_token_ = std::string(); |
250 } | 256 } |
251 } | 257 } |
252 | 258 |
253 void ServerConnectionManager::SetServerStatus( | 259 void ServerConnectionManager::SetServerStatus( |
254 HttpResponse::ServerConnectionCode server_status) { | 260 HttpResponse::ServerConnectionCode server_status) { |
255 if (server_status_ == server_status) | 261 // SYNC_AUTH_ERROR is permanent error. Need to notify observer to take |
262 // action externally to resolve. | |
263 if (server_status != HttpResponse::SYNC_AUTH_ERROR && | |
264 server_status_ == server_status) { | |
tim (not reviewing)
2013/11/06 19:35:32
Pavel and Richard should review this part carefull
haitaol1
2013/11/06 22:37:30
acked
haitaol1
2013/11/07 15:23:52
Another option is to leverage CONNECTION_NOT_ATTEM
| |
256 return; | 265 return; |
266 } | |
257 server_status_ = server_status; | 267 server_status_ = server_status; |
258 NotifyStatusChanged(); | 268 NotifyStatusChanged(); |
259 } | 269 } |
260 | 270 |
261 void ServerConnectionManager::NotifyStatusChanged() { | 271 void ServerConnectionManager::NotifyStatusChanged() { |
262 DCHECK(thread_checker_.CalledOnValidThread()); | 272 DCHECK(thread_checker_.CalledOnValidThread()); |
263 FOR_EACH_OBSERVER(ServerConnectionEventListener, listeners_, | 273 FOR_EACH_OBSERVER(ServerConnectionEventListener, listeners_, |
264 OnServerConnectionEvent( | 274 OnServerConnectionEvent( |
265 ServerConnectionEvent(server_status_))); | 275 ServerConnectionEvent(server_status_))); |
266 } | 276 } |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
373 | 383 |
374 std::ostream& operator << (std::ostream& s, const struct HttpResponse& hr) { | 384 std::ostream& operator << (std::ostream& s, const struct HttpResponse& hr) { |
375 s << " Response Code (bogus on error): " << hr.response_code; | 385 s << " Response Code (bogus on error): " << hr.response_code; |
376 s << " Content-Length (bogus on error): " << hr.content_length; | 386 s << " Content-Length (bogus on error): " << hr.content_length; |
377 s << " Server Status: " | 387 s << " Server Status: " |
378 << HttpResponse::GetServerConnectionCodeString(hr.server_status); | 388 << HttpResponse::GetServerConnectionCodeString(hr.server_status); |
379 return s; | 389 return s; |
380 } | 390 } |
381 | 391 |
382 } // namespace syncer | 392 } // namespace syncer |
OLD | NEW |