| Index: components/update_client/protocol_builder.cc
|
| diff --git a/components/update_client/protocol_builder.cc b/components/update_client/protocol_builder.cc
|
| index 99d80d96382f02d0ab7edd95d1a59b505330d5d0..12fdfbc971860df1f9afe2e3ebb5bcbbcd4bd234 100644
|
| --- a/components/update_client/protocol_builder.cc
|
| +++ b/components/update_client/protocol_builder.cc
|
| @@ -9,6 +9,7 @@
|
| #include "base/guid.h"
|
| #include "base/logging.h"
|
| #include "base/strings/string_number_conversions.h"
|
| +#include "base/strings/string_util.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "base/sys_info.h"
|
| #include "build/build_config.h"
|
| @@ -81,98 +82,88 @@ const char* DownloaderToString(CrxDownloader::DownloadMetrics::Downloader d) {
|
| }
|
| }
|
|
|
| -// Returns a string representing a sequence of download complete events
|
| -// corresponding to each download metrics in |item|.
|
| -std::string BuildDownloadCompleteEventElements(const Component& component) {
|
| +} // namespace
|
| +
|
| +std::string BuildDownloadCompleteEventElement(
|
| + const CrxDownloader::DownloadMetrics& metrics) {
|
| using base::StringAppendF;
|
| - std::string download_events;
|
| - for (const auto& metrics : component.download_metrics()) {
|
| - std::string event("<event eventtype=\"14\"");
|
| - StringAppendF(&event, " eventresult=\"%d\"", metrics.error == 0);
|
| - StringAppendF(&event, " downloader=\"%s\"",
|
| - DownloaderToString(metrics.downloader));
|
| - if (metrics.error) {
|
| - StringAppendF(&event, " errorcode=\"%d\"", metrics.error);
|
| - }
|
| - StringAppendF(&event, " url=\"%s\"", metrics.url.spec().c_str());
|
|
|
| - // -1 means that the byte counts are not known.
|
| - if (metrics.downloaded_bytes != -1) {
|
| - StringAppendF(&event, " downloaded=\"%s\"",
|
| - base::Int64ToString(metrics.downloaded_bytes).c_str());
|
| - }
|
| - if (metrics.total_bytes != -1) {
|
| - StringAppendF(&event, " total=\"%s\"",
|
| - base::Int64ToString(metrics.total_bytes).c_str());
|
| - }
|
| + std::string event("<event eventtype=\"14\"");
|
| + StringAppendF(&event, " eventresult=\"%d\"", metrics.error == 0);
|
| + StringAppendF(&event, " downloader=\"%s\"",
|
| + DownloaderToString(metrics.downloader));
|
| + if (metrics.error) {
|
| + StringAppendF(&event, " errorcode=\"%d\"", metrics.error);
|
| + }
|
| + StringAppendF(&event, " url=\"%s\"", metrics.url.spec().c_str());
|
|
|
| - if (metrics.download_time_ms) {
|
| - StringAppendF(&event, " download_time_ms=\"%s\"",
|
| - base::Uint64ToString(metrics.download_time_ms).c_str());
|
| - }
|
| - StringAppendF(&event, "/>");
|
| + // -1 means that the byte counts are not known.
|
| + if (metrics.downloaded_bytes != -1) {
|
| + StringAppendF(&event, " downloaded=\"%s\"",
|
| + base::Int64ToString(metrics.downloaded_bytes).c_str());
|
| + }
|
| + if (metrics.total_bytes != -1) {
|
| + StringAppendF(&event, " total=\"%s\"",
|
| + base::Int64ToString(metrics.total_bytes).c_str());
|
| + }
|
|
|
| - download_events += event;
|
| + if (metrics.download_time_ms) {
|
| + StringAppendF(&event, " download_time_ms=\"%s\"",
|
| + base::Uint64ToString(metrics.download_time_ms).c_str());
|
| }
|
| - return download_events;
|
| + StringAppendF(&event, "/>");
|
| + return event;
|
| }
|
|
|
| -// Returns a string representing one ping event for the update of a component.
|
| -// The event type for this ping event is 3.
|
| std::string BuildUpdateCompleteEventElement(const Component& component) {
|
| DCHECK(component.state() == ComponentState::kUpdateError ||
|
| component.state() == ComponentState::kUpdated);
|
|
|
| using base::StringAppendF;
|
|
|
| - std::string ping_event("<event eventtype=\"3\"");
|
| + std::string event("<event eventtype=\"3\"");
|
| const int event_result = component.state() == ComponentState::kUpdated;
|
| - StringAppendF(&ping_event, " eventresult=\"%d\"", event_result);
|
| + StringAppendF(&event, " eventresult=\"%d\"", event_result);
|
| if (component.error_category())
|
| - StringAppendF(&ping_event, " errorcat=\"%d\"", component.error_category());
|
| + StringAppendF(&event, " errorcat=\"%d\"", component.error_category());
|
| if (component.error_code())
|
| - StringAppendF(&ping_event, " errorcode=\"%d\"", component.error_code());
|
| + StringAppendF(&event, " errorcode=\"%d\"", component.error_code());
|
| if (component.extra_code1())
|
| - StringAppendF(&ping_event, " extracode1=\"%d\"", component.extra_code1());
|
| + StringAppendF(&event, " extracode1=\"%d\"", component.extra_code1());
|
| if (HasDiffUpdate(component))
|
| - StringAppendF(&ping_event, " diffresult=\"%d\"",
|
| + StringAppendF(&event, " diffresult=\"%d\"",
|
| !component.diff_update_failed());
|
| if (component.diff_error_category()) {
|
| - StringAppendF(&ping_event, " differrorcat=\"%d\"",
|
| + StringAppendF(&event, " differrorcat=\"%d\"",
|
| component.diff_error_category());
|
| }
|
| if (component.diff_error_code())
|
| - StringAppendF(&ping_event, " differrorcode=\"%d\"",
|
| - component.diff_error_code());
|
| + StringAppendF(&event, " differrorcode=\"%d\"", component.diff_error_code());
|
| if (component.diff_extra_code1()) {
|
| - StringAppendF(&ping_event, " diffextracode1=\"%d\"",
|
| + StringAppendF(&event, " diffextracode1=\"%d\"",
|
| component.diff_extra_code1());
|
| }
|
| if (!component.previous_fp().empty())
|
| - StringAppendF(&ping_event, " previousfp=\"%s\"",
|
| + StringAppendF(&event, " previousfp=\"%s\"",
|
| component.previous_fp().c_str());
|
| if (!component.next_fp().empty())
|
| - StringAppendF(&ping_event, " nextfp=\"%s\"", component.next_fp().c_str());
|
| - StringAppendF(&ping_event, "/>");
|
| - return ping_event;
|
| + StringAppendF(&event, " nextfp=\"%s\"", component.next_fp().c_str());
|
| + StringAppendF(&event, "/>");
|
| + return event;
|
| }
|
|
|
| -// Returns a string representing one ping event for the uninstall of a
|
| -// component. The event type for this ping event is 4.
|
| std::string BuildUninstalledEventElement(const Component& component) {
|
| DCHECK(component.state() == ComponentState::kUninstalled);
|
|
|
| using base::StringAppendF;
|
|
|
| - std::string ping_event("<event eventtype=\"4\" eventresult=\"1\"");
|
| + std::string event("<event eventtype=\"4\" eventresult=\"1\"");
|
| if (component.extra_code1())
|
| - StringAppendF(&ping_event, " extracode1=\"%d\"", component.extra_code1());
|
| - StringAppendF(&ping_event, "/>");
|
| - return ping_event;
|
| + StringAppendF(&event, " extracode1=\"%d\"", component.extra_code1());
|
| + StringAppendF(&event, "/>");
|
| + return event;
|
| }
|
|
|
| -} // namespace
|
| -
|
| std::string BuildProtocolRequest(
|
| const std::string& prod_id,
|
| const std::string& browser_version,
|
| @@ -336,34 +327,21 @@ std::string BuildUpdateCheckRequest(
|
|
|
| std::string BuildEventPingRequest(const Configurator& config,
|
| const Component& component) {
|
| + DCHECK(component.state() == ComponentState::kUpdateError ||
|
| + component.state() == ComponentState::kUpdated ||
|
| + component.state() == ComponentState::kUninstalled);
|
| +
|
| const char app_element_format[] =
|
| "<app appid=\"%s\" version=\"%s\" nextversion=\"%s\">"
|
| "%s"
|
| - "%s"
|
| "</app>";
|
|
|
| - std::string ping_event;
|
| - switch (component.state()) {
|
| - case ComponentState::kUpdateError: // Fall through.
|
| - case ComponentState::kUpdated:
|
| - ping_event = BuildUpdateCompleteEventElement(component);
|
| - break;
|
| - case ComponentState::kUninstalled:
|
| - ping_event = BuildUninstalledEventElement(component);
|
| - break;
|
| - default:
|
| - NOTREACHED();
|
| - break;
|
| - }
|
| -
|
| const std::string app_element(base::StringPrintf(
|
| app_element_format,
|
| - component.id().c_str(), // "appid"
|
| - component.previous_version().GetString().c_str(), // "version"
|
| - component.next_version().GetString().c_str(), // "nextversion"
|
| - ping_event.c_str(), // ping event
|
| - BuildDownloadCompleteEventElements(component)
|
| - .c_str())); // download events
|
| + component.id().c_str(), // "appid"
|
| + component.previous_version().GetString().c_str(), // "version"
|
| + component.next_version().GetString().c_str(), // "nextversion"
|
| + base::JoinString(component.events(), "").c_str())); // events
|
|
|
| // The ping request does not include any updater state.
|
| return BuildProtocolRequest(
|
|
|