Index: components/sync/driver/non_ui_data_type_controller.cc |
diff --git a/components/sync/driver/non_ui_data_type_controller.cc b/components/sync/driver/non_ui_data_type_controller.cc |
index c20e9f5965d87572b4c026d3bb6753dc972b5246..0a9d2379141c88efd5ff53ec7d0f57df9081985b 100644 |
--- a/components/sync/driver/non_ui_data_type_controller.cc |
+++ b/components/sync/driver/non_ui_data_type_controller.cc |
@@ -115,37 +115,14 @@ void NonUIDataTypeController::Stop() { |
DisconnectSharedChangeProcessor(); |
// If we haven't finished starting, we need to abort the start. |
- switch (state()) { |
- case MODEL_STARTING: |
- state_ = STOPPING; |
- AbortModelLoad(); |
- return; // The datatype was never activated, we're done. |
- case ASSOCIATING: |
- state_ = STOPPING; |
- StopModels(); |
- // We continue on to deactivate the datatype and stop the local service. |
- break; |
- case MODEL_LOADED: |
- case DISABLED: |
- // If DTC is loaded or disabled, we never attempted or succeeded |
- // associating and never activated the datatype. We would have already |
- // stopped the local service in StartDone(..). |
- state_ = NOT_RUNNING; |
- StopModels(); |
- return; |
- default: |
- // Datatype was fully started. Need to deactivate and stop the local |
- // service. |
- DCHECK_EQ(state(), RUNNING); |
- state_ = STOPPING; |
- StopModels(); |
- break; |
- } |
+ bool service_started = state() == ASSOCIATING || state() == RUNNING; |
+ state_ = service_started ? STOPPING : NOT_RUNNING; |
+ StopModels(); |
- // Stop the local service and release our references to it and the |
- // shared change processor (posts a task to the datatype's thread). |
- StopServiceAndClearProcessor(); |
+ if (service_started) |
+ StopSyncableService(); |
+ shared_change_processor_ = nullptr; |
state_ = NOT_RUNNING; |
} |
@@ -193,7 +170,8 @@ void NonUIDataTypeController::StartDone( |
// ensure we clean up the local service and shared change processor properly. |
if (new_state != RUNNING && state() != NOT_RUNNING && state() != STOPPING) { |
DisconnectSharedChangeProcessor(); |
- StopServiceAndClearProcessor(); |
+ StopSyncableService(); |
+ shared_change_processor_ = nullptr; |
} |
// It's possible to have StartDone called first from the UI thread |
@@ -225,11 +203,6 @@ void NonUIDataTypeController::RecordStartFailure(ConfigureResult result) { |
#undef PER_DATA_TYPE_MACRO |
} |
-void NonUIDataTypeController::AbortModelLoad() { |
- state_ = NOT_RUNNING; |
- StopModels(); |
-} |
- |
void NonUIDataTypeController::DisableImpl(const syncer::SyncError& error) { |
DCHECK(ui_thread_->BelongsToCurrentThread()); |
UMA_HISTOGRAM_ENUMERATION("Sync.DataTypeRunFailures", |
@@ -267,13 +240,12 @@ void NonUIDataTypeController::DisconnectSharedChangeProcessor() { |
} |
} |
-void NonUIDataTypeController::StopServiceAndClearProcessor() { |
+void NonUIDataTypeController::StopSyncableService() { |
DCHECK(ui_thread_->BelongsToCurrentThread()); |
if (shared_change_processor_.get()) { |
PostTaskOnBackendThread(FROM_HERE, |
base::Bind(&SharedChangeProcessor::StopLocalService, |
shared_change_processor_)); |
- shared_change_processor_ = nullptr; |
} |
} |