Index: components/sync/engine_impl/model_type_registry.cc |
diff --git a/components/sync/engine_impl/model_type_registry.cc b/components/sync/engine_impl/model_type_registry.cc |
index 22051cde62d70dd30cb8e65ec05df9e745243f6f..8ba9b565e0758926ba0bc6b34e432f8f3e3a3a32 100644 |
--- a/components/sync/engine_impl/model_type_registry.cc |
+++ b/components/sync/engine_impl/model_type_registry.cc |
@@ -88,47 +88,36 @@ void ModelTypeRegistry::SetEnabledDirectoryTypes( |
enabled_directory_types_.Clear(); |
// Create new ones and add them to the appropriate containers. |
- for (ModelSafeRoutingInfo::const_iterator routing_iter = routing_info.begin(); |
- routing_iter != routing_info.end(); ++routing_iter) { |
- ModelType type = routing_iter->first; |
- ModelSafeGroup group = routing_iter->second; |
+ for (const auto& routing_kv : routing_info) { |
+ ModelType type = routing_kv.first; |
+ ModelSafeGroup group = routing_kv.second; |
if (group == GROUP_NON_BLOCKING) |
continue; |
+ |
std::map<ModelSafeGroup, scoped_refptr<ModelSafeWorker>>::iterator |
worker_it = workers_map_.find(group); |
DCHECK(worker_it != workers_map_.end()); |
scoped_refptr<ModelSafeWorker> worker = worker_it->second; |
- // DebugInfoEmitters are never deleted. Use existing one if we have it. |
- DirectoryTypeDebugInfoEmitter* emitter = nullptr; |
- DirectoryTypeDebugInfoEmitterMap::iterator it = |
- directory_type_debug_info_emitter_map_.find(type); |
- if (it != directory_type_debug_info_emitter_map_.end()) { |
- emitter = it->second; |
- } else { |
- emitter = new DirectoryTypeDebugInfoEmitter(directory_, type, |
- &type_debug_info_observers_); |
- directory_type_debug_info_emitter_map_.insert( |
- std::make_pair(type, emitter)); |
- directory_type_debug_info_emitters_.push_back(emitter); |
- } |
- |
- DirectoryCommitContributor* committer = |
- new DirectoryCommitContributor(directory_, type, emitter); |
- DirectoryUpdateHandler* updater = |
- new DirectoryUpdateHandler(directory_, type, worker, emitter); |
- |
- // These containers take ownership of their contents. |
- directory_commit_contributors_.push_back(committer); |
- directory_update_handlers_.push_back(updater); |
- |
- bool inserted1 = |
- update_handler_map_.insert(std::make_pair(type, updater)).second; |
- DCHECK(inserted1) << "Attempt to override existing type handler in map"; |
+ DirectoryTypeDebugInfoEmitter* emitter = GetOrCreateEmitter(type); |
+ |
+ auto updater = base::MakeUnique<DirectoryUpdateHandler>(directory_, type, |
+ worker, emitter); |
+ bool updater_inserted = |
+ update_handler_map_.insert(std::make_pair(type, updater.get())).second; |
+ DCHECK(updater_inserted) |
+ << "Attempt to override existing type handler in map"; |
+ directory_update_handlers_.push_back(std::move(updater)); |
+ |
+ auto committer = |
+ base::MakeUnique<DirectoryCommitContributor>(directory_, type, emitter); |
+ bool committer_inserted = |
+ commit_contributor_map_.insert(std::make_pair(type, committer.get())) |
+ .second; |
+ DCHECK(committer_inserted) |
+ << "Attempt to override existing type handler in map"; |
+ directory_commit_contributors_.push_back(std::move(committer)); |
- bool inserted2 = |
- commit_contributor_map_.insert(std::make_pair(type, committer)).second; |
- DCHECK(inserted2) << "Attempt to override existing type handler in map"; |
enabled_directory_types_.Put(type); |
} |
@@ -148,14 +137,13 @@ void ModelTypeRegistry::ConnectType( |
if (encrypted_types_.Has(type)) |
cryptographer_copy = base::MakeUnique<Cryptographer>(*cryptographer_); |
- std::unique_ptr<ModelTypeWorker> worker(new ModelTypeWorker( |
+ auto worker = base::MakeUnique<ModelTypeWorker>( |
type, activation_context->model_type_state, std::move(cryptographer_copy), |
- nudge_handler_, std::move(activation_context->type_processor))); |
+ nudge_handler_, std::move(activation_context->type_processor)); |
// Initialize Processor -> Worker communication channel. |
- std::unique_ptr<CommitQueue> commit_queue_proxy(new CommitQueueProxy( |
- worker->AsWeakPtr(), scoped_refptr<base::SequencedTaskRunner>( |
- base::ThreadTaskRunnerHandle::Get()))); |
+ auto commit_queue_proxy = base::MakeUnique<CommitQueueProxy>( |
+ worker->AsWeakPtr(), base::ThreadTaskRunnerHandle::Get()); |
type_processor->ConnectSync(std::move(commit_queue_proxy)); |
@@ -183,14 +171,11 @@ void ModelTypeRegistry::DisconnectType(ModelType type) { |
DCHECK_EQ(1U, updaters_erased); |
DCHECK_EQ(1U, committers_erased); |
- // Remove from the ScopedVector, deleting the worker in the process. |
- for (ScopedVector<ModelTypeWorker>::iterator it = model_type_workers_.begin(); |
- it != model_type_workers_.end(); ++it) { |
- if ((*it)->GetModelType() == type) { |
- model_type_workers_.erase(it); |
- break; |
- } |
- } |
+ model_type_workers_.erase(std::remove_if( |
+ model_type_workers_.begin(), model_type_workers_.end(), |
+ [type](const std::unique_ptr<ModelTypeWorker>& worker) -> bool { |
+ return worker->GetModelType() == type; |
+ })); |
} |
ModelTypeSet ModelTypeRegistry::GetEnabledTypes() const { |
@@ -221,11 +206,6 @@ CommitContributorMap* ModelTypeRegistry::commit_contributor_map() { |
return &commit_contributor_map_; |
} |
-DirectoryTypeDebugInfoEmitterMap* |
-ModelTypeRegistry::directory_type_debug_info_emitter_map() { |
- return &directory_type_debug_info_emitter_map_; |
-} |
- |
void ModelTypeRegistry::RegisterDirectoryTypeDebugInfoObserver( |
TypeDebugInfoObserver* observer) { |
if (!type_debug_info_observers_.HasObserver(observer)) |
@@ -243,12 +223,10 @@ bool ModelTypeRegistry::HasDirectoryTypeDebugInfoObserver( |
} |
void ModelTypeRegistry::RequestEmitDebugInfo() { |
- for (DirectoryTypeDebugInfoEmitterMap::iterator it = |
- directory_type_debug_info_emitter_map_.begin(); |
- it != directory_type_debug_info_emitter_map_.end(); ++it) { |
- it->second->EmitCommitCountersUpdate(); |
- it->second->EmitUpdateCountersUpdate(); |
- it->second->EmitStatusCountersUpdate(); |
+ for (const auto& kv : directory_type_debug_info_emitter_map_) { |
+ kv.second->EmitCommitCountersUpdate(); |
+ kv.second->EmitUpdateCountersUpdate(); |
+ kv.second->EmitStatusCountersUpdate(); |
} |
} |
@@ -261,10 +239,9 @@ void ModelTypeRegistry::OnPassphraseRequired( |
const sync_pb::EncryptedData& pending_keys) {} |
void ModelTypeRegistry::OnPassphraseAccepted() { |
- for (ScopedVector<ModelTypeWorker>::iterator it = model_type_workers_.begin(); |
- it != model_type_workers_.end(); ++it) { |
- if (encrypted_types_.Has((*it)->GetModelType())) { |
- (*it)->EncryptionAcceptedApplyUpdates(); |
+ for (const auto& worker : model_type_workers_) { |
+ if (encrypted_types_.Has(worker->GetModelType())) { |
+ worker->EncryptionAcceptedApplyUpdates(); |
} |
} |
} |
@@ -298,26 +275,39 @@ void ModelTypeRegistry::OnPassphraseTypeChanged(PassphraseType type, |
void ModelTypeRegistry::OnLocalSetPassphraseEncryption( |
const SyncEncryptionHandler::NigoriState& nigori_state) {} |
-ModelTypeSet ModelTypeRegistry::GetEnabledDirectoryTypes() const { |
- return enabled_directory_types_; |
-} |
- |
void ModelTypeRegistry::OnEncryptionStateChanged() { |
- for (ScopedVector<ModelTypeWorker>::iterator it = model_type_workers_.begin(); |
- it != model_type_workers_.end(); ++it) { |
- if (encrypted_types_.Has((*it)->GetModelType())) { |
- (*it)->UpdateCryptographer( |
+ for (const auto& worker : model_type_workers_) { |
+ if (encrypted_types_.Has(worker->GetModelType())) { |
+ worker->UpdateCryptographer( |
base::MakeUnique<Cryptographer>(*cryptographer_)); |
} |
} |
} |
+DirectoryTypeDebugInfoEmitter* ModelTypeRegistry::GetOrCreateEmitter( |
+ ModelType type) { |
+ DirectoryTypeDebugInfoEmitter* raw_emitter = nullptr; |
+ auto it = directory_type_debug_info_emitter_map_.find(type); |
+ if (it != directory_type_debug_info_emitter_map_.end()) { |
+ raw_emitter = it->second.get(); |
+ } else { |
+ auto emitter = base::MakeUnique<DirectoryTypeDebugInfoEmitter>( |
+ directory_, type, &type_debug_info_observers_); |
+ raw_emitter = emitter.get(); |
+ directory_type_debug_info_emitter_map_.insert( |
+ std::make_pair(type, std::move(emitter))); |
+ } |
+ return raw_emitter; |
+} |
+ |
+ModelTypeSet ModelTypeRegistry::GetEnabledDirectoryTypes() const { |
+ return enabled_directory_types_; |
+} |
+ |
ModelTypeSet ModelTypeRegistry::GetEnabledNonBlockingTypes() const { |
ModelTypeSet enabled_non_blocking_types; |
- for (ScopedVector<ModelTypeWorker>::const_iterator it = |
- model_type_workers_.begin(); |
- it != model_type_workers_.end(); ++it) { |
- enabled_non_blocking_types.Put((*it)->GetModelType()); |
+ for (const auto& worker : model_type_workers_) { |
+ enabled_non_blocking_types.Put(worker->GetModelType()); |
} |
return enabled_non_blocking_types; |
} |