blob: 2c75d1342d476d4128761069815b65ab13b0174f [file] [log] [blame]
Gilad Arnolda23e4082014-07-17 11:40:43 -07001// Copyright (c) 2014 The Chromium OS 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.
4
5#include "update_engine/update_manager/default_policy.h"
6
7namespace {
8
9// A fixed minimum interval between consecutive allowed update checks. This
10// needs to be long enough to prevent busywork and/or DDoS attacks on Omaha, but
11// at the same time short enough to allow the machine to update itself
12// reasonably soon.
13const int kCheckIntervalInSeconds = 15 * 60;
14
15} // namespace
16
17namespace chromeos_update_manager {
18
19DefaultPolicy::DefaultPolicy(chromeos_update_engine::ClockInterface* clock)
20 : clock_(clock), aux_state_(new DefaultPolicyState()) {}
21
22EvalStatus DefaultPolicy::UpdateCheckAllowed(
23 EvaluationContext* ec, State* state, std::string* error,
24 UpdateCheckParams* result) const {
25 result->updates_enabled = true;
26 result->target_channel.clear();
27
28 // Ensure that the minimum interval is set. If there's no clock, this defaults
29 // to always allowing the update.
30 if (!aux_state_->IsLastCheckAllowedTimeSet() ||
31 ec->IsMonotonicTimeGreaterThan(
32 aux_state_->last_check_allowed_time() +
33 base::TimeDelta::FromSeconds(kCheckIntervalInSeconds))) {
34 if (clock_)
35 aux_state_->set_last_check_allowed_time(clock_->GetMonotonicTime());
36 return EvalStatus::kSucceeded;
37 }
38
39 return EvalStatus::kAskMeAgainLater;
40}
41
42} // namespace chromeos_update_manager