Index: components/sync/api/data_type_error_handler_impl.cc |
diff --git a/components/sync/api/data_type_error_handler_impl.cc b/components/sync/api/data_type_error_handler_impl.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0cfb1f327e640dfb5c81494a5f0a13e3b6b9e75c |
--- /dev/null |
+++ b/components/sync/api/data_type_error_handler_impl.cc |
@@ -0,0 +1,46 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "components/sync/api/data_type_error_handler_impl.h" |
+ |
+#include "base/bind.h" |
+#include "base/metrics/histogram.h" |
+ |
+namespace syncer { |
+ |
+DataTypeErrorHandlerImpl::DataTypeErrorHandlerImpl( |
+ const scoped_refptr<base::SingleThreadTaskRunner>& ui_thread, |
+ const base::Closure& dump_stack, |
+ const ErrorCallback& sync_callback) |
+ : ui_thread_(ui_thread), |
+ dump_stack_(dump_stack), |
+ sync_callback_(sync_callback) {} |
+ |
+DataTypeErrorHandlerImpl::~DataTypeErrorHandlerImpl() {} |
+ |
+void DataTypeErrorHandlerImpl::OnUnrecoverableError(const SyncError& error) { |
+ if (!dump_stack_.is_null()) |
+ dump_stack_.Run(); |
+ UMA_HISTOGRAM_ENUMERATION("Sync.DataTypeRunFailures", |
+ ModelTypeToHistogramInt(error.model_type()), |
+ syncer::MODEL_TYPE_COUNT); |
+ ui_thread_->PostTask(error.location(), base::Bind(sync_callback_, error)); |
+} |
+ |
+syncer::SyncError DataTypeErrorHandlerImpl::CreateAndUploadError( |
+ const tracked_objects::Location& location, |
+ const std::string& message, |
+ syncer::ModelType type) { |
+ if (!dump_stack_.is_null()) |
+ dump_stack_.Run(); |
+ return syncer::SyncError(location, syncer::SyncError::DATATYPE_ERROR, message, |
+ type); |
+} |
+ |
+std::unique_ptr<DataTypeErrorHandler> DataTypeErrorHandlerImpl::Copy() const { |
+ return base::MakeUnique<DataTypeErrorHandlerImpl>(ui_thread_, dump_stack_, |
+ sync_callback_); |
+} |
+ |
+} // namespace syncer |