| // 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 tracked_objects::Location& posted_from, |
| TimeDelta delay, |
| const base::Closure& user_task, |
| bool is_repeating) |
| : Timer(true, is_repeating), |
| delay_(delay), |
| is_running_(false) { |
| } |
| |
| MockTimer::~MockTimer() { |
| } |
| |
| bool MockTimer::IsRunning() const { |
| return is_running_; |
| } |
| |
| base::TimeDelta MockTimer::GetCurrentDelay() const { |
| return delay_; |
| } |
| |
| void MockTimer::Start(const tracked_objects::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 |