Index: base/critical_closure_ios.mm |
diff --git a/base/critical_closure_ios.mm b/base/critical_closure_ios.mm |
index d605cad0a20a5baf076672f07dd4427f43222220..9e537dc37fb2fa365ee910fa78d4e5199ab940b6 100644 |
--- a/base/critical_closure_ios.mm |
+++ b/base/critical_closure_ios.mm |
@@ -8,29 +8,27 @@ |
#include "base/bind.h" |
#include "base/ios/scoped_critical_action.h" |
-#include "base/memory/ref_counted.h" |
namespace { |
// This class wraps a closure so it can continue to run for a period of time |
// when the application goes to the background by using |
// |base::ios::ScopedCriticalAction|. |
-class CriticalClosure : public base::RefCountedThreadSafe<CriticalClosure> { |
+template <typename R> |
+class CriticalClosure { |
public: |
- explicit CriticalClosure(base::Closure* closure) : closure_(closure) { |
- } |
+ explicit CriticalClosure(const base::Callback<R(void)>& closure) |
+ : closure_(closure) {} |
+ |
+ ~CriticalClosure() {} |
void Run() { |
- closure_->Run(); |
+ closure_.Run(); |
} |
private: |
- friend class base::RefCountedThreadSafe<CriticalClosure>; |
- |
- virtual ~CriticalClosure() {} |
- |
- base::ios::ScopedCriticalAction criticial_action_; |
- scoped_ptr<base::Closure> closure_; |
+ base::ios::ScopedCriticalAction critical_action_; |
+ base::Callback<R(void)> closure_; |
DISALLOW_COPY_AND_ASSIGN(CriticalClosure); |
}; |
@@ -39,11 +37,11 @@ class CriticalClosure : public base::RefCountedThreadSafe<CriticalClosure> { |
namespace base { |
-base::Closure MakeCriticalClosure(const base::Closure& closure) { |
+template <typename R> |
+Callback<R(void)> MakeCriticalClosure(const Callback<R(void)>& closure) { |
DCHECK([[UIDevice currentDevice] isMultitaskingSupported]); |
- scoped_refptr<CriticalClosure> critical_closure( |
- new CriticalClosure(new base::Closure(closure))); |
- return base::Bind(&CriticalClosure::Run, critical_closure.get()); |
+ return base::Bind(&CriticalClosure<R>::Run, |
+ Owned(new CriticalClosure<R>(closure))); |
} |
} // namespace base |