Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(790)

Unified Diff: components/sync/driver/data_type_controller.h

Issue 2289143003: [Sync] Convert DTCs to be not RefCounted and NonThreadSafe. (Closed)
Patch Set: Rebase. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/sync/driver/change_processor_mock.cc ('k') | components/sync/driver/data_type_controller.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/sync/driver/data_type_controller.h
diff --git a/components/sync/driver/data_type_controller.h b/components/sync/driver/data_type_controller.h
index 3221d83b42c8c5e81728470b9d1f0e16b6ae21d4..437c87301064129c1cd83939f3b280d8dc2b3913 100644
--- a/components/sync/driver/data_type_controller.h
+++ b/components/sync/driver/data_type_controller.h
@@ -6,20 +6,16 @@
#define COMPONENTS_SYNC_DRIVER_DATA_TYPE_CONTROLLER_H__
#include <map>
+#include <memory>
#include <string>
#include "base/callback.h"
#include "base/location.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/ref_counted_delete_on_message_loop.h"
-#include "base/sequenced_task_runner_helpers.h"
+#include "base/memory/weak_ptr.h"
+#include "base/threading/thread_checker.h"
+#include "components/sync/api/data_type_error_handler.h"
#include "components/sync/base/model_type.h"
#include "components/sync/base/unrecoverable_error_handler.h"
-#include "components/sync/core/data_type_error_handler.h"
-
-namespace base {
-class SingleThreadTaskRunner;
-}
namespace syncer {
class SyncError;
@@ -29,11 +25,9 @@ class SyncMergeResult;
namespace sync_driver {
class BackendDataTypeConfigurer;
-// Data type controllers need to be refcounted threadsafe, as they may
-// need to run model associator or change processor on other threads.
-class DataTypeController
- : public base::RefCountedDeleteOnMessageLoop<DataTypeController>,
- public syncer::DataTypeErrorHandler {
+// DataTypeControllers are responsible for managing the state of a single data
+// type. They are not thread safe and should only be used on the UI thread.
+class DataTypeController : public base::SupportsWeakPtr<DataTypeController> {
public:
enum State {
NOT_RUNNING, // The controller has never been started or has previously
@@ -73,14 +67,14 @@ class DataTypeController
const syncer::SyncMergeResult&)>
StartCallback;
- typedef base::Callback<void(syncer::ModelType, syncer::SyncError)>
+ typedef base::Callback<void(syncer::ModelType, const syncer::SyncError&)>
ModelLoadCallback;
typedef base::Callback<void(const syncer::ModelType,
std::unique_ptr<base::ListValue>)>
AllNodesCallback;
- typedef std::map<syncer::ModelType, scoped_refptr<DataTypeController>>
+ typedef std::map<syncer::ModelType, std::unique_ptr<DataTypeController>>
TypeMap;
typedef std::map<syncer::ModelType, DataTypeController::State> StateMap;
@@ -91,6 +85,8 @@ class DataTypeController
// Returns true if the datatype started successfully.
static bool IsSuccessfulResult(ConfigureResult result);
+ virtual ~DataTypeController();
+
// Returns true if DataTypeManager should wait for LoadModels to complete
// successfully before starting configuration. Directory based types should
// return false while USS datatypes should return true.
@@ -134,21 +130,14 @@ class DataTypeController
// propagate from sync again from point where Stop() is called.
virtual void Stop() = 0;
- // Unique model type for this data type controller.
- virtual syncer::ModelType type() const = 0;
-
// Name of this data type. For logging purposes only.
virtual std::string name() const = 0;
// Current state of the data type controller.
virtual State state() const = 0;
- // Partial implementation of DataTypeErrorHandler.
- // This is thread safe.
- syncer::SyncError CreateAndUploadError(
- const tracked_objects::Location& location,
- const std::string& message,
- syncer::ModelType type) override;
+ // Unique model type for this data type controller.
+ syncer::ModelType type() const { return type_; }
// Whether the DataTypeController is ready to start. This is useful if the
// datatype itself must make the decision about whether it should be enabled
@@ -163,25 +152,24 @@ class DataTypeController
virtual void GetAllNodes(const AllNodesCallback& callback) = 0;
protected:
- friend class base::RefCountedDeleteOnMessageLoop<DataTypeController>;
- friend class base::DeleteHelper<DataTypeController>;
+ DataTypeController(syncer::ModelType type, const base::Closure& dump_stack);
- DataTypeController(
- const scoped_refptr<base::SingleThreadTaskRunner>& ui_thread,
- const base::Closure& error_callback);
+ // Create an error handler that reports back to this controller.
+ virtual std::unique_ptr<syncer::DataTypeErrorHandler>
+ CreateErrorHandler() = 0;
- ~DataTypeController() override;
+ // Allows subclasses to DCHECK that they're on the correct thread.
+ bool CalledOnValidThread() const;
- const scoped_refptr<base::SingleThreadTaskRunner>& ui_thread() const {
- return ui_thread_;
- }
-
- // The callback that will be invoked when an unrecoverable error occurs.
- // TODO(sync): protected for use by legacy controllers.
- base::Closure error_callback_;
+ // Callback to dump and upload a stack trace when an error occurs.
+ base::Closure dump_stack_;
private:
- const scoped_refptr<base::SingleThreadTaskRunner> ui_thread_;
+ // The type this object is responsible for controlling.
+ const syncer::ModelType type_;
+
+ // Used to check that functions are called on the correct thread.
+ base::ThreadChecker thread_checker_;
};
} // namespace sync_driver
« no previous file with comments | « components/sync/driver/change_processor_mock.cc ('k') | components/sync/driver/data_type_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698