Index: sync/sessions/model_type_registry.cc |
diff --git a/sync/sessions/model_type_registry.cc b/sync/sessions/model_type_registry.cc |
deleted file mode 100644 |
index 08fbbad0a0f82453ea206245880eb12c1df7b096..0000000000000000000000000000000000000000 |
--- a/sync/sessions/model_type_registry.cc |
+++ /dev/null |
@@ -1,328 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "sync/sessions/model_type_registry.h" |
- |
-#include <stddef.h> |
- |
-#include <utility> |
- |
-#include "base/bind.h" |
-#include "base/memory/ptr_util.h" |
-#include "base/observer_list.h" |
-#include "base/threading/thread_task_runner_handle.h" |
-#include "sync/engine/commit_queue.h" |
-#include "sync/engine/directory_commit_contributor.h" |
-#include "sync/engine/directory_update_handler.h" |
-#include "sync/engine/model_type_worker.h" |
-#include "sync/internal_api/public/activation_context.h" |
-#include "sync/internal_api/public/model_type_processor.h" |
-#include "sync/sessions/directory_type_debug_info_emitter.h" |
-#include "sync/util/cryptographer.h" |
- |
-namespace syncer { |
- |
-namespace { |
- |
-class CommitQueueProxy : public syncer_v2::CommitQueue { |
- public: |
- CommitQueueProxy(const base::WeakPtr<syncer_v2::ModelTypeWorker>& worker, |
- const scoped_refptr<base::SequencedTaskRunner>& sync_thread); |
- ~CommitQueueProxy() override; |
- |
- void EnqueueForCommit(const syncer_v2::CommitRequestDataList& list) override; |
- |
- private: |
- base::WeakPtr<syncer_v2::ModelTypeWorker> worker_; |
- scoped_refptr<base::SequencedTaskRunner> sync_thread_; |
-}; |
- |
-CommitQueueProxy::CommitQueueProxy( |
- const base::WeakPtr<syncer_v2::ModelTypeWorker>& worker, |
- const scoped_refptr<base::SequencedTaskRunner>& sync_thread) |
- : worker_(worker), sync_thread_(sync_thread) {} |
- |
-CommitQueueProxy::~CommitQueueProxy() {} |
- |
-void CommitQueueProxy::EnqueueForCommit( |
- const syncer_v2::CommitRequestDataList& list) { |
- sync_thread_->PostTask( |
- FROM_HERE, |
- base::Bind(&syncer_v2::ModelTypeWorker::EnqueueForCommit, worker_, list)); |
-} |
- |
-} // namespace |
- |
-ModelTypeRegistry::ModelTypeRegistry( |
- const std::vector<scoped_refptr<ModelSafeWorker> >& workers, |
- syncable::Directory* directory, |
- NudgeHandler* nudge_handler) |
- : directory_(directory), |
- nudge_handler_(nudge_handler), |
- weak_ptr_factory_(this) { |
- for (size_t i = 0u; i < workers.size(); ++i) { |
- workers_map_.insert( |
- std::make_pair(workers[i]->GetModelSafeGroup(), workers[i])); |
- } |
-} |
- |
-ModelTypeRegistry::~ModelTypeRegistry() { |
-} |
- |
-void ModelTypeRegistry::SetEnabledDirectoryTypes( |
- const ModelSafeRoutingInfo& routing_info) { |
- // Remove all existing directory processors and delete them. The |
- // DebugInfoEmitters are not deleted here, since we want to preserve their |
- // counters. |
- for (ModelTypeSet::Iterator it = enabled_directory_types_.First(); |
- it.Good(); it.Inc()) { |
- size_t result1 = update_handler_map_.erase(it.Get()); |
- size_t result2 = commit_contributor_map_.erase(it.Get()); |
- DCHECK_EQ(1U, result1); |
- DCHECK_EQ(1U, result2); |
- } |
- |
- // Clear the old instances of directory update handlers and commit |
- // contributors, deleting their contents in the processs. |
- directory_update_handlers_.clear(); |
- directory_commit_contributors_.clear(); |
- |
- 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; |
- 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 = NULL; |
- 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"; |
- |
- 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); |
- } |
- |
- DCHECK(Intersection(GetEnabledDirectoryTypes(), |
- GetEnabledNonBlockingTypes()).Empty()); |
-} |
- |
-void ModelTypeRegistry::ConnectType( |
- ModelType type, |
- std::unique_ptr<syncer_v2::ActivationContext> activation_context) { |
- DVLOG(1) << "Enabling an off-thread sync type: " << ModelTypeToString(type); |
- |
- // Initialize Worker -> Processor communication channel. |
- syncer_v2::ModelTypeProcessor* type_processor = |
- activation_context->type_processor.get(); |
- |
- std::unique_ptr<Cryptographer> cryptographer_copy; |
- if (encrypted_types_.Has(type)) |
- cryptographer_copy.reset(new Cryptographer(*cryptographer_)); |
- |
- std::unique_ptr<syncer_v2::ModelTypeWorker> worker( |
- new syncer_v2::ModelTypeWorker( |
- type, activation_context->data_type_state, |
- std::move(cryptographer_copy), nudge_handler_, |
- std::move(activation_context->type_processor))); |
- |
- // Initialize Processor -> Worker communication channel. |
- std::unique_ptr<syncer_v2::CommitQueue> commit_queue_proxy( |
- new CommitQueueProxy(worker->AsWeakPtr(), |
- scoped_refptr<base::SequencedTaskRunner>( |
- base::ThreadTaskRunnerHandle::Get()))); |
- |
- type_processor->ConnectSync(std::move(commit_queue_proxy)); |
- |
- DCHECK(update_handler_map_.find(type) == update_handler_map_.end()); |
- DCHECK(commit_contributor_map_.find(type) == commit_contributor_map_.end()); |
- |
- update_handler_map_.insert(std::make_pair(type, worker.get())); |
- commit_contributor_map_.insert(std::make_pair(type, worker.get())); |
- |
- // The container takes ownership. |
- model_type_workers_.push_back(std::move(worker)); |
- |
- DCHECK(Intersection(GetEnabledDirectoryTypes(), |
- GetEnabledNonBlockingTypes()).Empty()); |
-} |
- |
-void ModelTypeRegistry::DisconnectType(ModelType type) { |
- DVLOG(1) << "Disabling an off-thread sync type: " << ModelTypeToString(type); |
- DCHECK(update_handler_map_.find(type) != update_handler_map_.end()); |
- DCHECK(commit_contributor_map_.find(type) != commit_contributor_map_.end()); |
- |
- size_t updaters_erased = update_handler_map_.erase(type); |
- size_t committers_erased = commit_contributor_map_.erase(type); |
- |
- DCHECK_EQ(1U, updaters_erased); |
- DCHECK_EQ(1U, committers_erased); |
- |
- // Remove from the ScopedVector, deleting the worker in the process. |
- for (ScopedVector<syncer_v2::ModelTypeWorker>::iterator it = |
- model_type_workers_.begin(); |
- it != model_type_workers_.end(); ++it) { |
- if ((*it)->GetModelType() == type) { |
- model_type_workers_.erase(it); |
- break; |
- } |
- } |
-} |
- |
-ModelTypeSet ModelTypeRegistry::GetEnabledTypes() const { |
- return Union(GetEnabledDirectoryTypes(), GetEnabledNonBlockingTypes()); |
-} |
- |
-ModelTypeSet ModelTypeRegistry::GetInitialSyncEndedTypes() const { |
- // TODO(pavely): GetInitialSyncEndedTypes is queried at the end of sync |
- // manager initialization when update handlers aren't set up yet. Returning |
- // correct set of types is important because otherwise data for al types will |
- // be redownloaded during configuration. For now let's return union of types |
- // reported by directory and types reported by update handlers. We need to |
- // refactor initialization and configuratrion flow to be able to only query |
- // this set from update handlers. |
- ModelTypeSet result = directory_->InitialSyncEndedTypes(); |
- for (const auto& kv : update_handler_map_) { |
- if (kv.second->IsInitialSyncEnded()) |
- result.Put(kv.first); |
- } |
- return result; |
-} |
- |
-UpdateHandlerMap* ModelTypeRegistry::update_handler_map() { |
- return &update_handler_map_; |
-} |
- |
-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( |
- syncer::TypeDebugInfoObserver* observer) { |
- if (!type_debug_info_observers_.HasObserver(observer)) |
- type_debug_info_observers_.AddObserver(observer); |
-} |
- |
-void ModelTypeRegistry::UnregisterDirectoryTypeDebugInfoObserver( |
- syncer::TypeDebugInfoObserver* observer) { |
- type_debug_info_observers_.RemoveObserver(observer); |
-} |
- |
-bool ModelTypeRegistry::HasDirectoryTypeDebugInfoObserver( |
- const syncer::TypeDebugInfoObserver* observer) const { |
- return type_debug_info_observers_.HasObserver(observer); |
-} |
- |
-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(); |
- } |
-} |
- |
-base::WeakPtr<syncer_v2::ModelTypeConnector> ModelTypeRegistry::AsWeakPtr() { |
- return weak_ptr_factory_.GetWeakPtr(); |
-} |
- |
-void ModelTypeRegistry::OnPassphraseRequired( |
- PassphraseRequiredReason reason, |
- const sync_pb::EncryptedData& pending_keys) { |
-} |
- |
-void ModelTypeRegistry::OnPassphraseAccepted() { |
-} |
- |
-void ModelTypeRegistry::OnBootstrapTokenUpdated( |
- const std::string& bootstrap_token, |
- BootstrapTokenType type) { |
-} |
- |
-void ModelTypeRegistry::OnEncryptedTypesChanged(ModelTypeSet encrypted_types, |
- bool encrypt_everything) { |
- encrypted_types_ = encrypted_types; |
- OnEncryptionStateChanged(); |
-} |
- |
-void ModelTypeRegistry::OnEncryptionComplete() { |
-} |
- |
-void ModelTypeRegistry::OnCryptographerStateChanged( |
- Cryptographer* cryptographer) { |
- cryptographer_.reset(new Cryptographer(*cryptographer)); |
- OnEncryptionStateChanged(); |
-} |
- |
-void ModelTypeRegistry::OnPassphraseTypeChanged(PassphraseType type, |
- base::Time passphrase_time) { |
-} |
- |
-void ModelTypeRegistry::OnLocalSetPassphraseEncryption( |
- const SyncEncryptionHandler::NigoriState& nigori_state) { |
-} |
- |
-ModelTypeSet ModelTypeRegistry::GetEnabledDirectoryTypes() const { |
- return enabled_directory_types_; |
-} |
- |
-void ModelTypeRegistry::OnEncryptionStateChanged() { |
- for (ScopedVector<syncer_v2::ModelTypeWorker>::iterator it = |
- model_type_workers_.begin(); |
- it != model_type_workers_.end(); ++it) { |
- if (encrypted_types_.Has((*it)->GetModelType())) { |
- (*it)->UpdateCryptographer( |
- base::WrapUnique(new Cryptographer(*cryptographer_))); |
- } |
- } |
-} |
- |
-ModelTypeSet ModelTypeRegistry::GetEnabledNonBlockingTypes() const { |
- ModelTypeSet enabled_non_blocking_types; |
- for (ScopedVector<syncer_v2::ModelTypeWorker>::const_iterator it = |
- model_type_workers_.begin(); |
- it != model_type_workers_.end(); ++it) { |
- enabled_non_blocking_types.Put((*it)->GetModelType()); |
- } |
- return enabled_non_blocking_types; |
-} |
- |
-} // namespace syncer |