1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/callback_helpers.h" 6 7 #include "base/callback.h" 8 9 namespace base { 10 11 ScopedClosureRunner::ScopedClosureRunner() {} 12 13 ScopedClosureRunner::ScopedClosureRunner(const Closure& closure) 14 : closure_(closure) {} 15 16 ScopedClosureRunner::~ScopedClosureRunner() { 17 if (!closure_.is_null()) 18 closure_.Run(); 19 } 20 21 ScopedClosureRunner::ScopedClosureRunner(ScopedClosureRunner&& other) 22 : closure_(other.Release()) {} 23 24 ScopedClosureRunner& ScopedClosureRunner::operator=( 25 ScopedClosureRunner&& other) { 26 ReplaceClosure(other.Release()); 27 return *this; 28 } 29 30 void ScopedClosureRunner::RunAndReset() { 31 Closure old_closure = Release(); 32 if (!old_closure.is_null()) 33 old_closure.Run(); 34 } 35 36 void ScopedClosureRunner::ReplaceClosure(const Closure& closure) { 37 closure_ = closure; 38 } 39 40 Closure ScopedClosureRunner::Release() { 41 Closure result = closure_; 42 closure_.Reset(); 43 return result; 44 } 45 46 } // namespace base 47