<!--
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.
-->

<!--
This file is used to generate a comprehensive list of histograms owned
by the Family Experiences team along with a detailed description for
each histogram.

For best practices on writing histogram descriptions, see
https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md.
Also see go/famexp-metrics-guide for more specific tips and
documentation on adding new histograms to this file. For histogram
naming, consider
{Platform}.FamilyUser/FamilyLink/FamilyLinkUser prefix for platform
specific metrics and FamilyUser/FamilyLink/FamilyLinkUser prefix for
cross platform metrics.

Please follow the instructions in the OWNERS file in this directory to find a
reviewer. If no OWNERS file exists, please consider signing up at
go/reviewing-metrics (Googlers only), as all subdirectories are expected to
have an OWNERS file. As a last resort you can send the CL to
chromium-metrics-reviews@google.com.

When adding new histogrms please align the expiration date with the existing
histograms whenever possible to minimize the noise around extending the expiry.
Current expiration date for histograms owned by cros-families-eng@google.com:
2025-11-01.
-->

<histogram-configuration>

<histograms>

<variants name="ProtoFetcherRequestType">
  <variant name="FamilyLinkUser.ClassifyUrlRequest"
      summary="Kids Management API::ClassifyUrl"/>
  <variant name="FamilyLinkUser.CreatePermissionRequest"
      summary="Kids Management API::CreatePermissionRequest"/>
  <variant name="NonFamilyLinkUser.ClassifyUrlRequest"
      summary="Kids Management API::ClassifyUrl"/>
  <variant name="Signin.ListFamilyMembersRequest"
      summary="Kids Management API::ListMembers"/>
</variants>

<histogram name="AddSupervisionDialog.Enrollment"
    enum="AddSupervisionEnrollment" expires_after="2026-12-12">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the number of users who go through the Add Supervision process to
    convert regular accounts to Geller accounts. Initiated count is incremented
    when Add Supervision dialog is opened. Completed count is incremented when
    supervision is successfully enrolled. Signed out count is incremented when
    the user clicks &quot;Sign out&quot; after enrollment at the end of the
    process in the dialog. Closed count is incremented when the Add Supervision
    dialog is closed prior to enrollment, excluding sign out. Switched accounts
    count is incremented when the user clicks &quot;Sign out&quot; within the
    dialog to swich accounts before enrollment completion.
  </summary>
</histogram>

<histogram name="AddSupervisionDialog.EnrollmentCompletedUserTime" units="ms"
    expires_after="2027-01-28">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Measures the amount of time in milliseconds for users to successfully enroll
    in supervision. Elapsed time is measured starting from when the Add
    Supervision dialog was first opened.
  </summary>
</histogram>

<histogram name="AddSupervisionDialog.EnrollmentNotCompletedUserTime"
    units="ms" expires_after="2027-01-28">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Measures the amount of time in milliseconds for users to exit the Add
    Supervision dialog without enrollment. This can happen if the user closes
    the Add Supervision dialog or signs out to switch accounts. Elapsed time is
    measured starting from when the Add Supervision dialog was first opened.
  </summary>
</histogram>

<histogram name="AddSupervisionDialog.SignoutCompletedUserTime" units="ms"
    expires_after="2027-01-28">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Measures the amount of time in milliseconds for users to sign out after
    enrolling in supervision. Elapsed time is measured starting from when the
    Add Supervision dialog was first opened.
  </summary>
</histogram>

<histogram name="ChildAccountReconcilor.ForcedUserExitOnReconcileError"
    enum="BooleanHit" expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Number of forced logouts for child accounts on an account reconciliation
    error. Check `ChromeOSLimitedAccessAccountReconcilorDelegate`.
  </summary>
</histogram>

<histogram name="ChromeOS.FamilyLink.ChildStatusReportRequest.Size" units="KB"
    expires_after="2026-11-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Reports the size of the uploaded ChildStatusReportRequest proto in
    kilobytes. This metric records right before the report uploads. The max
    bucket value is 500MB.
  </summary>
</histogram>

<histogram
    name="ChromeOS.FamilyLink.ChildStatusReportRequest.TimeSinceLastReport"
    units="minutes" expires_after="2026-11-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Reports the time in between ChildStatusReportRequest uploads in minutes. The
    default upload frequency is once every ten minutes. This metric records
    right before the report uploads. The max bucket value is 100,000 minutes
    (1667 hours).
  </summary>
</histogram>

<histogram name="ChromeOS.FamilyLinkUser.FaviconAvailability"
    enum="SupervisedUserFaviconAvailability" expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records whether the favicon is available when it is being requested. The
    favicon is requested for UI related to supervised users, including the local
    web approvals parent access dialog. This metric is only recorded on
    ChromeOS.
  </summary>
</histogram>

<histogram name="ChromeOS.FamilyLinkUser.LogSegment"
    enum="SupervisedUserLogSegment" expires_after="never">
