| 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
|
|
|