1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef COMPONENTS_VARIATIONS_VARIATIONS_REQUEST_SCHEDULER_H_
6 #define COMPONENTS_VARIATIONS_VARIATIONS_REQUEST_SCHEDULER_H_
9 #include "base/gtest_prod_util.h"
10 #include "base/time/time.h"
11 #include "base/timer/timer.h"
15 namespace variations
{
17 // A helper class that makes VariationsService requests at the correct times.
18 class VariationsRequestScheduler
{
20 virtual ~VariationsRequestScheduler();
22 // Starts the task. This can be a repeated event or a one-off.
25 // Resets the scheduler if it is currently on a timer.
28 // Schedules a fetch shortly, for example to re-try the initial request which
30 void ScheduleFetchShortly();
32 // Called when the application has been foregrounded. This may fetch a new
34 virtual void OnAppEnterForeground();
36 // Factory method for this class.
37 static VariationsRequestScheduler
* Create(const base::Closure
& task
,
38 PrefService
* local_state
);
41 // |task| is the closure to call when the scheduler deems ready.
42 explicit VariationsRequestScheduler(const base::Closure
& task
);
44 // Returns the time interval between variations seed fetches.
45 base::TimeDelta
GetFetchPeriod() const;
47 // Getter for derived classes.
48 base::Closure
task() const;
51 FRIEND_TEST_ALL_PREFIXES(VariationsRequestSchedulerTest
,
52 ScheduleFetchShortly
);
54 // The task scheduled by this class.
57 // The timer used to repeatedly ping the server. Keep this as an instance
58 // member so if VariationsRequestScheduler goes out of scope, the timer is
59 // automatically canceled.
60 base::RepeatingTimer
<VariationsRequestScheduler
> timer_
;
62 // A one-shot timer used for scheduling out-of-band fetches.
63 base::OneShotTimer
<VariationsRequestScheduler
> one_shot_timer_
;
65 DISALLOW_COPY_AND_ASSIGN(VariationsRequestScheduler
);
68 } // namespace variations
70 #endif // COMPONENTS_VARIATIONS_VARIATIONS_REQUEST_SCHEDULER_H_