| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/worker_entity_tracker.h" | 5 #include "components/sync/engine_impl/worker_entity_tracker.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "components/sync/base/model_type.h" | 10 #include "components/sync/base/model_type.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 | 27 |
| 28 WorkerEntityTracker::~WorkerEntityTracker() {} | 28 WorkerEntityTracker::~WorkerEntityTracker() {} |
| 29 | 29 |
| 30 bool WorkerEntityTracker::HasPendingCommit() const { | 30 bool WorkerEntityTracker::HasPendingCommit() const { |
| 31 return !!pending_commit_; | 31 return !!pending_commit_; |
| 32 } | 32 } |
| 33 | 33 |
| 34 void WorkerEntityTracker::PopulateCommitProto( | 34 void WorkerEntityTracker::PopulateCommitProto( |
| 35 sync_pb::SyncEntity* commit_entity) const { | 35 sync_pb::SyncEntity* commit_entity) const { |
| 36 DCHECK(HasPendingCommit()); | 36 DCHECK(HasPendingCommit()); |
| 37 DCHECK(!client_tag_hash_.empty()); | |
| 38 | 37 |
| 39 if (!id_.empty()) { | 38 if (!id_.empty()) { |
| 40 commit_entity->set_id_string(id_); | 39 commit_entity->set_id_string(id_); |
| 41 } | 40 } |
| 42 | 41 |
| 43 const EntityData& entity = pending_commit_->entity.value(); | 42 const EntityData& entity = pending_commit_->entity.value(); |
| 44 DCHECK_EQ(client_tag_hash_, entity.client_tag_hash); | 43 DCHECK_EQ(client_tag_hash_, entity.client_tag_hash); |
| 45 | 44 |
| 46 commit_entity->set_client_defined_unique_tag(client_tag_hash_); | 45 commit_entity->set_client_defined_unique_tag(client_tag_hash_); |
| 47 commit_entity->set_version(base_version_); | 46 commit_entity->set_version(base_version_); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 ack->sequence_number = sequence_number_; | 117 ack->sequence_number = sequence_number_; |
| 119 ack->specifics_hash = pending_commit_specifics_hash_; | 118 ack->specifics_hash = pending_commit_specifics_hash_; |
| 120 | 119 |
| 121 // Because an in-progress commit blocks the sync thread, we can assume that | 120 // Because an in-progress commit blocks the sync thread, we can assume that |
| 122 // the item we just committed successfully is exactly the one we have now. | 121 // the item we just committed successfully is exactly the one we have now. |
| 123 // Nothing changed it while the commit was happening. Since we're now in | 122 // Nothing changed it while the commit was happening. Since we're now in |
| 124 // sync with the server, we can clear the pending commit. | 123 // sync with the server, we can clear the pending commit. |
| 125 ClearPendingCommit(); | 124 ClearPendingCommit(); |
| 126 } | 125 } |
| 127 | 126 |
| 128 void WorkerEntityTracker::ReceiveUpdate(int64_t version) { | 127 void WorkerEntityTracker::ReceiveUpdate(const UpdateResponseData& update) { |
| 129 if (version <= highest_gu_response_version_) | 128 if (update.response_version <= highest_gu_response_version_) |
| 130 return; | 129 return; |
| 131 | 130 |
| 132 highest_gu_response_version_ = version; | 131 highest_gu_response_version_ = update.response_version; |
| 132 id_ = update.entity->id; |
| 133 | 133 |
| 134 // Got an applicable update newer than any pending updates. It must be safe | 134 // Got an applicable update newer than any pending updates. It must be safe |
| 135 // to discard the old encrypted update, if there was one. | 135 // to discard the old encrypted update, if there was one. |
| 136 ClearEncryptedUpdate(); | 136 ClearEncryptedUpdate(); |
| 137 | 137 |
| 138 if (IsInConflict()) { | 138 if (IsInConflict()) { |
| 139 // Incoming update clobbers the pending commit on the sync thread. | 139 // Incoming update clobbers the pending commit on the sync thread. |
| 140 // The model thread can re-request this commit later if it wants to. | 140 // The model thread can re-request this commit later if it wants to. |
| 141 ClearPendingCommit(); | 141 ClearPendingCommit(); |
| 142 } | 142 } |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 bool WorkerEntityTracker::IsServerKnown() const { | 191 bool WorkerEntityTracker::IsServerKnown() const { |
| 192 return base_version_ != kUncommittedVersion; | 192 return base_version_ != kUncommittedVersion; |
| 193 } | 193 } |
| 194 | 194 |
| 195 void WorkerEntityTracker::ClearPendingCommit() { | 195 void WorkerEntityTracker::ClearPendingCommit() { |
| 196 pending_commit_.reset(); | 196 pending_commit_.reset(); |
| 197 pending_commit_specifics_hash_.clear(); | 197 pending_commit_specifics_hash_.clear(); |
| 198 } | 198 } |
| 199 | 199 |
| 200 } // namespace syncer_v2 | 200 } // namespace syncer_v2 |
| OLD | NEW |