1 // Copyright (c) 2014 The Chromium Embedded Framework Authors. All rights
2 // reserved. Use of this source code is governed by a BSD-style license that
3 // can be found in the LICENSE file.
4
5 #include "include/wrapper/cef_closure_task.h"
6
7 #include <memory>
8
9 #include "include/base/cef_callback.h"
10
11 namespace {
12
13 class CefOnceClosureTask : public CefTask {
14 public:
CefOnceClosureTask(base::OnceClosure closure)15 explicit CefOnceClosureTask(base::OnceClosure closure)
16 : closure_(std::move(closure)) {}
17
18 CefOnceClosureTask(const CefOnceClosureTask&) = delete;
19 CefOnceClosureTask& operator=(const CefOnceClosureTask&) = delete;
20
21 // CefTask method
Execute()22 void Execute() override { std::move(closure_).Run(); }
23
24 private:
25 base::OnceClosure closure_;
26
27 IMPLEMENT_REFCOUNTING(CefOnceClosureTask);
28 };
29
30 class CefRepeatingClosureTask : public CefTask {
31 public:
CefRepeatingClosureTask(const base::RepeatingClosure & closure)32 explicit CefRepeatingClosureTask(const base::RepeatingClosure& closure)
33 : closure_(closure) {}
34
35 CefRepeatingClosureTask(const CefRepeatingClosureTask&) = delete;
36 CefRepeatingClosureTask& operator=(const CefRepeatingClosureTask&) = delete;
37
38 // CefTask method
Execute()39 void Execute() override {
40 closure_.Run();
41 closure_.Reset();
42 }
43
44 private:
45 base::RepeatingClosure closure_;
46
47 IMPLEMENT_REFCOUNTING(CefRepeatingClosureTask);
48 };
49
50 } // namespace
51
CefCreateClosureTask(base::OnceClosure closure)52 CefRefPtr<CefTask> CefCreateClosureTask(base::OnceClosure closure) {
53 return new CefOnceClosureTask(std::move(closure));
54 }
55
CefCreateClosureTask(const base::RepeatingClosure & closure)56 CefRefPtr<CefTask> CefCreateClosureTask(const base::RepeatingClosure& closure) {
57 return new CefRepeatingClosureTask(closure);
58 }
59
CefPostTask(CefThreadId threadId,base::OnceClosure closure)60 bool CefPostTask(CefThreadId threadId, base::OnceClosure closure) {
61 return CefPostTask(threadId, new CefOnceClosureTask(std::move(closure)));
62 }
63
CefPostTask(CefThreadId threadId,const base::RepeatingClosure & closure)64 bool CefPostTask(CefThreadId threadId, const base::RepeatingClosure& closure) {
65 return CefPostTask(threadId, new CefRepeatingClosureTask(closure));
66 }
67
CefPostDelayedTask(CefThreadId threadId,base::OnceClosure closure,int64 delay_ms)68 bool CefPostDelayedTask(CefThreadId threadId,
69 base::OnceClosure closure,
70 int64 delay_ms) {
71 return CefPostDelayedTask(
72 threadId, new CefOnceClosureTask(std::move(closure)), delay_ms);
73 }
74
CefPostDelayedTask(CefThreadId threadId,const base::RepeatingClosure & closure,int64 delay_ms)75 bool CefPostDelayedTask(CefThreadId threadId,
76 const base::RepeatingClosure& closure,
77 int64 delay_ms) {
78 return CefPostDelayedTask(threadId, new CefRepeatingClosureTask(closure),
79 delay_ms);
80 }
81