<!-- expires-never: used internally for filtering -->

  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <owner>chrome-metrics-team@google.com</owner>
  <summary>
    Categorizes the current user for the Family Experiences team's metrics.
    WebApprovals metrics are included from M110 onwards. ExtensionApprovals
    metrics are included from M115 onwards.
  </summary>
</histogram>

<histogram name="ChromeOS.FamilyLinkUser.ParentAccess.FlowResult.{FlowType}"
    enum="ParentAccessFlowResult" expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the state at which the Parent Access dialog is closed for all parent
    access flows. Allows to track the drop rate by important states during the
    parent access flow. This metric is recorded for ChromeOS only. WebApprovals
    metrics are available from M110 onwards. ExtensionApprovals metrics are
    available from M115 onwards.
  </summary>
  <token key="FlowType">
    <variant name="All"/>
    <variant name="ExtensionApprovals"/>
    <variant name="WebApprovals"/>
  </token>
</histogram>

<histogram name="ChromeOS.FamilyLinkUser.ParentAccessWidgetError.{FlowType}"
    enum="FamilyLinkUserParentAccessWidgetError" expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records an error that occurs in the parent access widget. ChromeOS Only.
    WebApprovals metrics are available from M110 onwards. ExtensionApprovals
    metrics are available from M115 onwards.
  </summary>
  <token key="FlowType">
    <variant name="All"/>
    <variant name="ExtensionApprovals"/>
    <variant name="WebApprovals"/>
  </token>
</histogram>

<histogram
    name="ChromeOS.FamilyLinkUser.ParentAccessWidgetShowDialogError.{FlowType}"
    enum="FamilyLinkUserParentAccessWidgetShowDialogError"
    expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records an error where the parent access widget dialog cannot be shown.
    Reported by the browser when the dialog fails to show. ChromeOS only.
    WebApprovals metrics are available from M110 onwards. ExtensionApprovals
    metrics are available from M115 onwards.
  </summary>
  <token key="FlowType">
    <variant name="All"/>
    <variant name="ExtensionApprovals"/>
    <variant name="WebApprovals"/>
  </token>
</histogram>

<histogram name="ChromeOS.FamilyUser.LogSegment2" enum="FamilyUserLogSegment"
    expires_after="never">
<!-- expires-never: used internally for filtering -->

  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <owner>chrome-metrics-team@google.com</owner>
  <summary>
    Categorizes the current user for the Family Experiences team's metrics.
    Other is for all other users that do not fall into any of the below
    categories. A Supervised User has a supervised primary account and no
    secondary accounts. A Supervised Student has a supervised primary account
    and one or more EDU secondary accounts, which is the only available option
    for a secondary account in that scenario. A Student at Home has a K-12 EDU
    primary account on an unmanaged ChromeOS device, regardless of the secondary
    account. A Regular User is an unmanaged consumer user on any device. This
    metric is logged with every UMA upload in ProvideCurrentSessionData().
  </summary>
</histogram>

<histogram name="ChromeOS.FamilyUser.NumSecondaryAccounts" units="accounts"
    expires_after="2027-01-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <owner>chrome-metrics-team@google.com</owner>
  <summary>
    Reports the number of secondary accounts besides the primary user. This
    metric is logged with every UMA upload in ProvideCurrentSessionData(). This
    metric is not reported for guest users.
  </summary>
</histogram>

<histogram name="ChromeOS.LegacySupervisedUsers.HiddenFromLoginScreen"
    enum="LegacySupervisedUserStatus" expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Reports &quot;hidden&quot; when the login screen hides a legacy supervised
    user (LSU). Reports &quot;displayed&quot; when the login screen displays a
    non-LSU Gaia user. Reports &quot;deleted&quot; when the login screen
    attempts to delete a LSU. Recorded whenever the user sees the login screen.
  </summary>
</histogram>

<histogram name="ChromeOS.OnDeviceControls.AppRemoval"
    enum="OnDeviceControlsAppRemoval" expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the success or failure of removing the oldest uninstalled app that
    has been blocked by on-device parental controls. This occurs when the max
    number of uninstalled blocked apps are stored in the blocked app registry.
  </summary>
</histogram>

<histogram name="ChromeOS.OnDeviceControls.BlockAppAction"
    enum="OnDeviceControlsBlockAppAction" expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Recorded when the user interacts with apps with respect to on-device
    parental controls. It records actions such as blocking apps, unblocking
    apps, and uninstalling blocked apps. This histogram also records errors,
    such as if an already-blocked app is being blocked again.
  </summary>
</histogram>

<histogram name="ChromeOS.OnDeviceControls.BlockedAppDialogShown"
    enum="OnDeviceControlsBlockedAppDialog" expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Recorded when the user attempts to open an app blocked by on-device controls
    and is shown the blocked app system dialog.
  </summary>
</histogram>

