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

#ifndef COMPONENTS_DOMAIN_RELIABILITY_DISPATCHER_H_
#define COMPONENTS_DOMAIN_RELIABILITY_DISPATCHER_H_

#include <memory>
#include <set>

#include "base/callback_forward.h"
#include "base/macros.h"
#include "base/time/time.h"
#include "components/domain_reliability/domain_reliability_export.h"

namespace domain_reliability {

class MockableTime;

// Runs tasks during a specified interval. Calling |RunEligibleTasks| gives any
// task a chance to run early (if the minimum delay has already passed); tasks
// that aren't run early will be run once their maximum delay has passed.
//
// (See scheduler.h for an explanation of how the intervals are chosen.)
class DOMAIN_RELIABILITY_EXPORT DomainReliabilityDispatcher {
 public:
  explicit DomainReliabilityDispatcher(MockableTime* time);
  ~DomainReliabilityDispatcher();

  // Schedules |task| to be executed between |min_delay| and |max_delay| from
  // now. The task will be run at most |max_delay| from now; once |min_delay|
  // has passed, any call to |RunEligibleTasks| will run the task earlier than
  // that.
  void ScheduleTask(const base::Closure& task,
                    base::TimeDelta min_delay,
                    base::TimeDelta max_delay);

  // Runs all existing tasks whose minimum delay has already passed. Does not
  // run tasks added by those existing tasks, even if their minimum delay has
  // already passed.
  void RunEligibleTasks();

  // Runs all waiting or eligible tasks, regardless of whether their minimum
  // delay has passed.
  void RunAllTasksForTesting();

 private:
  struct Task;

  // Adds |task| to the set of all tasks, but not the set of eligible tasks.
  void MakeTaskWaiting(Task* task);

  // Adds |task| to the set of eligible tasks, and also the set of all tasks
  // if not already there.
  void MakeTaskEligible(Task* task);

  // Runs |task|'s callback, removes it from both sets, and deletes it.
  void RunAndDeleteTask(Task* task);

  MockableTime* time_;
  std::set<std::unique_ptr<Task>> tasks_;
  std::set<Task*> eligible_tasks_;

  DISALLOW_COPY_AND_ASSIGN(DomainReliabilityDispatcher);
};

}  // namespace domain_reliability

#endif
