blob: 4eae2cacdfdc707af05b60b963a4f66b6ac038bc [file] [log] [blame]
Avi Drissmane4622aa2022-09-08 20:36:061// Copyright 2020 The Chromium Authors
Peter Kasting7ba9440c2020-11-22 01:49:022// 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_list.h"
6
7#include <utility>
8
Avi Drissman63e1f992023-01-13 18:54:439#include "base/functional/callback.h"
Peter Kasting7ba9440c2020-11-22 01:49:0210
11namespace base {
12
13CallbackListSubscription::CallbackListSubscription() = default;
14
15CallbackListSubscription::CallbackListSubscription(base::OnceClosure closure)
16 : closure_(std::move(closure)) {}
17
18CallbackListSubscription::CallbackListSubscription(
19 CallbackListSubscription&& subscription)
20 : closure_(std::move(subscription.closure_)) {}
21
22CallbackListSubscription& CallbackListSubscription::operator=(
23 CallbackListSubscription&& subscription) {
24 // Note: This still works properly for self-assignment.
25 Run();
26 closure_ = std::move(subscription.closure_);
27 return *this;
28}
29
30CallbackListSubscription::~CallbackListSubscription() {
31 Run();
32}
33
34void CallbackListSubscription::Run() {
Peter Kasting134ef9af2024-12-28 02:30:0935 if (closure_) {
Peter Kasting7ba9440c2020-11-22 01:49:0236 std::move(closure_).Run();
Peter Kasting134ef9af2024-12-28 02:30:0937 }
Peter Kasting7ba9440c2020-11-22 01:49:0238}
39
40} // namespace base