Index: components/sync_driver/ui_data_type_controller.cc |
diff --git a/components/sync_driver/ui_data_type_controller.cc b/components/sync_driver/ui_data_type_controller.cc |
index 23487a2edb8e415c81752e4409b55c95cfc80122..aa46d8ae60491d79f2617b9d7fcdbd8e666a1f83 100644 |
--- a/components/sync_driver/ui_data_type_controller.cc |
+++ b/components/sync_driver/ui_data_type_controller.cc |
@@ -52,8 +52,8 @@ UIDataTypeController::~UIDataTypeController() { |
void UIDataTypeController::LoadModels( |
const ModelLoadCallback& model_load_callback) { |
DCHECK(ui_thread_->BelongsToCurrentThread()); |
- DCHECK(!model_load_callback.is_null()); |
DCHECK(syncer::IsRealDataType(type_)); |
+ model_load_callback_ = model_load_callback; |
if (state_ != NOT_RUNNING) { |
model_load_callback.Run(type(), |
syncer::SyncError(FROM_HERE, |
@@ -67,7 +67,6 @@ void UIDataTypeController::LoadModels( |
DCHECK(!shared_change_processor_.get()); |
shared_change_processor_ = new SharedChangeProcessor(); |
- model_load_callback_ = model_load_callback; |
state_ = MODEL_STARTING; |
if (!StartModels()) { |
// If we are waiting for some external service to load before associating |
@@ -78,19 +77,15 @@ void UIDataTypeController::LoadModels( |
} |
state_ = MODEL_LOADED; |
- model_load_callback_.Reset(); |
- model_load_callback.Run(type(), syncer::SyncError()); |
+ model_load_callback_.Run(type(), syncer::SyncError()); |
} |
void UIDataTypeController::OnModelLoaded() { |
DCHECK(ui_thread_->BelongsToCurrentThread()); |
- DCHECK(!model_load_callback_.is_null()); |
DCHECK_EQ(state_, MODEL_STARTING); |
state_ = MODEL_LOADED; |
- ModelLoadCallback model_load_callback = model_load_callback_; |
- model_load_callback_.Reset(); |
- model_load_callback.Run(type(), syncer::SyncError()); |
+ model_load_callback_.Run(type(), syncer::SyncError()); |
} |
void UIDataTypeController::StartAssociating( |
@@ -227,13 +222,10 @@ void UIDataTypeController::AbortModelLoad() { |
shared_change_processor_ = NULL; |
} |
- ModelLoadCallback model_load_callback = model_load_callback_; |
- model_load_callback_.Reset(); |
- model_load_callback.Run(type(), |
- syncer::SyncError(FROM_HERE, |
- syncer::SyncError::DATATYPE_ERROR, |
- "Aborted", |
- type())); |
+ model_load_callback_.Run( |
+ type(), |
+ syncer::SyncError( |
+ FROM_HERE, syncer::SyncError::DATATYPE_ERROR, "Aborted", type())); |
// We don't want to continue loading models (e.g OnModelLoaded should never be |
// called after we've decided to abort). |
StopModels(); |
@@ -328,15 +320,9 @@ void UIDataTypeController::OnSingleDataTypeUnrecoverableError( |
// TODO(tim): We double-upload some errors. See bug 383480. |
if (!error_callback_.is_null()) |
error_callback_.Run(); |
- if (!start_callback_.is_null()) { |
- syncer::SyncMergeResult local_merge_result(type()); |
- local_merge_result.set_error(error); |
+ if (!model_load_callback_.is_null()) { |
base::MessageLoop::current()->PostTask( |
- FROM_HERE, |
- base::Bind(start_callback_, |
- RUNTIME_ERROR, |
- local_merge_result, |
- syncer::SyncMergeResult(type()))); |
+ FROM_HERE, base::Bind(model_load_callback_, type(), error)); |
} |
} |