Home | History | Annotate | Download | only in update_manager
      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 
     43 using std::unique_ptr;
     44 
     45 namespace chromeos_update_manager {
     46 
     47 State* 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