// Copyright 2015 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 "components/component_updater/timer.h"

#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/location.h"

namespace component_updater {

Timer::Timer() : timer_(false, false) {
}

Timer::~Timer() {
  DCHECK(thread_checker_.CalledOnValidThread());
  Stop();
}

void Timer::Start(base::TimeDelta initial_delay,
                  base::TimeDelta delay,
                  const base::Closure& user_task) {
  DCHECK(thread_checker_.CalledOnValidThread());

  delay_ = delay;
  user_task_ = user_task;

  timer_.Start(FROM_HERE, initial_delay,
               base::Bind(&Timer::OnDelay, base::Unretained(this)));
}

void Timer::Stop() {
  DCHECK(thread_checker_.CalledOnValidThread());
  timer_.Stop();
}

void Timer::OnDelay() {
  DCHECK(thread_checker_.CalledOnValidThread());

  user_task_.Run();

  timer_.Start(FROM_HERE, delay_,
               base::Bind(&Timer::OnDelay, base::Unretained(this)));
}

}  // namespace component_updater
