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