Index: chrome/browser/component_updater/component_updater_utils.cc |
diff --git a/chrome/browser/component_updater/component_updater_utils.cc b/chrome/browser/component_updater/component_updater_utils.cc |
index e86f72c8a998807080881fc2d0254850bad66545..7f57f5bf0bc314fc2000bd0db4cd201c8a47a165 100644 |
--- a/chrome/browser/component_updater/component_updater_utils.cc |
+++ b/chrome/browser/component_updater/component_updater_utils.cc |
@@ -16,34 +16,49 @@ |
namespace component_updater { |
-std::string BuildProtocolRequest(const std::string& request_body) { |
- const char request_format[] = |
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" |
- "<request protocol=\"3.0\" version=\"%s-%s\" prodversion=\"%s\" " |
- "requestid=\"{%s}\" updaterchannel=\"%s\" arch=\"%s\" nacl_arch=\"%s\">" |
- "<os platform=\"%s\" version=\"%s\" arch=\"%s\"/>" |
- "%s" |
- "</request>"; |
- |
+std::string BuildProtocolRequest(const std::string& request_body, |
+ const std::string& additional_attributes) { |
const std::string prod_id(chrome::OmahaQueryParams::GetProdIdString( |
chrome::OmahaQueryParams::CHROME)); |
const std::string chrome_version(chrome::VersionInfo().Version().c_str()); |
- const std::string request(base::StringPrintf(request_format, |
- // Chrome version and platform information. |
+ std::string request( |
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" |
+ "<request protocol=\"3.0\" "); |
+ |
+ if (!additional_attributes.empty()) |
+ base::StringAppendF(&request, "%s ", additional_attributes.c_str()); |
+ |
+ // Chrome version and platform information. |
+ base::StringAppendF( |
+ &request, |
+ "version=\"%s-%s\" prodversion=\"%s\" " |
+ "requestid=\"{%s}\" updaterchannel=\"%s\" arch=\"%s\" nacl_arch=\"%s\"", |
prod_id.c_str(), chrome_version.c_str(), // "version" |
chrome_version.c_str(), // "prodversion" |
base::GenerateGUID().c_str(), // "requestid" |
chrome::OmahaQueryParams::GetChannelString(), // "updaterchannel" |
chrome::OmahaQueryParams::getArch(), // "arch" |
- chrome::OmahaQueryParams::getNaclArch(), // "nacl_arch" |
- |
- // OS version and platform information. |
+ chrome::OmahaQueryParams::getNaclArch()); // "nacl_arch" |
+#if defined(OS_WIN) |
+ const bool is_wow64( |
+ base::win::OSInfo::GetInstance()->wow64_status() == |
+ base::win::OSInfo::WOW64_ENABLED); |
+ if (is_wow64) |
+ base::StringAppendF(&request, " wow64=\"1\""); |
+#endif |
+ base::StringAppendF(&request, ">"); |
+ |
+ // OS version and platform information. |
+ base::StringAppendF( |
+ &request, |
+ "<os platform=\"%s\" version=\"%s\" arch=\"%s\"/>", |
chrome::VersionInfo().OSType().c_str(), // "platform" |
base::SysInfo().OperatingSystemVersion().c_str(), // "version" |
- base::SysInfo().OperatingSystemArchitecture().c_str(), // "arch" |
+ base::SysInfo().OperatingSystemArchitecture().c_str()); // "arch" |
- request_body.c_str())); // The actual payload of the request. |
+ // The actual payload of the request. |
+ base::StringAppendF(&request, "%s</request>", request_body.c_str()); |
return request; |
} |