Chromium Code Reviews| Index: chrome/browser/media/router/media_router_metrics.cc |
| diff --git a/chrome/browser/media/router/media_router_metrics.cc b/chrome/browser/media/router/media_router_metrics.cc |
| index cda93c8ee399e6496c6acc6dec6cc25fdb67e213..54ef591102d61c8df59475972c3b7e2325cdc3b4 100644 |
| --- a/chrome/browser/media/router/media_router_metrics.cc |
| +++ b/chrome/browser/media/router/media_router_metrics.cc |
| @@ -4,8 +4,13 @@ |
| #include "chrome/browser/media/router/media_router_metrics.h" |
| +#include <limits.h> |
| + |
| #include "base/macros.h" |
| #include "base/metrics/histogram_macros.h" |
| +#include "base/version.h" |
| +#include "components/version_info/version_info.h" |
| +#include "extensions/common/extension.h" |
| namespace media_router { |
| @@ -64,4 +69,70 @@ void MediaRouterMetrics::RecordRouteCreationOutcome( |
| static_cast<int>(MediaRouterRouteCreationOutcome::TOTAL_COUNT)); |
| } |
| +// static |
| +void MediaRouterMetrics::RecordMediaRouteProviderVersion( |
| + const extensions::Extension& extension) { |
| + const base::Version* extension_version = extension.version(); |
| + if (!extension_version) { |
| + MediaRouterMetrics::RecordMediaRouteProviderVersion( |
| + MediaRouteProviderVersion::UNKNOWN); |
| + return; |
| + } |
| + |
| + base::Version browser_version(version_info::GetVersionNumber()); |
| + int version_difference = |
| + GetVersionDifference(*extension_version, browser_version); |
| + if (version_difference == std::numeric_limits<int>::min()) { |
| + // Extension installed, version is invalid. |
| + MediaRouterMetrics::RecordMediaRouteProviderVersion( |
| + MediaRouteProviderVersion::UNKNOWN); |
| + } else if (version_difference >= 0) { |
| + MediaRouterMetrics::RecordMediaRouteProviderVersion( |
| + MediaRouteProviderVersion::SAME_VERSION); |
| + } else if (version_difference == -1) { |
| + MediaRouterMetrics::RecordMediaRouteProviderVersion( |
| + MediaRouteProviderVersion::PREVIOUS_VERSION); |
| + } else { |
| + MediaRouterMetrics::RecordMediaRouteProviderVersion( |
| + MediaRouteProviderVersion::OUT_OF_DATE_VERSION); |
| + } |
| +} |
| + |
| +// static |
| +void MediaRouterMetrics::RecordMediaRouteProviderVersion( |
| + MediaRouteProviderVersion version) { |
| + DCHECK_NE(static_cast<int>(version), |
|
Ilya Sherman
2016/03/16 22:23:05
Optional nit: Maybe DCHECK_LT? Ditto below.
|
| + static_cast<int>(MediaRouteProviderVersion::TOTAL_COUNT)); |
| + UMA_HISTOGRAM_ENUMERATION( |
| + "MediaRouter.Provider.Version", static_cast<int>(version), |
| + static_cast<int>(MediaRouteProviderVersion::TOTAL_COUNT)); |
| +} |
| + |
| +// static |
| +void MediaRouterMetrics::RecordMediaRouteProviderWakeup( |
| + MediaRouteProviderWakeup wakeup) { |
| + DCHECK_NE(static_cast<int>(wakeup), |
| + static_cast<int>(MediaRouteProviderWakeup::TOTAL_COUNT)); |
| + UMA_HISTOGRAM_ENUMERATION( |
| + "MediaRouter.Provider.Wakeup", static_cast<int>(wakeup), |
| + static_cast<int>(MediaRouteProviderWakeup::TOTAL_COUNT)); |
| +} |
| + |
| +// static |
| +int MediaRouterMetrics::GetVersionDifference(const base::Version& first, |
| + const base::Version& second) { |
| + if (!first.IsValid() || !first.components().size() || !second.IsValid() || |
| + !second.components().size()) { |
| + return std::numeric_limits<int>::min(); |
| + } |
| + |
| + uint32_t first_major = first.components()[0]; |
| + uint32_t second_major = second.components()[0]; |
| + // Sanity check. |
| + if (first_major < 1 || second_major < 1) |
| + return std::numeric_limits<int>::min(); |
| + |
| + return first_major - second_major; |
| +} |
| + |
| } // namespace media_router |