Commit 295aaca3 authored by James Cook's avatar James Cook Committed by Commit Bot

lacros: Record UMA.EnrollmentStatus stability metric

This allows us to filter UMA data by managed vs. unmanaged status on
the UMA dashboards for Chrome OS Lacros browser builds.

Information about Lacros is available at //docs/lacros.md or
internally at go/lacros

Bug: 1134341
Test: UMA.EnrollmentStatus appears in about:histograms
Change-Id: I2a7e7198b5ebb051231ecb070bc72fe32691ed2e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2464028
Commit-Queue: James Cook <jamescook@chromium.org>
Reviewed-by: default avatarErik Chen <erikchen@chromium.org>
Reviewed-by: default avatarIan Barkley-Yeung <iby@chromium.org>
Reviewed-by: default avatarIlya Sherman <isherman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#816682}
parent 781e9e3c
......@@ -4128,6 +4128,7 @@ static_library("browser") {
"metrics/chromeos_metrics_provider.h",
"metrics/cros_healthd_metrics_provider.cc",
"metrics/cros_healthd_metrics_provider.h",
"metrics/enrollment_status.h",
"metrics/family_user_metrics_provider.cc",
"metrics/family_user_metrics_provider.h",
"metrics/perf/collection_params.cc",
......@@ -4398,6 +4399,7 @@ static_library("browser") {
"lacros/account_manager_util.h",
"lacros/lacros_chrome_service_delegate_impl.cc",
"lacros/lacros_chrome_service_delegate_impl.h",
"metrics/enrollment_status.h",
"metrics/lacros_metrics_provider.cc",
"metrics/lacros_metrics_provider.h",
"notifications/notification_platform_bridge_chromeos.cc",
......
......@@ -49,6 +49,7 @@
#include "chrome/browser/chromeos/login/login_pref_names.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/metrics/chromeos_metrics_provider.h"
#include "chrome/browser/metrics/enrollment_status.h"
#include "chromeos/constants/chromeos_features.h"
#include "chromeos/dbus/util/version_loader.h"
#include "chromeos/system/statistics_provider.h"
......@@ -154,18 +155,14 @@ std::string GetPrimaryAccountTypeString() {
std::string GetEnrollmentStatusString() {
switch (ChromeOSMetricsProvider::GetEnrollmentStatus()) {
case ChromeOSMetricsProvider::NON_MANAGED:
case EnrollmentStatus::kNonManaged:
return "Not managed";
case ChromeOSMetricsProvider::MANAGED:
case EnrollmentStatus::kManaged:
return "Managed";
case ChromeOSMetricsProvider::UNUSED:
case ChromeOSMetricsProvider::ERROR_GETTING_ENROLLMENT_STATUS:
case ChromeOSMetricsProvider::ENROLLMENT_STATUS_MAX:
case EnrollmentStatus::kUnused:
case EnrollmentStatus::kErrorGettingStatus:
return "Error retrieving status";
}
// For compilers that don't recognize all cases handled above.
NOTREACHED();
return std::string();
}
std::string GetDisplayInfoString(
......
......@@ -30,6 +30,7 @@
#include "chrome/browser/chromeos/multidevice_setup/multidevice_setup_client_factory.h"
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
#include "chrome/browser/metrics/cached_metrics_profile.h"
#include "chrome/browser/metrics/enrollment_status.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/common/chrome_features.h"
#include "chrome/common/pref_names.h"
......@@ -116,14 +117,14 @@ void ChromeOSMetricsProvider::LogCrash(const std::string& crash_type) {
g_browser_process->metrics_service()->OnApplicationNotIdle();
}
ChromeOSMetricsProvider::EnrollmentStatus
ChromeOSMetricsProvider::GetEnrollmentStatus() {
EnrollmentStatus ChromeOSMetricsProvider::GetEnrollmentStatus() {
policy::BrowserPolicyConnectorChromeOS* connector =
g_browser_process->platform_part()->browser_policy_connector_chromeos();
if (!connector)
return ERROR_GETTING_ENROLLMENT_STATUS;
return EnrollmentStatus::kErrorGettingStatus;
return connector->IsEnterpriseManaged() ? MANAGED : NON_MANAGED;
return connector->IsEnterpriseManaged() ? EnrollmentStatus::kManaged
: EnrollmentStatus::kNonManaged;
}
void ChromeOSMetricsProvider::Init() {
......@@ -233,7 +234,9 @@ void ChromeOSMetricsProvider::ProvideStabilityMetrics(
// Use current enrollment status for initial stability logs, since it's not
// likely to change between browser restarts.
UMA_STABILITY_HISTOGRAM_ENUMERATION(
"UMA.EnrollmentStatus", GetEnrollmentStatus(), ENROLLMENT_STATUS_MAX);
"UMA.EnrollmentStatus", GetEnrollmentStatus(),
// static_cast because we only have macros for stability histograms.
static_cast<int>(EnrollmentStatus::kMaxValue) + 1);
// Record ARC-related stability metrics that should be included in initial
// stability logs and all regular UMA logs.
......
......@@ -23,21 +23,12 @@ class CachedMetricsProfile;
class ChromeUserMetricsExtension;
}
enum class EnrollmentStatus;
class PrefRegistrySimple;
// Performs ChromeOS specific metrics logging.
class ChromeOSMetricsProvider : public metrics::MetricsProvider {
public:
// Possible device enrollment status for a Chrome OS device.
// Used by UMA histogram, so entries shouldn't be reordered or removed.
enum EnrollmentStatus {
NON_MANAGED,
UNUSED, // Formerly MANAGED_EDU, see crbug.com/462770.
MANAGED,
ERROR_GETTING_ENROLLMENT_STATUS,
ENROLLMENT_STATUS_MAX,
};
explicit ChromeOSMetricsProvider(
metrics::MetricsLogUploader::MetricServiceType service_type);
~ChromeOSMetricsProvider() override;
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_METRICS_ENROLLMENT_STATUS_H_
#define CHROME_BROWSER_METRICS_ENROLLMENT_STATUS_H_
// Possible device enrollment status for a Chrome OS device. Used by both
// ash-chrome and lacros-chrome.
// Used by UMA histogram, so entries shouldn't be reordered or removed.
enum class EnrollmentStatus {
kNonManaged = 0,
kUnused = 1, // Formerly MANAGED_EDU, see crbug.com/462770.
kManaged = 2,
kErrorGettingStatus = 3,
kMaxValue = kErrorGettingStatus,
};
#endif // CHROME_BROWSER_METRICS_ENROLLMENT_STATUS_H_
......@@ -5,11 +5,45 @@
#include "chrome/browser/metrics/lacros_metrics_provider.h"
#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "chrome/browser/metrics/enrollment_status.h"
#include "chromeos/crosapi/mojom/crosapi.mojom.h"
#include "chromeos/lacros/lacros_chrome_service_impl.h"
namespace {
EnrollmentStatus GetEnrollmentStatus() {
auto* service = chromeos::LacrosChromeServiceImpl::Get();
switch (service->init_params()->device_mode) {
case crosapi::mojom::DeviceMode::kUnknown:
return EnrollmentStatus::kErrorGettingStatus;
case crosapi::mojom::DeviceMode::kNotSet:
case crosapi::mojom::DeviceMode::kConsumer:
case crosapi::mojom::DeviceMode::kLegacyRetailMode:
case crosapi::mojom::DeviceMode::kConsumerKioskAutolaunch:
return EnrollmentStatus::kNonManaged;
case crosapi::mojom::DeviceMode::kEnterprise:
case crosapi::mojom::DeviceMode::kEnterpriseActiveDirectory:
case crosapi::mojom::DeviceMode::kDemo:
return EnrollmentStatus::kManaged;
}
}
} // namespace
LacrosMetricsProvider::LacrosMetricsProvider() = default;
LacrosMetricsProvider::~LacrosMetricsProvider() = default;
void LacrosMetricsProvider::ProvideStabilityMetrics(
metrics::SystemProfileProto* system_profile_proto) {
// Record whether the device we're running on is enterprise managed.
UMA_STABILITY_HISTOGRAM_ENUMERATION(
"UMA.EnrollmentStatus", GetEnrollmentStatus(),
// static_cast because we only have macros for stability histograms.
static_cast<int>(EnrollmentStatus::kMaxValue) + 1);
}
void LacrosMetricsProvider::ProvideCurrentSessionData(
metrics::ChromeUserMetricsExtension* uma_proto) {
base::UmaHistogramBoolean("ChromeOS.IsLacrosBrowser", true);
......
......@@ -21,6 +21,8 @@ class LacrosMetricsProvider : public metrics::MetricsProvider {
~LacrosMetricsProvider() override;
// metrics::MetricsProvider:
void ProvideStabilityMetrics(
metrics::SystemProfileProto* system_profile_proto) override;
void ProvideCurrentSessionData(
metrics::ChromeUserMetricsExtension* uma_proto) override;
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment