Index: sync/api/model_type_service.cc |
diff --git a/sync/api/model_type_service.cc b/sync/api/model_type_service.cc |
index 87df14bf6011dc559b98e90082d0e2d29f1235d7..a8c7933d65c0cc5ba2baab20bb9a7a3d06013e2c 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 |