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