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_UPDATER_PROVIDER_H_ 18 #define UPDATE_ENGINE_UPDATE_MANAGER_REAL_UPDATER_PROVIDER_H_ 19 20 #include <memory> 21 #include <string> 22 23 #include "update_engine/system_state.h" 24 #include "update_engine/update_manager/generic_variables.h" 25 #include "update_engine/update_manager/updater_provider.h" 26 27 namespace chromeos_update_manager { 28 29 // A concrete UpdaterProvider implementation using local (in-process) bindings. 30 class RealUpdaterProvider : public UpdaterProvider { 31 public: 32 // We assume that any other object handle we get from the system state is 33 // "volatile", and so must be re-acquired whenever access is needed; this 34 // guarantees that parts of the system state can be mocked out at any time 35 // during testing. We further assume that, by the time Init() is called, the 36 // system state object is fully populated and usable. 37 explicit RealUpdaterProvider( 38 chromeos_update_engine::SystemState* system_state); 39 40 // Initializes the provider and returns whether it succeeded. Init()41 bool Init() { return true; } 42 var_updater_started_time()43 Variable<base::Time>* var_updater_started_time() override { 44 return &var_updater_started_time_; 45 } 46 var_last_checked_time()47 Variable<base::Time>* var_last_checked_time() override { 48 return var_last_checked_time_.get(); 49 } 50 var_update_completed_time()51 Variable<base::Time>* var_update_completed_time() override { 52 return var_update_completed_time_.get(); 53 } 54 var_progress()55 Variable<double>* var_progress() override { 56 return var_progress_.get(); 57 } 58 var_stage()59 Variable<Stage>* var_stage() override { 60 return var_stage_.get(); 61 } 62 var_new_version()63 Variable<std::string>* var_new_version() override { 64 return var_new_version_.get(); 65 } 66 var_payload_size()67 Variable<int64_t>* var_payload_size() override { 68 return var_payload_size_.get(); 69 } 70 var_curr_channel()71 Variable<std::string>* var_curr_channel() override { 72 return var_curr_channel_.get(); 73 } 74 var_new_channel()75 Variable<std::string>* var_new_channel() override { 76 return var_new_channel_.get(); 77 } 78 var_p2p_enabled()79 Variable<bool>* var_p2p_enabled() override { 80 return var_p2p_enabled_.get(); 81 } 82 var_cellular_enabled()83 Variable<bool>* var_cellular_enabled() override { 84 return var_cellular_enabled_.get(); 85 } 86 var_consecutive_failed_update_checks()87 Variable<unsigned int>* var_consecutive_failed_update_checks() override { 88 return var_consecutive_failed_update_checks_.get(); 89 } 90 var_server_dictated_poll_interval()91 Variable<unsigned int>* var_server_dictated_poll_interval() override { 92 return var_server_dictated_poll_interval_.get(); 93 } 94 var_forced_update_requested()95 Variable<UpdateRequestStatus>* var_forced_update_requested() override { 96 return var_forced_update_requested_.get(); 97 } 98 99 private: 100 // A pointer to the update engine's system state aggregator. 101 chromeos_update_engine::SystemState* system_state_; 102 103 // Variable implementations. 104 ConstCopyVariable<base::Time> var_updater_started_time_; 105 std::unique_ptr<Variable<base::Time>> var_last_checked_time_; 106 std::unique_ptr<Variable<base::Time>> var_update_completed_time_; 107 std::unique_ptr<Variable<double>> var_progress_; 108 std::unique_ptr<Variable<Stage>> var_stage_; 109 std::unique_ptr<Variable<std::string>> var_new_version_; 110 std::unique_ptr<Variable<int64_t>> var_payload_size_; 111 std::unique_ptr<Variable<std::string>> var_curr_channel_; 112 std::unique_ptr<Variable<std::string>> var_new_channel_; 113 std::unique_ptr<Variable<bool>> var_p2p_enabled_; 114 std::unique_ptr<Variable<bool>> var_cellular_enabled_; 115 std::unique_ptr<Variable<unsigned int>> var_consecutive_failed_update_checks_; 116 std::unique_ptr<Variable<unsigned int>> var_server_dictated_poll_interval_; 117 std::unique_ptr<Variable<UpdateRequestStatus>> var_forced_update_requested_; 118 119 DISALLOW_COPY_AND_ASSIGN(RealUpdaterProvider); 120 }; 121 122 } // namespace chromeos_update_manager 123 124 #endif // UPDATE_ENGINE_UPDATE_MANAGER_REAL_UPDATER_PROVIDER_H_ 125