Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(289)

Side by Side Diff: components/sync/engine_impl/model_type_worker.cc

Issue 2376123003: [Sync] Move //components/sync to the syncer namespace. (Closed)
Patch Set: Rebase. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/model_type_worker.h" 5 #include "components/sync/engine_impl/model_type_worker.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/format_macros.h" 13 #include "base/format_macros.h"
14 #include "base/guid.h" 14 #include "base/guid.h"
15 #include "base/logging.h" 15 #include "base/logging.h"
16 #include "base/memory/ptr_util.h" 16 #include "base/memory/ptr_util.h"
17 #include "base/strings/stringprintf.h" 17 #include "base/strings/stringprintf.h"
18 #include "components/sync/base/time.h" 18 #include "components/sync/base/time.h"
19 #include "components/sync/core/model_type_processor.h" 19 #include "components/sync/core/model_type_processor.h"
20 #include "components/sync/engine_impl/commit_contribution.h" 20 #include "components/sync/engine_impl/commit_contribution.h"
21 #include "components/sync/engine_impl/non_blocking_type_commit_contribution.h" 21 #include "components/sync/engine_impl/non_blocking_type_commit_contribution.h"
22 #include "components/sync/engine_impl/worker_entity_tracker.h" 22 #include "components/sync/engine_impl/worker_entity_tracker.h"
23 #include "components/sync/syncable/syncable_util.h" 23 #include "components/sync/syncable/syncable_util.h"
24 24
25 namespace syncer_v2 { 25 namespace syncer {
26
27 using syncer::CommitContribution;
28 using syncer::Cryptographer;
29 using syncer::ModelType;
30 using syncer::NudgeHandler;
31 using syncer::SyncerError;
32 26
33 ModelTypeWorker::ModelTypeWorker( 27 ModelTypeWorker::ModelTypeWorker(
34 ModelType type, 28 ModelType type,
35 const sync_pb::DataTypeState& initial_state, 29 const sync_pb::DataTypeState& initial_state,
36 std::unique_ptr<Cryptographer> cryptographer, 30 std::unique_ptr<Cryptographer> cryptographer,
37 NudgeHandler* nudge_handler, 31 NudgeHandler* nudge_handler,
38 std::unique_ptr<ModelTypeProcessor> model_type_processor) 32 std::unique_ptr<ModelTypeProcessor> model_type_processor)
39 : type_(type), 33 : type_(type),
40 data_type_state_(initial_state), 34 data_type_state_(initial_state),
41 model_type_processor_(std::move(model_type_processor)), 35 model_type_processor_(std::move(model_type_processor)),
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 void ModelTypeWorker::GetDataTypeContext( 82 void ModelTypeWorker::GetDataTypeContext(
89 sync_pb::DataTypeContext* context) const { 83 sync_pb::DataTypeContext* context) const {
90 DCHECK(thread_checker_.CalledOnValidThread()); 84 DCHECK(thread_checker_.CalledOnValidThread());
91 context->CopyFrom(data_type_state_.type_context()); 85 context->CopyFrom(data_type_state_.type_context());
92 } 86 }
93 87
94 SyncerError ModelTypeWorker::ProcessGetUpdatesResponse( 88 SyncerError ModelTypeWorker::ProcessGetUpdatesResponse(
95 const sync_pb::DataTypeProgressMarker& progress_marker, 89 const sync_pb::DataTypeProgressMarker& progress_marker,
96 const sync_pb::DataTypeContext& mutated_context, 90 const sync_pb::DataTypeContext& mutated_context,
97 const SyncEntityList& applicable_updates, 91 const SyncEntityList& applicable_updates,
98 syncer::StatusController* status) { 92 StatusController* status) {
99 DCHECK(thread_checker_.CalledOnValidThread()); 93 DCHECK(thread_checker_.CalledOnValidThread());
100 94
101 // TODO(rlarocque): Handle data type context conflicts. 95 // TODO(rlarocque): Handle data type context conflicts.
102 *data_type_state_.mutable_type_context() = mutated_context; 96 *data_type_state_.mutable_type_context() = mutated_context;
103 *data_type_state_.mutable_progress_marker() = progress_marker; 97 *data_type_state_.mutable_progress_marker() = progress_marker;
104 98
105 for (const sync_pb::SyncEntity* update_entity : applicable_updates) { 99 for (const sync_pb::SyncEntity* update_entity : applicable_updates) {
106 // Skip updates for permanent folders. 100 // Skip updates for permanent folders.
107 // TODO(crbug.com/516866): might need to handle this for hierarchical types. 101 // TODO(crbug.com/516866): might need to handle this for hierarchical types.
108 if (!update_entity->server_defined_unique_tag().empty()) 102 if (!update_entity->server_defined_unique_tag().empty())
109 continue; 103 continue;
110 104
111 // Normal updates are handled here. 105 // Normal updates are handled here.
112 const std::string& client_tag_hash = 106 const std::string& client_tag_hash =
113 update_entity->client_defined_unique_tag(); 107 update_entity->client_defined_unique_tag();
114 108
115 // TODO(crbug.com/516866): this wouldn't be true for bookmarks. 109 // TODO(crbug.com/516866): this wouldn't be true for bookmarks.
116 DCHECK(!client_tag_hash.empty()); 110 DCHECK(!client_tag_hash.empty());
117 111
118 // Prepare the message for the model thread. 112 // Prepare the message for the model thread.
119 EntityData data; 113 EntityData data;
120 data.id = update_entity->id_string(); 114 data.id = update_entity->id_string();
121 data.client_tag_hash = client_tag_hash; 115 data.client_tag_hash = client_tag_hash;
122 data.creation_time = syncer::ProtoTimeToTime(update_entity->ctime()); 116 data.creation_time = ProtoTimeToTime(update_entity->ctime());
123 data.modification_time = syncer::ProtoTimeToTime(update_entity->mtime()); 117 data.modification_time = ProtoTimeToTime(update_entity->mtime());
124 data.non_unique_name = update_entity->name(); 118 data.non_unique_name = update_entity->name();
125 119
126 UpdateResponseData response_data; 120 UpdateResponseData response_data;
127 response_data.response_version = update_entity->version(); 121 response_data.response_version = update_entity->version();
128 122
129 WorkerEntityTracker* entity = GetOrCreateEntityTracker(data); 123 WorkerEntityTracker* entity = GetOrCreateEntityTracker(data);
130 124
131 // Deleted entities must use the default instance of EntitySpecifics in 125 // Deleted entities must use the default instance of EntitySpecifics in
132 // order for EntityData to correctly reflect that they are deleted. 126 // order for EntityData to correctly reflect that they are deleted.
133 const sync_pb::EntitySpecifics& specifics = 127 const sync_pb::EntitySpecifics& specifics =
(...skipping 17 matching lines...) Expand all
151 pending_updates_.push_back(response_data); 145 pending_updates_.push_back(response_data);
152 } 146 }
153 } else { 147 } else {
154 // Can't decrypt right now. Ask the entity tracker to handle it. 148 // Can't decrypt right now. Ask the entity tracker to handle it.
155 data.specifics = specifics; 149 data.specifics = specifics;
156 response_data.entity = data.PassToPtr(); 150 response_data.entity = data.PassToPtr();
157 entity->ReceiveEncryptedUpdate(response_data); 151 entity->ReceiveEncryptedUpdate(response_data);
158 } 152 }
159 } 153 }
160 154
161 return syncer::SYNCER_OK; 155 return SYNCER_OK;
162 } 156 }
163 157
164 void ModelTypeWorker::ApplyUpdates(syncer::StatusController* status) { 158 void ModelTypeWorker::ApplyUpdates(StatusController* status) {
165 DCHECK(thread_checker_.CalledOnValidThread()); 159 DCHECK(thread_checker_.CalledOnValidThread());
166 // This should only ever be called after one PassiveApplyUpdates. 160 // This should only ever be called after one PassiveApplyUpdates.
167 DCHECK(data_type_state_.initial_sync_done()); 161 DCHECK(data_type_state_.initial_sync_done());
168 // Download cycle is done, pass all updates to the processor. 162 // Download cycle is done, pass all updates to the processor.
169 ApplyPendingUpdates(); 163 ApplyPendingUpdates();
170 } 164 }
171 165
172 void ModelTypeWorker::PassiveApplyUpdates(syncer::StatusController* status) { 166 void ModelTypeWorker::PassiveApplyUpdates(StatusController* status) {
173 DCHECK(thread_checker_.CalledOnValidThread()); 167 DCHECK(thread_checker_.CalledOnValidThread());
174 // This should only be called at the end of the very first download cycle. 168 // This should only be called at the end of the very first download cycle.
175 DCHECK(!data_type_state_.initial_sync_done()); 169 DCHECK(!data_type_state_.initial_sync_done());
176 // Indicate to the processor that the initial download is done. The initial 170 // Indicate to the processor that the initial download is done. The initial
177 // sync technically isn't done yet but by the time this value is persisted to 171 // sync technically isn't done yet but by the time this value is persisted to
178 // disk on the model thread it will be. 172 // disk on the model thread it will be.
179 data_type_state_.set_initial_sync_done(true); 173 data_type_state_.set_initial_sync_done(true);
180 ApplyPendingUpdates(); 174 ApplyPendingUpdates();
181 } 175 }
182 176
183 void ModelTypeWorker::ApplyPendingUpdates() { 177 void ModelTypeWorker::ApplyPendingUpdates() {
184 DVLOG(1) << ModelTypeToString(type_) << ": " 178 DVLOG(1) << ModelTypeToString(type_) << ": "
185 << base::StringPrintf("Delivering %" PRIuS " applicable updates.", 179 << base::StringPrintf("Delivering %" PRIuS " applicable updates.",
186 pending_updates_.size()); 180 pending_updates_.size());
187 model_type_processor_->OnUpdateReceived(data_type_state_, pending_updates_); 181 model_type_processor_->OnUpdateReceived(data_type_state_, pending_updates_);
188 pending_updates_.clear(); 182 pending_updates_.clear();
189 } 183 }
190 184
191 void ModelTypeWorker::EnqueueForCommit(const CommitRequestDataList& list) { 185 void ModelTypeWorker::EnqueueForCommit(const CommitRequestDataList& list) {
192 DCHECK(thread_checker_.CalledOnValidThread()); 186 DCHECK(thread_checker_.CalledOnValidThread());
193 DCHECK(IsTypeInitialized()) 187 DCHECK(IsTypeInitialized())
194 << "Asked to commit items before type was initialized. " 188 << "Asked to commit items before type was initialized. "
195 << "ModelType is: " << ModelTypeToString(type_); 189 << "ModelType is: " << ModelTypeToString(type_);
196 190
197 for (const CommitRequestData& commit : list) { 191 for (const CommitRequestData& commit : list) {
198 const EntityData& data = commit.entity.value(); 192 const EntityData& data = commit.entity.value();
199 if (!data.is_deleted()) { 193 if (!data.is_deleted()) {
200 DCHECK_EQ(type_, syncer::GetModelTypeFromSpecifics(data.specifics)); 194 DCHECK_EQ(type_, GetModelTypeFromSpecifics(data.specifics));
201 } 195 }
202 GetOrCreateEntityTracker(data)->RequestCommit(commit); 196 GetOrCreateEntityTracker(data)->RequestCommit(commit);
203 } 197 }
204 198
205 if (CanCommitItems()) 199 if (CanCommitItems())
206 nudge_handler_->NudgeForCommit(type_); 200 nudge_handler_->NudgeForCommit(type_);
207 } 201 }
208 202
209 // CommitContributor implementation. 203 // CommitContributor implementation.
210 std::unique_ptr<CommitContribution> ModelTypeWorker::GetContribution( 204 std::unique_ptr<CommitContribution> ModelTypeWorker::GetContribution(
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 entities_[data.client_tag_hash] = std::move(entity); 405 entities_[data.client_tag_hash] = std::move(entity);
412 return entity_ptr; 406 return entity_ptr;
413 } 407 }
414 408
415 WorkerEntityTracker* ModelTypeWorker::GetOrCreateEntityTracker( 409 WorkerEntityTracker* ModelTypeWorker::GetOrCreateEntityTracker(
416 const EntityData& data) { 410 const EntityData& data) {
417 WorkerEntityTracker* entity = GetEntityTracker(data.client_tag_hash); 411 WorkerEntityTracker* entity = GetEntityTracker(data.client_tag_hash);
418 return entity ? entity : CreateEntityTracker(data); 412 return entity ? entity : CreateEntityTracker(data);
419 } 413 }
420 414
421 } // namespace syncer_v2 415 } // namespace syncer
OLDNEW
« no previous file with comments | « components/sync/engine_impl/model_type_worker.h ('k') | components/sync/engine_impl/model_type_worker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698