// 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. #include "components/variations/variations_request_scheduler.h" #include #include "base/strings/string_number_conversions.h" #include "build/build_config.h" #include "components/variations/variations_associated_data.h" namespace variations { VariationsRequestScheduler::VariationsRequestScheduler( const base::Closure& task) : task_(task) { } VariationsRequestScheduler::~VariationsRequestScheduler() { } void VariationsRequestScheduler::Start() { task_.Run(); timer_.Start(FROM_HERE, GetFetchPeriod(), task_); } void VariationsRequestScheduler::Reset() { if (timer_.IsRunning()) timer_.Reset(); one_shot_timer_.Stop(); } void VariationsRequestScheduler::ScheduleFetchShortly() { // Reset the regular timer to avoid it triggering soon after. Reset(); // The delay before attempting a fetch shortly, in minutes. const int kFetchShortlyDelayMinutes = 5; one_shot_timer_.Start(FROM_HERE, base::TimeDelta::FromMinutes(kFetchShortlyDelayMinutes), task_); } void VariationsRequestScheduler::OnAppEnterForeground() { NOTREACHED() << "Attempted to OnAppEnterForeground on non-mobile device"; } base::TimeDelta VariationsRequestScheduler::GetFetchPeriod() const { // The fetch interval can be overridden by a variation param. std::string period_min_str = variations::GetVariationParamValue("VarationsServiceControl", "fetch_period_min"); size_t period_min; if (base::StringToSizeT(period_min_str, &period_min)) return base::TimeDelta::FromMinutes(period_min); // The default fetch interval is every 30 minutes. return base::TimeDelta::FromMinutes(30); } base::Closure VariationsRequestScheduler::task() const { return task_; } #if !defined(OS_ANDROID) && !defined(OS_IOS) // static VariationsRequestScheduler* VariationsRequestScheduler::Create( const base::Closure& task, PrefService* local_state) { return new VariationsRequestScheduler(task); } #endif // !defined(OS_ANDROID) && !defined(OS_IOS) } // namespace variations