summaryrefslogtreecommitdiffstats
path: root/chromium/base/bind_internal.h
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2022-02-02 12:21:57 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2022-02-12 08:13:00 +0000
commit606d85f2a5386472314d39923da28c70c60dc8e7 (patch)
treea8f4d7bf997f349f45605e6058259fba0630e4d7 /chromium/base/bind_internal.h
parent5786336dda477d04fb98483dca1a5426eebde2d7 (diff)
BASELINE: Update Chromium to 96.0.4664.181
Change-Id: I762cd1da89d73aa6313b4a753fe126c34833f046 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/base/bind_internal.h')
-rw-r--r--chromium/base/bind_internal.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/chromium/base/bind_internal.h b/chromium/base/bind_internal.h
index a7aba35bb6c..a21c8ab360e 100644
--- a/chromium/base/bind_internal.h
+++ b/chromium/base/bind_internal.h
@@ -1230,6 +1230,40 @@ decltype(auto) BindImpl(Functor&& functor, Args&&... args) {
std::forward<Functor>(functor), std::forward<Args>(args)...));
}
+// Special cases for binding to a base::{Once, Repeating}Callback without extra
+// bound arguments. We CHECK() the validity of callback to guard against null
+// pointers accidentally ending up in posted tasks, causing hard-to-debug
+// crashes.
+template <template <typename> class CallbackT,
+ typename Signature,
+ std::enable_if_t<std::is_same<CallbackT<Signature>,
+ OnceCallback<Signature>>::value>* =
+ nullptr>
+OnceCallback<Signature> BindImpl(OnceCallback<Signature> callback) {
+ CHECK(callback);
+ return callback;
+}
+
+template <template <typename> class CallbackT,
+ typename Signature,
+ std::enable_if_t<std::is_same<CallbackT<Signature>,
+ OnceCallback<Signature>>::value>* =
+ nullptr>
+OnceCallback<Signature> BindImpl(RepeatingCallback<Signature> callback) {
+ CHECK(callback);
+ return callback;
+}
+
+template <template <typename> class CallbackT,
+ typename Signature,
+ std::enable_if_t<std::is_same<CallbackT<Signature>,
+ RepeatingCallback<Signature>>::value>* =
+ nullptr>
+RepeatingCallback<Signature> BindImpl(RepeatingCallback<Signature> callback) {
+ CHECK(callback);
+ return callback;
+}
+
} // namespace internal
// An injection point to control |this| pointer behavior on a method invocation.