blob: 13de5bd50047f83067c0ce66ef84838ddedb812e [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();
Gilad Arnoldd4b30322014-07-21 15:35:27 -070027 result->target_version_prefix.clear();
Gilad Arnold44dc3bf2014-07-18 23:39:38 -070028 result->is_interactive = false;
Gilad Arnolda23e4082014-07-17 11:40:43 -070029
30 // Ensure that the minimum interval is set. If there's no clock, this defaults
31 // to always allowing the update.
32 if (!aux_state_->IsLastCheckAllowedTimeSet() ||
33 ec->IsMonotonicTimeGreaterThan(
34 aux_state_->last_check_allowed_time() +
35 base::TimeDelta::FromSeconds(kCheckIntervalInSeconds))) {
36 if (clock_)
37 aux_state_->set_last_check_allowed_time(clock_->GetMonotonicTime());
38 return EvalStatus::kSucceeded;
39 }
40
41 return EvalStatus::kAskMeAgainLater;
42}
43
Gilad Arnolddc4bb262014-07-23 10:45:19 -070044EvalStatus DefaultPolicy::UpdateCanStart(
45 EvaluationContext* ec,
46 State* state,
47 std::string* error,
48 UpdateDownloadParams* result,
Gilad Arnoldd78caf92014-09-24 09:28:14 -070049 const UpdateState update_state) const {
Gilad Arnolddc4bb262014-07-23 10:45:19 -070050 result->update_can_start = true;
51 result->cannot_start_reason = UpdateCannotStartReason::kUndefined;
52 result->download_url_idx = 0;
53 result->download_url_num_errors = 0;
54 result->p2p_allowed = false;
55 result->do_increment_failures = false;
56 result->backoff_expiry = base::Time();
57 result->scatter_wait_period = base::TimeDelta();
58 result->scatter_check_threshold = 0;
59 return EvalStatus::kSucceeded;
60}
61
62EvalStatus DefaultPolicy::UpdateDownloadAllowed(
63 EvaluationContext* ec,
64 State* state,
65 std::string* error,
66 bool* result) const {
67 *result = true;
68 return EvalStatus::kSucceeded;
69}
70
Gilad Arnolda23e4082014-07-17 11:40:43 -070071} // namespace chromeos_update_manager