blob: 0d553df515ff8013293be3edd35e3bdda84ebb05 [file] [log] [blame]
Jay Srinivasan43488792012-06-19 00:25:31 -07001// Copyright (c) 2012 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 <base/file_util.h>
6
Jay Srinivasan55f50c22013-01-10 19:24:35 -08007#include "update_engine/real_system_state.h"
Jay Srinivasan43488792012-06-19 00:25:31 -07008
9namespace chromeos_update_engine {
10
11static const char kOOBECompletedMarker[] = "/home/chronos/.oobe_completed";
Jay Srinivasan6f6ea002012-12-14 11:26:28 -080012static const char kPrefsDirectory[] = "/var/lib/update_engine/prefs";
Jay Srinivasan43488792012-06-19 00:25:31 -070013
Jay Srinivasan34b5d862012-07-23 11:43:22 -070014RealSystemState::RealSystemState()
15 : device_policy_(NULL),
Jay Srinivasanae4697c2013-03-18 17:08:08 -070016 connection_manager_(this),
17 request_params_(this) {}
Jay Srinivasan6f6ea002012-12-14 11:26:28 -080018
Gilad Arnoldbf7919b2013-01-08 13:07:37 -080019bool RealSystemState::Initialize(bool enable_gpio) {
Jay Srinivasan6f6ea002012-12-14 11:26:28 -080020 metrics_lib_.Init();
21
22 if (!prefs_.Init(FilePath(kPrefsDirectory))) {
23 LOG(ERROR) << "Failed to initialize preferences.";
24 return false;
25 }
26
27 if (!payload_state_.Initialize(&prefs_))
28 return false;
29
Gilad Arnoldbf7919b2013-01-08 13:07:37 -080030 // Initialize the GPIO handler as instructed.
31 if (enable_gpio) {
32 // A real GPIO handler. Defer GPIO discovery to ensure the udev has ample
33 // time to export the devices. Also require that test mode is physically
34 // queried at most once and the result cached, for a more consistent update
35 // behavior.
36 udev_iface_.reset(new StandardUdevInterface());
37 file_descriptor_.reset(new EintrSafeFileDescriptor());
38 gpio_handler_.reset(new StandardGpioHandler(udev_iface_.get(),
39 file_descriptor_.get(),
40 true, true));
41 } else {
42 // A no-op GPIO handler, always indicating a non-test mode.
43 gpio_handler_.reset(new NoopGpioHandler(false));
44 }
45
Jay Srinivasan55f50c22013-01-10 19:24:35 -080046 // Create the update attempter.
47 update_attempter_.reset(new UpdateAttempter(this, &dbus_));
48
Jay Srinivasan6f6ea002012-12-14 11:26:28 -080049 // All is well. Initialization successful.
50 return true;
51}
Jay Srinivasan43488792012-06-19 00:25:31 -070052
53bool RealSystemState::IsOOBEComplete() {
54 return file_util::PathExists(FilePath(kOOBECompletedMarker));
55}
56
Jay Srinivasan43488792012-06-19 00:25:31 -070057} // namespace chromeos_update_engine