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. 41 bool Init() { return true; } 42 43 Variable<base::Time>* var_updater_started_time() override { 44 return &var_updater_started_time_; 45 } 46 47 Variable<base::Time>* var_last_checked_time() override { 48 return var_last_checked_time_.get(); 49 } 50 51 Variable<base::Time>* var_update_completed_time() override { 52 return var_update_completed_time_.get(); 53 } 54 55 Variable<double>* var_progress() override { 56 return var_progress_.get(); 57 } 58 59 Variable<Stage>* var_stage() override { 60 return var_stage_.get(); 61 } 62 63 Variable<std::string>* var_new_version() override { 64 return var_new_version_.get(); 65 } 66 67 Variable<uint64_t>* var_payload_size() override { 68 return var_payload_size_.get(); 69 } 70 71 Variable<std::string>* var_curr_channel() override { 72 return var_curr_channel_.get(); 73 } 74 75 Variable<std::string>* var_new_channel() override { 76 return var_new_channel_.get(); 77 } 78 79 Variable<bool>* var_p2p_enabled() override { 80 return var_p2p_enabled_.get(); 81 } 82 83 Variable<bool>* var_cellular_enabled() override { 84 return var_cellular_enabled_.get(); 85 } 86 87 Variable<unsigned int>* var_consecutive_failed_update_checks() override { 88 return var_consecutive_failed_update_checks_.get(); 89 } 90 91 Variable<unsigned int>* var_server_dictated_poll_interval() override { 92 return var_server_dictated_poll_interval_.get(); 93 } 94 95 Variable<UpdateRequestStatus>* var_forced_update_requested() override { 96 return var_forced_update_requested_.get(); 97 } 98 99 Variable<UpdateRestrictions>* var_update_restrictions() override { 100 return var_update_restrictions_.get(); 101 } 102 103 private: 104 // A pointer to the update engine's system state aggregator. 105 chromeos_update_engine::SystemState* system_state_; 106 107 // Variable implementations. 108 ConstCopyVariable<base::Time> var_updater_started_time_; 109 std::unique_ptr<Variable<base::Time>> var_last_checked_time_; 110 std::unique_ptr<Variable<base::Time>> var_update_completed_time_; 111 std::unique_ptr<Variable<double>> var_progress_; 112 std::unique_ptr<Variable<Stage>> var_stage_; 113 std::unique_ptr<Variable<std::string>> var_new_version_; 114 std::unique_ptr<Variable<uint64_t>> var_payload_size_; 115 std::unique_ptr<Variable<std::string>> var_curr_channel_; 116 std::unique_ptr<Variable<std::string>> var_new_channel_; 117 std::unique_ptr<Variable<bool>> var_p2p_enabled_; 118 std::unique_ptr<Variable<bool>> var_cellular_enabled_; 119 std::unique_ptr<Variable<unsigned int>> var_consecutive_failed_update_checks_; 120 std::unique_ptr<Variable<unsigned int>> var_server_dictated_poll_interval_; 121 std::unique_ptr<Variable<UpdateRequestStatus>> var_forced_update_requested_; 122 std::unique_ptr<Variable<UpdateRestrictions>> var_update_restrictions_; 123 124 DISALLOW_COPY_AND_ASSIGN(RealUpdaterProvider); 125 }; 126 127 } // namespace chromeos_update_manager 128 129 #endif // UPDATE_ENGINE_UPDATE_MANAGER_REAL_UPDATER_PROVIDER_H_ 130