<histogram name="ChromeOS.OnDeviceControls.BlockedAppsCount" units="Apps"
    expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the number of apps blocked by on-device parental controls that a
    user has. Recorded every time an app is blocked or unblocked.
  </summary>
</histogram>

<histogram name="ChromeOS.OnDeviceControls.BlockedAppsEngagement" units="Apps"
    expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the number of apps blocked with on-device parental controls that a
    user has at the beginning of each user session.
  </summary>
</histogram>

<histogram name="ChromeOS.OnDeviceControls.DialogAction.{DialogType}"
    enum="OnDeviceControlsDialogAction" expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records user interactions with the dialogs in OS settings related to the
    on-device parental controls feature. Records actions such as the user
    opening the dialog and the user completing the dialog flow.
  </summary>
  <token key="DialogType">
    <variant name="SetUpControls"/>
    <variant name="VerifyToDisableControls"/>
    <variant name="VerifyToEnterControlsPage"/>
  </token>
</histogram>

<histogram name="ChromeOS.OnDeviceControls.PinDialogError"
    enum="OnDeviceControlsPinDialogError" expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records if the user encounters an error when verifying or setting up a PIN
    for on-device parental controls.
  </summary>
</histogram>

<histogram name="ChromeOS.OnDeviceControls.PinSetupCompleted" enum="Boolean"
    expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records whether the user has set up a PIN for on-device app parental
    controls. Recorded at the beginning of each user session.
  </summary>
</histogram>

<histogram name="FamilyLinkUser.FamilyInfoLogSource.FetchLatency" units="ms"
    expires_after="2026-06-21">
<!-- TODO: crbug.com/431773019 - replace with Signin.ListFamilyMembersRequest.* -->

  <owner>ljjlee@google.com</owner>
  <owner>tju@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    The time spent waiting for the Kids Management API::ListMembers fetch done
    as part of populating the FamilyInfoLogSource in feedback reports. This is
    recorded for every fetch on either getting a response from the fetcher or
    timing out (whichever happens first).
  </summary>
</histogram>

<histogram name="FamilyLinkUser.FamilyInfoLogSource.FetchStatus"
    enum="FamilyInfoLogSourceFetchStatus" expires_after="2026-10-25">
<!-- TODO: crbug.com/431773019 - replace with Signin.ListFamilyMembersRequest.* -->

  <owner>ljjlee@google.com</owner>
  <owner>tju@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    The result of the Kids Management API::ListMembers fetch done as part of
    populating the FamilyInfoLogSource in feedback reports. This is output for
    every fetch on either getting a response from the fetcher or timing out.
  </summary>
</histogram>

<histogram name="FamilyLinkUser.FamilyInfoLogSource.ImmediatelyAvailable"
    enum="Boolean" expires_after="2026-06-21">
<!-- TODO: crbug.com/431773019 - replace with Signin.ListFamilyMembersRequest.* -->

  <owner>tju@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    Whether a fetch to the Kids Management API::ListMembers was necessary as a
    part of populating the FamilyInfoLogSource in feedback reports.
  </summary>
</histogram>

<histogram name="FamilyLinkUser.LocalApprovalOutcome.{Flow}"
    enum="FamilyLinkUserLocalApprovalOutcome" expires_after="2027-01-03">
  <owner>anthie@google.com</owner>
  <owner>ljjlee@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    The different outcomes that a user may come across the local parent approval
    flow (extension or web). Available on Android only.
  </summary>
  <token key="Flow">
    <variant name="Extension"/>
    <variant name="Web"/>
  </token>
</histogram>

<histogram name="FamilyLinkUser.LocalWebApprovalCompleteRequestTotalDuration"
    units="ms" expires_after="2027-02-07">
  <owner>anthie@google.com</owner>
  <owner>ljjlee@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    The total elapsed time in milliseconds to complete the local web approval
    verification flow, from the time the supervised user requests to the time
    the webpage is approved or rejected by the parent. Available on Android
    (M108+), ChromeOS (M109+), Linux, Mac, Windows and iOs (M135).
  </summary>
</histogram>

<histogram name="FamilyLinkUser.LocalWebApprovalErrorType"
    enum="LocalWebApprovalErrorType" expires_after="2027-01-31">
  <owner>anthie@google.com</owner>
  <owner>ddac@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    The different error types that a user may encounter during the local url
    approval flow. Currently recorded in Linux, Mac and Windows platforms.
  </summary>
</histogram>

<histogram name="FamilyLinkUser.LocalWebApprovalResult"
    enum="FamilyLinkUserLocalApprovalResult" expires_after="2027-01-31">
  <owner>agawronska@chromium.org</owner>
  <owner>cros-families-eng@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    Records the result of local web approval request on ChromeOS and Android.
    Reported by the browser once platform specific approval flow finishes and
    returns the result.
  </summary>
</histogram>

<histogram name="FamilyLinkUser.LogSegment" enum="SupervisedUserLogSegment"
    expires_after="never">
