Index: chrome/browser/sync/glue/frontend_data_type_controller.cc |
diff --git a/chrome/browser/sync/glue/frontend_data_type_controller.cc b/chrome/browser/sync/glue/frontend_data_type_controller.cc |
index 9a22cb84fe966e389f81b91bc6f72577e0fd828e..6d997873011f481afcc0ca5f600e42864086f2aa 100644 |
--- a/chrome/browser/sync/glue/frontend_data_type_controller.cc |
+++ b/chrome/browser/sync/glue/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" |
@@ -92,10 +93,11 @@ bool FrontendDataTypeController::Associate() { |
} |
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 false; |
} |
@@ -105,7 +107,8 @@ bool FrontendDataTypeController::Associate() { |
return true; |
} |
-void FrontendDataTypeController::StartFailed(StartResult result, |
+void FrontendDataTypeController::StartFailed( |
+ StartResult result, |
const tracked_objects::Location& location) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
CleanUpState(); |
@@ -118,10 +121,12 @@ void FrontendDataTypeController::StartFailed(StartResult result, |
// invoking the callback will trigger a call to STOP(), which will get |
// confused by the non-NULL start_callback_. |
scoped_ptr<StartCallback> callback(start_callback_.release()); |
+ // TODO(zea): Send the full SyncError on failure and handle it higher up. |
callback->Run(result, location); |
} |
-void FrontendDataTypeController::FinishStart(StartResult result, |
+void FrontendDataTypeController::FinishStart( |
+ StartResult result, |
const tracked_objects::Location& location) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
@@ -149,8 +154,10 @@ void FrontendDataTypeController::Stop() { |
if (change_processor_.get()) |
sync_service_->DeactivateDataType(this, change_processor_.get()); |
- if (model_associator()) |
- model_associator()->DisassociateModels(); |
+ if (model_associator()) { |
+ SyncError error; |
+ model_associator()->DisassociateModels(&error); |
+ } |
set_model_associator(NULL); |
change_processor_.reset(); |