Don't send components version if changing to more stable channel.
am: 8cd4234494
Change-Id: I6f92b11b823ab83a08fe41e0ba7f9b6983fd5763
diff --git a/omaha_request_action.cc b/omaha_request_action.cc
index c4db0c7..a8b8a94 100644
--- a/omaha_request_action.cc
+++ b/omaha_request_action.cc
@@ -21,6 +21,7 @@
#include <map>
#include <sstream>
#include <string>
+#include <utility>
#include <vector>
#include <base/bind.h>
@@ -235,10 +236,12 @@
system_state->prefs());
string app_versions;
- // If we are upgrading to a more stable channel and we are allowed to do
+ // If we are downgrading to a more stable channel and we are allowed to do
// powerwash, then pass 0.0.0.0 as the version. This is needed to get the
// highest-versioned payload on the destination channel.
- if (params->to_more_stable_channel() && params->is_powerwash_allowed()) {
+ bool is_potential_downgrade =
+ params->to_more_stable_channel() && params->is_powerwash_allowed();
+ if (is_potential_downgrade) {
LOG(INFO) << "Passing OS version as 0.0.0.0 as we are set to powerwash "
<< "on downgrading to the version in the more stable channel";
app_versions = "version=\"0.0.0.0\" from_version=\"" +
@@ -276,8 +279,9 @@
string fingerprint_arg;
if (!params->os_build_fingerprint().empty()) {
- fingerprint_arg =
- "fingerprint=\"" + XmlEncodeWithDefault(params->os_build_fingerprint(), "") + "\" ";
+ fingerprint_arg = "fingerprint=\"" +
+ XmlEncodeWithDefault(params->os_build_fingerprint(), "") +
+ "\" ";
}
string buildtype_arg;
@@ -287,7 +291,7 @@
}
string product_components_args;
- if (!app_data.product_components.empty()) {
+ if (!is_potential_downgrade && !app_data.product_components.empty()) {
brillo::KeyValueStore store;
if (store.LoadFromString(app_data.product_components)) {
for (const string& key : store.GetKeys()) {
diff --git a/omaha_request_action_unittest.cc b/omaha_request_action_unittest.cc
index d57abe5..87dc404 100644
--- a/omaha_request_action_unittest.cc
+++ b/omaha_request_action_unittest.cc
@@ -812,7 +812,7 @@
TEST_F(OmahaRequestActionTest, SkipNonCriticalUpdatesBeforeOOBE) {
OmahaResponse response;
- // TODO set better default value for metrics::checkresult in
+ // TODO(senj): set better default value for metrics::checkresult in
// OmahaRequestAction::ActionCompleted.
fake_system_state_.fake_hardware()->UnsetIsOOBEComplete();
ASSERT_FALSE(TestUpdateCheck(nullptr, // request_params
@@ -2184,6 +2184,7 @@
params.set_root(tempdir.GetPath().value());
params.set_app_id("{22222222-2222-2222-2222-222222222222}");
params.set_app_version("1.2.3.4");
+ params.set_product_components("o.bundle=1");
params.set_current_channel("canary-channel");
EXPECT_TRUE(params.SetTargetChannel("stable-channel", true, nullptr));
params.UpdateDownloadChannel();
@@ -2205,6 +2206,7 @@
"appid=\"{22222222-2222-2222-2222-222222222222}\" "
"version=\"0.0.0.0\" from_version=\"1.2.3.4\" "
"track=\"stable-channel\" from_track=\"canary-channel\" "));
+ EXPECT_EQ(string::npos, post_str.find("o.bundle"));
}
TEST_F(OmahaRequestActionTest, TestChangingToLessStableChannel) {
@@ -2217,6 +2219,7 @@
params.set_root(tempdir.GetPath().value());
params.set_app_id("{11111111-1111-1111-1111-111111111111}");
params.set_app_version("5.6.7.8");
+ params.set_product_components("o.bundle=1");
params.set_current_channel("stable-channel");
EXPECT_TRUE(params.SetTargetChannel("canary-channel", false, nullptr));
params.UpdateDownloadChannel();
@@ -2239,6 +2242,7 @@
"version=\"5.6.7.8\" "
"track=\"canary-channel\" from_track=\"stable-channel\""));
EXPECT_EQ(string::npos, post_str.find("from_version"));
+ EXPECT_NE(string::npos, post_str.find("o.bundle.version=\"1\""));
}
// Checks that the initial ping with a=-1 r=-1 is not send when the device
diff --git a/omaha_request_params.h b/omaha_request_params.h
index 6284ee1..a9215ae 100644
--- a/omaha_request_params.h
+++ b/omaha_request_params.h
@@ -133,6 +133,9 @@
inline std::string product_components() const {
return image_props_.product_components;
}
+ inline void set_product_components(const std::string& product_components) {
+ image_props_.product_components = product_components;
+ }
inline std::string current_channel() const {
return image_props_.current_channel;