Index: blimp/common/mandatory_callback.h |
diff --git a/blimp/common/mandatory_callback.h b/blimp/common/mandatory_callback.h |
deleted file mode 100644 |
index 022830936d28b9b215b65adc9c7e7e3499568627..0000000000000000000000000000000000000000 |
--- a/blimp/common/mandatory_callback.h |
+++ /dev/null |
@@ -1,118 +0,0 @@ |
-// Copyright 2016 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 BLIMP_COMMON_MANDATORY_CALLBACK_H_ |
-#define BLIMP_COMMON_MANDATORY_CALLBACK_H_ |
- |
-#include <utility> |
- |
-#include "base/callback.h" |
-#include "base/logging.h" |
- |
-namespace blimp { |
- |
-// Adds a leak-detection wrapper to base::Callback objects. |
-// |
-// When a wrapped Callback is destroyed without being Run first, the checker |
-// will DCHECK-crash the program with a stack trace, so that developers can |
-// pinpoint the site of the leak. |
-// |
-// The MandatoryCallback may be passed using std::move; leak detection occurs |
-// when the MandatoryCallback is finally destroyed. |
-// |
-// Usage: |
-// void DoStuff(int d) { ... } |
-// ... |
-// base::Closure my_callback = base::Bind(&DoStuff); |
-// MandatoryCallback<void(int)> leak_checked_callback = |
-// CreateMandatoryCallback(my_callback); |
-// |
-// Note that MandatoryCallbacks lack some functionality from |
-// base::CallbackInternal. |
-// * They can only be invoked once. |
-// * They do not support parameter currying with additional Bind() calls.[1] |
-// * They cannot be Reset(). |
-// |
-// [1] Mandatory invocation support would need to be plumbed in to |
-// base::CallbackInternal and base::Bind for this to work, |
-// which is feasible but low-priority for the owners of the callback |
-// libraries. |
- |
-template <typename SignatureType> |
-class MandatoryCallback; |
- |
-// Template specialization for extracting the function signature data types. |
-template <typename ReturnType, typename... ArgTypes> |
-class MandatoryCallback<ReturnType(ArgTypes...)> { |
- public: |
- using CallbackType = base::Callback<ReturnType(ArgTypes...)>; |
- |
- explicit MandatoryCallback(const CallbackType& callback) : cb_(callback) { |
- DCHECK(!cb_.is_null()); |
- } |
- |
- MandatoryCallback(MandatoryCallback&& other) { |
- cb_ = other.cb_; |
- other.cb_.Reset(); |
- |
-#if DCHECK_IS_ON() |
- was_run_ = other.was_run_; |
- other.was_run_ = false; |
-#endif |
- } |
- |
- ~MandatoryCallback() { |
-#if DCHECK_IS_ON() |
- DCHECK(cb_.is_null() || was_run_); |
-#endif |
- } |
- |
- // This a overload that handles the case where there are no arguments provided |
- template <typename...> |
- ReturnType Run() { |
- DCHECK(cb_); // Can't be run following std::move. |
- |
-#if DCHECK_IS_ON() |
- DCHECK(!was_run_); |
- was_run_ = true; |
-#endif |
- |
- cb_.Run(); |
- } |
- |
- template <typename... RunArgs> |
- ReturnType Run(RunArgs... args) { |
- DCHECK(cb_); // Can't be run following std::move. |
- |
-#if DCHECK_IS_ON() |
- DCHECK(!was_run_); |
- was_run_ = true; |
-#endif |
- |
- cb_.Run(std::forward<RunArgs...>(args...)); |
- } |
- |
- private: |
- // Nulled after being moved. |
- CallbackType cb_; |
- |
-#if DCHECK_IS_ON() |
- bool was_run_ = false; |
-#endif |
- |
- DISALLOW_COPY_AND_ASSIGN(MandatoryCallback); |
-}; |
- |
-// Creates a leak-checking proxy callback around |callback|. |
-template <typename SignatureType> |
-MandatoryCallback<SignatureType> CreateMandatoryCallback( |
- const base::Callback<SignatureType>& callback) { |
- return MandatoryCallback<SignatureType>(callback); |
-} |
- |
-using MandatoryClosure = MandatoryCallback<void()>; |
- |
-} // namespace blimp |
- |
-#endif // BLIMP_COMMON_MANDATORY_CALLBACK_H_ |