1aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 2aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Copyright (C) 2014 The Android Open Source Project 3aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 4aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Licensed under the Apache License, Version 2.0 (the "License"); 5aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// you may not use this file except in compliance with the License. 6aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// You may obtain a copy of the License at 7aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 8aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// http://www.apache.org/licenses/LICENSE-2.0 9aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 10aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Unless required by applicable law or agreed to in writing, software 11aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// distributed under the License is distributed on an "AS IS" BASIS, 12aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// See the License for the specific language governing permissions and 14aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// limitations under the License. 15aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 1694c0616c9f81b65154953ac31e488cc87191e17cAlex Deymo 1763784a578dd26880454d70797519358a2326291bAlex Deymo#include "update_engine/update_manager/state_factory.h" 1894c0616c9f81b65154953ac31e488cc87191e17cAlex Deymo 1902f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan#include <memory> 2002f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan 2194c0616c9f81b65154953ac31e488cc87191e17cAlex Deymo#include <base/logging.h> 22c92195c0f6cba4851b7352062bba03c95b7a7e94Sen Jiang#if USE_DBUS 239730679339fbf3e52a706dcab36eaeffbc71e404Sen Jiang#include <session_manager/dbus-proxies.h> 24c92195c0f6cba4851b7352062bba03c95b7a7e94Sen Jiang#endif // USE_DBUS 2594c0616c9f81b65154953ac31e488cc87191e17cAlex Deymo 2639910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/clock_interface.h" 272058a99cc5360f379949e040b72baf1028c74e8aSen Jiang#if USE_DBUS 282058a99cc5360f379949e040b72baf1028c74e8aSen Jiang#include "update_engine/dbus_connection.h" 292058a99cc5360f379949e040b72baf1028c74e8aSen Jiang#endif // USE_DBUS 30c92195c0f6cba4851b7352062bba03c95b7a7e94Sen Jiang#include "update_engine/update_manager/fake_shill_provider.h" 3163784a578dd26880454d70797519358a2326291bAlex Deymo#include "update_engine/update_manager/real_config_provider.h" 3263784a578dd26880454d70797519358a2326291bAlex Deymo#include "update_engine/update_manager/real_device_policy_provider.h" 3363784a578dd26880454d70797519358a2326291bAlex Deymo#include "update_engine/update_manager/real_random_provider.h" 3463784a578dd26880454d70797519358a2326291bAlex Deymo#include "update_engine/update_manager/real_state.h" 3563784a578dd26880454d70797519358a2326291bAlex Deymo#include "update_engine/update_manager/real_system_provider.h" 3663784a578dd26880454d70797519358a2326291bAlex Deymo#include "update_engine/update_manager/real_time_provider.h" 3763784a578dd26880454d70797519358a2326291bAlex Deymo#include "update_engine/update_manager/real_updater_provider.h" 382058a99cc5360f379949e040b72baf1028c74e8aSen Jiang#if USE_SHILL 39c92195c0f6cba4851b7352062bba03c95b7a7e94Sen Jiang#include "update_engine/shill_proxy.h" 40c92195c0f6cba4851b7352062bba03c95b7a7e94Sen Jiang#include "update_engine/update_manager/real_shill_provider.h" 412058a99cc5360f379949e040b72baf1028c74e8aSen Jiang#endif // USE_SHILL 4294c0616c9f81b65154953ac31e488cc87191e17cAlex Deymo 4302f7c1dee242f490143791dbb73fa23fa3007cfaBen Chanusing std::unique_ptr; 4402f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan 4563784a578dd26880454d70797519358a2326291bAlex Deymonamespace chromeos_update_manager { 4694c0616c9f81b65154953ac31e488cc87191e17cAlex Deymo 47305345001d85ca2282112c2a30fe75c7a4773491Alex DeymoState* DefaultStateFactory( 48305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo policy::PolicyProvider* policy_provider, 49e5f6f2571d43eb65e0b27dd8d50f2c1f0b3fe30fDaniel Erat org::chromium::LibCrosServiceInterfaceProxyInterface* libcros_proxy, 50305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo chromeos_update_engine::SystemState* system_state) { 51ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold chromeos_update_engine::ClockInterface* const clock = system_state->clock(); 5202f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan unique_ptr<RealConfigProvider> config_provider( 5348e1361ae568032754aa9f297a0f29fda437ccfbGilad Arnold new RealConfigProvider(system_state->hardware())); 54c92195c0f6cba4851b7352062bba03c95b7a7e94Sen Jiang#if USE_DBUS 559730679339fbf3e52a706dcab36eaeffbc71e404Sen Jiang scoped_refptr<dbus::Bus> bus = 569730679339fbf3e52a706dcab36eaeffbc71e404Sen Jiang chromeos_update_engine::DBusConnection::Get()->GetDBus(); 5702f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan unique_ptr<RealDevicePolicyProvider> device_policy_provider( 589730679339fbf3e52a706dcab36eaeffbc71e404Sen Jiang new RealDevicePolicyProvider( 59ab5a0af8e6ebac0211da5b08010e4855ce463108Ben Chan std::make_unique<org::chromium::SessionManagerInterfaceProxy>(bus), 609730679339fbf3e52a706dcab36eaeffbc71e404Sen Jiang policy_provider)); 61c92195c0f6cba4851b7352062bba03c95b7a7e94Sen Jiang#else 62c92195c0f6cba4851b7352062bba03c95b7a7e94Sen Jiang unique_ptr<RealDevicePolicyProvider> device_policy_provider( 63c92195c0f6cba4851b7352062bba03c95b7a7e94Sen Jiang new RealDevicePolicyProvider(policy_provider)); 64c92195c0f6cba4851b7352062bba03c95b7a7e94Sen Jiang#endif // USE_DBUS 652058a99cc5360f379949e040b72baf1028c74e8aSen Jiang#if USE_SHILL 662058a99cc5360f379949e040b72baf1028c74e8aSen Jiang unique_ptr<RealShillProvider> shill_provider( 672058a99cc5360f379949e040b72baf1028c74e8aSen Jiang new RealShillProvider(new chromeos_update_engine::ShillProxy(), clock)); 682058a99cc5360f379949e040b72baf1028c74e8aSen Jiang#else 692058a99cc5360f379949e040b72baf1028c74e8aSen Jiang unique_ptr<FakeShillProvider> shill_provider(new FakeShillProvider()); 702058a99cc5360f379949e040b72baf1028c74e8aSen Jiang#endif // USE_SHILL 71c92195c0f6cba4851b7352062bba03c95b7a7e94Sen Jiang unique_ptr<RealRandomProvider> random_provider(new RealRandomProvider()); 72f5bebaef8dd12ff71baaf6fb4d4543db3615a6b4Sen Jiang unique_ptr<RealSystemProvider> system_provider(new RealSystemProvider( 73f5bebaef8dd12ff71baaf6fb4d4543db3615a6b4Sen Jiang system_state->hardware(), system_state->boot_control(), libcros_proxy)); 7447186290f8b02cca27574188d72d49f3841f9f4eAmin Hassani 7502f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan unique_ptr<RealTimeProvider> time_provider(new RealTimeProvider(clock)); 7602f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan unique_ptr<RealUpdaterProvider> updater_provider( 77ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold new RealUpdaterProvider(system_state)); 7894c0616c9f81b65154953ac31e488cc87191e17cAlex Deymo 79f9f1263f37b72c950ea443a162b3e71c33a05d0dAlex Deymo if (!(config_provider->Init() && 80f9f1263f37b72c950ea443a162b3e71c33a05d0dAlex Deymo device_policy_provider->Init() && 81c83baf63f764104e9472e74f293baf0982ac0280Alex Deymo random_provider->Init() && 822058a99cc5360f379949e040b72baf1028c74e8aSen Jiang#if USE_SHILL 8394c0616c9f81b65154953ac31e488cc87191e17cAlex Deymo shill_provider->Init() && 842058a99cc5360f379949e040b72baf1028c74e8aSen Jiang#endif // USE_SHILL 8594c0616c9f81b65154953ac31e488cc87191e17cAlex Deymo system_provider->Init() && 86ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold time_provider->Init() && 87ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold updater_provider->Init())) { 8894c0616c9f81b65154953ac31e488cc87191e17cAlex Deymo LOG(ERROR) << "Error initializing providers"; 8988b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko return nullptr; 9094c0616c9f81b65154953ac31e488cc87191e17cAlex Deymo } 9194c0616c9f81b65154953ac31e488cc87191e17cAlex Deymo 924e89e2cfcf17ddc8412e6eee7b91a31954f55f54David Zeuthen return new RealState(config_provider.release(), 934e89e2cfcf17ddc8412e6eee7b91a31954f55f54David Zeuthen device_policy_provider.release(), 944e89e2cfcf17ddc8412e6eee7b91a31954f55f54David Zeuthen random_provider.release(), 954e89e2cfcf17ddc8412e6eee7b91a31954f55f54David Zeuthen shill_provider.release(), 964e89e2cfcf17ddc8412e6eee7b91a31954f55f54David Zeuthen system_provider.release(), 974e89e2cfcf17ddc8412e6eee7b91a31954f55f54David Zeuthen time_provider.release(), 984e89e2cfcf17ddc8412e6eee7b91a31954f55f54David Zeuthen updater_provider.release()); 9994c0616c9f81b65154953ac31e488cc87191e17cAlex Deymo} 10094c0616c9f81b65154953ac31e488cc87191e17cAlex Deymo 10163784a578dd26880454d70797519358a2326291bAlex Deymo} // namespace chromeos_update_manager 102