| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/metrics/lacros_metrics_provider.h" |
| |
| #include "base/functional/bind.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/crosapi/mojom/metrics.mojom.h" |
| #include "chromeos/lacros/lacros_service.h" |
| #include "chromeos/startup/browser_params_proxy.h" |
| #include "services/metrics/public/cpp/ukm_builders.h" |
| #include "services/metrics/public/cpp/ukm_recorder.h" |
| #include "services/metrics/public/cpp/ukm_source_id.h" |
| #include "third_party/metrics_proto/chrome_user_metrics_extension.pb.h" |
| #include "third_party/metrics_proto/system_profile.pb.h" |
| |
| namespace { |
| |
| EnrollmentStatus GetEnrollmentStatus() { |
| switch (chromeos::BrowserParamsProxy::Get()->DeviceMode()) { |
| 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() : weak_ptr_factory_(this) { |
| auto* lacros_service = chromeos::LacrosService::Get(); |
| if (lacros_service->IsAvailable<crosapi::mojom::Metrics>()) { |
| lacros_service->GetRemote<crosapi::mojom::Metrics>()->GetFullHardwareClass( |
| base::BindOnce(&LacrosMetricsProvider::OnGetFullHardwareClass, |
| weak_ptr_factory_.GetWeakPtr())); |
| } |
| } |
| |
| 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) { |
| ProvideStabilityMetrics(uma_proto->mutable_system_profile()); |
| base::UmaHistogramBoolean("ChromeOS.IsLacrosBrowser", true); |
| } |
| |
| void LacrosMetricsProvider::ProvideCurrentSessionUKMData() { |
| ukm::SourceId source_id = ukm::NoURLSourceId(); |
| EnrollmentStatus status = GetEnrollmentStatus(); |
| ukm::builders::ChromeOS_DeviceManagement(source_id) |
| .SetEnrollmentStatus(static_cast<int64_t>(status)) |
| .Record(ukm::UkmRecorder::Get()); |
| } |
| |
| void LacrosMetricsProvider::ProvideSystemProfileMetrics( |
| metrics::SystemProfileProto* proto) { |
| metrics::SystemProfileProto::Hardware* hardware = proto->mutable_hardware(); |
| hardware->set_full_hardware_class(full_hardware_class_); |
| } |
| |
| void LacrosMetricsProvider::OnGetFullHardwareClass( |
| const std::string& full_hardware_class) { |
| full_hardware_class_ = full_hardware_class; |
| } |