update_engine: Support milestones to EOL from Omaha
Initiative to show EOL message on Chrome OS devices require that
update_engine parses the fields within Omaha response that pertain to the
new milestones to EOL field. The Omaha response will include a new
field called "milestones_to_eol" which will be an integer value
string.
The job of update_engine when it comes to milestones to EOL from Omaha
is to merely forward. No checks and no modifications of fields are
done within update_engine besides being able to convert the milestones
to EOL from a string to integer.
BUG=chromium:994999
TEST=FEATURES="test" emerge-$BOARD update_engine update_engine-client
TEST=cros deploy $IP update_engine update_engine-client
TEST=test_that -b $BOARD $IP autoupdate_EOL # from Cq-Depend
TEST=test_that -b $BOARD $IP autoupdate_EOL.milestones # from Cq-Depend
Cq-Depend:chromium:1761371
Change-Id: I268e4c8e641b17d6a727a50f53285cc97c76eb22
Reviewed-on: https://chromium-review.googlesource.com/1759285
Tested-by: Jae Hoon Kim <kimjae@chromium.org>
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
Reviewed-by: Nicolas Norvez <norvez@chromium.org>
Reviewed-by: Amin Hassani <ahassani@chromium.org>
diff --git a/omaha_request_action.cc b/omaha_request_action.cc
index 6c67a3b..8da7e29 100644
--- a/omaha_request_action.cc
+++ b/omaha_request_action.cc
@@ -109,6 +109,7 @@
// updatecheck attributes (without the underscore prefix).
constexpr char kAttrEol[] = "eol";
+constexpr char kAttrMilestonesToEol[] = "milestones_to_eol";
constexpr char kAttrRollback[] = "rollback";
constexpr char kAttrFirmwareVersion[] = "firmware_version";
constexpr char kAttrKernelVersion[] = "kernel_version";
@@ -1315,13 +1316,28 @@
bool OmahaRequestAction::PersistEolStatus(const map<string, string>& attrs) {
auto eol_attr = attrs.find(kAttrEol);
- if (eol_attr != attrs.end()) {
- return system_state_->prefs()->SetString(kPrefsOmahaEolStatus,
- eol_attr->second);
- } else if (system_state_->prefs()->Exists(kPrefsOmahaEolStatus)) {
- return system_state_->prefs()->Delete(kPrefsOmahaEolStatus);
+ auto milestones_to_eol_attr = attrs.find(kAttrMilestonesToEol);
+
+ bool ret = true;
+ if (milestones_to_eol_attr == attrs.end()) {
+ system_state_->prefs()->Delete(kPrefsOmahaMilestonesToEol);
+ if (eol_attr != attrs.end()) {
+ LOG(WARNING) << "Milestones to EOL missing when EOL.";
+ }
+ } else if (!system_state_->prefs()->SetString(
+ kPrefsOmahaMilestonesToEol, milestones_to_eol_attr->second)) {
+ LOG(ERROR) << "Setting milestones to EOL failed.";
+ ret = false;
}
- return true;
+
+ if (eol_attr == attrs.end()) {
+ system_state_->prefs()->Delete(kPrefsOmahaEolStatus);
+ } else if (!system_state_->prefs()->SetString(kPrefsOmahaEolStatus,
+ eol_attr->second)) {
+ LOG(ERROR) << "Setting EOL failed.";
+ ret = false;
+ }
+ return ret;
}
void OmahaRequestAction::ActionCompleted(ErrorCode code) {