mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Add base::OnceClosure support in cef_closure_task.h (see issue #3140)
This commit is contained in:
@ -3,39 +3,74 @@
|
||||
// can be found in the LICENSE file.
|
||||
|
||||
#include "include/wrapper/cef_closure_task.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "include/base/cef_callback.h"
|
||||
|
||||
namespace {
|
||||
|
||||
class CefClosureTask : public CefTask {
|
||||
class CefOnceClosureTask : public CefTask {
|
||||
public:
|
||||
explicit CefClosureTask(const base::Closure& closure) : closure_(closure) {}
|
||||
explicit CefOnceClosureTask(base::OnceClosure closure)
|
||||
: closure_(std::move(closure)) {}
|
||||
|
||||
// CefTask method
|
||||
virtual void Execute() override {
|
||||
void Execute() override { std::move(closure_).Run(); }
|
||||
|
||||
private:
|
||||
base::OnceClosure closure_;
|
||||
|
||||
IMPLEMENT_REFCOUNTING(CefOnceClosureTask);
|
||||
DISALLOW_COPY_AND_ASSIGN(CefOnceClosureTask);
|
||||
};
|
||||
|
||||
class CefRepeatingClosureTask : public CefTask {
|
||||
public:
|
||||
explicit CefRepeatingClosureTask(const base::RepeatingClosure& closure)
|
||||
: closure_(closure) {}
|
||||
|
||||
// CefTask method
|
||||
void Execute() override {
|
||||
closure_.Run();
|
||||
closure_.Reset();
|
||||
}
|
||||
|
||||
private:
|
||||
base::Closure closure_;
|
||||
base::RepeatingClosure closure_;
|
||||
|
||||
IMPLEMENT_REFCOUNTING(CefClosureTask);
|
||||
DISALLOW_COPY_AND_ASSIGN(CefClosureTask);
|
||||
IMPLEMENT_REFCOUNTING(CefRepeatingClosureTask);
|
||||
DISALLOW_COPY_AND_ASSIGN(CefRepeatingClosureTask);
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
CefRefPtr<CefTask> CefCreateClosureTask(const base::Closure& closure) {
|
||||
return new CefClosureTask(closure);
|
||||
CefRefPtr<CefTask> CefCreateClosureTask(base::OnceClosure closure) {
|
||||
return new CefOnceClosureTask(std::move(closure));
|
||||
}
|
||||
|
||||
bool CefPostTask(CefThreadId threadId, const base::Closure& closure) {
|
||||
return CefPostTask(threadId, new CefClosureTask(closure));
|
||||
CefRefPtr<CefTask> CefCreateClosureTask(const base::RepeatingClosure& closure) {
|
||||
return new CefRepeatingClosureTask(closure);
|
||||
}
|
||||
|
||||
bool CefPostTask(CefThreadId threadId, base::OnceClosure closure) {
|
||||
return CefPostTask(threadId, new CefOnceClosureTask(std::move(closure)));
|
||||
}
|
||||
|
||||
bool CefPostTask(CefThreadId threadId, const base::RepeatingClosure& closure) {
|
||||
return CefPostTask(threadId, new CefRepeatingClosureTask(closure));
|
||||
}
|
||||
|
||||
bool CefPostDelayedTask(CefThreadId threadId,
|
||||
const base::Closure& closure,
|
||||
base::OnceClosure closure,
|
||||
int64 delay_ms) {
|
||||
return CefPostDelayedTask(threadId, new CefClosureTask(closure), delay_ms);
|
||||
return CefPostDelayedTask(
|
||||
threadId, new CefOnceClosureTask(std::move(closure)), delay_ms);
|
||||
}
|
||||
|
||||
bool CefPostDelayedTask(CefThreadId threadId,
|
||||
const base::RepeatingClosure& closure,
|
||||
int64 delay_ms) {
|
||||
return CefPostDelayedTask(threadId, new CefRepeatingClosureTask(closure),
|
||||
delay_ms);
|
||||
}
|
||||
|
Reference in New Issue
Block a user