xref: /aosp_15_r20/external/cronet/base/callback_list.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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 Worker CallbackListSubscription::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 Worker CallbackListSubscription::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 Worker CallbackListSubscription& 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 Worker CallbackListSubscription::~CallbackListSubscription() {
31*6777b538SAndroid Build Coastguard Worker   Run();
32*6777b538SAndroid Build Coastguard Worker }
33*6777b538SAndroid Build Coastguard Worker 
Run()34*6777b538SAndroid Build Coastguard Worker void 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