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// 16ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 1748415f1f6c6c356bfa9ac85b76d8ebcf053f7157Gilad Arnold#ifndef UPDATE_ENGINE_UPDATE_MANAGER_REAL_UPDATER_PROVIDER_H_ 1848415f1f6c6c356bfa9ac85b76d8ebcf053f7157Gilad Arnold#define UPDATE_ENGINE_UPDATE_MANAGER_REAL_UPDATER_PROVIDER_H_ 1948415f1f6c6c356bfa9ac85b76d8ebcf053f7157Gilad Arnold 2002f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan#include <memory> 2148415f1f6c6c356bfa9ac85b76d8ebcf053f7157Gilad Arnold#include <string> 22ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 23ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold#include "update_engine/system_state.h" 2463784a578dd26880454d70797519358a2326291bAlex Deymo#include "update_engine/update_manager/generic_variables.h" 2563784a578dd26880454d70797519358a2326291bAlex Deymo#include "update_engine/update_manager/updater_provider.h" 26ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 2763784a578dd26880454d70797519358a2326291bAlex Deymonamespace chromeos_update_manager { 28ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 29ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold// A concrete UpdaterProvider implementation using local (in-process) bindings. 30ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnoldclass RealUpdaterProvider : public UpdaterProvider { 31ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold public: 32ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold // We assume that any other object handle we get from the system state is 33ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold // "volatile", and so must be re-acquired whenever access is needed; this 34ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold // guarantees that parts of the system state can be mocked out at any time 35ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold // during testing. We further assume that, by the time Init() is called, the 36ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold // system state object is fully populated and usable. 37ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold explicit RealUpdaterProvider( 38ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold chromeos_update_engine::SystemState* system_state); 39ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 4042c30c376cb7b0b459ff0cbf3ac23fe87ea64f4dAlex Deymo // Initializes the provider and returns whether it succeeded. 4142c30c376cb7b0b459ff0cbf3ac23fe87ea64f4dAlex Deymo bool Init() { return true; } 4242c30c376cb7b0b459ff0cbf3ac23fe87ea64f4dAlex Deymo 43157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko Variable<base::Time>* var_updater_started_time() override { 44c7ab6168dc9ccb72b9057fd7452c2a9eaf993269Alex Deymo return &var_updater_started_time_; 45c7ab6168dc9ccb72b9057fd7452c2a9eaf993269Alex Deymo } 46c7ab6168dc9ccb72b9057fd7452c2a9eaf993269Alex Deymo 47157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko Variable<base::Time>* var_last_checked_time() override { 48ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold return var_last_checked_time_.get(); 49ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold } 50ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 51157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko Variable<base::Time>* var_update_completed_time() override { 52ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold return var_update_completed_time_.get(); 53ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold } 54ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 55157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko Variable<double>* var_progress() override { 56ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold return var_progress_.get(); 57ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold } 58ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 59157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko Variable<Stage>* var_stage() override { 60ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold return var_stage_.get(); 61ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold } 62ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 63157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko Variable<std::string>* var_new_version() override { 64ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold return var_new_version_.get(); 65ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold } 66ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 67157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko Variable<int64_t>* var_payload_size() override { 68ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold return var_payload_size_.get(); 69ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold } 70ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 71157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko Variable<std::string>* var_curr_channel() override { 72ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold return var_curr_channel_.get(); 73ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold } 74ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 75157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko Variable<std::string>* var_new_channel() override { 76ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold return var_new_channel_.get(); 77ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold } 78ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 79157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko Variable<bool>* var_p2p_enabled() override { 80ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold return var_p2p_enabled_.get(); 81ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold } 82ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 83157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko Variable<bool>* var_cellular_enabled() override { 84ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold return var_cellular_enabled_.get(); 85ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold } 86ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 87157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko Variable<unsigned int>* var_consecutive_failed_update_checks() override { 88a6dab94046bcd6c560c822e0175c75427368ab20Gilad Arnold return var_consecutive_failed_update_checks_.get(); 89a6dab94046bcd6c560c822e0175c75427368ab20Gilad Arnold } 90a6dab94046bcd6c560c822e0175c75427368ab20Gilad Arnold 91157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko Variable<unsigned int>* var_server_dictated_poll_interval() override { 92a0258a557d36ff78eacdacd39bdc88c5e6c1056eGilad Arnold return var_server_dictated_poll_interval_.get(); 93a0258a557d36ff78eacdacd39bdc88c5e6c1056eGilad Arnold } 94a0258a557d36ff78eacdacd39bdc88c5e6c1056eGilad Arnold 95ec7f91625b799abf67ea3119490f2f1de8e4e677Gilad Arnold Variable<UpdateRequestStatus>* var_forced_update_requested() override { 96ec7f91625b799abf67ea3119490f2f1de8e4e677Gilad Arnold return var_forced_update_requested_.get(); 9744dc3bfd45eaddc1e7b586f8839babe4540418b5Gilad Arnold } 9844dc3bfd45eaddc1e7b586f8839babe4540418b5Gilad Arnold 9921716e2da121769b4d473c30360e88ef3061de15David Zeuthen private: 100ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold // A pointer to the update engine's system state aggregator. 101ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold chromeos_update_engine::SystemState* system_state_; 102ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 103c7ab6168dc9ccb72b9057fd7452c2a9eaf993269Alex Deymo // Variable implementations. 104c7ab6168dc9ccb72b9057fd7452c2a9eaf993269Alex Deymo ConstCopyVariable<base::Time> var_updater_started_time_; 10502f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan std::unique_ptr<Variable<base::Time>> var_last_checked_time_; 10602f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan std::unique_ptr<Variable<base::Time>> var_update_completed_time_; 10702f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan std::unique_ptr<Variable<double>> var_progress_; 10802f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan std::unique_ptr<Variable<Stage>> var_stage_; 10902f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan std::unique_ptr<Variable<std::string>> var_new_version_; 11002f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan std::unique_ptr<Variable<int64_t>> var_payload_size_; 11102f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan std::unique_ptr<Variable<std::string>> var_curr_channel_; 11202f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan std::unique_ptr<Variable<std::string>> var_new_channel_; 11302f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan std::unique_ptr<Variable<bool>> var_p2p_enabled_; 11402f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan std::unique_ptr<Variable<bool>> var_cellular_enabled_; 11502f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan std::unique_ptr<Variable<unsigned int>> var_consecutive_failed_update_checks_; 11602f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan std::unique_ptr<Variable<unsigned int>> var_server_dictated_poll_interval_; 11702f7c1dee242f490143791dbb73fa23fa3007cfaBen Chan std::unique_ptr<Variable<UpdateRequestStatus>> var_forced_update_requested_; 118ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 119ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold DISALLOW_COPY_AND_ASSIGN(RealUpdaterProvider); 120ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold}; 121ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 12263784a578dd26880454d70797519358a2326291bAlex Deymo} // namespace chromeos_update_manager 123ae47a9a77704bbf2b1b271e306dbde90babd9f55Gilad Arnold 12448415f1f6c6c356bfa9ac85b76d8ebcf053f7157Gilad Arnold#endif // UPDATE_ENGINE_UPDATE_MANAGER_REAL_UPDATER_PROVIDER_H_ 125