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