summaryrefslogtreecommitdiff
path: root/chromium/components/variations/variations_request_scheduler.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/variations/variations_request_scheduler.h')
-rw-r--r--chromium/components/variations/variations_request_scheduler.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/chromium/components/variations/variations_request_scheduler.h b/chromium/components/variations/variations_request_scheduler.h
new file mode 100644
index 00000000000..2b945010690
--- /dev/null
+++ b/chromium/components/variations/variations_request_scheduler.h
@@ -0,0 +1,71 @@
+// Copyright (c) 2013 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_VARIATIONS_VARIATIONS_REQUEST_SCHEDULER_H_
+#define COMPONENTS_VARIATIONS_VARIATIONS_REQUEST_SCHEDULER_H_
+
+#include "base/bind.h"
+#include "base/gtest_prod_util.h"
+#include "base/macros.h"
+#include "base/time/time.h"
+#include "base/timer/timer.h"
+
+class PrefService;
+
+namespace variations {
+
+// A helper class that makes VariationsService requests at the correct times.
+class VariationsRequestScheduler {
+ public:
+ virtual ~VariationsRequestScheduler();
+
+ // Starts the task. This can be a repeated event or a one-off.
+ virtual void Start();
+
+ // Resets the scheduler if it is currently on a timer.
+ virtual void Reset();
+
+ // Schedules a fetch shortly, for example to re-try the initial request which
+ // may have failed.
+ void ScheduleFetchShortly();
+
+ // Called when the application has been foregrounded. This may fetch a new
+ // seed.
+ virtual void OnAppEnterForeground();
+
+ // Factory method for this class.
+ static VariationsRequestScheduler* Create(const base::Closure& task,
+ PrefService* local_state);
+
+ protected:
+ // |task| is the closure to call when the scheduler deems ready.
+ explicit VariationsRequestScheduler(const base::Closure& task);
+
+ // Returns the time interval between variations seed fetches.
+ base::TimeDelta GetFetchPeriod() const;
+
+ // Getter for derived classes.
+ base::Closure task() const;
+
+ private:
+ FRIEND_TEST_ALL_PREFIXES(VariationsRequestSchedulerTest,
+ ScheduleFetchShortly);
+
+ // The task scheduled by this class.
+ base::Closure task_;
+
+ // The timer used to repeatedly ping the server. Keep this as an instance
+ // member so if VariationsRequestScheduler goes out of scope, the timer is
+ // automatically canceled.
+ base::RepeatingTimer timer_;
+
+ // A one-shot timer used for scheduling out-of-band fetches.
+ base::OneShotTimer one_shot_timer_;
+
+ DISALLOW_COPY_AND_ASSIGN(VariationsRequestScheduler);
+};
+
+} // namespace variations
+
+#endif // COMPONENTS_VARIATIONS_VARIATIONS_REQUEST_SCHEDULER_H_