1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/metrics/variations/variations_request_scheduler.h"
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chrome_variations {
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)VariationsRequestScheduler::VariationsRequestScheduler(
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const base::Closure& task) : task_(task) {
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)VariationsRequestScheduler::~VariationsRequestScheduler() {
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void VariationsRequestScheduler::Start() {
177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Time between regular seed fetches, in hours.
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  const int kFetchPeriodHours = 5;
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  task_.Run();
207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  timer_.Start(FROM_HERE, base::TimeDelta::FromHours(kFetchPeriodHours), task_);
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void VariationsRequestScheduler::Reset() {
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (timer_.IsRunning())
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    timer_.Reset();
267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  one_shot_timer_.Stop();
277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void VariationsRequestScheduler::ScheduleFetchShortly() {
307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Reset the regular timer to avoid it triggering soon after.
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Reset();
327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // The delay before attempting a fetch shortly, in minutes.
337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  const int kFetchShortlyDelayMinutes = 5;
347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  one_shot_timer_.Start(FROM_HERE,
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                        base::TimeDelta::FromMinutes(kFetchShortlyDelayMinutes),
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                        task_);
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void VariationsRequestScheduler::OnAppEnterForeground() {
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  NOTREACHED() << "Attempted to OnAppEnterForeground on non-mobile device";
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::Closure VariationsRequestScheduler::task() const {
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return task_;
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
475e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#if !defined(OS_ANDROID) && !defined(OS_IOS)
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)VariationsRequestScheduler* VariationsRequestScheduler::Create(
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const base::Closure& task,
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    PrefService* local_state) {
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return new VariationsRequestScheduler(task);
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
545e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#endif  // !defined(OS_ANDROID) && !defined(OS_IOS)
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace chrome_variations
57