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 "chrome/browser/sync/engine/syncer_proto_util.h" | 5 #include "chrome/browser/sync/engine/syncer_proto_util.h" |
6 | 6 |
7 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
8 #include "base/stringprintf.h" | 8 #include "base/stringprintf.h" |
9 #include "chrome/browser/sync/engine/net/server_connection_manager.h" | 9 #include "chrome/browser/sync/engine/net/server_connection_manager.h" |
10 #include "chrome/browser/sync/engine/syncer.h" | 10 #include "chrome/browser/sync/engine/syncer.h" |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 } | 73 } |
74 | 74 |
75 if (response.profiling_data().has_total_request_time()) { | 75 if (response.profiling_data().has_total_request_time()) { |
76 response_trace << " total time: " | 76 response_trace << " total time: " |
77 << response.profiling_data().total_request_time() << "ms"; | 77 << response.profiling_data().total_request_time() << "ms"; |
78 } | 78 } |
79 DVLOG(1) << response_trace.str(); | 79 DVLOG(1) << response_trace.str(); |
80 } | 80 } |
81 } | 81 } |
82 | 82 |
| 83 SyncerError ServerConnectionErrorAsSyncerError( |
| 84 const HttpResponse::ServerConnectionCode server_status) { |
| 85 switch (server_status) { |
| 86 case HttpResponse::CONNECTION_UNAVAILABLE: |
| 87 return NETWORK_CONNECTION_UNAVAILABLE; |
| 88 case HttpResponse::IO_ERROR: |
| 89 return NETWORK_IO_ERROR; |
| 90 case HttpResponse::SYNC_SERVER_ERROR: |
| 91 // FIXME what does this mean? |
| 92 return SYNC_SERVER_ERROR; |
| 93 case HttpResponse::SYNC_AUTH_ERROR: |
| 94 return SYNC_AUTH_ERROR; |
| 95 case HttpResponse::RETRY: |
| 96 return SERVER_RETURN_TRANSIENT_ERROR; |
| 97 case HttpResponse::SERVER_CONNECTION_OK: |
| 98 case HttpResponse::NONE: |
| 99 default: |
| 100 NOTREACHED(); |
| 101 return UNSET; |
| 102 } |
| 103 } |
| 104 |
83 } // namespace | 105 } // namespace |
84 | 106 |
85 // static | 107 // static |
86 void SyncerProtoUtil::HandleMigrationDoneResponse( | 108 void SyncerProtoUtil::HandleMigrationDoneResponse( |
87 const sync_pb::ClientToServerResponse* response, | 109 const sync_pb::ClientToServerResponse* response, |
88 sessions::SyncSession* session) { | 110 sessions::SyncSession* session) { |
89 LOG_IF(ERROR, 0 >= response->migrated_data_type_id_size()) | 111 LOG_IF(ERROR, 0 >= response->migrated_data_type_id_size()) |
90 << "MIGRATION_DONE but no types specified."; | 112 << "MIGRATION_DONE but no types specified."; |
91 syncable::ModelTypeSet to_migrate; | 113 syncable::ModelTypeSet to_migrate; |
92 for (int i = 0; i < response->migrated_data_type_id_size(); i++) { | 114 for (int i = 0; i < response->migrated_data_type_id_size(); i++) { |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 if (error_type == sync_pb::SyncEnums::CLEAR_PENDING || | 318 if (error_type == sync_pb::SyncEnums::CLEAR_PENDING || |
297 error_type == sync_pb::SyncEnums::NOT_MY_BIRTHDAY) { | 319 error_type == sync_pb::SyncEnums::NOT_MY_BIRTHDAY) { |
298 error.action = browser_sync::DISABLE_SYNC_ON_CLIENT; | 320 error.action = browser_sync::DISABLE_SYNC_ON_CLIENT; |
299 } // There is no other action we can compute for legacy server. | 321 } // There is no other action we can compute for legacy server. |
300 return error; | 322 return error; |
301 } | 323 } |
302 | 324 |
303 } // namespace | 325 } // namespace |
304 | 326 |
305 // static | 327 // static |
306 bool SyncerProtoUtil::PostClientToServerMessage( | 328 SyncerError SyncerProtoUtil::PostClientToServerMessage( |
307 const ClientToServerMessage& msg, | 329 const ClientToServerMessage& msg, |
308 ClientToServerResponse* response, | 330 ClientToServerResponse* response, |
309 SyncSession* session) { | 331 SyncSession* session) { |
310 | 332 |
311 CHECK(response); | 333 CHECK(response); |
312 DCHECK(!msg.get_updates().has_from_timestamp()); // Deprecated. | 334 DCHECK(!msg.get_updates().has_from_timestamp()); // Deprecated. |
313 DCHECK(!msg.get_updates().has_requested_types()); // Deprecated. | 335 DCHECK(!msg.get_updates().has_requested_types()); // Deprecated. |
314 DCHECK(msg.has_store_birthday() || IsVeryFirstGetUpdates(msg)) | 336 DCHECK(msg.has_store_birthday() || IsVeryFirstGetUpdates(msg)) |
315 << "Must call AddRequestBirthday to set birthday."; | 337 << "Must call AddRequestBirthday to set birthday."; |
316 | 338 |
317 ScopedDirLookup dir(session->context()->directory_manager(), | 339 ScopedDirLookup dir(session->context()->directory_manager(), |
318 session->context()->account_name()); | 340 session->context()->account_name()); |
319 if (!dir.good()) | 341 if (!dir.good()) |
320 return false; | 342 return DIRECTORY_LOOKUP_FAILED; |
321 | 343 |
322 if (!PostAndProcessHeaders(session->context()->connection_manager(), session, | 344 if (!PostAndProcessHeaders(session->context()->connection_manager(), session, |
323 msg, response)) | 345 msg, response)) { |
324 return false; | 346 // There was an error establishing communication with the server. |
| 347 // We can not proceed beyond this point. |
| 348 const browser_sync::HttpResponse::ServerConnectionCode server_status = |
| 349 session->context()->connection_manager()->server_status(); |
| 350 |
| 351 DCHECK_NE(server_status, browser_sync::HttpResponse::NONE); |
| 352 DCHECK_NE(server_status, browser_sync::HttpResponse::SERVER_CONNECTION_OK); |
| 353 |
| 354 return ServerConnectionErrorAsSyncerError(server_status); |
| 355 } |
325 | 356 |
326 browser_sync::SyncProtocolError sync_protocol_error; | 357 browser_sync::SyncProtocolError sync_protocol_error; |
327 | 358 |
328 // Birthday mismatch overrides any error that is sent by the server. | 359 // Birthday mismatch overrides any error that is sent by the server. |
329 if (!VerifyResponseBirthday(dir, response)) { | 360 if (!VerifyResponseBirthday(dir, response)) { |
330 sync_protocol_error.error_type = browser_sync::NOT_MY_BIRTHDAY; | 361 sync_protocol_error.error_type = browser_sync::NOT_MY_BIRTHDAY; |
331 sync_protocol_error.action = | 362 sync_protocol_error.action = |
332 browser_sync::DISABLE_SYNC_ON_CLIENT; | 363 browser_sync::DISABLE_SYNC_ON_CLIENT; |
333 } else if (response->has_error()) { | 364 } else if (response->has_error()) { |
334 // This is a new server. Just get the error from the protocol. | 365 // This is a new server. Just get the error from the protocol. |
(...skipping 10 matching lines...) Expand all Loading... |
345 | 376 |
346 // Inform the delegate of the error we got. | 377 // Inform the delegate of the error we got. |
347 session->delegate()->OnSyncProtocolError(session->TakeSnapshot()); | 378 session->delegate()->OnSyncProtocolError(session->TakeSnapshot()); |
348 | 379 |
349 // Now do any special handling for the error type and decide on the return | 380 // Now do any special handling for the error type and decide on the return |
350 // value. | 381 // value. |
351 switch (sync_protocol_error.error_type) { | 382 switch (sync_protocol_error.error_type) { |
352 case browser_sync::UNKNOWN_ERROR: | 383 case browser_sync::UNKNOWN_ERROR: |
353 LOG(WARNING) << "Sync protocol out-of-date. The server is using a more " | 384 LOG(WARNING) << "Sync protocol out-of-date. The server is using a more " |
354 << "recent version."; | 385 << "recent version."; |
355 return false; | 386 return SERVER_RETURN_UNKNOWN_ERROR; |
356 case browser_sync::SYNC_SUCCESS: | 387 case browser_sync::SYNC_SUCCESS: |
357 LogResponseProfilingData(*response); | 388 LogResponseProfilingData(*response); |
358 return true; | 389 return SYNCER_OK; |
359 case browser_sync::THROTTLED: | 390 case browser_sync::THROTTLED: |
360 LOG(WARNING) << "Client silenced by server."; | 391 LOG(WARNING) << "Client silenced by server."; |
361 HandleThrottleError(sync_protocol_error, | 392 HandleThrottleError(sync_protocol_error, |
362 base::TimeTicks::Now() + GetThrottleDelay(*response), | 393 base::TimeTicks::Now() + GetThrottleDelay(*response), |
363 session->context(), | 394 session->context(), |
364 session->delegate()); | 395 session->delegate()); |
365 return false; | 396 return SERVER_RETURN_THROTTLED; |
366 case browser_sync::TRANSIENT_ERROR: | 397 case browser_sync::TRANSIENT_ERROR: |
367 return false; | 398 return SERVER_RETURN_TRANSIENT_ERROR; |
368 case browser_sync::MIGRATION_DONE: | 399 case browser_sync::MIGRATION_DONE: |
369 HandleMigrationDoneResponse(response, session); | 400 HandleMigrationDoneResponse(response, session); |
370 return false; | 401 return SERVER_RETURN_MIGRATION_DONE; |
371 case browser_sync::CLEAR_PENDING: | 402 case browser_sync::CLEAR_PENDING: |
| 403 return SERVER_RETURN_CLEAR_PENDING; |
372 case browser_sync::NOT_MY_BIRTHDAY: | 404 case browser_sync::NOT_MY_BIRTHDAY: |
373 return false; | 405 return SERVER_RETURN_NOT_MY_BIRTHDAY; |
374 default: | 406 default: |
375 NOTREACHED(); | 407 NOTREACHED(); |
376 return false; | 408 return UNSET; |
377 } | 409 } |
378 } | 410 } |
379 | 411 |
380 // static | 412 // static |
381 bool SyncerProtoUtil::Compare(const syncable::Entry& local_entry, | 413 bool SyncerProtoUtil::Compare(const syncable::Entry& local_entry, |
382 const SyncEntity& server_entry) { | 414 const SyncEntity& server_entry) { |
383 const std::string name = NameFromSyncEntity(server_entry); | 415 const std::string name = NameFromSyncEntity(server_entry); |
384 | 416 |
385 CHECK(local_entry.Get(ID) == server_entry.id()) << | 417 CHECK(local_entry.Get(ID) == server_entry.id()) << |
386 " SyncerProtoUtil::Compare precondition not met."; | 418 " SyncerProtoUtil::Compare precondition not met."; |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
500 std::string SyncerProtoUtil::ClientToServerResponseDebugString( | 532 std::string SyncerProtoUtil::ClientToServerResponseDebugString( |
501 const sync_pb::ClientToServerResponse& response) { | 533 const sync_pb::ClientToServerResponse& response) { |
502 // Add more handlers as needed. | 534 // Add more handlers as needed. |
503 std::string output; | 535 std::string output; |
504 if (response.has_get_updates()) | 536 if (response.has_get_updates()) |
505 output.append(GetUpdatesResponseString(response.get_updates())); | 537 output.append(GetUpdatesResponseString(response.get_updates())); |
506 return output; | 538 return output; |
507 } | 539 } |
508 | 540 |
509 } // namespace browser_sync | 541 } // namespace browser_sync |
OLD | NEW |