<!-- expires-never: used internally for filtering -->

  <owner>fernandex@chromium.org</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    Categorizes the current user based on Family Link user type. Recorded for
    all supervised platforms except ChromeOS which uses
    ChromeOS.FamilyLinkUser.LogSegment.
  </summary>
</histogram>

<histogram name="FamilyUser.ChromeBrowserEngagement.Duration2" units="ms"
    expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the Chrome OS user Chrome browser usage in milliseconds. Reports
    current daily duration at the first session start on next day. Despite daily
    reporting, the uploaded duration can still exceed 24 hours if the user
    continuously stays active for that long. This is only logged for active
    foreground time of Chrome browser. Ignores the time when video or audio is
    playing in the background, or Chrome browser is invisible. Also ignores the
    time when UsageTimeStateNotifier::UsageTimeState is inactive.
  </summary>
</histogram>

<histogram name="FamilyUser.DeviceOwner" enum="Boolean"
    expires_after="2027-01-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records whether the current primary user is the owner of device. Reports at
    the beginning of the first active session daily.
  </summary>
</histogram>

<histogram name="FamilyUser.FamilyLinkUsersCount" units="Number of Users"
    expires_after="2027-01-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the number of family link users on a Chrome OS device at the
    beginning of the first active session daily.
  </summary>
</histogram>

<histogram name="FamilyUser.GaiaUsersCount" units="Number of Users"
    expires_after="2027-01-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the number of Gaia users on a Chrome OS device, at the beginning of
    the first active session daily for all user types except incognito session.
    The user count could be 0 if the managed device has ephemeral user policy.
  </summary>
</histogram>

<histogram name="FamilyUser.ManagedSiteList" enum="FamilyLinkManagedSiteList"
    expires_after="2027-01-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records whether managed sites approved list and blocked list are enabled for
    currently active Family Link user. Records daily and also when manual hosts
    and manual urls policies are changed. Ignores the reports during OOBE and
    sign out.

    Historical caveats: Stable M137 (all versions 137.0.7146.0 to 138.0.7197.0)
    have unreliable data for this histogram. Versions before 137.0.7146.0
    over-recored the metric.
  </summary>
</histogram>

<histogram name="FamilyUser.ManagedSiteList.Conflict" enum="BooleanHasConflict"
    expires_after="2026-11-10">
  <owner>anthie@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records whether the given url has a match in both the allowlist and the
    block list which means a conflict. This metric is recorded if the given url
    matches at least one manual rule.
  </summary>
</histogram>

<histogram name="FamilyUser.ManagedSiteList.SubdomainConflictType"
    enum="FamilyLinkFilteringSubdomainConflictType" expires_after="2026-11-10">
  <owner>anthie@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the type of the conflict during url filtering when a match exists in
    both the allowlist and the blocklist.
  </summary>
</histogram>

<histogram name="FamilyUser.ManagedSiteListCount{ListType}"
    units="Number of sites" expires_after="2027-01-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the number of {ListType} urls and hosts for currently active Family
    Link user. This metric is recorded at the beginning of first active session
    daily and when manual hosts and manual urls policies are changed. Ignores
    the reports during OOBE and sign out.

    Historical caveats: Stable M137 (all versions 137.0.7146.0 to 138.0.7197.0)
    have unreliable data for this histogram. Versions before 137.0.7146.0
    over-recored the metric.
  </summary>
  <token key="ListType">
    <variant name=".Approved" summary="approved"/>
    <variant name=".Blocked" summary="blocked"/>
  </token>
</histogram>

<histogram name="FamilyUser.NewUserAdded" enum="NewUserAdded"
    expires_after="2026-11-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Reports NewUserAdded enum when a new Family Link user or regular user is
    successfully added to Chrome OS device. Other user types fall into the other
    bucket. Reports when the user session starts.
  </summary>
</histogram>

<histogram name="FamilyUser.SessionEngagement.Duration" units="ms"
    expires_after="2026-11-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the Chrome OS user session duration in milliseconds. Reports current
    daily duration at the first session start on next day. This is only logged
    for active usage time of device, determined by UsageTimeState::ACTIVE.
  </summary>
</histogram>

<histogram name="FamilyUser.SessionEngagement.Total" units="Hour of day"
    expires_after="2026-11-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the Chrome OS user engagement hour within the current day (0-23),
    total of weekday and weekend. Logged on
    UsageTimeStateNotifier::UsageTimeState changes to INACTIVE. Might report the
    same hour multiple times.
  </summary>
</histogram>

<histogram name="FamilyUser.SessionEngagement.Weekday" units="Hour of day"
    expires_after="2027-01-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the Chrome OS user engagement hour of day (0-23) on weekday. Logged
    on UsageTimeStateNotifier::UsageTimeState changes to INACTIVE. Might report
    the same hour multiple times.
  </summary>
</histogram>

