| 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 <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/memory/ptr_util.h" |
| 10 #include "components/sync/base/model_type.h" | 11 #include "components/sync/base/model_type.h" |
| 11 #include "components/sync/base/time.h" | 12 #include "components/sync/base/time.h" |
| 12 #include "components/sync/syncable/syncable_util.h" | 13 #include "components/sync/syncable/syncable_util.h" |
| 13 | 14 |
| 14 namespace syncer { | 15 namespace syncer { |
| 15 | 16 |
| 16 WorkerEntityTracker::WorkerEntityTracker(const std::string& client_tag_hash) | 17 WorkerEntityTracker::WorkerEntityTracker(const std::string& client_tag_hash) |
| 17 : client_tag_hash_(client_tag_hash) { | 18 : client_tag_hash_(client_tag_hash) { |
| 18 DCHECK(!client_tag_hash_.empty()); | 19 DCHECK(!client_tag_hash_.empty()); |
| 19 } | 20 } |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 } | 76 } |
| 76 | 77 |
| 77 // We intentionally don't update the id_ here. Good ID values come from the | 78 // We intentionally don't update the id_ here. Good ID values come from the |
| 78 // server and always pass through the sync thread first. There's no way the | 79 // server and always pass through the sync thread first. There's no way the |
| 79 // model thread could have a better ID value than we do. | 80 // model thread could have a better ID value than we do. |
| 80 | 81 |
| 81 // This entity is identified by its client tag. That value can never change. | 82 // This entity is identified by its client tag. That value can never change. |
| 82 DCHECK_EQ(client_tag_hash_, data.entity->client_tag_hash); | 83 DCHECK_EQ(client_tag_hash_, data.entity->client_tag_hash); |
| 83 // TODO(stanisc): consider simply copying CommitRequestData instead of | 84 // TODO(stanisc): consider simply copying CommitRequestData instead of |
| 84 // allocating one dynamically. | 85 // allocating one dynamically. |
| 85 pending_commit_.reset(new CommitRequestData(data)); | 86 pending_commit_ = base::MakeUnique<CommitRequestData>(data); |
| 86 | 87 |
| 87 // Do our counter values indicate a conflict? If so, don't commit. | 88 // Do our counter values indicate a conflict? If so, don't commit. |
| 88 // | 89 // |
| 89 // There's no need to inform the model thread of the conflict. The | 90 // There's no need to inform the model thread of the conflict. The |
| 90 // conflicting update has already been posted to its task runner; it will | 91 // conflicting update has already been posted to its task runner; it will |
| 91 // figure it out as soon as it runs that task. | 92 // figure it out as soon as it runs that task. |
| 92 // | 93 // |
| 93 // Note that this check must be after pending_commit_ is set. | 94 // Note that this check must be after pending_commit_ is set. |
| 94 if (IsInConflict()) { | 95 if (IsInConflict()) { |
| 95 ClearPendingCommit(); | 96 ClearPendingCommit(); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 ClearPendingCommit(); | 144 ClearPendingCommit(); |
| 144 } | 145 } |
| 145 } | 146 } |
| 146 | 147 |
| 147 bool WorkerEntityTracker::ReceiveEncryptedUpdate( | 148 bool WorkerEntityTracker::ReceiveEncryptedUpdate( |
| 148 const UpdateResponseData& data) { | 149 const UpdateResponseData& data) { |
| 149 if (data.response_version < highest_gu_response_version_) | 150 if (data.response_version < highest_gu_response_version_) |
| 150 return false; | 151 return false; |
| 151 | 152 |
| 152 highest_gu_response_version_ = data.response_version; | 153 highest_gu_response_version_ = data.response_version; |
| 153 encrypted_update_.reset(new UpdateResponseData(data)); | 154 encrypted_update_ = base::MakeUnique<UpdateResponseData>(data); |
| 154 ClearPendingCommit(); | 155 ClearPendingCommit(); |
| 155 return true; | 156 return true; |
| 156 } | 157 } |
| 157 | 158 |
| 158 bool WorkerEntityTracker::HasEncryptedUpdate() const { | 159 bool WorkerEntityTracker::HasEncryptedUpdate() const { |
| 159 return !!encrypted_update_; | 160 return !!encrypted_update_; |
| 160 } | 161 } |
| 161 | 162 |
| 162 UpdateResponseData WorkerEntityTracker::GetEncryptedUpdate() const { | 163 UpdateResponseData WorkerEntityTracker::GetEncryptedUpdate() const { |
| 163 return *encrypted_update_; | 164 return *encrypted_update_; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 193 bool WorkerEntityTracker::IsServerKnown() const { | 194 bool WorkerEntityTracker::IsServerKnown() const { |
| 194 return base_version_ != kUncommittedVersion; | 195 return base_version_ != kUncommittedVersion; |
| 195 } | 196 } |
| 196 | 197 |
| 197 void WorkerEntityTracker::ClearPendingCommit() { | 198 void WorkerEntityTracker::ClearPendingCommit() { |
| 198 pending_commit_.reset(); | 199 pending_commit_.reset(); |
| 199 pending_commit_specifics_hash_.clear(); | 200 pending_commit_specifics_hash_.clear(); |
| 200 } | 201 } |
| 201 | 202 |
| 202 } // namespace syncer | 203 } // namespace syncer |
| OLD | NEW |