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#include "update_engine/update_manager/state_factory.h" 18 19#include <memory> 20 21#include <base/logging.h> 22#if USE_DBUS 23#include <session_manager/dbus-proxies.h> 24#endif // USE_DBUS 25 26#include "update_engine/common/clock_interface.h" 27#if USE_DBUS 28#include "update_engine/dbus_connection.h" 29#endif // USE_DBUS 30#include "update_engine/update_manager/fake_shill_provider.h" 31#include "update_engine/update_manager/real_config_provider.h" 32#include "update_engine/update_manager/real_device_policy_provider.h" 33#include "update_engine/update_manager/real_random_provider.h" 34#include "update_engine/update_manager/real_state.h" 35#include "update_engine/update_manager/real_system_provider.h" 36#include "update_engine/update_manager/real_time_provider.h" 37#include "update_engine/update_manager/real_updater_provider.h" 38#if USE_SHILL 39#include "update_engine/shill_proxy.h" 40#include "update_engine/update_manager/real_shill_provider.h" 41#endif // USE_SHILL 42 43using std::unique_ptr; 44 45namespace chromeos_update_manager { 46 47State* DefaultStateFactory( 48 policy::PolicyProvider* policy_provider, 49 org::chromium::LibCrosServiceInterfaceProxyInterface* libcros_proxy, 50 chromeos_update_engine::SystemState* system_state) { 51 chromeos_update_engine::ClockInterface* const clock = system_state->clock(); 52 unique_ptr<RealConfigProvider> config_provider( 53 new RealConfigProvider(system_state->hardware())); 54#if USE_DBUS 55 scoped_refptr<dbus::Bus> bus = 56 chromeos_update_engine::DBusConnection::Get()->GetDBus(); 57 unique_ptr<RealDevicePolicyProvider> device_policy_provider( 58 new RealDevicePolicyProvider( 59 std::make_unique<org::chromium::SessionManagerInterfaceProxy>(bus), 60 policy_provider)); 61#else 62 unique_ptr<RealDevicePolicyProvider> device_policy_provider( 63 new RealDevicePolicyProvider(policy_provider)); 64#endif // USE_DBUS 65#if USE_SHILL 66 unique_ptr<RealShillProvider> shill_provider( 67 new RealShillProvider(new chromeos_update_engine::ShillProxy(), clock)); 68#else 69 unique_ptr<FakeShillProvider> shill_provider(new FakeShillProvider()); 70#endif // USE_SHILL 71 unique_ptr<RealRandomProvider> random_provider(new RealRandomProvider()); 72 unique_ptr<RealSystemProvider> system_provider(new RealSystemProvider( 73 system_state->hardware(), system_state->boot_control(), libcros_proxy)); 74 75 unique_ptr<RealTimeProvider> time_provider(new RealTimeProvider(clock)); 76 unique_ptr<RealUpdaterProvider> updater_provider( 77 new RealUpdaterProvider(system_state)); 78 79 if (!(config_provider->Init() && 80 device_policy_provider->Init() && 81 random_provider->Init() && 82#if USE_SHILL 83 shill_provider->Init() && 84#endif // USE_SHILL 85 system_provider->Init() && 86 time_provider->Init() && 87 updater_provider->Init())) { 88 LOG(ERROR) << "Error initializing providers"; 89 return nullptr; 90 } 91 92 return new RealState(config_provider.release(), 93 device_policy_provider.release(), 94 random_provider.release(), 95 shill_provider.release(), 96 system_provider.release(), 97 time_provider.release(), 98 updater_provider.release()); 99} 100 101} // namespace chromeos_update_manager 102