// 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
