diff options
Diffstat (limited to 'chromium/components/variations/variations_request_scheduler.h')
-rw-r--r-- | chromium/components/variations/variations_request_scheduler.h | 71 |
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_ |