<histogram name="FamilyUser.SessionEngagement.Weekend" units="Hour of day"
    expires_after="2027-01-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the Chrome OS user engagement hour of day (0-23) on weekend. Logged
    on UsageTimeStateNotifier::UsageTimeState changes to INACTIVE. Might report
    the same hour multiple times.
  </summary>
</histogram>

<histogram name="FamilyUser.TimeLimitPolicyTypes" enum="TimeLimitPolicyType"
    expires_after="2026-11-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records what time limit policy types are enabled for the currently active
    Family Link user. Enabling multiple policies would report multiple buckets
    to UMA. Prior to M93, this metric was recorded at the beginning of first
    active session daily. In M93, this metric is now also recorded when bed time
    limit, daily limit, override time limit, apps time limit and web time limit
    policies are changed. App time limits does not include blocked apps.
  </summary>
</histogram>

<histogram name="FamilyUser.WebFilterType" enum="SupervisedUserWebFilterType"
    expires_after="2027-01-10">
<!-- Do not extend once expires, migrate to SupervisedUsers.WebFilterType.FamilyLink-->

  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the web filter type for currently active Family Link user. Records
    daily and also when web filter type policy changed. This metric is not
    emitted during OOBE and sign out. FamilyUser.WebFilterType.PerRecord is
    emitted for every UMA record, in which there is an active supervised user,
    from the current session.

    Historical caveats: Stable M137 (all versions 137.0.7146.0 to 138.0.7197.0)
    have unreliable data for this histogram. Versions before 137.0.7146.0
    over-recored the metric.

    SupervisedUsers.WebFilterType.Family link is the preffered equivalent of
    this metric.
  </summary>
</histogram>

<histogram name="FamilyUser.WebFilterType.PerRecord"
    enum="SupervisedUserWebFilterType" expires_after="2027-01-10">
  <owner>tju@google.com</owner>
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Categorizes the current user based on parental control web filter setting.
    If there are multiple active supervised accounts on the device, records the
    filter type if they all have the same filter type. If they have different
    filter types, records the 'mixed' filter. Unsupervised users are ignored in
    the process of deciding what to record. FamilyUser.WebFilterType.PerRecord
    is emitted for every UMA record from the current session. In contrast,
    FamilyUser.WebFilterType is recorded less frequently; see its histogram
    description.

    Reported value reflects the effective web filter type.

    Android: takes into account both account and device parental controls.
  </summary>
</histogram>

<histogram name="FamilyUser.{AppType}AppsCount2" units="Number of Apps"
    expires_after="2026-11-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Around once per day, records the number of recently used {AppType} apps in
    the past day.
  </summary>
  <token key="AppType">
    <variant name="Arc"/>
    <variant name="Borealis"/>
    <variant name="BuiltIn"/>
    <variant name="Crostini"/>
    <variant name="Extension"/>
    <variant name="Lacros"/>
    <variant name="PluginVm"/>
    <variant name="Remote"/>
    <variant name="SystemWeb"/>
    <variant name="Unknown"/>
    <variant name="Web"/>
  </token>
</histogram>

<histogram name="FamilyUser.{ExtensionStatus}ExtensionsCount2"
    units="Number of Extensions" expires_after="2026-11-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    Records the number of non-component {ExtensionStatus} regular browser
    extensions and themes around once per day, regardless of when they were last
    used.
  </summary>
  <token key="ExtensionStatus">
<!-- Note: the Disable variant is not used on ChromeOS. -->

    <variant name="Disabled" summary="disabled"/>
    <variant name="Enabled" summary="enabled"/>
    <variant name="Installed" summary="installed"/>
  </token>
</histogram>

<histogram name="ManagedMode.BlockingInterstitialCommand"
    enum="ManagedModeBlockingCommand" expires_after="2027-01-17">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>Which command was selected from the blocking interstitial.</summary>
</histogram>

<histogram name="ManagedUsers.BlockedIframeCount" units="iframes"
    expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    The number of blocked iframes per unblocked main frame load. The value is
    recorded when the main frame finishes loading.
  </summary>
</histogram>

<histogram name="ManagedUsers.FilteringResult"
    enum="SupervisedUserSafetyFilterResult" expires_after="2027-01-17">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    The counts of results from supervised user URL filtering. Each entry
    includes the outcome of the filter (i.e. allowed, blocked, or unknown) and
    the page transition type (how the user got there, e.g. typed URL, clicked
    link). For a more general metric see ManagedUsers.TopLevelFilteringResult2.
  </summary>
</histogram>

<histogram name="ManagedUsers.RequestPermissionSource"
    enum="ManagedUserURLRequestPermissionSource" expires_after="2026-11-15">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    The counts of request for permission sent from main frame or sub-frame.
  </summary>
</histogram>

<histogram name="ManagedUsers.TopLevelFilteringResult2{Context}"
    enum="SupervisedUserFilterTopLevelResult" expires_after="2027-02-05">
