| Index: chrome/browser/sync/glue/non_frontend_data_type_controller.cc
|
| diff --git a/chrome/browser/sync/glue/non_frontend_data_type_controller.cc b/chrome/browser/sync/glue/non_frontend_data_type_controller.cc
|
| index 5200f5d897d3add1f3a57108fdd3b22987a919f7..96d6843ea4c712dc0da50848c79dee9647f64d20 100644
|
| --- a/chrome/browser/sync/glue/non_frontend_data_type_controller.cc
|
| +++ b/chrome/browser/sync/glue/non_frontend_data_type_controller.cc
|
| @@ -6,6 +6,7 @@
|
|
|
| #include "base/logging.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/sync/api/sync_error.h"
|
| #include "chrome/browser/sync/glue/change_processor.h"
|
| #include "chrome/browser/sync/glue/model_associator.h"
|
| #include "chrome/browser/sync/profile_sync_factory.h"
|
| @@ -104,10 +105,11 @@ void NonFrontendDataTypeController::StartAssociation() {
|
| }
|
|
|
| base::TimeTicks start_time = base::TimeTicks::Now();
|
| - bool merge_success = model_associator_->AssociateModels();
|
| + SyncError error;
|
| + bool merge_success = model_associator_->AssociateModels(&error);
|
| RecordAssociationTime(base::TimeTicks::Now() - start_time);
|
| if (!merge_success) {
|
| - StartFailed(ASSOCIATION_FAILED, FROM_HERE);
|
| + StartFailed(ASSOCIATION_FAILED, error.location());
|
| return;
|
| }
|
|
|
| @@ -115,11 +117,13 @@ void NonFrontendDataTypeController::StartAssociation() {
|
| StartDone(!sync_has_nodes ? OK_FIRST_RUN : OK, RUNNING, FROM_HERE);
|
| }
|
|
|
| -void NonFrontendDataTypeController::StartFailed(StartResult result,
|
| +void NonFrontendDataTypeController::StartFailed(
|
| + StartResult result,
|
| const tracked_objects::Location& location) {
|
| DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| model_associator_.reset();
|
| change_processor_.reset();
|
| + // TODO(zea): Send the full SyncError on failure and handle it higher up.
|
| StartDone(result, NOT_RUNNING, location);
|
| }
|
|
|
| @@ -216,8 +220,10 @@ void NonFrontendDataTypeController::StopModels() {
|
|
|
| void NonFrontendDataTypeController::StopAssociation() {
|
| DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - if (model_associator_.get())
|
| - model_associator_->DisassociateModels();
|
| + if (model_associator_.get()) {
|
| + SyncError error;
|
| + model_associator_->DisassociateModels(&error);
|
| + }
|
| model_associator_.reset();
|
| change_processor_.reset();
|
| datatype_stopped_.Signal();
|
| @@ -237,7 +243,7 @@ void NonFrontendDataTypeController::OnUnrecoverableError(
|
| const std::string& message) {
|
| DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| RecordUnrecoverableError(from_here, message);
|
| - BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, NewRunnableMethod(this,
|
| + BrowserThread::PostTask(BrowserThread::UI, from_here, NewRunnableMethod(this,
|
| &NonFrontendDataTypeController::OnUnrecoverableErrorImpl, from_here,
|
| message));
|
| }
|
|
|