// Copyright 2017 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_METRICS_METRICS_UPLOAD_SCHEDULER_H_
#define COMPONENTS_METRICS_METRICS_UPLOAD_SCHEDULER_H_

#include "base/callback.h"
#include "base/feature_list.h"
#include "base/macros.h"
#include "base/time/time.h"
#include "components/metrics/metrics_scheduler.h"

namespace metrics {

extern const base::Feature kUploadSchedulerFeature;

// Scheduler task to drive a ReportingService object's uploading.
class MetricsUploadScheduler : public MetricsScheduler {
 public:
  // Creates MetricsUploadScheduler object with the given |upload_callback|
  // callback to call when uploading should happen.  The callback must
  // arrange to call either UploadFinished or UploadCancelled on completion.
  explicit MetricsUploadScheduler(const base::Closure& upload_callback);
  ~MetricsUploadScheduler() override;

  // Callback from MetricsService when a triggered upload finishes.
  void UploadFinished(bool server_is_healthy);

  // Callback from MetricsService when an upload is cancelled.
  // Also stops the scheduler.
  void StopAndUploadCancelled();

  // Callback from MetricsService when an upload is cancelled because it would
  // be over the allowed data usage cap.
  void UploadOverDataUsageCap();

 private:
  // Time to wait between uploads on success.
  const base::TimeDelta unsent_logs_interval_;

  // Initial time to wait between upload retry attempts.
  const base::TimeDelta initial_backoff_interval_;

  // Time to wait for the next upload attempt if the next one fails.
  base::TimeDelta backoff_interval_;

  DISALLOW_COPY_AND_ASSIGN(MetricsUploadScheduler);
};

}  // namespace metrics

#endif  // COMPONENTS_METRICS_METRICS_UPLOAD_SCHEDULER_H_
