• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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