| // 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. | |
| #include "base/timer/mock_timer.h" | |
| namespace base { | |
| MockTimer::MockTimer(bool retain_user_task, bool is_repeating) | |
| : Timer(retain_user_task, is_repeating), | |
| is_running_(false) { | |
| } | |
| MockTimer::MockTimer(const Location& posted_from, | |
| TimeDelta delay, | |
| const base::Closure& user_task, | |
| bool is_repeating) | |
| : Timer(true, is_repeating), delay_(delay), is_running_(false) {} | |
| MockTimer::~MockTimer() = default; | |
| bool MockTimer::IsRunning() const { | |
| return is_running_; | |
| } | |
| base::TimeDelta MockTimer::GetCurrentDelay() const { | |
| return delay_; | |
| } | |
| void MockTimer::Start(const Location& posted_from, | |
| TimeDelta delay, | |
| const base::Closure& user_task) { | |
| delay_ = delay; | |
| user_task_ = user_task; | |
| Reset(); | |
| } | |
| void MockTimer::Stop() { | |
| is_running_ = false; | |
| if (!retain_user_task()) | |
| user_task_.Reset(); | |
| } | |
| void MockTimer::Reset() { | |
| DCHECK(!user_task_.is_null()); | |
| is_running_ = true; | |
| } | |
| void MockTimer::Fire() { | |
| DCHECK(is_running_); | |
| base::Closure old_task = user_task_; | |
| if (is_repeating()) | |
| Reset(); | |
| else | |
| Stop(); | |
| old_task.Run(); | |
| } | |
| } // namespace base |