// Copyright 2024 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_ENTERPRISE_IDLE_METRICS_H_ #define COMPONENTS_ENTERPRISE_IDLE_METRICS_H_ #include #include "base/time/time.h" namespace enterprise_idle { namespace metrics { // IdleTimeout and IdleTimeout policies histogram names. inline constexpr char kUMAIdleTimeoutActionSuccessTime[] = "Enterprise.IdleTimeoutPolicies.ActionTime.%s"; inline constexpr char kUMAIdleTimeoutActionSuccesStatus[] = "Enterprise.IdleTimeoutPolicies.Success.%s"; inline constexpr char kUMAIdleTimeoutActionCase[] = "Enterprise.IdleTimeoutPolicies.IdleTimeoutCase"; inline constexpr char kUMAIdleTimeoutDialogEvent[] = "Enterprise.IdleTimeoutPolicies.IdleTimeoutDialogEvent"; inline constexpr char kUMAIdleTimeoutLaunchScreenEvent[] = "Enterprise.IdleTimeoutPolicies.IdleTimeoutLaunchScreenEvent"; // UMA Histogram name suffixes for idle timeout action names. inline constexpr char kUMAClearBrowsingDataSuffix[] = "ClearBrowsingData"; inline constexpr char kUMASignOutSuffix[] = "SignOut"; inline constexpr char kUMACloseBrowsersSuffix[] = "CloseBrowsers"; inline constexpr char kUMACloseTabsSuffix[] = "CloseTabs"; inline constexpr char kUMAReloadPagesSuffix[] = "ReloadPages"; inline constexpr char kUMAShowProfilePickerSuffix[] = "ShowProfilePicker"; inline constexpr char kUMAAllActionsSuffix[] = "AllActions"; // The different action types that can run on idle timeout. `kClearBrowsingData` // encompasses all the clear_* actions that can be specified in the // IdleTimeoutActions policy list value. enum class IdleTimeoutActionType { kClearBrowsingData = 0, kSignOut = 1, kCloseBrowsers = 2, kCloseTabs = 3, kReloadPages = 4, kShowProfilePicker = 5, kAllActions = 6, kMaxValue = kAllActions, }; // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. Keep in sync with // tools/metrics/histograms/metadata/enterprise/enums.xml. enum class IdleTimeoutCase { kForeground = 0, kBackground = 1, kMaxValue = kBackground, }; // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. Keep in sync with // tools/metrics/histograms/metadata/enterprise/enums.xml. // The values represent different idle timeout dialog UI events that can // happen. // `kDialogShown` : the idle timeout dialog is shown when the browser times out // in foreground. // `kDialogDismissedByUser` : the dioalog is either dismissed by // the user if they are active. // `kDialogExpired` : the dualog counted down to expiry before being // dismissed. enum class IdleTimeoutDialogEvent { kDialogShown = 0, kDialogDismissedByUser = 1, kDialogExpired = 2, kMaxValue = kDialogExpired, }; // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. Keep in sync with // tools/metrics/histograms/metadata/enterprise/enums.xml. // The values represent the different launch screen events that can happen on // app foreground on mobile. // `kLaunchScreenShown` : a launch scren is shown when idle timeout actions run // on foreground. /// `kLaunchScreenDismissedAfterActionCompletion` : the launch // screen is dismissed when actions complete. // `kLaunchScreenExpired` : the // launch screen has been displayed until expiry. Actions failed to complete by // deadline. enum class IdleTimeoutLaunchScreenEvent { kLaunchScreenShown = 0, kLaunchScreenDismissedAfterActionCompletion = 1, kLaunchScreenExpired = 2, kMaxValue = kLaunchScreenExpired, }; // Records the time needed for action `type` to run when the browser times out. void RecordIdleTimeoutActionTimeTaken(IdleTimeoutActionType type, base::TimeDelta time_duration); // Records whether idle timeout happens in foreground or background. void RecordIdleTimeoutCase(IdleTimeoutCase timeout_case); // Records whether action `type` ran successfully. void RecordActionsSuccess(IdleTimeoutActionType type, bool success); // Records an idle timeout dialog events. void RecordIdleTimeoutDialogEvent(IdleTimeoutDialogEvent event); // Records an idle timeout launch screen events. void RecordIdleTimeoutLaunchScreenEvent(IdleTimeoutLaunchScreenEvent event); // Returns the IdleTimeoutAction name from its `IdleTimeoutActionType`. std::string GetActionNameFromActionType(IdleTimeoutActionType type); } // namespace metrics } // namespace enterprise_idle #endif // COMPONENTS_ENTERPRISE_IDLE_METRICS_H_