blob: 13c208e3f341870e5c32dae8d596484af84a70f8 [file] [log] [blame]
Alex Deymo63784a52014-05-28 10:46:14 -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/update_manager.h"
6
7#include "update_engine/update_manager/chromeos_policy.h"
8#include "update_engine/update_manager/state.h"
9
10namespace chromeos_update_manager {
11
12UpdateManager::UpdateManager(chromeos_update_engine::ClockInterface* clock,
Gilad Arnoldfd45a732014-08-07 15:53:46 -070013 base::TimeDelta evaluation_timeout,
14 base::TimeDelta expiration_timeout, State* state)
Gilad Arnolda23e4082014-07-17 11:40:43 -070015 : default_policy_(clock), state_(state), clock_(clock),
Gilad Arnoldfd45a732014-08-07 15:53:46 -070016 evaluation_timeout_(evaluation_timeout),
Gilad Arnold83ffdda2014-08-08 13:30:31 -070017 expiration_timeout_(expiration_timeout),
18 weak_ptr_factory_(this) {
Alex Deymo63784a52014-05-28 10:46:14 -070019 // TODO(deymo): Make it possible to replace this policy with a different
20 // implementation with a build-time flag.
21 policy_.reset(new ChromeOSPolicy());
22}
23
Gilad Arnold83ffdda2014-08-08 13:30:31 -070024UpdateManager::~UpdateManager() {
25 // Remove pending main loop events associated with any of the outstanding
26 // evaluation contexts. This will prevent dangling pending events, causing
27 // these contexts to be destructed once the repo itself is destructed.
28 for (auto& ec : ec_repo_)
29 ec->RemoveObserversAndTimeout();
30}
31
32void UpdateManager::UnregisterEvalContext(EvaluationContext* ec) {
33 if (!ec_repo_.erase(ec)) {
34 LOG(ERROR) << "Unregistering an unknown evaluation context, this is a bug.";
35 }
36}
37
Alex Deymo63784a52014-05-28 10:46:14 -070038} // namespace chromeos_update_manager