diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-02-02 12:21:57 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-02-12 08:13:00 +0000 |
commit | 606d85f2a5386472314d39923da28c70c60dc8e7 (patch) | |
tree | a8f4d7bf997f349f45605e6058259fba0630e4d7 /chromium/base/bind_internal.h | |
parent | 5786336dda477d04fb98483dca1a5426eebde2d7 (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.h | 34 |
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. |