Index: sync/sessions/model_type_registry.cc |
diff --git a/sync/sessions/model_type_registry.cc b/sync/sessions/model_type_registry.cc |
index 7ca68c74a41796fc1a073ad818d18a829f66f690..2816cd223bd8e84f1c75bad2bc9cece1e82a9f36 100644 |
--- a/sync/sessions/model_type_registry.cc |
+++ b/sync/sessions/model_type_registry.cc |
@@ -19,6 +19,57 @@ namespace syncer { |
namespace { |
+class NonBlockingTypeProcessorWrapper |
+ : public NonBlockingTypeProcessorInterface { |
+ public: |
+ NonBlockingTypeProcessorWrapper( |
+ base::WeakPtr<NonBlockingTypeProcessor> processor, |
+ scoped_refptr<base::SequencedTaskRunner> processor_task_runner); |
+ virtual ~NonBlockingTypeProcessorWrapper(); |
+ |
+ virtual void ReceiveCommitResponse( |
+ const DataTypeState& type_state, |
+ const CommitResponseDataList& response_list) OVERRIDE; |
+ virtual void ReceiveUpdateResponse( |
+ const DataTypeState& type_state, |
+ const UpdateResponseDataList& response_list) OVERRIDE; |
+ |
+ private: |
+ base::WeakPtr<NonBlockingTypeProcessor> processor_; |
+ scoped_refptr<base::SequencedTaskRunner> processor_task_runner_; |
+}; |
+ |
+NonBlockingTypeProcessorWrapper::NonBlockingTypeProcessorWrapper( |
+ base::WeakPtr<NonBlockingTypeProcessor> processor, |
+ scoped_refptr<base::SequencedTaskRunner> processor_task_runner) |
+ : processor_(processor), processor_task_runner_(processor_task_runner) { |
+} |
+ |
+NonBlockingTypeProcessorWrapper::~NonBlockingTypeProcessorWrapper() { |
+} |
+ |
+void NonBlockingTypeProcessorWrapper::ReceiveCommitResponse( |
+ const DataTypeState& type_state, |
+ const CommitResponseDataList& response_list) { |
+ processor_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&NonBlockingTypeProcessor::OnCommitCompletion, |
+ processor_, |
+ type_state, |
+ response_list)); |
+} |
+ |
+void NonBlockingTypeProcessorWrapper::ReceiveUpdateResponse( |
+ const DataTypeState& type_state, |
+ const UpdateResponseDataList& response_list) { |
+ processor_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&NonBlockingTypeProcessor::OnUpdateReceived, |
+ processor_, |
+ type_state, |
+ response_list)); |
+} |
+ |
class NonBlockingTypeProcessorCoreWrapper |
: public NonBlockingTypeProcessorCoreInterface { |
public: |
@@ -139,8 +190,11 @@ void ModelTypeRegistry::InitializeNonBlockingType( |
DVLOG(1) << "Enabling an off-thread sync type: " << ModelTypeToString(type); |
// Initialize CoreProcessor -> Processor communication channel. |
+ scoped_ptr<NonBlockingTypeProcessorInterface> processor_interface( |
+ new NonBlockingTypeProcessorWrapper(processor, type_task_runner)); |
scoped_ptr<NonBlockingTypeProcessorCore> core( |
- new NonBlockingTypeProcessorCore(type, type_task_runner, processor)); |
+ new NonBlockingTypeProcessorCore( |
+ type, data_type_state, processor_interface.Pass())); |
// TODO(rlarocque): DataTypeState should be forwarded to core here. |