1*6777b538SAndroid Build Coastguard Worker // Copyright 2013 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback_helpers.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker namespace base { 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker ScopedClosureRunner::ScopedClosureRunner() = default; 10*6777b538SAndroid Build Coastguard Worker ScopedClosureRunner(OnceClosure closure)11*6777b538SAndroid Build Coastguard WorkerScopedClosureRunner::ScopedClosureRunner(OnceClosure closure) 12*6777b538SAndroid Build Coastguard Worker : closure_(std::move(closure)) {} 13*6777b538SAndroid Build Coastguard Worker ScopedClosureRunner(ScopedClosureRunner && other)14*6777b538SAndroid Build Coastguard WorkerScopedClosureRunner::ScopedClosureRunner(ScopedClosureRunner&& other) 15*6777b538SAndroid Build Coastguard Worker : closure_(other.Release()) {} 16*6777b538SAndroid Build Coastguard Worker operator =(ScopedClosureRunner && other)17*6777b538SAndroid Build Coastguard WorkerScopedClosureRunner& ScopedClosureRunner::operator=( 18*6777b538SAndroid Build Coastguard Worker ScopedClosureRunner&& other) { 19*6777b538SAndroid Build Coastguard Worker if (this != &other) { 20*6777b538SAndroid Build Coastguard Worker RunAndReset(); 21*6777b538SAndroid Build Coastguard Worker ReplaceClosure(other.Release()); 22*6777b538SAndroid Build Coastguard Worker } 23*6777b538SAndroid Build Coastguard Worker return *this; 24*6777b538SAndroid Build Coastguard Worker } 25*6777b538SAndroid Build Coastguard Worker ~ScopedClosureRunner()26*6777b538SAndroid Build Coastguard WorkerScopedClosureRunner::~ScopedClosureRunner() { 27*6777b538SAndroid Build Coastguard Worker RunAndReset(); 28*6777b538SAndroid Build Coastguard Worker } 29*6777b538SAndroid Build Coastguard Worker RunAndReset()30*6777b538SAndroid Build Coastguard Workervoid ScopedClosureRunner::RunAndReset() { 31*6777b538SAndroid Build Coastguard Worker if (closure_) 32*6777b538SAndroid Build Coastguard Worker std::move(closure_).Run(); 33*6777b538SAndroid Build Coastguard Worker } 34*6777b538SAndroid Build Coastguard Worker ReplaceClosure(OnceClosure closure)35*6777b538SAndroid Build Coastguard Workervoid ScopedClosureRunner::ReplaceClosure(OnceClosure closure) { 36*6777b538SAndroid Build Coastguard Worker closure_ = std::move(closure); 37*6777b538SAndroid Build Coastguard Worker } 38*6777b538SAndroid Build Coastguard Worker Release()39*6777b538SAndroid Build Coastguard WorkerOnceClosure ScopedClosureRunner::Release() { 40*6777b538SAndroid Build Coastguard Worker return std::move(closure_); 41*6777b538SAndroid Build Coastguard Worker } 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard Worker } // namespace base 44