| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_COMMON_CANCELABLE_CLOSURE_HOLDER_H_ |
| #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_COMMON_CANCELABLE_CLOSURE_HOLDER_H_ |
| |
| #include "base/cancelable_callback.h" |
| #include "base/macros.h" |
| #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" |
| |
| namespace blink { |
| namespace scheduler { |
| |
| // A CancelableClosureHolder is a CancelableRepeatingClosure which resets its |
| // wrapped callback with a cached closure whenever it is canceled. |
| class CancelableClosureHolder { |
| DISALLOW_NEW(); |
| |
| public: |
| CancelableClosureHolder(); |
| ~CancelableClosureHolder(); |
| |
| // Resets the closure to be wrapped by the cancelable callback. Cancels any |
| // outstanding callbacks. |
| void Reset(const base::RepeatingClosure& callback); |
| |
| // Cancels any outstanding closures returned by callback(). |
| void Cancel(); |
| |
| // Returns a callback that will be disabled by calling Cancel(). Callback |
| // must have been set using Reset() before calling this function. |
| base::RepeatingClosure GetCallback() const; |
| |
| private: |
| base::RepeatingClosure callback_; |
| base::CancelableRepeatingClosure cancelable_callback_; |
| |
| DISALLOW_COPY_AND_ASSIGN(CancelableClosureHolder); |
| }; |
| |
| } // namespace scheduler |
| } // namespace blink |
| |
| #endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_COMMON_CANCELABLE_CLOSURE_HOLDER_H_ |