Index: components/sync_driver/data_type_manager_impl.cc |
diff --git a/components/sync_driver/data_type_manager_impl.cc b/components/sync_driver/data_type_manager_impl.cc |
index 77545aa34359ae8e654ed705c80142306b16c8bf..936a745e5669b92ea343d8415a2e9575bca586fe 100644 |
--- a/components/sync_driver/data_type_manager_impl.cc |
+++ b/components/sync_driver/data_type_manager_impl.cc |
@@ -111,6 +111,25 @@ void DataTypeManagerImpl::Configure(syncer::ModelTypeSet desired_types, |
ConfigureImpl(filtered_desired_types, reason); |
} |
+void DataTypeManagerImpl::ReenableType(syncer::ModelType type) { |
+ // TODO(zea): move the "should we reconfigure" logic into the datatype handler |
+ // itself. |
+ // Only reconfigure if the type actually had a data type or unready error. |
+ if (!failed_data_types_handler_->ResetDataTypeErrorFor(type) && |
+ !failed_data_types_handler_->ResetUnreadyErrorFor(type)) { |
+ return; |
+ } |
+ |
+ // Only reconfigure if the type is actually desired. |
+ if (!last_requested_types_.Has(type)) |
+ return; |
+ |
+ DVLOG(1) << "Reenabling " << syncer::ModelTypeToString(type); |
+ needs_reconfigure_ = true; |
+ last_configure_reason_ = syncer::CONFIGURE_REASON_PROGRAMMATIC; |
+ ProcessReconfigure(); |
+} |
+ |
void DataTypeManagerImpl::PurgeForMigration( |
syncer::ModelTypeSet undesired_types, |
syncer::ConfigureReason reason) { |
@@ -419,6 +438,7 @@ void DataTypeManagerImpl::OnSingleDataTypeWillStop( |
// reconfigure. |
if (error.error_type() != syncer::SyncError::UNRECOVERABLE_ERROR) { |
needs_reconfigure_ = true; |
+ last_configure_reason_ = syncer::CONFIGURE_REASON_PROGRAMMATIC; |
ProcessReconfigure(); |
} else { |
DCHECK_EQ(state_, CONFIGURING); |