// Copyright 2022 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/structured/structured_metrics_key_events_observer.h"
#include <utility>
#include "components/metrics/structured/structured_events.h"
#include "components/metrics/structured/structured_metrics_client.h"
namespace metrics::structured {
namespace cros_events = events::v2::cr_os_events;
StructuredMetricsKeyEventsObserver::StructuredMetricsKeyEventsObserver(
user_manager::UserManager* user_manager,
ash::SessionTerminationManager* session_termination_manager,
chromeos::PowerManagerClient* power_manager_client)
: user_manager_(user_manager),
session_termination_manager_(session_termination_manager),
power_manager_client_(power_manager_client) {
DCHECK(user_manager_);
DCHECK(session_termination_manager_);
DCHECK(power_manager_client_);
user_manager_->AddSessionStateObserver(this);
session_termination_manager_->AddObserver(this);
power_manager_client_->AddObserver(this);
}
StructuredMetricsKeyEventsObserver::~StructuredMetricsKeyEventsObserver() {
user_manager_->RemoveSessionStateObserver(this);
session_termination_manager_->RemoveObserver(this);
power_manager_client_->RemoveObserver(this);
}
void StructuredMetricsKeyEventsObserver::ActiveUserChanged(
user_manager::User* user) {
if (user->is_active()) {
StructuredMetricsClient::Record(cros_events::UserLogin());
}
}
void StructuredMetricsKeyEventsObserver::OnSessionWillBeTerminated() {
StructuredMetricsClient::Record(std::move(cros_events::UserLogout()));
}
void StructuredMetricsKeyEventsObserver::SuspendImminent(
power_manager::SuspendImminent::Reason reason) {
StructuredMetricsClient::Record(
std::move(cros_events::SystemSuspended().SetReason(reason)));
}
} // namespace metrics::structured