1//
2// Copyright (C) 2014 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8//      http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
16
17#ifndef UPDATE_ENGINE_UPDATE_MANAGER_REAL_SYSTEM_PROVIDER_H_
18#define UPDATE_ENGINE_UPDATE_MANAGER_REAL_SYSTEM_PROVIDER_H_
19
20#include <memory>
21#include <string>
22
23#include "update_engine/common/boot_control_interface.h"
24#include "update_engine/common/hardware_interface.h"
25#include "update_engine/update_manager/system_provider.h"
26
27namespace org {
28namespace chromium {
29class LibCrosServiceInterfaceProxyInterface;
30}  // namespace chromium
31}  // namespace org
32
33namespace chromeos_update_manager {
34
35// SystemProvider concrete implementation.
36class RealSystemProvider : public SystemProvider {
37 public:
38  RealSystemProvider(
39      chromeos_update_engine::HardwareInterface* hardware,
40      chromeos_update_engine::BootControlInterface* boot_control,
41      org::chromium::LibCrosServiceInterfaceProxyInterface* libcros_proxy)
42      : hardware_(hardware),
43#if USE_CHROME_KIOSK_APP
44        boot_control_(boot_control),
45        libcros_proxy_(libcros_proxy) {}
46#else
47        boot_control_(boot_control) {}
48#endif  // USE_CHROME_KIOSK_APP
49
50  // Initializes the provider and returns whether it succeeded.
51  bool Init();
52
53  Variable<bool>* var_is_normal_boot_mode() override {
54    return var_is_normal_boot_mode_.get();
55  }
56
57  Variable<bool>* var_is_official_build() override {
58    return var_is_official_build_.get();
59  }
60
61  Variable<bool>* var_is_oobe_complete() override {
62    return var_is_oobe_complete_.get();
63  }
64
65  Variable<unsigned int>* var_num_slots() override {
66    return var_num_slots_.get();
67  }
68
69  Variable<std::string>* var_kiosk_required_platform_version() override {
70    return var_kiosk_required_platform_version_.get();
71  }
72
73 private:
74  bool GetKioskAppRequiredPlatformVersion(
75      std::string* required_platform_version);
76
77  std::unique_ptr<Variable<bool>> var_is_normal_boot_mode_;
78  std::unique_ptr<Variable<bool>> var_is_official_build_;
79  std::unique_ptr<Variable<bool>> var_is_oobe_complete_;
80  std::unique_ptr<Variable<unsigned int>> var_num_slots_;
81  std::unique_ptr<Variable<std::string>> var_kiosk_required_platform_version_;
82
83  chromeos_update_engine::HardwareInterface* const hardware_;
84  chromeos_update_engine::BootControlInterface* const boot_control_;
85#if USE_CHROME_KIOSK_APP
86  org::chromium::LibCrosServiceInterfaceProxyInterface* const libcros_proxy_;
87#endif  // USE_CHROME_KIOSK_APP
88
89  DISALLOW_COPY_AND_ASSIGN(RealSystemProvider);
90};
91
92}  // namespace chromeos_update_manager
93
94#endif  // UPDATE_ENGINE_UPDATE_MANAGER_REAL_SYSTEM_PROVIDER_H_
95