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" |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 base::Bind(&ModelTypeSyncWorkerImpl::EnqueueForCommit, worker_, list)); | 104 base::Bind(&ModelTypeSyncWorkerImpl::EnqueueForCommit, worker_, list)); |
105 } | 105 } |
106 | 106 |
107 } // namespace | 107 } // namespace |
108 | 108 |
109 ModelTypeRegistry::ModelTypeRegistry( | 109 ModelTypeRegistry::ModelTypeRegistry( |
110 const std::vector<scoped_refptr<ModelSafeWorker> >& workers, | 110 const std::vector<scoped_refptr<ModelSafeWorker> >& workers, |
111 syncable::Directory* directory, | 111 syncable::Directory* directory, |
112 NudgeHandler* nudge_handler) | 112 NudgeHandler* nudge_handler) |
113 : directory_(directory), | 113 : directory_(directory), |
114 cryptographer_provider_(directory_), | |
115 nudge_handler_(nudge_handler), | 114 nudge_handler_(nudge_handler), |
116 weak_ptr_factory_(this) { | 115 weak_ptr_factory_(this) { |
117 for (size_t i = 0u; i < workers.size(); ++i) { | 116 for (size_t i = 0u; i < workers.size(); ++i) { |
118 workers_map_.insert( | 117 workers_map_.insert( |
119 std::make_pair(workers[i]->GetModelSafeGroup(), workers[i])); | 118 std::make_pair(workers[i]->GetModelSafeGroup(), workers[i])); |
120 } | 119 } |
121 } | 120 } |
122 | 121 |
123 ModelTypeRegistry::~ModelTypeRegistry() {} | 122 ModelTypeRegistry::~ModelTypeRegistry() { |
| 123 } |
124 | 124 |
125 void ModelTypeRegistry::SetEnabledDirectoryTypes( | 125 void ModelTypeRegistry::SetEnabledDirectoryTypes( |
126 const ModelSafeRoutingInfo& routing_info) { | 126 const ModelSafeRoutingInfo& routing_info) { |
127 // Remove all existing directory processors and delete them. The | 127 // Remove all existing directory processors and delete them. The |
128 // DebugInfoEmitters are not deleted here, since we want to preserve their | 128 // DebugInfoEmitters are not deleted here, since we want to preserve their |
129 // counters. | 129 // counters. |
130 for (ModelTypeSet::Iterator it = enabled_directory_types_.First(); | 130 for (ModelTypeSet::Iterator it = enabled_directory_types_.First(); |
131 it.Good(); it.Inc()) { | 131 it.Good(); it.Inc()) { |
132 size_t result1 = update_handler_map_.erase(it.Get()); | 132 size_t result1 = update_handler_map_.erase(it.Get()); |
133 size_t result2 = commit_contributor_map_.erase(it.Get()); | 133 size_t result2 = commit_contributor_map_.erase(it.Get()); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 ModelType type, | 191 ModelType type, |
192 const DataTypeState& data_type_state, | 192 const DataTypeState& data_type_state, |
193 const UpdateResponseDataList& saved_pending_updates, | 193 const UpdateResponseDataList& saved_pending_updates, |
194 const scoped_refptr<base::SequencedTaskRunner>& type_task_runner, | 194 const scoped_refptr<base::SequencedTaskRunner>& type_task_runner, |
195 const base::WeakPtr<ModelTypeSyncProxyImpl>& proxy_impl) { | 195 const base::WeakPtr<ModelTypeSyncProxyImpl>& proxy_impl) { |
196 DVLOG(1) << "Enabling an off-thread sync type: " << ModelTypeToString(type); | 196 DVLOG(1) << "Enabling an off-thread sync type: " << ModelTypeToString(type); |
197 | 197 |
198 // Initialize Worker -> Proxy communication channel. | 198 // Initialize Worker -> Proxy communication channel. |
199 scoped_ptr<ModelTypeSyncProxy> proxy( | 199 scoped_ptr<ModelTypeSyncProxy> proxy( |
200 new ModelTypeSyncProxyWrapper(proxy_impl, type_task_runner)); | 200 new ModelTypeSyncProxyWrapper(proxy_impl, type_task_runner)); |
| 201 scoped_ptr<Cryptographer> cryptographer_copy; |
| 202 if (encrypted_types_.Has(type)) |
| 203 cryptographer_copy.reset(new Cryptographer(*cryptographer_)); |
| 204 |
201 scoped_ptr<ModelTypeSyncWorkerImpl> worker( | 205 scoped_ptr<ModelTypeSyncWorkerImpl> worker( |
202 new ModelTypeSyncWorkerImpl(type, | 206 new ModelTypeSyncWorkerImpl(type, |
203 data_type_state, | 207 data_type_state, |
204 saved_pending_updates, | 208 saved_pending_updates, |
205 &cryptographer_provider_, | 209 cryptographer_copy.Pass(), |
206 nudge_handler_, | 210 nudge_handler_, |
207 proxy.Pass())); | 211 proxy.Pass())); |
208 | 212 |
209 // Initialize Proxy -> Worker communication channel. | 213 // Initialize Proxy -> Worker communication channel. |
210 scoped_ptr<ModelTypeSyncWorker> wrapped_worker( | 214 scoped_ptr<ModelTypeSyncWorker> wrapped_worker( |
211 new ModelTypeSyncWorkerWrapper(worker->AsWeakPtr(), | 215 new ModelTypeSyncWorkerWrapper(worker->AsWeakPtr(), |
212 scoped_refptr<base::SequencedTaskRunner>( | 216 scoped_refptr<base::SequencedTaskRunner>( |
213 base::ThreadTaskRunnerHandle::Get()))); | 217 base::ThreadTaskRunnerHandle::Get()))); |
214 type_task_runner->PostTask(FROM_HERE, | 218 type_task_runner->PostTask(FROM_HERE, |
215 base::Bind(&ModelTypeSyncProxyImpl::OnConnect, | 219 base::Bind(&ModelTypeSyncProxyImpl::OnConnect, |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
292 it->second->EmitCommitCountersUpdate(); | 296 it->second->EmitCommitCountersUpdate(); |
293 it->second->EmitUpdateCountersUpdate(); | 297 it->second->EmitUpdateCountersUpdate(); |
294 it->second->EmitStatusCountersUpdate(); | 298 it->second->EmitStatusCountersUpdate(); |
295 } | 299 } |
296 } | 300 } |
297 | 301 |
298 base::WeakPtr<SyncContext> ModelTypeRegistry::AsWeakPtr() { | 302 base::WeakPtr<SyncContext> ModelTypeRegistry::AsWeakPtr() { |
299 return weak_ptr_factory_.GetWeakPtr(); | 303 return weak_ptr_factory_.GetWeakPtr(); |
300 } | 304 } |
301 | 305 |
| 306 void ModelTypeRegistry::OnPassphraseRequired( |
| 307 PassphraseRequiredReason reason, |
| 308 const sync_pb::EncryptedData& pending_keys) { |
| 309 } |
| 310 |
| 311 void ModelTypeRegistry::OnPassphraseAccepted() { |
| 312 } |
| 313 |
| 314 void ModelTypeRegistry::OnBootstrapTokenUpdated( |
| 315 const std::string& bootstrap_token, |
| 316 BootstrapTokenType type) { |
| 317 } |
| 318 |
| 319 void ModelTypeRegistry::OnEncryptedTypesChanged(ModelTypeSet encrypted_types, |
| 320 bool encrypt_everything) { |
| 321 encrypted_types_ = encrypted_types; |
| 322 OnEncryptionStateChanged(); |
| 323 } |
| 324 |
| 325 void ModelTypeRegistry::OnEncryptionComplete() { |
| 326 } |
| 327 |
| 328 void ModelTypeRegistry::OnCryptographerStateChanged( |
| 329 Cryptographer* cryptographer) { |
| 330 cryptographer_.reset(new Cryptographer(*cryptographer)); |
| 331 OnEncryptionStateChanged(); |
| 332 } |
| 333 |
| 334 void ModelTypeRegistry::OnPassphraseTypeChanged(PassphraseType type, |
| 335 base::Time passphrase_time) { |
| 336 } |
| 337 |
302 ModelTypeSet ModelTypeRegistry::GetEnabledDirectoryTypes() const { | 338 ModelTypeSet ModelTypeRegistry::GetEnabledDirectoryTypes() const { |
303 return enabled_directory_types_; | 339 return enabled_directory_types_; |
304 } | 340 } |
305 | 341 |
| 342 void ModelTypeRegistry::OnEncryptionStateChanged() { |
| 343 for (ScopedVector<ModelTypeSyncWorkerImpl>::iterator it = |
| 344 model_type_sync_workers_.begin(); |
| 345 it != model_type_sync_workers_.end(); |
| 346 ++it) { |
| 347 if (encrypted_types_.Has((*it)->GetModelType())) { |
| 348 (*it)->UpdateCryptographer( |
| 349 make_scoped_ptr(new Cryptographer(*cryptographer_))); |
| 350 } |
| 351 } |
| 352 } |
| 353 |
306 ModelTypeSet ModelTypeRegistry::GetEnabledNonBlockingTypes() const { | 354 ModelTypeSet ModelTypeRegistry::GetEnabledNonBlockingTypes() const { |
307 ModelTypeSet enabled_off_thread_types; | 355 ModelTypeSet enabled_off_thread_types; |
308 for (ScopedVector<ModelTypeSyncWorkerImpl>::const_iterator it = | 356 for (ScopedVector<ModelTypeSyncWorkerImpl>::const_iterator it = |
309 model_type_sync_workers_.begin(); | 357 model_type_sync_workers_.begin(); |
310 it != model_type_sync_workers_.end(); | 358 it != model_type_sync_workers_.end(); |
311 ++it) { | 359 ++it) { |
312 enabled_off_thread_types.Put((*it)->GetModelType()); | 360 enabled_off_thread_types.Put((*it)->GetModelType()); |
313 } | 361 } |
314 return enabled_off_thread_types; | 362 return enabled_off_thread_types; |
315 } | 363 } |
316 | 364 |
317 } // namespace syncer | 365 } // namespace syncer |
OLD | NEW |