Index: components/sync/driver/model_type_controller.cc |
diff --git a/components/sync/driver/non_blocking_data_type_controller.cc b/components/sync/driver/model_type_controller.cc |
similarity index 71% |
rename from components/sync/driver/non_blocking_data_type_controller.cc |
rename to components/sync/driver/model_type_controller.cc |
index 5df0fc2e5158d9edc6489c7aab4b9bf53f5b94dc..731c7971061e4556af29b5ecf314c738fb8694ee 100644 |
--- a/components/sync/driver/non_blocking_data_type_controller.cc |
+++ b/components/sync/driver/model_type_controller.cc |
@@ -2,7 +2,7 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "components/sync/driver/non_blocking_data_type_controller.h" |
+#include "components/sync/driver/model_type_controller.h" |
#include <utility> |
@@ -25,24 +25,28 @@ |
namespace syncer { |
-NonBlockingDataTypeController::NonBlockingDataTypeController( |
+ModelTypeController::ModelTypeController( |
ModelType type, |
const base::Closure& dump_stack, |
- SyncClient* sync_client) |
+ SyncClient* sync_client, |
+ const scoped_refptr<base::SingleThreadTaskRunner>& model_thread) |
: DataTypeController(type, dump_stack), |
sync_client_(sync_client), |
+ model_thread_(model_thread), |
sync_prefs_(sync_client->GetPrefService()), |
- state_(NOT_RUNNING) {} |
+ state_(NOT_RUNNING) { |
+ DCHECK(model_thread_); |
+} |
-NonBlockingDataTypeController::~NonBlockingDataTypeController() {} |
+ModelTypeController::~ModelTypeController() {} |
-bool NonBlockingDataTypeController::ShouldLoadModelBeforeConfigure() const { |
+bool ModelTypeController::ShouldLoadModelBeforeConfigure() const { |
// USS datatypes require loading models because model controls storage where |
// data type context and progress marker are persisted. |
return true; |
} |
-void NonBlockingDataTypeController::LoadModels( |
+void ModelTypeController::LoadModels( |
const ModelLoadCallback& model_load_callback) { |
DCHECK(CalledOnValidThread()); |
DCHECK(!model_load_callback.is_null()); |
@@ -58,38 +62,32 @@ void NonBlockingDataTypeController::LoadModels( |
state_ = MODEL_STARTING; |
// Callback that posts back to the UI thread. |
- ModelTypeChangeProcessor::StartCallback callback = BindToCurrentThread( |
- base::Bind(&NonBlockingDataTypeController::OnProcessorStarted, |
- base::AsWeakPtr(this))); |
+ ModelTypeChangeProcessor::StartCallback callback = |
+ BindToCurrentThread(base::Bind(&ModelTypeController::OnProcessorStarted, |
+ base::AsWeakPtr(this))); |
// Start the type processor on the model thread. |
- if (!RunOnModelThread( |
- FROM_HERE, |
- base::Bind(&ModelTypeService::OnSyncStarting, |
- sync_client_->GetModelTypeServiceForType(type()), |
- base::Passed(CreateErrorHandler()), callback))) { |
- LoadModelsDone(UNRECOVERABLE_ERROR, |
- SyncError(FROM_HERE, SyncError::DATATYPE_ERROR, |
- "Failed to post model Start", type())); |
- } |
+ model_thread_->PostTask( |
+ FROM_HERE, base::Bind(&ModelTypeService::OnSyncStarting, |
+ sync_client_->GetModelTypeServiceForType(type()), |
+ base::Passed(CreateErrorHandler()), callback)); |
} |
-void NonBlockingDataTypeController::GetAllNodes( |
- const AllNodesCallback& callback) { |
+void ModelTypeController::GetAllNodes(const AllNodesCallback& callback) { |
base::WeakPtr<ModelTypeService> service = |
sync_client_->GetModelTypeServiceForType(type()); |
// TODO(gangwu): Casting should happen "near" where the processor factory has |
// code that instantiates a new processor. |
SharedModelTypeProcessor* processor = |
static_cast<SharedModelTypeProcessor*>(service->change_processor()); |
- RunOnModelThread(FROM_HERE, |
- base::Bind(&SharedModelTypeProcessor::GetAllNodes, |
- base::Unretained(processor), |
- base::ThreadTaskRunnerHandle::Get(), callback)); |
+ model_thread_->PostTask( |
+ FROM_HERE, base::Bind(&SharedModelTypeProcessor::GetAllNodes, |
+ base::Unretained(processor), |
+ base::ThreadTaskRunnerHandle::Get(), callback)); |
} |
-void NonBlockingDataTypeController::LoadModelsDone(ConfigureResult result, |
- const SyncError& error) { |
+void ModelTypeController::LoadModelsDone(ConfigureResult result, |
+ const SyncError& error) { |
DCHECK(CalledOnValidThread()); |
if (state_ == NOT_RUNNING) { |
@@ -111,7 +109,7 @@ void NonBlockingDataTypeController::LoadModelsDone(ConfigureResult result, |
} |
} |
-void NonBlockingDataTypeController::OnProcessorStarted( |
+void ModelTypeController::OnProcessorStarted( |
SyncError error, |
std::unique_ptr<ActivationContext> activation_context) { |
DCHECK(CalledOnValidThread()); |
@@ -124,7 +122,7 @@ void NonBlockingDataTypeController::OnProcessorStarted( |
LoadModelsDone(result, error); |
} |
-void NonBlockingDataTypeController::RegisterWithBackend( |
+void ModelTypeController::RegisterWithBackend( |
BackendDataTypeConfigurer* configurer) { |
DCHECK(CalledOnValidThread()); |
if (activated_) |
@@ -137,10 +135,11 @@ void NonBlockingDataTypeController::RegisterWithBackend( |
activated_ = true; |
} |
-void NonBlockingDataTypeController::StartAssociating( |
+void ModelTypeController::StartAssociating( |
const StartCallback& start_callback) { |
DCHECK(CalledOnValidThread()); |
DCHECK(!start_callback.is_null()); |
+ DCHECK_EQ(MODEL_LOADED, state_); |
state_ = RUNNING; |
@@ -149,7 +148,7 @@ void NonBlockingDataTypeController::StartAssociating( |
start_callback.Run(OK, merge_result, merge_result); |
} |
-void NonBlockingDataTypeController::ActivateDataType( |
+void ModelTypeController::ActivateDataType( |
BackendDataTypeConfigurer* configurer) { |
DCHECK(CalledOnValidThread()); |
DCHECK(configurer); |
@@ -160,7 +159,7 @@ void NonBlockingDataTypeController::ActivateDataType( |
DCHECK(!activation_context_); |
} |
-void NonBlockingDataTypeController::DeactivateDataType( |
+void ModelTypeController::DeactivateDataType( |
BackendDataTypeConfigurer* configurer) { |
DCHECK(CalledOnValidThread()); |
DCHECK(configurer); |
@@ -169,7 +168,7 @@ void NonBlockingDataTypeController::DeactivateDataType( |
activated_ = false; |
} |
-void NonBlockingDataTypeController::Stop() { |
+void ModelTypeController::Stop() { |
DCHECK(CalledOnValidThread()); |
if (state() == NOT_RUNNING) |
@@ -182,7 +181,7 @@ void NonBlockingDataTypeController::Stop() { |
sync_prefs_.GetPreferredDataTypes(ModelTypeSet(type())); |
if ((state() == MODEL_LOADED || state() == RUNNING) && |
(!sync_prefs_.IsFirstSetupComplete() || !preferred_types.Has(type()))) { |
- RunOnModelThread( |
+ model_thread_->PostTask( |
FROM_HERE, |
base::Bind(&ModelTypeService::DisableSync, |
sync_client_->GetModelTypeServiceForType(type()))); |
@@ -191,32 +190,30 @@ void NonBlockingDataTypeController::Stop() { |
state_ = NOT_RUNNING; |
} |
-std::string NonBlockingDataTypeController::name() const { |
+std::string ModelTypeController::name() const { |
// For logging only. |
return ModelTypeToString(type()); |
} |
-DataTypeController::State NonBlockingDataTypeController::state() const { |
+DataTypeController::State ModelTypeController::state() const { |
return state_; |
} |
std::unique_ptr<DataTypeErrorHandler> |
-NonBlockingDataTypeController::CreateErrorHandler() { |
+ModelTypeController::CreateErrorHandler() { |
DCHECK(CalledOnValidThread()); |
return base::MakeUnique<DataTypeErrorHandlerImpl>( |
base::ThreadTaskRunnerHandle::Get(), dump_stack_, |
- base::Bind(&NonBlockingDataTypeController::ReportLoadModelError, |
+ base::Bind(&ModelTypeController::ReportLoadModelError, |
base::AsWeakPtr(this))); |
} |
-void NonBlockingDataTypeController::ReportLoadModelError( |
- const SyncError& error) { |
+void ModelTypeController::ReportLoadModelError(const SyncError& error) { |
DCHECK(CalledOnValidThread()); |
LoadModelsDone(UNRECOVERABLE_ERROR, error); |
} |
-void NonBlockingDataTypeController::RecordStartFailure( |
- ConfigureResult result) const { |
+void ModelTypeController::RecordStartFailure(ConfigureResult result) const { |
DCHECK(CalledOnValidThread()); |
UMA_HISTOGRAM_ENUMERATION("Sync.DataTypeStartFailures", |
ModelTypeToHistogramInt(type()), MODEL_TYPE_COUNT); |