| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 // | 4 // |
| 5 // CancelableCallback is a wrapper around base::Callback that allows | 5 // CancelableCallback is a wrapper around base::Callback that allows |
| 6 // cancellation of a callback. CancelableCallback takes a reference on the | 6 // cancellation of a callback. CancelableCallback takes a reference on the |
| 7 // wrapped callback until this object is destroyed or Reset()/Cancel() are | 7 // wrapped callback until this object is destroyed or Reset()/Cancel() are |
| 8 // called. | 8 // called. |
| 9 // | 9 // |
| 10 // NOTE: | 10 // NOTE: |
| 11 // | 11 // |
| 12 // Calling CancelableCallback::Cancel() brings the object back to its natural, | 12 // Calling CancelableCallback::Cancel() brings the object back to its natural, |
| 13 // default-constructed state, i.e., CancelableCallback::callback() will return | 13 // default-constructed state, i.e., CancelableCallback::callback() will return |
| 14 // a null callback. | 14 // a null callback. |
| 15 // | 15 // |
| 16 // THREAD-SAFETY: | 16 // THREAD-SAFETY: |
| 17 // | 17 // |
| 18 // CancelableCallback objects must be created on, posted to, cancelled on, and | 18 // CancelableCallback objects must be created on, posted to, cancelled on, and |
| 19 // destroyed on the same thread. | 19 // destroyed on the same thread. |
| 20 // | 20 // |
| 21 // | 21 // |
| 22 // EXAMPLE USAGE: | 22 // EXAMPLE USAGE: |
| 23 // | 23 // |
| 24 // In the following example, the test is verifying that RunIntensiveTest() | 24 // In the following example, the test is verifying that RunIntensiveTest() |
| 25 // Quit()s the message loop within 4 seconds. The cancelable callback is posted | 25 // Quit()s the message loop within 4 seconds. The cancelable callback is posted |
| 26 // to the message loop, the intensive test runs, the message loop is run, | 26 // to the message loop, the intensive test runs, the message loop is run, |
| 27 // then the callback is cancelled. | 27 // then the callback is cancelled. |
| 28 // | 28 // |
| 29 // RunLoop run_loop; |
| 30 // |
| 29 // void TimeoutCallback(const std::string& timeout_message) { | 31 // void TimeoutCallback(const std::string& timeout_message) { |
| 30 // FAIL() << timeout_message; | 32 // FAIL() << timeout_message; |
| 31 // MessageLoop::current()->QuitWhenIdle(); | 33 // run_loop.QuitWhenIdle(); |
| 32 // } | 34 // } |
| 33 // | 35 // |
| 34 // CancelableClosure timeout(base::Bind(&TimeoutCallback, "Test timed out.")); | 36 // CancelableClosure timeout(base::Bind(&TimeoutCallback, "Test timed out.")); |
| 35 // MessageLoop::current()->PostDelayedTask(FROM_HERE, timeout.callback(), | 37 // ThreadTaskRunnerHandle::Get()->PostDelayedTask(FROM_HERE, timeout.callback(), |
| 36 // 4000) // 4 seconds to run. | 38 // TimeDelta::FromSeconds(4)); |
| 37 // RunIntensiveTest(); | 39 // RunIntensiveTest(); |
| 38 // MessageLoop::current()->Run(); | 40 // run_loop.Run(); |
| 39 // timeout.Cancel(); // Hopefully this is hit before the timeout callback runs. | 41 // timeout.Cancel(); // Hopefully this is hit before the timeout callback runs. |
| 40 // | 42 // |
| 41 | 43 |
| 42 #ifndef BASE_CANCELABLE_CALLBACK_H_ | 44 #ifndef BASE_CANCELABLE_CALLBACK_H_ |
| 43 #define BASE_CANCELABLE_CALLBACK_H_ | 45 #define BASE_CANCELABLE_CALLBACK_H_ |
| 44 | 46 |
| 45 #include <utility> | 47 #include <utility> |
| 46 | 48 |
| 47 #include "base/base_export.h" | 49 #include "base/base_export.h" |
| 48 #include "base/bind.h" | 50 #include "base/bind.h" |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 base::WeakPtrFactory<CancelableCallback<void(A...)>> weak_factory_; | 127 base::WeakPtrFactory<CancelableCallback<void(A...)>> weak_factory_; |
| 126 | 128 |
| 127 DISALLOW_COPY_AND_ASSIGN(CancelableCallback); | 129 DISALLOW_COPY_AND_ASSIGN(CancelableCallback); |
| 128 }; | 130 }; |
| 129 | 131 |
| 130 typedef CancelableCallback<void(void)> CancelableClosure; | 132 typedef CancelableCallback<void(void)> CancelableClosure; |
| 131 | 133 |
| 132 } // namespace base | 134 } // namespace base |
| 133 | 135 |
| 134 #endif // BASE_CANCELABLE_CALLBACK_H_ | 136 #endif // BASE_CANCELABLE_CALLBACK_H_ |
| OLD | NEW |