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