summaryrefslogtreecommitdiffstats
path: root/sync/api/model_type_service.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sync/api/model_type_service.cc')
-rw-r--r--sync/api/model_type_service.cc31
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