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 "sync/sessions/model_type_registry.h" | 5 #include "sync/sessions/model_type_registry.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/observer_list.h" | 8 #include "base/observer_list.h" |
9 #include "base/thread_task_runner_handle.h" | 9 #include "base/thread_task_runner_handle.h" |
10 #include "sync/engine/directory_commit_contributor.h" | 10 #include "sync/engine/directory_commit_contributor.h" |
11 #include "sync/engine/directory_update_handler.h" | 11 #include "sync/engine/directory_update_handler.h" |
12 #include "sync/engine/model_type_sync_proxy.h" | 12 #include "sync/engine/model_type_sync_proxy.h" |
13 #include "sync/engine/model_type_sync_proxy_impl.h" | 13 #include "sync/engine/model_type_sync_proxy_impl.h" |
14 #include "sync/engine/model_type_sync_worker.h" | 14 #include "sync/engine/model_type_sync_worker.h" |
15 #include "sync/engine/model_type_sync_worker_impl.h" | 15 #include "sync/engine/model_type_sync_worker_impl.h" |
16 #include "sync/internal_api/public/non_blocking_sync_common.h" | 16 #include "sync/internal_api/public/non_blocking_sync_common.h" |
17 #include "sync/sessions/directory_type_debug_info_emitter.h" | 17 #include "sync/sessions/directory_type_debug_info_emitter.h" |
18 #include "sync/util/cryptographer.h" | |
19 | 18 |
20 namespace syncer { | 19 namespace syncer { |
21 | 20 |
22 namespace { | 21 namespace { |
23 | 22 |
24 class ModelTypeSyncProxyWrapper : public ModelTypeSyncProxy { | 23 class ModelTypeSyncProxyWrapper : public ModelTypeSyncProxy { |
25 public: | 24 public: |
26 ModelTypeSyncProxyWrapper( | 25 ModelTypeSyncProxyWrapper( |
27 const base::WeakPtr<ModelTypeSyncProxyImpl>& proxy, | 26 const base::WeakPtr<ModelTypeSyncProxyImpl>& proxy, |
28 const scoped_refptr<base::SequencedTaskRunner>& processor_task_runner); | 27 const scoped_refptr<base::SequencedTaskRunner>& processor_task_runner); |
29 virtual ~ModelTypeSyncProxyWrapper(); | 28 virtual ~ModelTypeSyncProxyWrapper(); |
30 | 29 |
31 virtual void OnCommitCompleted( | 30 virtual void OnCommitCompleted( |
32 const DataTypeState& type_state, | 31 const DataTypeState& type_state, |
33 const CommitResponseDataList& response_list) OVERRIDE; | 32 const CommitResponseDataList& response_list) OVERRIDE; |
34 virtual void OnUpdateReceived( | 33 virtual void OnUpdateReceived( |
35 const DataTypeState& type_state, | 34 const DataTypeState& type_state, |
36 const UpdateResponseDataList& response_list, | 35 const UpdateResponseDataList& response_list) OVERRIDE; |
37 const UpdateResponseDataList& pending_updates) OVERRIDE; | |
38 | 36 |
39 private: | 37 private: |
40 base::WeakPtr<ModelTypeSyncProxyImpl> processor_; | 38 base::WeakPtr<ModelTypeSyncProxyImpl> processor_; |
41 scoped_refptr<base::SequencedTaskRunner> processor_task_runner_; | 39 scoped_refptr<base::SequencedTaskRunner> processor_task_runner_; |
42 }; | 40 }; |
43 | 41 |
44 ModelTypeSyncProxyWrapper::ModelTypeSyncProxyWrapper( | 42 ModelTypeSyncProxyWrapper::ModelTypeSyncProxyWrapper( |
45 const base::WeakPtr<ModelTypeSyncProxyImpl>& proxy, | 43 const base::WeakPtr<ModelTypeSyncProxyImpl>& proxy, |
46 const scoped_refptr<base::SequencedTaskRunner>& processor_task_runner) | 44 const scoped_refptr<base::SequencedTaskRunner>& processor_task_runner) |
47 : processor_(proxy), processor_task_runner_(processor_task_runner) { | 45 : processor_(proxy), processor_task_runner_(processor_task_runner) { |
48 } | 46 } |
49 | 47 |
50 ModelTypeSyncProxyWrapper::~ModelTypeSyncProxyWrapper() { | 48 ModelTypeSyncProxyWrapper::~ModelTypeSyncProxyWrapper() { |
51 } | 49 } |
52 | 50 |
53 void ModelTypeSyncProxyWrapper::OnCommitCompleted( | 51 void ModelTypeSyncProxyWrapper::OnCommitCompleted( |
54 const DataTypeState& type_state, | 52 const DataTypeState& type_state, |
55 const CommitResponseDataList& response_list) { | 53 const CommitResponseDataList& response_list) { |
56 processor_task_runner_->PostTask( | 54 processor_task_runner_->PostTask( |
57 FROM_HERE, | 55 FROM_HERE, |
58 base::Bind(&ModelTypeSyncProxyImpl::OnCommitCompleted, | 56 base::Bind(&ModelTypeSyncProxyImpl::OnCommitCompleted, |
59 processor_, | 57 processor_, |
60 type_state, | 58 type_state, |
61 response_list)); | 59 response_list)); |
62 } | 60 } |
63 | 61 |
64 void ModelTypeSyncProxyWrapper::OnUpdateReceived( | 62 void ModelTypeSyncProxyWrapper::OnUpdateReceived( |
65 const DataTypeState& type_state, | 63 const DataTypeState& type_state, |
66 const UpdateResponseDataList& response_list, | 64 const UpdateResponseDataList& response_list) { |
67 const UpdateResponseDataList& pending_updates) { | |
68 processor_task_runner_->PostTask( | 65 processor_task_runner_->PostTask( |
69 FROM_HERE, | 66 FROM_HERE, |
70 base::Bind(&ModelTypeSyncProxyImpl::OnUpdateReceived, | 67 base::Bind(&ModelTypeSyncProxyImpl::OnUpdateReceived, |
71 processor_, | 68 processor_, |
72 type_state, | 69 type_state, |
73 response_list, | 70 response_list)); |
74 pending_updates)); | |
75 } | 71 } |
76 | 72 |
77 class ModelTypeSyncWorkerWrapper : public ModelTypeSyncWorker { | 73 class ModelTypeSyncWorkerWrapper : public ModelTypeSyncWorker { |
78 public: | 74 public: |
79 ModelTypeSyncWorkerWrapper( | 75 ModelTypeSyncWorkerWrapper( |
80 const base::WeakPtr<ModelTypeSyncWorkerImpl>& worker, | 76 const base::WeakPtr<ModelTypeSyncWorkerImpl>& worker, |
81 const scoped_refptr<base::SequencedTaskRunner>& sync_thread); | 77 const scoped_refptr<base::SequencedTaskRunner>& sync_thread); |
82 virtual ~ModelTypeSyncWorkerWrapper(); | 78 virtual ~ModelTypeSyncWorkerWrapper(); |
83 | 79 |
84 virtual void EnqueueForCommit(const CommitRequestDataList& list) OVERRIDE; | 80 virtual void EnqueueForCommit(const CommitRequestDataList& list) OVERRIDE; |
(...skipping 19 matching lines...) Expand all Loading... |
104 base::Bind(&ModelTypeSyncWorkerImpl::EnqueueForCommit, worker_, list)); | 100 base::Bind(&ModelTypeSyncWorkerImpl::EnqueueForCommit, worker_, list)); |
105 } | 101 } |
106 | 102 |
107 } // namespace | 103 } // namespace |
108 | 104 |
109 ModelTypeRegistry::ModelTypeRegistry( | 105 ModelTypeRegistry::ModelTypeRegistry( |
110 const std::vector<scoped_refptr<ModelSafeWorker> >& workers, | 106 const std::vector<scoped_refptr<ModelSafeWorker> >& workers, |
111 syncable::Directory* directory, | 107 syncable::Directory* directory, |
112 NudgeHandler* nudge_handler) | 108 NudgeHandler* nudge_handler) |
113 : directory_(directory), | 109 : directory_(directory), |
114 cryptographer_provider_(directory_), | |
115 nudge_handler_(nudge_handler), | 110 nudge_handler_(nudge_handler), |
116 weak_ptr_factory_(this) { | 111 weak_ptr_factory_(this) { |
117 for (size_t i = 0u; i < workers.size(); ++i) { | 112 for (size_t i = 0u; i < workers.size(); ++i) { |
118 workers_map_.insert( | 113 workers_map_.insert( |
119 std::make_pair(workers[i]->GetModelSafeGroup(), workers[i])); | 114 std::make_pair(workers[i]->GetModelSafeGroup(), workers[i])); |
120 } | 115 } |
121 } | 116 } |
122 | 117 |
123 ModelTypeRegistry::~ModelTypeRegistry() {} | 118 ModelTypeRegistry::~ModelTypeRegistry() {} |
124 | 119 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 } | 178 } |
184 | 179 |
185 enabled_directory_types_ = GetRoutingInfoTypes(routing_info); | 180 enabled_directory_types_ = GetRoutingInfoTypes(routing_info); |
186 DCHECK(Intersection(GetEnabledDirectoryTypes(), | 181 DCHECK(Intersection(GetEnabledDirectoryTypes(), |
187 GetEnabledNonBlockingTypes()).Empty()); | 182 GetEnabledNonBlockingTypes()).Empty()); |
188 } | 183 } |
189 | 184 |
190 void ModelTypeRegistry::ConnectSyncTypeToWorker( | 185 void ModelTypeRegistry::ConnectSyncTypeToWorker( |
191 ModelType type, | 186 ModelType type, |
192 const DataTypeState& data_type_state, | 187 const DataTypeState& data_type_state, |
193 const UpdateResponseDataList& saved_pending_updates, | |
194 const scoped_refptr<base::SequencedTaskRunner>& type_task_runner, | 188 const scoped_refptr<base::SequencedTaskRunner>& type_task_runner, |
195 const base::WeakPtr<ModelTypeSyncProxyImpl>& proxy_impl) { | 189 const base::WeakPtr<ModelTypeSyncProxyImpl>& proxy_impl) { |
196 DVLOG(1) << "Enabling an off-thread sync type: " << ModelTypeToString(type); | 190 DVLOG(1) << "Enabling an off-thread sync type: " << ModelTypeToString(type); |
197 | 191 |
198 // Initialize Worker -> Proxy communication channel. | 192 // Initialize Worker -> Proxy communication channel. |
199 scoped_ptr<ModelTypeSyncProxy> proxy( | 193 scoped_ptr<ModelTypeSyncProxy> proxy( |
200 new ModelTypeSyncProxyWrapper(proxy_impl, type_task_runner)); | 194 new ModelTypeSyncProxyWrapper(proxy_impl, type_task_runner)); |
201 scoped_ptr<ModelTypeSyncWorkerImpl> worker( | 195 scoped_ptr<ModelTypeSyncWorkerImpl> worker(new ModelTypeSyncWorkerImpl( |
202 new ModelTypeSyncWorkerImpl(type, | 196 type, data_type_state, nudge_handler_, proxy.Pass())); |
203 data_type_state, | |
204 saved_pending_updates, | |
205 &cryptographer_provider_, | |
206 nudge_handler_, | |
207 proxy.Pass())); | |
208 | 197 |
209 // Initialize Proxy -> Worker communication channel. | 198 // Initialize Proxy -> Worker communication channel. |
210 scoped_ptr<ModelTypeSyncWorker> wrapped_worker( | 199 scoped_ptr<ModelTypeSyncWorker> wrapped_worker( |
211 new ModelTypeSyncWorkerWrapper(worker->AsWeakPtr(), | 200 new ModelTypeSyncWorkerWrapper(worker->AsWeakPtr(), |
212 scoped_refptr<base::SequencedTaskRunner>( | 201 scoped_refptr<base::SequencedTaskRunner>( |
213 base::ThreadTaskRunnerHandle::Get()))); | 202 base::ThreadTaskRunnerHandle::Get()))); |
214 type_task_runner->PostTask(FROM_HERE, | 203 type_task_runner->PostTask(FROM_HERE, |
215 base::Bind(&ModelTypeSyncProxyImpl::OnConnect, | 204 base::Bind(&ModelTypeSyncProxyImpl::OnConnect, |
216 proxy_impl, | 205 proxy_impl, |
217 base::Passed(&wrapped_worker))); | 206 base::Passed(&wrapped_worker))); |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 for (ScopedVector<ModelTypeSyncWorkerImpl>::const_iterator it = | 297 for (ScopedVector<ModelTypeSyncWorkerImpl>::const_iterator it = |
309 model_type_sync_workers_.begin(); | 298 model_type_sync_workers_.begin(); |
310 it != model_type_sync_workers_.end(); | 299 it != model_type_sync_workers_.end(); |
311 ++it) { | 300 ++it) { |
312 enabled_off_thread_types.Put((*it)->GetModelType()); | 301 enabled_off_thread_types.Put((*it)->GetModelType()); |
313 } | 302 } |
314 return enabled_off_thread_types; | 303 return enabled_off_thread_types; |
315 } | 304 } |
316 | 305 |
317 } // namespace syncer | 306 } // namespace syncer |
OLD | NEW |