| Index: chrome/browser/sync/glue/data_type_manager_impl.cc
|
| diff --git a/chrome/browser/sync/glue/data_type_manager_impl.cc b/chrome/browser/sync/glue/data_type_manager_impl.cc
|
| index da0505c765eca4b8217ff45f605346514d19f923..f0b6534c7162850d3508d1687512815bc965cc96 100644
|
| --- a/chrome/browser/sync/glue/data_type_manager_impl.cc
|
| +++ b/chrome/browser/sync/glue/data_type_manager_impl.cc
|
| @@ -80,17 +80,16 @@ void DataTypeManagerImpl::ConfigureImpl(
|
| }
|
|
|
| last_requested_types_ = desired_types;
|
| + last_nigori_state_ = nigori_state;
|
| // Only proceed if we're in a steady state or blocked.
|
| if (state_ != STOPPED && state_ != CONFIGURED && state_ != BLOCKED) {
|
| DVLOG(1) << "Received configure request while configuration in flight. "
|
| << "Postponing until current configuration complete.";
|
| needs_reconfigure_ = true;
|
| last_configure_reason_ = reason;
|
| - last_nigori_state_ = nigori_state;
|
| return;
|
| }
|
|
|
| - model_association_manager_.Initialize(desired_types);
|
| Restart(reason, nigori_state);
|
| }
|
|
|
| @@ -98,6 +97,7 @@ void DataTypeManagerImpl::Restart(
|
| sync_api::ConfigureReason reason,
|
| BackendDataTypeConfigurer::NigoriState nigori_state) {
|
| DVLOG(1) << "Restarting...";
|
| + model_association_manager_.Initialize(last_requested_types_);
|
| last_restart_time_ = base::Time::Now();
|
|
|
| DCHECK(state_ == STOPPED || state_ == CONFIGURED || state_ == BLOCKED);
|
| @@ -210,10 +210,9 @@ void DataTypeManagerImpl::DownloadReady(
|
| void DataTypeManagerImpl::OnModelAssociationDone(
|
| const DataTypeManager::ConfigureResult& result) {
|
| if (result.status == ABORTED || result.status == UNRECOVERABLE_ERROR) {
|
| - Abort(result.status, result.errors.size() >= 1 ?
|
| - result.errors.front() :
|
| + Abort(result.status, result.failed_data_types.size() >= 1 ?
|
| + result.failed_data_types.front() :
|
| SyncError());
|
| -
|
| return;
|
| }
|
|
|
| @@ -223,8 +222,8 @@ void DataTypeManagerImpl::OnModelAssociationDone(
|
|
|
| if (result.status == CONFIGURE_BLOCKED) {
|
| failed_datatypes_info_.insert(failed_datatypes_info_.end(),
|
| - result.errors.begin(),
|
| - result.errors.end());
|
| + result.failed_data_types.begin(),
|
| + result.failed_data_types.end());
|
| SetBlockedAndNotify();
|
| return;
|
| }
|
| @@ -232,15 +231,27 @@ void DataTypeManagerImpl::OnModelAssociationDone(
|
| DCHECK(result.status == PARTIAL_SUCCESS || result.status == OK);
|
| state_ = CONFIGURED;
|
| failed_datatypes_info_.insert(failed_datatypes_info_.end(),
|
| - result.errors.begin(),
|
| - result.errors.end());
|
| + result.failed_data_types.begin(),
|
| + result.failed_data_types.end());
|
| ConfigureResult configure_result(result.status,
|
| result.requested_types,
|
| - failed_datatypes_info_);
|
| + failed_datatypes_info_,
|
| + result.waiting_to_start);
|
| NotifyDone(configure_result);
|
| failed_datatypes_info_.clear();
|
| }
|
|
|
| +void DataTypeManagerImpl::OnTypesLoaded() {
|
| + if (state_ != CONFIGURED) {
|
| + // Ignore this. either we just started another configuration or
|
| + // we are in some sort of error.
|
| + return;
|
| + }
|
| +
|
| + Restart(sync_api::CONFIGURE_REASON_RECONFIGURATION,
|
| + last_nigori_state_);
|
| +}
|
| +
|
|
|
| void DataTypeManagerImpl::Stop() {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| @@ -288,7 +299,8 @@ void DataTypeManagerImpl::Abort(ConfigureStatus status,
|
| error_list.push_back(error);
|
| ConfigureResult result(status,
|
| last_requested_types_,
|
| - error_list);
|
| + error_list,
|
| + syncable::ModelTypeSet());
|
| NotifyDone(result);
|
| }
|
|
|
|
|