| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "components/sync/engine_impl/loopback_server/loopback_server.h" | 5 #include "components/sync/engine_impl/loopback_server/loopback_server.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <limits> | 10 #include <limits> |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 | 116 |
| 117 // Maps data type IDs to the latest version seen for that type. | 117 // Maps data type IDs to the latest version seen for that type. |
| 118 const ModelTypeToVersionMap request_from_version_; | 118 const ModelTypeToVersionMap request_from_version_; |
| 119 | 119 |
| 120 // The minimum version seen among all data types. | 120 // The minimum version seen among all data types. |
| 121 const int min_version_; | 121 const int min_version_; |
| 122 }; | 122 }; |
| 123 | 123 |
| 124 std::unique_ptr<UpdateSieve> UpdateSieve::Create( | 124 std::unique_ptr<UpdateSieve> UpdateSieve::Create( |
| 125 const sync_pb::GetUpdatesMessage& get_updates_message) { | 125 const sync_pb::GetUpdatesMessage& get_updates_message) { |
| 126 CHECK_GT(get_updates_message.from_progress_marker_size(), 0) | 126 // A GetUpdates request must have at least one progress marker. |
| 127 << "A GetUpdates request must have at least one progress marker."; | 127 CHECK_GT(get_updates_message.from_progress_marker_size(), 0); |
| 128 | 128 |
| 129 UpdateSieve::ModelTypeToVersionMap request_from_version; | 129 UpdateSieve::ModelTypeToVersionMap request_from_version; |
| 130 int64_t min_version = std::numeric_limits<int64_t>::max(); | 130 int64_t min_version = std::numeric_limits<int64_t>::max(); |
| 131 for (int i = 0; i < get_updates_message.from_progress_marker_size(); i++) { | 131 for (int i = 0; i < get_updates_message.from_progress_marker_size(); i++) { |
| 132 sync_pb::DataTypeProgressMarker marker = | 132 sync_pb::DataTypeProgressMarker marker = |
| 133 get_updates_message.from_progress_marker(i); | 133 get_updates_message.from_progress_marker(i); |
| 134 | 134 |
| 135 int64_t version = 0; | 135 int64_t version = 0; |
| 136 // Let the version remain zero if there is no token or an empty token (the | 136 // Let the version remain zero if there is no token or an empty token (the |
| 137 // first request for this type). | 137 // first request for this type). |
| 138 if (marker.has_token() && !marker.token().empty()) { | 138 if (marker.has_token() && !marker.token().empty()) { |
| 139 bool parsed = base::StringToInt64(marker.token(), &version); | 139 bool parsed = base::StringToInt64(marker.token(), &version); |
| 140 CHECK(parsed) << "Unable to parse progress marker token."; | 140 // Unable to parse progress marker token. |
| 141 CHECK(parsed); |
| 141 } | 142 } |
| 142 ModelType model_type = | 143 ModelType model_type = |
| 143 syncer::GetModelTypeFromSpecificsFieldNumber(marker.data_type_id()); | 144 syncer::GetModelTypeFromSpecificsFieldNumber(marker.data_type_id()); |
| 144 request_from_version[model_type] = version; | 145 request_from_version[model_type] = version; |
| 145 | 146 |
| 146 if (version < min_version) | 147 if (version < min_version) |
| 147 min_version = version; | 148 min_version = version; |
| 148 } | 149 } |
| 149 | 150 |
| 150 return std::unique_ptr<UpdateSieve>( | 151 return std::unique_ptr<UpdateSieve>( |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 | 231 |
| 231 void LoopbackServer::HandleCommand( | 232 void LoopbackServer::HandleCommand( |
| 232 const string& request, | 233 const string& request, |
| 233 HttpResponse::ServerConnectionCode* server_status, | 234 HttpResponse::ServerConnectionCode* server_status, |
| 234 int64_t* response_code, | 235 int64_t* response_code, |
| 235 std::string* response) { | 236 std::string* response) { |
| 236 DCHECK(thread_checker_.CalledOnValidThread()); | 237 DCHECK(thread_checker_.CalledOnValidThread()); |
| 237 | 238 |
| 238 sync_pb::ClientToServerMessage message; | 239 sync_pb::ClientToServerMessage message; |
| 239 bool parsed = message.ParseFromString(request); | 240 bool parsed = message.ParseFromString(request); |
| 240 CHECK(parsed) << "Unable to parse the ClientToServerMessage."; | 241 // Unable to parse the ClientToServerMessage. |
| 242 CHECK(parsed); |
| 241 | 243 |
| 242 sync_pb::ClientToServerResponse response_proto; | 244 sync_pb::ClientToServerResponse response_proto; |
| 243 | 245 |
| 244 if (message.has_store_birthday() && | 246 if (message.has_store_birthday() && |
| 245 message.store_birthday() != GetStoreBirthday()) { | 247 message.store_birthday() != GetStoreBirthday()) { |
| 246 response_proto.set_error_code(sync_pb::SyncEnums::NOT_MY_BIRTHDAY); | 248 response_proto.set_error_code(sync_pb::SyncEnums::NOT_MY_BIRTHDAY); |
| 247 } else { | 249 } else { |
| 248 bool success = false; | 250 bool success = false; |
| 249 switch (message.message_contents()) { | 251 switch (message.message_contents()) { |
| 250 case sync_pb::ClientToServerMessage::GET_UPDATES: | 252 case sync_pb::ClientToServerMessage::GET_UPDATES: |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 551 // write. | 553 // write. |
| 552 LOG(ERROR) << "Loopback sync can not read the persistent state file."; | 554 LOG(ERROR) << "Loopback sync can not read the persistent state file."; |
| 553 return false; | 555 return false; |
| 554 } | 556 } |
| 555 } | 557 } |
| 556 LOG(WARNING) << "Loopback sync persistent state file does not exist."; | 558 LOG(WARNING) << "Loopback sync persistent state file does not exist."; |
| 557 return false; | 559 return false; |
| 558 } | 560 } |
| 559 | 561 |
| 560 } // namespace syncer | 562 } // namespace syncer |
| OLD | NEW |