Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: base/cancelable_callback.h

Issue 862133002: Update from https://crrev.com/312398 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // CancelableCallback is a wrapper around base::Callback that allows 5 // CancelableCallback is a wrapper around base::Callback that allows
6 // cancellation of a callback. CancelableCallback takes a reference on the 6 // cancellation of a callback. CancelableCallback takes a reference on the
7 // wrapped callback until this object is destroyed or Reset()/Cancel() are 7 // wrapped callback until this object is destroyed or Reset()/Cancel() are
8 // called. 8 // called.
9 // 9 //
10 // NOTE: 10 // NOTE:
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 template <typename Sig> 55 template <typename Sig>
56 class CancelableCallback; 56 class CancelableCallback;
57 57
58 template <typename... A> 58 template <typename... A>
59 class CancelableCallback<void(A...)> { 59 class CancelableCallback<void(A...)> {
60 public: 60 public:
61 CancelableCallback() : weak_factory_(this) {} 61 CancelableCallback() : weak_factory_(this) {}
62 62
63 // |callback| must not be null. 63 // |callback| must not be null.
64 explicit CancelableCallback(const base::Callback<void(A...)>& callback) 64 explicit CancelableCallback(const base::Callback<void(A...)>& callback)
65 : weak_factory_(this), 65 : callback_(callback), weak_factory_(this) {
66 callback_(callback) {
67 DCHECK(!callback.is_null()); 66 DCHECK(!callback.is_null());
68 InitializeForwarder(); 67 InitializeForwarder();
69 } 68 }
70 69
71 ~CancelableCallback() {} 70 ~CancelableCallback() {}
72 71
73 // Cancels and drops the reference to the wrapped callback. 72 // Cancels and drops the reference to the wrapped callback.
74 void Cancel() { 73 void Cancel() {
75 weak_factory_.InvalidateWeakPtrs(); 74 weak_factory_.InvalidateWeakPtrs();
76 forwarder_.Reset(); 75 forwarder_.Reset();
(...skipping 29 matching lines...) Expand all
106 callback_.Run(args...); 105 callback_.Run(args...);
107 } 106 }
108 107
109 // Helper method to bind |forwarder_| using a weak pointer from 108 // Helper method to bind |forwarder_| using a weak pointer from
110 // |weak_factory_|. 109 // |weak_factory_|.
111 void InitializeForwarder() { 110 void InitializeForwarder() {
112 forwarder_ = base::Bind(&CancelableCallback<void(A...)>::Forward, 111 forwarder_ = base::Bind(&CancelableCallback<void(A...)>::Forward,
113 weak_factory_.GetWeakPtr()); 112 weak_factory_.GetWeakPtr());
114 } 113 }
115 114
116 // Used to ensure Forward() is not run when this object is destroyed.
117 // TODO(ckehoe): This should be the last class member.
118 // Move it there when crbug.com/433583 is fixed.
119 base::WeakPtrFactory<CancelableCallback<void(A...)> > weak_factory_;
120
121 // The wrapper closure. 115 // The wrapper closure.
122 base::Callback<void(A...)> forwarder_; 116 base::Callback<void(A...)> forwarder_;
123 117
124 // The stored closure that may be cancelled. 118 // The stored closure that may be cancelled.
125 base::Callback<void(A...)> callback_; 119 base::Callback<void(A...)> callback_;
126 120
121 // Used to ensure Forward() is not run when this object is destroyed.
122 base::WeakPtrFactory<CancelableCallback<void(A...)>> weak_factory_;
123
127 DISALLOW_COPY_AND_ASSIGN(CancelableCallback); 124 DISALLOW_COPY_AND_ASSIGN(CancelableCallback);
128 }; 125 };
129 126
130 typedef CancelableCallback<void(void)> CancelableClosure; 127 typedef CancelableCallback<void(void)> CancelableClosure;
131 128
132 } // namespace base 129 } // namespace base
133 130
134 #endif // BASE_CANCELABLE_CALLBACK_H_ 131 #endif // BASE_CANCELABLE_CALLBACK_H_
OLDNEW
« no previous file with comments | « base/base.gypi ('k') | base/files/file_path.h » ('j') | shell/BUILD.gn » ('J')

Powered by Google App Engine
This is Rietveld 408576698