update_engine: Add rollback_allowed policy in Omaha requests
Send rollback_allowed="true" parameter to Omaha if rollback is
allowed through enterprise policy.
This parameter indicates to Omaha that the returned image might
be a rollback image, if the targetversionprefix parameter is set
and it is an earlier version than the one which is currently on
the device.
Also, this CL changes update_engine behavior to only send
targetversionprefix to Omaha if it's not empty.
BUG=chromium:814830
TEST='cros_run_unit_tests --board=cyan --packages update_engine'
Change-Id: Iaa5503e217631311fb9ba3a5237ccbfedf04afe9
Reviewed-on: https://chromium-review.googlesource.com/932123
Commit-Ready: Marton Hunyady <hunyadym@chromium.org>
Tested-by: Marton Hunyady <hunyadym@chromium.org>
Reviewed-by: Amin Hassani <ahassani@chromium.org>
diff --git a/update_attempter.cc b/update_attempter.cc
index 10118ac..9d18932 100644
--- a/update_attempter.cc
+++ b/update_attempter.cc
@@ -241,6 +241,7 @@
const string& omaha_url,
const string& target_channel,
const string& target_version_prefix,
+ bool rollback_allowed,
bool obey_proxies,
bool interactive) {
// This is normally called frequently enough so it's appropriate to use as a
@@ -279,6 +280,7 @@
omaha_url,
target_channel,
target_version_prefix,
+ rollback_allowed,
obey_proxies,
interactive)) {
return;
@@ -354,6 +356,7 @@
const string& omaha_url,
const string& target_channel,
const string& target_version_prefix,
+ bool rollback_allowed,
bool obey_proxies,
bool interactive) {
http_response_code_ = 0;
@@ -369,6 +372,9 @@
// Update the target version prefix.
omaha_request_params_->set_target_version_prefix(target_version_prefix);
+ // Set whether rollback is allowed.
+ omaha_request_params_->set_rollback_allowed(rollback_allowed);
+
CalculateScatteringParams(interactive);
CalculateP2PParams(interactive);
@@ -414,6 +420,8 @@
LOG(INFO) << "target_version_prefix = "
<< omaha_request_params_->target_version_prefix()
+ << ", rollback_allowed = "
+ << omaha_request_params_->rollback_allowed()
<< ", scatter_factor_in_seconds = "
<< utils::FormatSecs(scatter_factor_.InSeconds());
@@ -885,8 +893,13 @@
LOG(INFO) << "Update attempt flags in use = 0x" << std::hex
<< current_update_attempt_flags_;
- Update(forced_app_version_, forced_omaha_url_, params.target_channel,
- params.target_version_prefix, false, params.is_interactive);
+ Update(forced_app_version_,
+ forced_omaha_url_,
+ params.target_channel,
+ params.target_version_prefix,
+ params.rollback_allowed,
+ /*obey_proxies=*/false,
+ params.is_interactive);
// Always clear the forced app_version and omaha_url after an update attempt
// so the next update uses the defaults.
forced_app_version_.clear();