Index: base/critical_closure_ios.mm |
diff --git a/base/critical_closure_ios.mm b/base/critical_closure_ios.mm |
index d605cad0a20a5baf076672f07dd4427f43222220..9550f6bebd4f67e0a56d1f6bf2423c06a7341847 100644 |
--- a/base/critical_closure_ios.mm |
+++ b/base/critical_closure_ios.mm |
@@ -15,9 +15,10 @@ 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|. |
+template <typename CallbackType> |
class CriticalClosure : public base::RefCountedThreadSafe<CriticalClosure> { |
public: |
- explicit CriticalClosure(base::Closure* closure) : closure_(closure) { |
+ explicit CriticalClosure(CallbackType* closure) : closure_(closure) { |
} |
void Run() { |
Bernhard Bauer
2014/04/30 09:31:05
Hm, this class only implements an argumentless Run
gab
2014/04/30 14:32:53
Ah good point, I actually made the template more s
|
@@ -30,7 +31,7 @@ class CriticalClosure : public base::RefCountedThreadSafe<CriticalClosure> { |
virtual ~CriticalClosure() {} |
base::ios::ScopedCriticalAction criticial_action_; |
Bernhard Bauer
2014/04/30 09:31:05
If you want to clean this up a bit, it should be n
gab
2014/04/30 14:32:53
Done.
|
- scoped_ptr<base::Closure> closure_; |
+ scoped_ptr<CallbackType> closure_; |
Bernhard Bauer
2014/04/30 09:31:05
Oh, and this could probably also directly own the
gab
2014/04/30 14:32:53
Done, and also removed refcounting (whose only pur
|
DISALLOW_COPY_AND_ASSIGN(CriticalClosure); |
}; |
@@ -39,10 +40,11 @@ class CriticalClosure : public base::RefCountedThreadSafe<CriticalClosure> { |
namespace base { |
-base::Closure MakeCriticalClosure(const base::Closure& closure) { |
+template <typename CallbackType> |
+CallbackType MakeCriticalClosure(const CallbackType& closure) { |
DCHECK([[UIDevice currentDevice] isMultitaskingSupported]); |
scoped_refptr<CriticalClosure> critical_closure( |
- new CriticalClosure(new base::Closure(closure))); |
+ new CriticalClosure(new CallbackType(closure))); |
return base::Bind(&CriticalClosure::Run, critical_closure.get()); |
} |