<!-- Do not extend once expires, migrate to SupervisedUsers.{Component}.TopLevelFilteringResult{Context}-->

  <owner>tju@chromium.org</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    Records counts of results from supervised user URL filtering that are
    {Context}. Each entry includes the outcome of the filter (allowed or
    blocked). If outcome is blocked then the reason for the block (e.g.
    SafeSites, Blocklist) is also recorded. For more granular information see
    ManagedUsers.FilteringResult.

    Historical caveats: versions before 138.0.7197.0 were updating the url
    filter for ineligible non-supervised users, overtriggering the
    classification.
  </summary>
  <token key="Context">
    <variant name="" summary="aggregated across all contexts"/>
    <variant name=".Default"
        summary="not in explicitly specified context (eg. for tools in
                 chrome:// internal pages)"/>
    <variant name=".FamilyLinkSettingsUpdated"
        summary="caused by changes to Family Link"/>
    <variant name=".NavigationObserver"
        summary="caused by navigation observer events"/>
    <variant name=".NavigationThrottle"
        summary="caused by navigation throttle events"/>
  </token>
</histogram>

<histogram name="SupervisedUsers.AskParentDialog"
    enum="SupervisedUserAskParentDialog" expires_after="2026-11-01">
  <owner>richui@google.com</owner>
  <owner>agawronska@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The supervised user extensions installation flow on android desktop is
    comprised of three different steps: ask parent dialog, parent auth dialog,
    and extension installation dialog. This histogram records the actions on the
    Ask Parent Dialog.
  </summary>
</histogram>

<histogram
    name="SupervisedUsers.ClassifyUrlThrottle.EarlierThanContentResponse"
    units="ms" expires_after="2027-02-07">
  <owner>tju@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    Records the time difference between completing the url classification for
    the navigation (including request and possible redirects), and the moment
    where the classification was needed to decide whether or not to proceed with
    navigation.

    Recorded only in the mainline case when the navigation was not blocked.

    Together with the complementary
    SupervisedUsers.ClassifyUrlThrottle.LaterThanContentResponse metric it forms
    a continuum of time, with 0 recorded in either (but only one) metric meaning
    that the classification was ready exactly when it was needed.
  </summary>
</histogram>

<histogram name="SupervisedUsers.ClassifyUrlThrottle.FinalStatus"
    enum="ClassifyUrlThrottleFinalStatus" expires_after="2026-10-11">
  <owner>tju@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    The final verdict of the throttle, recorded exactly once per navigation when
    the throttle had chance to make its decision.

    Throttle might not make decision if another throttle made not-allowing
    decision first, or navigation was genuinely terminated or canceled by the
    user.

    See ManagedUsers.TopLevelFilteringResult2.NavigationThrottle for filtering
    sub-decisions that led to the reported verdict.
  </summary>
</histogram>

<histogram name="SupervisedUsers.ClassifyUrlThrottle.LaterThanContentResponse"
    units="ms" expires_after="2026-03-15">
  <owner>tju@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    Records the time difference between when the navigation needs a url
    classification to proceed, and the time when that classification was
    completed. In other words, it tracks the user-visible delay introduced to
    the navigation by the url classification.

    Recorded only in the mainline case when the navigation was not blocked.

    Together with the complementary
    SupervisedUsers.ClassifyUrlThrottle.EarlierThanContentResponse metric it
    forms a continuum of time, with 0 recorded in either (but only one) metric
    meaning that the classification was ready exactly when it was needed.
  </summary>
</histogram>

<histogram name="SupervisedUsers.ExtensionEnablement"
    enum="SupervisedUserExtensionEnablement" expires_after="2027-01-03">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records supervised users trying to enable or disable extensions. Enabled
    count increments when the supervised user successfully enables an extension.
    Disabled count increments when the supervised user successfully disables an
    extension. Enable attempt failed count increments when the parent has turned
    off the &quot;Permissions for sites, apps and extensions&quot; toggle and
    the supervised user tries to enable an extension that requires custodian
    approval or has a permissions increase.
  </summary>
</histogram>

<histogram name="SupervisedUsers.ExtensionInstallDialog"
    enum="SupervisedUserExtensionInstallDialog" expires_after="2027-01-03">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the actions of supervised users on the Extension Install Dialog.
    Opened count increments when the supervised user tries to install an
    extension from the Chrome Web Store and launches the Extension Install
    Dialog. Asked Parent count increments when the supervised user clicks
    &quot;Ask a parent&quot;. Child Canceled count increments when the
    supervised user clicks &quot;Cancel&quot;.
  </summary>
</histogram>

<histogram name="SupervisedUsers.Extensions2" enum="SupervisedUserExtension2"
    expires_after="2025-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    Records the progress of supervised users as they try to install Chrome
    extensions. See the descriptions in the individual enum buckets.
  </summary>
</histogram>

