diff options
Diffstat (limited to 'chromium/components/update_client/utils.cc')
-rw-r--r-- | chromium/components/update_client/utils.cc | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/chromium/components/update_client/utils.cc b/chromium/components/update_client/utils.cc index 717984d8999..39ab431a7b5 100644 --- a/chromium/components/update_client/utils.cc +++ b/chromium/components/update_client/utils.cc @@ -66,18 +66,36 @@ std::string HexStringToID(const std::string& hexstr) { return id; } +std::string GetOSVersion() { +#if defined(OS_WIN) + int32_t major = 0; + int32_t minor = 0; + int32_t bugfix = 0; + base::SysInfo::OperatingSystemVersionNumbers(&major, &minor, &bugfix); + return base::StringPrintf("%d.%d.%d", major, minor, bugfix); +#else + return base::SysInfo().OperatingSystemVersion(); +#endif +} + +std::string GetServicePack() { +#if defined(OS_WIN) + return base::win::OSInfo::GetInstance()->service_pack_str(); +#else + return std::string(); +#endif +} + } // namespace -std::string BuildProtocolRequest(const std::string& browser_version, +std::string BuildProtocolRequest(const std::string& prod_id, + const std::string& browser_version, const std::string& channel, const std::string& lang, const std::string& os_long_name, const std::string& download_preference, const std::string& request_body, const std::string& additional_attributes) { - const std::string prod_id( - UpdateQueryParams::GetProdIdString(UpdateQueryParams::CHROME)); - std::string request( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" "<request protocol=\"3.0\" "); @@ -91,8 +109,8 @@ std::string BuildProtocolRequest(const std::string& browser_version, "version=\"%s-%s\" prodversion=\"%s\" " "requestid=\"{%s}\" lang=\"%s\" updaterchannel=\"%s\" prodchannel=\"%s\" " "os=\"%s\" arch=\"%s\" nacl_arch=\"%s\"", - prod_id.c_str(), - browser_version.c_str(), // "version" + prod_id.c_str(), // "version" is prefixed by prod_id. + browser_version.c_str(), browser_version.c_str(), // "prodversion" base::GenerateGUID().c_str(), // "requestid" lang.c_str(), // "lang", @@ -117,11 +135,18 @@ std::string BuildProtocolRequest(const std::string& browser_version, GetPhysicalMemoryGB()); // "physmem" in GB. // OS version and platform information. + const std::string os_version = GetOSVersion(); + const std::string os_sp = GetServicePack(); + base::StringAppendF( - &request, "<os platform=\"%s\" version=\"%s\" arch=\"%s\"/>", + &request, "<os platform=\"%s\" arch=\"%s\"", os_long_name.c_str(), // "platform" - base::SysInfo().OperatingSystemVersion().c_str(), // "version" base::SysInfo().OperatingSystemArchitecture().c_str()); // "arch" + if (!os_version.empty()) + base::StringAppendF(&request, " version=\"%s\"", os_version.c_str()); + if (!os_sp.empty()) + base::StringAppendF(&request, " sp=\"%s\"", os_sp.c_str()); + base::StringAppendF(&request, "/>"); // The actual payload of the request. base::StringAppendF(&request, "%s</request>", request_body.c_str()); |