| 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
|
|
|