| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "base/callback.h" | 5 #include "base/callback.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback_helpers.h" | 10 #include "base/callback_helpers.h" |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 | 141 |
| 142 TEST_F(CallbackTest, ResetAndReturn) { | 142 TEST_F(CallbackTest, ResetAndReturn) { |
| 143 TestForReentrancy tfr; | 143 TestForReentrancy tfr; |
| 144 ASSERT_FALSE(tfr.cb.is_null()); | 144 ASSERT_FALSE(tfr.cb.is_null()); |
| 145 ASSERT_FALSE(tfr.cb_already_run); | 145 ASSERT_FALSE(tfr.cb_already_run); |
| 146 ResetAndReturn(&tfr.cb).Run(); | 146 ResetAndReturn(&tfr.cb).Run(); |
| 147 ASSERT_TRUE(tfr.cb.is_null()); | 147 ASSERT_TRUE(tfr.cb.is_null()); |
| 148 ASSERT_TRUE(tfr.cb_already_run); | 148 ASSERT_TRUE(tfr.cb_already_run); |
| 149 } | 149 } |
| 150 | 150 |
| 151 TEST_F(CallbackTest, NullAfterMoveRun) { |
| 152 Closure cb = Bind([] {}); |
| 153 ASSERT_TRUE(cb); |
| 154 std::move(cb).Run(); |
| 155 ASSERT_FALSE(cb); |
| 156 |
| 157 const Closure cb2 = Bind([] {}); |
| 158 ASSERT_TRUE(cb2); |
| 159 std::move(cb2).Run(); |
| 160 ASSERT_TRUE(cb2); |
| 161 |
| 162 OnceClosure cb3 = BindOnce([] {}); |
| 163 ASSERT_TRUE(cb3); |
| 164 std::move(cb3).Run(); |
| 165 ASSERT_FALSE(cb3); |
| 166 } |
| 167 |
| 151 class CallbackOwner : public base::RefCounted<CallbackOwner> { | 168 class CallbackOwner : public base::RefCounted<CallbackOwner> { |
| 152 public: | 169 public: |
| 153 explicit CallbackOwner(bool* deleted) { | 170 explicit CallbackOwner(bool* deleted) { |
| 154 callback_ = Bind(&CallbackOwner::Unused, this); | 171 callback_ = Bind(&CallbackOwner::Unused, this); |
| 155 deleted_ = deleted; | 172 deleted_ = deleted; |
| 156 } | 173 } |
| 157 void Reset() { | 174 void Reset() { |
| 158 callback_.Reset(); | 175 callback_.Reset(); |
| 159 // We are deleted here if no-one else had a ref to us. | 176 // We are deleted here if no-one else had a ref to us. |
| 160 } | 177 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 174 | 191 |
| 175 TEST_F(CallbackTest, CallbackHasLastRefOnContainingObject) { | 192 TEST_F(CallbackTest, CallbackHasLastRefOnContainingObject) { |
| 176 bool deleted = false; | 193 bool deleted = false; |
| 177 CallbackOwner* owner = new CallbackOwner(&deleted); | 194 CallbackOwner* owner = new CallbackOwner(&deleted); |
| 178 owner->Reset(); | 195 owner->Reset(); |
| 179 ASSERT_TRUE(deleted); | 196 ASSERT_TRUE(deleted); |
| 180 } | 197 } |
| 181 | 198 |
| 182 } // namespace | 199 } // namespace |
| 183 } // namespace base | 200 } // namespace base |
| OLD | NEW |