summaryrefslogtreecommitdiff
path: root/base/sequenced_task_runner.h
diff options
context:
space:
mode:
Diffstat (limited to 'base/sequenced_task_runner.h')
-rw-r--r--base/sequenced_task_runner.h33
1 files changed, 21 insertions, 12 deletions
diff --git a/base/sequenced_task_runner.h b/base/sequenced_task_runner.h
index b29153927e..53d21ad166 100644
--- a/base/sequenced_task_runner.h
+++ b/base/sequenced_task_runner.h
@@ -5,6 +5,8 @@
#ifndef BASE_SEQUENCED_TASK_RUNNER_H_
#define BASE_SEQUENCED_TASK_RUNNER_H_
+#include <memory>
+
#include "base/base_export.h"
#include "base/callback.h"
#include "base/sequenced_task_runner_helpers.h"
@@ -109,43 +111,49 @@ class BASE_EXPORT SequencedTaskRunner : public TaskRunner {
// TODO(akalin): Get rid of the boolean return value for the methods
// below.
- bool PostNonNestableTask(const tracked_objects::Location& from_here,
- OnceClosure task);
+ bool PostNonNestableTask(const Location& from_here, OnceClosure task);
- virtual bool PostNonNestableDelayedTask(
- const tracked_objects::Location& from_here,
- OnceClosure task,
- base::TimeDelta delay) = 0;
+ virtual bool PostNonNestableDelayedTask(const Location& from_here,
+ OnceClosure task,
+ base::TimeDelta delay) = 0;
// Submits a non-nestable task to delete the given object. Returns
// true if the object may be deleted at some point in the future,
// and false if the object definitely will not be deleted.
template <class T>
- bool DeleteSoon(const tracked_objects::Location& from_here,
- const T* object) {
+ bool DeleteSoon(const Location& from_here, const T* object) {
return DeleteOrReleaseSoonInternal(from_here, &DeleteHelper<T>::DoDelete,
object);
}
+ template <class T>
+ bool DeleteSoon(const Location& from_here, std::unique_ptr<T> object) {
+ return DeleteSoon(from_here, object.release());
+ }
+
// Submits a non-nestable task to release the given object. Returns
// true if the object may be released at some point in the future,
// and false if the object definitely will not be released.
template <class T>
- bool ReleaseSoon(const tracked_objects::Location& from_here,
- const T* object) {
+ bool ReleaseSoon(const Location& from_here, const T* object) {
return DeleteOrReleaseSoonInternal(from_here, &ReleaseHelper<T>::DoRelease,
object);
}
protected:
- ~SequencedTaskRunner() override {}
+ ~SequencedTaskRunner() override = default;
private:
- bool DeleteOrReleaseSoonInternal(const tracked_objects::Location& from_here,
+ bool DeleteOrReleaseSoonInternal(const Location& from_here,
void (*deleter)(const void*),
const void* object);
};
+// Sample usage with std::unique_ptr :
+// std::unique_ptr<Foo, base::OnTaskRunnerDeleter> ptr(
+// new Foo, base::OnTaskRunnerDeleter(my_task_runner));
+//
+// For RefCounted see base::RefCountedDeleteOnSequence.
struct BASE_EXPORT OnTaskRunnerDeleter {
explicit OnTaskRunnerDeleter(scoped_refptr<SequencedTaskRunner> task_runner);
~OnTaskRunnerDeleter();
@@ -153,6 +161,7 @@ struct BASE_EXPORT OnTaskRunnerDeleter {
OnTaskRunnerDeleter(OnTaskRunnerDeleter&&);
OnTaskRunnerDeleter& operator=(OnTaskRunnerDeleter&&);
+ // For compatibility with std:: deleters.
template <typename T>
void operator()(const T* ptr) {
if (ptr)