<histogram name="SupervisedUsers.ParentPermissionDialog"
    enum="SupervisedUserParentPermissionDialog" expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the actions of parents on the Parent Permission Dialog. Opened count
    increments when the Parent Permission Dialog first opens. Parent Approved
    count increments when the parent successfully types their password and
    approves the extension. Parent Canceled count increments when the parent
    cancels the dialog, denying the supervised user's attempt to enable the
    extension. Failed count increments when there was some sort of failure in
    the Parent Permission Dialog. No Parent Error count increments when the
    supervised user doesn't have any associated parent email addresses for
    asking approval. Note that this error also increments the Failed count.
  </summary>
</histogram>

<histogram name="SupervisedUsers.PerAppTimeLimits.AppsWithTimeLimit"
    units="Apps" expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    The count of applications with time limit set by parents. Recorded once per
    PerAppTimeLimit policy change.
  </summary>
</histogram>

<histogram name="SupervisedUsers.PerAppTimeLimits.BlockedAppsCount"
    units="Apps" expires_after="2025-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    The count of applications blocked by parents. It only applies to ARC++
    applications. Recorded once per PerAppTimeLimit policy change.
  </summary>
</histogram>

<histogram name="SupervisedUsers.PerAppTimeLimits.Engagement" units="Apps"
    expires_after="2027-01-17">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Per-App Time Limits feature engagement measured by the number of apps with
    time limits set for child user. Reported at the beginning of each user
    session.
  </summary>
</histogram>

<histogram name="SupervisedUsers.PerAppTimeLimits.PolicyChangeCount"
    units="Changes" expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    The total number of PerAppTimeLimits policy changes seen in a session.
    Recorded once at the end of the session.
  </summary>
</histogram>

<histogram name="SupervisedUsers.SitesMayRequestCameraMicLocation.PerRecord"
    enum="SupervisedUserToggleState" expires_after="2026-11-01">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the state of the &quot;Permissions for sites&quot; toggle. When
    parents/custodians have the toggle enabled websites may ask for camera,
    microphone and location permission (and the supervised user can grant
    these). When the toggle is disabled, requests for these permissions are
    blocked. The value is recorded with every UMA record upload from the current
    session. It should therefore be used as a filter, or looking at unique
    client counts (raw counts are not meaningful).
  </summary>
</histogram>

<histogram
    name="SupervisedUsers.SkipParentApprovalToInstallExtensions.PerRecord"
    enum="SupervisedUserToggleState" expires_after="2027-02-07">
  <owner>anthie@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Records the state of the &quot;Extensions&quot; toggle. When
    parents/custodians have the toggle enabled, supervised users may install
    extensions without explicit parent/custodian approval. Any extensions
    installed under this mode receive automatic parent approval. Otherwise,
    supervised users may install extensions upon receiving explicit
    parent/custodian approval on each installation. Unsupervised users are
    ignored in the process of deciding what to record. The value is recorded
    with every UMA record upload from the current session. It should therefore
    be used as a filter, or looking at unique client counts (raw counts are not
    meaningful).
  </summary>
</histogram>

<histogram name="SupervisedUsers.WebFilterType{UserType}"
    enum="SupervisedUserWebFilterType" expires_after="2027-01-10">
  <owner>tju@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    Records the web filter type for currently active supervised user. Records
    daily and also when web filter type policy changed. This metric is not
    emitted during OOBE and sign out. FamilyUser.WebFilterType.PerRecord is
    emitted for every UMA record, in which there is an active supervised user,
    from the current session.

    SupervisedUsers.WebFilterType.FamilyLink is equivalent with
    FamilyUser.WebFilterType.
  </summary>
<!-- LINT.IfChange(supervised_user_web_filter_type_user_type) -->

  <token key="UserType">
    <variant name=".FamilyLink" summary="Family Link"/>
    <variant name=".LocallySupervised" summary="locally supervised"/>
  </token>
