1*6777b538SAndroid Build Coastguard Worker // Copyright 2020 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/callback_list.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include <utility> 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback.h" 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker namespace base { 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker CallbackListSubscription::CallbackListSubscription() = default; 14*6777b538SAndroid Build Coastguard Worker CallbackListSubscription(base::OnceClosure closure)15*6777b538SAndroid Build Coastguard WorkerCallbackListSubscription::CallbackListSubscription(base::OnceClosure closure) 16*6777b538SAndroid Build Coastguard Worker : closure_(std::move(closure)) {} 17*6777b538SAndroid Build Coastguard Worker CallbackListSubscription(CallbackListSubscription && subscription)18*6777b538SAndroid Build Coastguard WorkerCallbackListSubscription::CallbackListSubscription( 19*6777b538SAndroid Build Coastguard Worker CallbackListSubscription&& subscription) 20*6777b538SAndroid Build Coastguard Worker : closure_(std::move(subscription.closure_)) {} 21*6777b538SAndroid Build Coastguard Worker operator =(CallbackListSubscription && subscription)22*6777b538SAndroid Build Coastguard WorkerCallbackListSubscription& CallbackListSubscription::operator=( 23*6777b538SAndroid Build Coastguard Worker CallbackListSubscription&& subscription) { 24*6777b538SAndroid Build Coastguard Worker // Note: This still works properly for self-assignment. 25*6777b538SAndroid Build Coastguard Worker Run(); 26*6777b538SAndroid Build Coastguard Worker closure_ = std::move(subscription.closure_); 27*6777b538SAndroid Build Coastguard Worker return *this; 28*6777b538SAndroid Build Coastguard Worker } 29*6777b538SAndroid Build Coastguard Worker ~CallbackListSubscription()30*6777b538SAndroid Build Coastguard WorkerCallbackListSubscription::~CallbackListSubscription() { 31*6777b538SAndroid Build Coastguard Worker Run(); 32*6777b538SAndroid Build Coastguard Worker } 33*6777b538SAndroid Build Coastguard Worker Run()34*6777b538SAndroid Build Coastguard Workervoid CallbackListSubscription::Run() { 35*6777b538SAndroid Build Coastguard Worker if (closure_) 36*6777b538SAndroid Build Coastguard Worker std::move(closure_).Run(); 37*6777b538SAndroid Build Coastguard Worker } 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker } // namespace base 40