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