<!-- LINT.ThenChange(//components/supervised_user/core/browser/supervised_user_metrics_service.cc:supervised_user_web_filter_type_user_type) -->

</histogram>

<histogram name="SupervisedUsers.{Component}.TopLevelFilteringResult{Context}"
    enum="SupervisedUserFilterTopLevelResult" expires_after="2027-02-28">
  <owner>tju@chromium.org</owner>
  <owner>chrome-signin-team@google.com</owner>
  <summary>
    Records counts of results from supervised user URL filtering. Each entry
    includes the outcome of the filter (allowed or blocked). If outcome is
    blocked reason for the block (e.g. SafeSites, Blocklist) is also recorded.
    For more granular information about details of filtering for
    FamilyLinkUrlFilteringDelegate, see ManagedUsers.FilteringResult.

    SupervisedUsers.UrlFilteringService.* are aggregated metrics from all
    individual filtering delegates.
  </summary>
  <token key="Component">
<!-- LINT.IfChange(family_link_url_filtering_delegate) -->

    <variant name="Account" summary="caused by Family Link account delegate"/>
<!-- LINT.ThenChange(//components/supervised_user/core/browser/family_link_url_filtering_delegate.cc:family_link_url_filtering_delegate) -->

<!-- LINT.IfChange(url_filtering_service) -->

    <variant name="All" summary="aggregated across all delegates"/>
<!-- LINT.ThenChange(//components/supervised_user/core/browser/supervised_user_url_filtering_service.cc:url_filtering_service) -->

<!-- LINT.IfChange(device_parental_controls_url_filtering_delegate) -->

    <variant name="Device"
        summary="caused by device parental controls delegate"/>
<!-- LINT.ThenChange(//components/supervised_user/core/browser/device_parental_controls_url_filter.cc:device_parental_controls_url_filtering_delegate) -->

  </token>
<!-- LINT.IfChange(top_level_filtering_context) -->

  <token key="Context">
    <variant name="" summary="aggregated across all contexts"/>
    <variant name=".Default"
        summary="not in explicitly specified context (eg. for tools in
                 chrome:// internal pages)"/>
    <variant name=".FamilyLinkSettingsUpdated"
        summary="caused by changes to Family Link"/>
    <variant name=".NavigationObserver"
        summary="caused by navigation observer events"/>
    <variant name=".NavigationThrottle"
        summary="caused by navigation throttle events"/>
  </token>
<!-- LINT.ThenChange(//components/supervised_user/core/common/supervised_user_constants.h:top_level_filtering_context,//components/supervised_user/core/browser/supervised_user_url_filter.cc:top_level_filtering_context) -->

</histogram>

<histogram name="Supervision.ParentAccessCode.Action"
    enum="ParentAccessCodeAction" expires_after="2027-01-17">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    Action originated in parent access code dialog. Logged every time the action
    happens.
  </summary>
</histogram>

<histogram name="Supervision.ParentAccessCode.Usage"
    enum="ParentAccessCodeUsage" expires_after="2027-02-02">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    The context in which parent access code was used. Logged every time the new
    parent access dialog is shown.
  </summary>
</histogram>

<histogram name="Supervision.ParentAccessCode.ValidationResult.{Action}"
    enum="ParentAccessCodeValidationResult" expires_after="2026-11-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    The result of the parent access code validation for {Action} action. Logged
    every time the code is validated from the parent access dialog.
  </summary>
  <token key="Action">
    <variant name="AddUser"/>
    <variant name="All"/>
    <variant name="ClockChange"/>
    <variant name="Reauth"/>
    <variant name="TimeLimits"/>
    <variant name="TimezoneChange"/>
  </token>
</histogram>

<histogram name="Supervision.StatusReport.Event"
    enum="SupervisionStatusReportEvent" expires_after="2026-11-10">
  <owner>zhangwenyu@google.com</owner>
  <owner>longbowei@google.com</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    The event that triggered status report for supervised account.
  </summary>
</histogram>

<histogram name="{RequestType}.AuthError" enum="GoogleServiceAuthError"
    expires_after="2026-03-22">
  <owner>ljjlee@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    The detailed reason for AuthError failures. Recorded for each request to the
    API where Chrome was unable to get a valid access token (whether or not this
    error was fatal).
  </summary>
  <token key="RequestType" variants="ProtoFetcherRequestType"/>
</histogram>

<histogram name="{RequestType}.HttpStatusOrNetError"
    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-05-24">
  <owner>tju@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    The status of the net or HTTP communication in calls to {RequestType}. This
    is recorded for each request to the {RequestType}.
  </summary>
  <token key="RequestType" variants="ProtoFetcherRequestType"/>
</histogram>

<histogram name="{RequestType}.Latency" units="ms" expires_after="2026-04-26">
  <owner>tju@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    Tracks the latency in calls to {RequestType}. It includes both the actual
    RPC call and the time spent in requesting access token.

    Googlers only: See go/chrome-kids-backend-monitoring for backend-related
    metrics.
  </summary>
  <token key="RequestType" variants="ProtoFetcherRequestType"/>
</histogram>

<histogram name="{RequestType}.Status" enum="SupervisedUserProtoFetcherStatus"
    expires_after="2027-01-03">
  <owner>tju@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>The status of the fetch in calls to {RequestType}.</summary>
  <token key="RequestType" variants="ProtoFetcherRequestType"/>
</histogram>

<histogram name="{RequestType}.{Status}.Latency" units="ms"
    expires_after="2027-02-07">
  <owner>tju@google.com</owner>
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    Latency of the calls to {RequestType} that resulted in &quot;{Status}&quot;
    status. It includes both the actual RPC call and the time spent in
    requesting access token.
  </summary>
  <token key="RequestType" variants="ProtoFetcherRequestType"/>
  <token key="Status">
    <variant name="AuthError"/>
    <variant name="DataError"
        summary="contract error (data in the response missing despite
                 succesful parsing)"/>
    <variant name="HttpStatusOrNetError"/>
    <variant name="NoError"/>
    <variant name="ParseError"/>
  </token>
</histogram>

</histograms>

</histogram-configuration>
