diff options
Diffstat (limited to 'sync/api/model_type_service.cc')
-rw-r--r-- | sync/api/model_type_service.cc | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/sync/api/model_type_service.cc b/sync/api/model_type_service.cc index 87df14b..a8c7933 100644 --- a/sync/api/model_type_service.cc +++ b/sync/api/model_type_service.cc @@ -4,9 +4,14 @@ #include "sync/api/model_type_service.h" +#include "sync/api/model_type_change_processor.h" + namespace syncer_v2 { -ModelTypeService::ModelTypeService() {} +ModelTypeService::ModelTypeService( + const ChangeProcessorFactory& change_processor_factory, + syncer::ModelType type) + : change_processor_factory_(change_processor_factory), type_(type) {} ModelTypeService::~ModelTypeService() {} @@ -14,15 +19,29 @@ ModelTypeChangeProcessor* ModelTypeService::change_processor() const { return change_processor_.get(); } -void ModelTypeService::set_change_processor( - scoped_ptr<ModelTypeChangeProcessor> change_processor) { - DCHECK(!change_processor_); - change_processor_.swap(change_processor); - OnChangeProcessorSet(); +ModelTypeChangeProcessor* ModelTypeService::GetOrCreateChangeProcessor() { + if (!change_processor_) { + change_processor_ = change_processor_factory_.Run(type(), this); + DCHECK(change_processor_); + OnChangeProcessorSet(); + } + return change_processor_.get(); } void ModelTypeService::clear_change_processor() { change_processor_.reset(); } +ModelTypeChangeProcessor* ModelTypeService::OnSyncStarting( + const ModelTypeChangeProcessor::StartCallback& start_callback) { + ModelTypeChangeProcessor* processor = GetOrCreateChangeProcessor(); + DCHECK(processor); + processor->OnSyncStarting(start_callback); + return processor; +} + +syncer::ModelType ModelTypeService::type() const { + return type_; +} + } // namespace syncer_v2 |