Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Unified Diff: omaha_request_params.cc

Issue 4103002: AU: Implement switching of tracks through SetTrack. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/update_engine.git
Patch Set: review comments Created 10 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « omaha_request_params.h ('k') | omaha_request_params_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: omaha_request_params.cc
diff --git a/omaha_request_params.cc b/omaha_request_params.cc
index 9f6e82b7ff5140dc05de2a03ba85e0774e68bac1..03327b252657c1bd69ea4528f3741decadfbfef8 100644
--- a/omaha_request_params.cc
+++ b/omaha_request_params.cc
@@ -11,16 +11,21 @@
#include <map>
#include <string>
-#include "base/file_util.h"
-#include "base/string_util.h"
+#include <base/file_util.h>
+#include <base/string_util.h>
+
#include "update_engine/simple_key_value_store.h"
#include "update_engine/utils.h"
+#define CALL_MEMBER_FN(object, member) ((object).*(member))
+
using std::map;
using std::string;
namespace chromeos_update_engine {
+const char OmahaRequestParams::kUpdateTrackKey[] = "CHROMEOS_RELEASE_TRACK";
+
const char* const OmahaRequestParams::kAppId(
"{87efface-864d-49a5-9bb3-4b050a7c227a}");
const char* const OmahaRequestParams::kOsPlatform("Chrome OS");
@@ -30,17 +35,24 @@ const char* const OmahaRequestParams::kUpdateUrl(
static const char kHWIDPath[] = "/sys/devices/platform/chromeos_acpi/HWID";
+OmahaRequestDeviceParams::OmahaRequestDeviceParams() :
+ force_build_type_(false),
+ forced_official_build_(false) {}
+
bool OmahaRequestDeviceParams::Init(const std::string& in_app_version,
const std::string& in_update_url) {
os_platform = OmahaRequestParams::kOsPlatform;
os_version = OmahaRequestParams::kOsVersion;
app_version = in_app_version.empty() ?
- GetLsbValue("CHROMEOS_RELEASE_VERSION", "") : in_app_version;
+ GetLsbValue("CHROMEOS_RELEASE_VERSION", "", NULL) : in_app_version;
os_sp = app_version + "_" + GetMachineType();
- os_board = GetLsbValue("CHROMEOS_RELEASE_BOARD", "");
+ os_board = GetLsbValue("CHROMEOS_RELEASE_BOARD", "", NULL);
app_id = OmahaRequestParams::kAppId;
app_lang = "en-US";
- app_track = GetLsbValue("CHROMEOS_RELEASE_TRACK", "");
+ app_track = GetLsbValue(
+ kUpdateTrackKey,
+ "",
+ &chromeos_update_engine::OmahaRequestDeviceParams::IsValidTrack);
hardware_class = GetHardwareClass();
struct stat stbuf;
@@ -51,13 +63,38 @@ bool OmahaRequestDeviceParams::Init(const std::string& in_app_version,
(errno == ENOENT);
update_url = in_update_url.empty() ?
- GetLsbValue("CHROMEOS_AUSERVER", OmahaRequestParams::kUpdateUrl) :
+ GetLsbValue("CHROMEOS_AUSERVER", OmahaRequestParams::kUpdateUrl, NULL) :
in_update_url;
return true;
}
-string OmahaRequestDeviceParams::GetLsbValue(
- const string& key, const string& default_value) const {
+bool OmahaRequestDeviceParams::SetTrack(const std::string& track) {
+ TEST_AND_RETURN_FALSE(IsValidTrack(track));
+ FilePath kFile(root_ + utils::kStatefulPartition + "/etc/lsb-release");
+ string file_data;
+ map<string, string> data;
+ if (file_util::ReadFileToString(kFile, &file_data)) {
+ data = simple_key_value_store::ParseString(file_data);
+ }
+ data[kUpdateTrackKey] = track;
+ file_data = simple_key_value_store::AssembleString(data);
+ TEST_AND_RETURN_FALSE(file_util::CreateDirectory(kFile.DirName()));
+ TEST_AND_RETURN_FALSE(
+ file_util::WriteFile(kFile, file_data.data(), file_data.size()) ==
+ static_cast<int>(file_data.size()));
+ app_track = track;
+ return true;
+}
+
+bool OmahaRequestDeviceParams::SetDeviceTrack(const std::string& track) {
+ OmahaRequestDeviceParams params;
+ TEST_AND_RETURN_FALSE(params.Init("", ""));
+ return params.SetTrack(track);
+}
+
+string OmahaRequestDeviceParams::GetLsbValue(const string& key,
+ const string& default_value,
+ ValueValidator validator) const {
string files[] = {string(utils::kStatefulPartition) + "/etc/lsb-release",
"/etc/lsb-release"};
for (unsigned int i = 0; i < arraysize(files); ++i) {
@@ -68,8 +105,13 @@ string OmahaRequestDeviceParams::GetLsbValue(
continue;
map<string, string> data = simple_key_value_store::ParseString(file_data);
- if (utils::MapContainsKey(data, key))
- return data[key];
+ if (utils::MapContainsKey(data, key)) {
+ const string& value = data[key];
+ if (validator && !CALL_MEMBER_FN(*this, validator)(value)) {
+ continue;
+ }
+ return value;
+ }
}
// not found
return default_value;
@@ -93,4 +135,18 @@ string OmahaRequestDeviceParams::GetHardwareClass() const {
return hwid;
}
+bool OmahaRequestDeviceParams::IsOfficialBuild() const {
+ return force_build_type_ ? forced_official_build_ : utils::IsOfficialBuild();
+}
+
+bool OmahaRequestDeviceParams::IsValidTrack(const std::string& track) const {
+ return IsOfficialBuild() ?
+ (track == "beta-channel" || track == "dev-channel") : true;
+}
+
+void OmahaRequestDeviceParams::SetBuildTypeOfficial(bool is_official) {
+ force_build_type_ = true;
+ forced_official_build_ = is_official;
+}
+
} // namespace chromeos_update_engine
« no previous file with comments | « omaha_request_params.h ('k') | omaha_request_params_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698