1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/timer/mock_timer.h"
6
7namespace base {
8
9MockTimer::MockTimer(bool retain_user_task, bool is_repeating)
10    : Timer(retain_user_task, is_repeating),
11      is_running_(false) {
12}
13
14MockTimer::MockTimer(const tracked_objects::Location& posted_from,
15                     TimeDelta delay,
16                     const base::Closure& user_task,
17                     bool is_repeating)
18    : Timer(true, is_repeating),
19      delay_(delay),
20      is_running_(false) {
21}
22
23MockTimer::~MockTimer() {
24}
25
26bool MockTimer::IsRunning() const {
27  return is_running_;
28}
29
30base::TimeDelta MockTimer::GetCurrentDelay() const {
31  return delay_;
32}
33
34void MockTimer::Start(const tracked_objects::Location& posted_from,
35                      TimeDelta delay,
36                      const base::Closure& user_task) {
37  delay_ = delay;
38  user_task_ = user_task;
39  Reset();
40}
41
42void MockTimer::Stop() {
43  is_running_ = false;
44  if (!retain_user_task())
45    user_task_.Reset();
46}
47
48void MockTimer::Reset() {
49  DCHECK(!user_task_.is_null());
50  is_running_ = true;
51}
52
53void MockTimer::Fire() {
54  DCHECK(is_running_);
55  base::Closure old_task = user_task_;
56  if (is_repeating())
57    Reset();
58  else
59    Stop();
60  old_task.Run();
61}
62
63}  // namespace base
64