| Index: base/bind_internal.h | 
| diff --git a/base/bind_internal.h b/base/bind_internal.h | 
| index 3d6ca09c41e4e31404a11bb16ad99a425bc6369c..7ad7493eacc4a5eba6c1b627ddaafdf0865a664a 100644 | 
| --- a/base/bind_internal.h | 
| +++ b/base/bind_internal.h | 
| @@ -244,14 +244,16 @@ struct FunctorTraits<IgnoreResultHelper<T>> : FunctorTraits<T> { | 
| template <typename IgnoreResultType, typename... RunArgs> | 
| static void Invoke(IgnoreResultType&& ignore_result_helper, | 
| RunArgs&&... args) { | 
| -    FunctorTraits<T>::Invoke(ignore_result_helper.functor_, | 
| -                             std::forward<RunArgs>(args)...); | 
| +    FunctorTraits<T>::Invoke( | 
| +        std::forward<IgnoreResultType>(ignore_result_helper).functor_, | 
| +        std::forward<RunArgs>(args)...); | 
| } | 
| }; | 
|  | 
| // For Callbacks. | 
| -template <typename R, typename... Args, CopyMode copy_mode> | 
| -struct FunctorTraits<Callback<R(Args...), copy_mode>> { | 
| +template <typename R, typename... Args, | 
| +          CopyMode copy_mode, RepeatMode repeat_mode> | 
| +struct FunctorTraits<Callback<R(Args...), copy_mode, repeat_mode>> { | 
| using RunType = R(Args...); | 
| static constexpr bool is_method = false; | 
| static constexpr bool is_nullable = true; | 
| @@ -327,6 +329,19 @@ struct Invoker<StorageType, R(UnboundArgs...)> { | 
| std::forward<UnboundArgs>(unbound_args)...); | 
| } | 
|  | 
| +  static R RunOneShot(BindStateBase* base, UnboundArgs&&... unbound_args) { | 
| +    // Local references to make debugger stepping easier. If in a debugger, | 
| +    // you really want to warp ahead and step through the | 
| +    // InvokeHelper<>::MakeItSo() call below. | 
| +    StorageType* storage = static_cast<StorageType*>(base); | 
| +    static constexpr size_t num_bound_args = | 
| +        std::tuple_size<decltype(storage->bound_args_)>::value; | 
| +    return RunImpl(std::move(storage->functor_), | 
| +                   std::move(storage->bound_args_), | 
| +                   MakeIndexSequence<num_bound_args>(), | 
| +                   std::forward<UnboundArgs>(unbound_args)...); | 
| +  } | 
| + | 
| private: | 
| template <typename Functor, typename BoundArgsTuple, size_t... indices> | 
| static inline R RunImpl(Functor&& functor, | 
| @@ -380,7 +395,7 @@ struct BindState final : BindStateBase { | 
| template <typename ForwardFunctor, typename... ForwardBoundArgs> | 
| explicit BindState(ForwardFunctor&& functor, ForwardBoundArgs&&... bound_args) | 
| : BindStateBase(&Destroy), | 
| -      functor_(std::forward<ForwardFunctor>(functor)), | 
| +        functor_(std::forward<ForwardFunctor>(functor)), | 
| bound_args_(std::forward<ForwardBoundArgs>(bound_args)...) { | 
| DCHECK(!IsNull(functor_)); | 
| } | 
|  |