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

<!--
This file is used to generate a comprehensive list of Network histograms
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

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

<histogram-configuration>

<histograms>

<variants name="ApnTypes">
  <variant name="DEFAULT" summary="Default/Data APN"/>
  <variant name="DUN" summary="Tethering APN"/>
</variants>

<variants name="AshNetworkType">
<!-- The following variants are names of network types tracked in the Chrome layer.
  These are used for various Network.Ash.* histograms to record network connection
  information events. -->

  <variant name="Cellular"/>
  <variant name="Cellular.ESim"/>
  <variant name="Cellular.ESim.Policy"/>
  <variant name="Cellular.PSim"/>
  <variant name="Cellular.PSim.Policy"/>
  <variant name="Ethernet"/>
  <variant name="Ethernet.Eap"/>
  <variant name="Ethernet.NoEap"/>
  <variant name="Tether"/>
  <variant name="VPN"/>
  <variant name="VPN.TypeBuiltIn"/>
  <variant name="VPN.TypeThirdParty"/>
  <variant name="WiFi"/>
  <variant name="WiFi.SecurityOpen"/>
  <variant name="WiFi.SecurityPasswordProtected"/>
</variants>

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

<variants name="ContentDecodingInterceptorClientType">
  <variant name="CommitNavigation"/>
  <variant name="DevTools"/>
  <variant name="Download"/>
  <variant name="NavigationPreload"/>
  <variant name="SignedExchange"/>
  <variant name="URLLoaderThrottle"/>
</variants>

<!-- LINT.ThenChange(/services/network/public/cpp/content_decoding_interceptor.h:ContentDecodingInterceptorClientType) -->

<variants name="DHCPProvisionReason">
  <variant name="Connect"/>
  <variant name="LeaseExpiration"/>
  <variant name="Roaming"/>
  <variant name="SuspendResume"/>
</variants>

<variants name="IPsecVPNType">
  <variant name="Ikev2" summary="IKEv2"/>
  <variant name="L2tpIpsec" summary="L2TP/IPsec"/>
</variants>

<variants name="PhysicalTechnology">
  <variant name="Cellular" summary="Cellular"/>
  <variant name="Ethernet" summary="Ethernet"/>
  <variant name="Wifi" summary="Wifi"/>
</variants>

<variants name="ProgressiveScan">
  <variant name="_33Percent_4MinMax"
      summary="Progressive scan @ 33%, 4 frequency bins."/>
  <variant name="_50Percent_4MinMax"
      summary="Progressive scan @ 50%, 4 frequency bins."/>
  <variant name="_50Percent_8MinMax"
      summary="Progressive scan @ 50%, 8 frequency bins."/>
  <variant name="_100Percent_1Min_4Max"
      summary="Progressive scan @ 100%, minimum 1/maximum 4 frequencies."/>
  <variant name="_100Percent_1MinSeen_A"
      summary="Progressive scan @ all previously seen frequencies (A)."/>
  <variant name="_100Percent_1MinSeen_B"
      summary="Progressive scan @ all previously seen frequencies (B)."/>
  <variant name="_100Percent_8MinMax"
      summary="Progressive scan @ 100%, 8 frequency bins."/>
  <variant name="_FullScan" summary="Using WPA_supplicant to scan."/>
</variants>

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

<variants name="QueueName">
  <variant name="Default" summary="Deprecated on 2025-10-15."/>
  <variant name="High" summary="Deprecated on 2025-10-15."/>
  <variant name="Highest"/>
  <variant name="Idle"/>
  <variant name="Low"/>
  <variant name="Lowest"/>
  <variant name="Medium"/>
  <variant name="Throttled"/>
</variants>

<!-- LINT.ThenChange(//net/base/scheduler/net_task_queues.cc:PriorityToString) -->

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

<variants name="RequestPriority">
  <variant name="HIGHEST"/>
  <variant name="IDLE"/>
  <variant name="LOW"/>
  <variant name="LOWEST"/>
  <variant name="MEDIUM"/>
  <variant name="THROTTLED"/>
</variants>

<!-- LINT.ThenChange(//net/base/request_priority.cc:RequestPriorityToString) -->

<variants name="RoamSecurityType">
  <variant name=".EAP"
      summary="Records roams in a network using 802.1X authentication without
               Fast Transition"/>
  <variant name=".FTEAP"
      summary="Records roams in a network using 802.1X authentication with
               Fast Transition"/>
  <variant name=".FTPSK"
      summary="Records roams in a network using PSK authentication with Fast
               Transition"/>
  <variant name=".PSK"
      summary="Records roams in a network using PSK authentication without
               Fast Transition"/>
</variants>

<variants name="ShillWiFiRememberedNetworkSecurityMode">
  <variant name=".802_1x" summary="Network is secured with 802.1x"/>
  <variant name=".none" summary="Network is not secured"/>
  <variant name=".psk"
      summary="Network is security with WPA or WPA-2 (aka RSN)"/>
  <variant name=".wep"
      summary="Network employs WEP (Wired Equivalent Privacy)"/>
</variants>

<variants name="SmdsType">
  <variant name="Android"/>
  <variant name="Gsma"/>
  <variant name="Other"/>
</variants>

<variants name="VPNType">
  <variant name="ARC" summary="Android VPN"/>
  <variant name="Ikev2" summary="IKEv2"/>
  <variant name="L2tpIpsec" summary="L2TP/IPsec"/>
  <variant name="OpenVPN" summary="OpenVPN"/>
  <variant name="ThirdParty" summary="Chrome VpnProvider App"/>
  <variant name="WireGuard" summary="WireGuard"/>
</variants>

<histogram
    name="Network.Ash.Cellular.AllowTextMessages.Policy.SuppressionState"
    enum="PolicyTextMessageSuppressionState" expires_after="2026-12-01">
  <owner>chadduffin@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the policy text message suppression state. This is emitted whenever
    the text message suppression value is changed via policy.
  </summary>
</histogram>

<histogram
    name="Network.Ash.Cellular.AllowTextMessages.TextMessageNotificationSuppressionState"
    enum="NotificationSuppressionState" expires_after="2026-12-01">
  <owner>chadduffin@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the received text message notification suppression state. This is
    emitted whenever a text message notification is received.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.AllowTextMessages.User.SuppressionState"
    enum="UserTextMessageSuppressionState" expires_after="2026-12-01">
  <owner>chadduffin@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the user text message suppression state. This is emitted whenever
    the text message suppression value is changed by the user.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.CreateCustomApn.AllowApnModification"
    enum="BooleanEnabled" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the state of AllowApnModification policy while creating a custom
    APN.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.CreateCustomApn.ApnTypes"
    enum="ApnTypes" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the APN types of an APN. This is emitted each time a user creates a
    custom APN.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.CreateCustomApn.AuthenticationType"
    enum="ApnAuthenticationType" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the authentication type of an APN. This is emitted each time a user
    creates a custom APN.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.CreateCustomApn.IpType"
    enum="ApnIpType" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the IP type of an APN. This is emitted each time a user creates a
    custom APN.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.CreateCustomApn.Result"
    enum="BooleanSuccess" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Deprecated. Records the result of an attempt to create a custom APN.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.CreateCustomApn.Result2"
    enum="CreateCustomApnResult" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>Records the result of an attempt to create a custom APN.</summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.CreateCustomApn.ShillError"
    enum="ShillConnectResult" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>Records shill errors of an attempt to create a custom APN.</summary>
</histogram>

<histogram
    name="Network.Ash.Cellular.Apn.CreateExclusivelyEnabledCustomApn.ApnTypes"
    enum="ApnTypes" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the APN types of an APN. This is emitted each time a user creates an
    exclusively enabled custom APN.
  </summary>
</histogram>

<histogram
    name="Network.Ash.Cellular.Apn.CreateExclusivelyEnabledCustomApn.AuthenticationType"
    enum="ApnAuthenticationType" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the authentication type of an APN. This is emitted each time a user
    creates an exclusively enabled custom APN.
  </summary>
</histogram>

<histogram
    name="Network.Ash.Cellular.Apn.CreateExclusivelyEnabledCustomApn.IpType"
    enum="ApnIpType" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the IP type of an APN. This is emitted each time a user creates an
    exclusively enabled custom APN.
  </summary>
</histogram>

<histogram
    name="Network.Ash.Cellular.Apn.CreateExclusivelyEnabledCustomApn.Result"
    enum="BooleanSuccess" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the result of an attempt to create an exclusively enabled custom
    APN.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.CustomApns.Count" units="count"
    expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the number of APNs saved for a cellular network every time a
    cellular network successfully connects.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.CustomApns.{CustomApnState}.Count"
    units="count" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the number of {CustomApnState} APNs saved for a cellular network
    every time a cellular network successfully connects.
  </summary>
  <token key="CustomApnState">
    <variant name="Disabled"/>
    <variant name="Enabled"/>
  </token>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.DisableCustomApn.ApnTypes"
    enum="ApnTypes" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the APN types of an APN before modification. This is emitted each
    time a user disables a custom APN.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.DisableCustomApn.Result"
    enum="BooleanSuccess" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>Records the result of an attempt to disable a custom APN.</summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.EnableCustomApn.ApnTypes"
    enum="ApnTypes" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the APN types of an APN before modification. This is emitted each
    time a user enable a custom APN.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.EnableCustomApn.Result"
    enum="BooleanSuccess" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>Records the result of an attempt to enable a custom APN.</summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.Login.AllowApnModification"
    enum="BooleanEnabled" expires_after="2026-12-01">
  <owner>nikhilcn@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>Tracks the state of AllowApnModification policy at login.</summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.Managed.MigrationType"
    enum="ManagedApnMigrationType" expires_after="2026-12-01">
  <owner>hsuregan@google.com</owner>
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the type of migration that occurs for each APN that's migrated for
    managed devices. This metric is emitted when a managed network is migrated
    from the old APN UI to new APN UI.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.ModifyCustomApn.AllowApnModification"
    enum="BooleanEnabled" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the state of AllowApnModification policy while modifying a custom
    APN.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.ModifyCustomApn.ApnTypes"
    enum="ApnTypes" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the APN types of an APN before modification. This is emitted each
    time a user modifies a custom APN.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.ModifyCustomApn.Result"
    enum="BooleanSuccess" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>Records the result of an attempt to modify a custom APN.</summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.Policy.AllowApnModification"
    enum="BooleanEnabled" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the state of AllowApnModification policy when the policy is applied
    on the device.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.RemoveCustomApn.AllowApnModification"
    enum="BooleanEnabled" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the state of AllowApnModification policy while removing a custom
    APN.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.RemoveCustomApn.ApnTypes"
    enum="ApnTypes" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the APN types of an APN. This is emitted each time a user removes a
    custom APN.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.RemoveCustomApn.Result"
    enum="BooleanSuccess" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>Records the result of an attempt to remove a custom APN.</summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.Unmanaged.MigrationType"
    enum="UnmanagedApnMigrationType" expires_after="2026-12-01">
  <owner>hsuregan@google.com</owner>
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the type of migration that occurs for each APN that's migrated for
    unmanaged devices. This metric is emitted when an unmanaged network is
    migrated from the old APN UI to new APN UI.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.ConfigurationFailure.Type"
    enum="CellularConfigurationFailureType" expires_after="2026-12-01">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the type of cellular configuration failures that occur when
    connecting to a cellular network.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.ConnectionResult.{CustomApnsStatus}.All"
    enum="ShillConnectResult" expires_after="2026-12-01">
  <owner>nikhilcn@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the result of network connection attempts for cellular networks and
    whether they have at least one enabled custom APN or not. A success is
    emitted when a cellular network becomes connected from a non-connected
    state. When a cellular network goes from a connecting state to a
    disconnected state without a user initiated disconnect, a shill failure
    reason is emitted.
  </summary>
  <token key="CustomApnsStatus">
    <variant name="HasEnabledCustomApns"/>
    <variant name="NoEnabledCustomApns"/>
  </token>
</histogram>

<histogram name="Network.Ash.Cellular.ESim.HermesInstallationAttempt.Step"
    enum="InstallationAttemptStep" expires_after="2026-12-01">
  <owner>chadduffin@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records when a step in the installation of an eSIM profile is reached. Each
    installation attempt is expected to emit to multiple buckets, e.g.
    installation started and installation succeeed, and may emit to particular
    buckets more than once, e.g. installation retried.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.ESim.PolicyInstall.Method"
    enum="ESimPolicyInstallMethod" expires_after="2026-12-01">
  <owner>chadduffin@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the method of installation used to attempt to install an eSIM
    profile. This is emitted once for each initial installation attempt of the
    eSIM profile corresponding to a policy-defined network.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.ESim.PolicyInstall.NoAvailableProfiles"
    enum="ESimPolicyInstallMethod" expires_after="2026-12-01">
  <owner>chadduffin@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the method of installation used to attempt to install an eSIM
    profile. This is emitted once for each installation attempt of the eSIM
    profile corresponding to a policy-defined network, and is only emitted if
    the scan performed to find profiles matching the provided activation code
    finds no available profiles.
  </summary>
</histogram>

<histogram
    name="Network.Ash.Cellular.ESim.PolicyInstall.{UserErrorHandling}.{Method}"
    enum="ESimOperationResult" expires_after="2027-02-14">
  <owner>chadduffin@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the result of an attempt to install an eSIM profile. This is emitted
    once for each installation attempt of the eSIM profile corresponding to a
    policy-defined network. The &quot;included&quot; variant will always be
    emitted to; the &quot;filtered&quot; variant, however, will not be emitted
    to when the result was due to an Hermes failure that was caused by something
    outside the control of ChromeOS, e.g. an invalid activation code.
  </summary>
  <token key="UserErrorHandling">
    <variant name="UserErrorsFiltered"/>
    <variant name="UserErrorsIncluded"/>
  </token>
  <token key="Method">
    <variant name="All"/>
    <variant name="ViaSmdpInitial"/>
    <variant name="ViaSmdpRetry"/>
    <variant name="ViaSmdsInitial"/>
    <variant name="ViaSmdsRetry"/>
  </token>
</histogram>

<histogram
    name="Network.Ash.Cellular.ESim.SmdsScan.{SmdsScanMethod}.ProfileCount"
    units="units" expires_after="2026-12-01">
  <owner>chadduffin@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the number of eSIM profiles discovered by SM-DS scans. This will be
    emitted once for each installation attempt; this means that if multiple
    SM-DS servers are scanned for an installation attempt the count emitted will
    be the total number of profiles discovered across all scanned servers.
  </summary>
  <token key="SmdsScanMethod">
    <variant name="ViaPolicy"/>
    <variant name="ViaUser"/>
  </token>
</histogram>

<histogram
    name="Network.Ash.Cellular.ESim.SmdsScan.{SmdsType}.{UserErrorHandling}"
    enum="ESimOperationResult" expires_after="2027-02-07">
  <owner>chadduffin@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the result of a single SM-DS scan of a single SM-DS server. The
    {SmdsType} token indicates the type of SM-DS server that was scanned, and
    the {UserErrorHandling} token indicates the result filtering used, if any.
    The &quot;included&quot; variant will always be emitted to; the
    &quot;filtered&quot; variant, however, will not be emitted to when the
    result was due to an Hermes failure that was caused by something outside the
    control of ChromeOS, e.g. an invalid activation code.
  </summary>
  <token key="SmdsType" variants="SmdsType"/>
  <token key="UserErrorHandling">
    <variant name="UserErrorsFiltered"/>
    <variant name="UserErrorsIncluded"/>
  </token>
</histogram>

<histogram
    name="Network.Ash.Cellular.ESim.SmdsScanDuration2.{SmdsType}.{DurationType}"
    units="ms" expires_after="2026-12-01">
  <owner>chadduffin@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the time taken to perform a single SM-DS scan of a single SM-DS
    server. The {SmdsType} token indicates the type of SM-DS server that was
    scanned, and the {DurationType} token indicates whether this duration was
    for a scan that completed with a Hermes result that indicates a non-fatal
    error occurred. An error does not necessarily indicate that the scan failed,
    but does indicate that there was an issue when performing the scan, e.g.,
    there was an issue with one of the profiles discovered.
  </summary>
  <token key="SmdsType" variants="SmdsType"/>
  <token key="DurationType">
    <variant name="OnFailure"/>
    <variant name="OnSuccess"/>
  </token>
</histogram>

<histogram name="Network.Ash.Cellular.ESim.UserInstall.Method"
    enum="ESimUserInstallMethod" expires_after="2026-12-01">
  <owner>chadduffin@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the method of installation used to attempt to install an eSIM
    profile. This is emitted once for each installation attempt of an eSIM
    profile using the consumer UI.
  </summary>
</histogram>

<histogram
    name="Network.Ash.Cellular.ESim.UserInstall.{UserErrorHandling}.{Method}"
    enum="ESimOperationResult" expires_after="2026-12-01">
  <owner>chadduffin@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the result of an attempt to install an eSIM profile. This is emitted
    once for each installation attempt of an eSIM profile using the consumer UI.
    The &quot;included&quot; variant will always be emitted to; the
    &quot;filtered&quot; variant, however, will not be emitted to when the to
    when the result was due to an Hermes failure that was caused by something
    outside the control of ChromeOS, e.g. an invalid activation code.
  </summary>
  <token key="UserErrorHandling">
    <variant name="UserErrorsFiltered"/>
    <variant name="UserErrorsIncluded"/>
  </token>
  <token key="Method">
    <variant name="All"/>
    <variant name="ViaActivationCodeAfterSmds"/>
    <variant name="ViaActivationCodeSkippedSmds"/>
    <variant name="ViaQrCodeAfterSmds"/>
    <variant name="ViaQrCodeSkippedSmds"/>
    <variant name="ViaSmds"/>
  </token>
</histogram>

<histogram name="Network.Ash.Cellular.SimLock.Policy.Notification.Event"
    enum="SimLockNotificationEvent" expires_after="2026-12-01">
  <owner>hsuregan@chromium.org</owner>
  <owner>nikhilcn@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records events on the notification shown when the SIM is locked and admin
    has restricted users from PIN locking their SIMs. These are emitted once the
    notification is shown and once when the user interacts with it.
  </summary>
</histogram>

<histogram name="Network.Ash.Cellular.SimLock.Policy.Notification.LockType"
    enum="SimPinLockType" expires_after="2026-12-01">
  <owner>hsuregan@chromium.org</owner>
  <owner>nikhilcn@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the type of SIM lock affecting a cellular network when a user is
    notified that the cellular network is SIM locked.
  </summary>
</histogram>

<histogram
    name="Network.Ash.Cellular.SimLock.Policy.{PinLockPolicy}.ActiveSIMLockStatus"
    enum="SimPinLockType" expires_after="2026-12-01">
  <owner>hsuregan@chromium.org</owner>
  <owner>nikhilcn@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the status of the SIM (Unlocked/PIN Locked/PUK Blocked) upon a
    change in cellular connection.

    This metric will be recorded upon following transitions: 1. no connection to
    new connection; 2. connection_1 to connection_2
  </summary>
  <token key="PinLockPolicy">
    <variant name="Restricted"/>
    <variant name="Unrestricted"/>
  </token>
</histogram>

<histogram name="Network.Ash.DefaultNetwork.MeterSubtype"
    enum="NetworkTechnologyMeterSubtype" expires_after="2026-12-01">
  <owner>hsuregan@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the technology type of the default network, which considers the
    technology type and whether the network is metered. The default network here
    means the first default/active non VPN network. Note that this metric is
    recorded whenever the default network changes or when the metered property
    changes. Note that if the default/active network drops and then reconnects
    without another network taking its place, this metric will not be emitted.
  </summary>
</histogram>

<histogram name="Network.Ash.Hotspot.SetConfig.OperationResult"
    enum="HotspotSetConfigResult" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Measures and tracks the result of setting hotspot configuration. Emitted
    whenever attempts to update hotspot configuration.
  </summary>
</histogram>

<histogram name="Network.Ash.Hotspot.Upstream.Cellular.Capability.AllowStatus"
    enum="HotspotAllowStatus" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Measures and tracks the hotspot allow status on the cellular-capable
    devices. This metric is emitted each time the allow status is updated, for
    example: when user connects/disconnect to a cellular network, enterprise
    policy applied, etc.
  </summary>
</histogram>

<histogram
    name="Network.Ash.Hotspot.Upstream.Cellular.Capability.AllowStatusAtLogin"
    enum="HotspotAllowStatus" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Measures and tracks the hotspot allow status on the cellular-capable devices
    only when user logins in. This metric is emitted after a 5 minutes delay
    when user login which gives the user enough time to connect to their
    upstream cellular network.
  </summary>
</histogram>

<histogram
    name="Network.Ash.Hotspot.Upstream.Cellular.CheckReadiness.OperationResult"
    enum="HotspotCheckReadinessResult" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Measures and tracks the result of checking tethering readiness. Emitted
    whenever attempts to check tehtering readiness, for exmaple: when cellular
    network get connected or when enable hotspot.
  </summary>
</histogram>

<histogram name="Network.Ash.Hotspot.Upstream.Cellular.Disabled.Reason"
    enum="HotspotDisableReason" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Measures and tracks the causes of disabled hotspot. Emitted each time the
    hotspot becomes disabled.
  </summary>
</histogram>

<histogram name="Network.Ash.Hotspot.Upstream.Cellular.Enabled.UpstreamStatus"
    enum="HotspotUpstreamStatus" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Measures and tracks the upstream status the when hotspot is start up.
    Emitted each time the hotspot starts successfully.
  </summary>
</histogram>

<histogram name="Network.Ash.Hotspot.Upstream.Cellular.EnableHotspot.Latency"
    units="ms" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks how long the user needs to wait once the hotspot is requested to turn
    on until the hotspot is ready to use.
  </summary>
</histogram>

<histogram
    name="Network.Ash.Hotspot.Upstream.Cellular.Usage.Config.AutoDisable"
    enum="BooleanEnabled" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Measures and tracks the number of whether the hotspot auto disable
    configuration is set for usage. Emitted each time the hotspot starts
    successfully.
  </summary>
</histogram>

<histogram
    name="Network.Ash.Hotspot.Upstream.Cellular.Usage.Config.CompatibilityMode"
    enum="BooleanEnabled" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Measures and tracks the number of whether the hotspot extend compatibility
    mode is set for usage. Emitted each time the hotspot starts successfully.
  </summary>
</histogram>

<histogram name="Network.Ash.Hotspot.Upstream.Cellular.Usage.Config.MAR"
    enum="BooleanEnabled" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Measures and tracks the number of whether the hotspot BSSID randomization
    configuration is set for usage. Emitted each time the hotspot starts
    successfully.
  </summary>
</histogram>

<histogram name="Network.Ash.Hotspot.Upstream.Cellular.Usage.Duration"
    units="ms" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks how long users use hotspot per session. Emitted whenever the hotspot
    is torn down.
  </summary>
</histogram>

<histogram
    name="Network.Ash.Hotspot.Upstream.Cellular.Usage.ManagedStateWhenHotspotEnabled"
    enum="BooleanManaged" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Measures and tracks the number of the hotspot being used on a managed device
    or not. Emitted each time the hotspot starts successfully.
  </summary>
</histogram>

<histogram
    name="Network.Ash.Hotspot.Upstream.Cellular.Usage.MaxConnectedDeviceCount"
    units="count" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the number of maximum connected device count per hotspot session.
    Emitted whenever the hotspot session is torn down.
  </summary>
</histogram>

<histogram
    name="Network.Ash.Hotspot.Upstream.Cellular.{Operation}.OperationResult"
    enum="HotspotSetEnabledResult" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Measures and tracks the result of turning on/off hotspot. Emitted whenever
    attempts to enabled/disabled hotspot.
  </summary>
  <token key="Operation">
    <variant name="DisableHotspot"/>
    <variant name="EnableHotspot"/>
  </token>
</histogram>

<histogram name="Network.Ash.VPN.{VPNProviderType}.ConfigurationSource"
    enum="VPNConfigurationSource" expires_after="2026-12-01">
  <owner>chadduffin@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Logs the configuration source (i.e., the user vs. policy) for VPN networks.
    Emitted when a VPN is configured.
  </summary>
  <token key="VPNProviderType">
    <variant name="ARC"/>
    <variant name="L2TPIPsec"/>
    <variant name="OpenVpn"/>
    <variant name="ThirdParty"/>
    <variant name="WireGuard"/>
  </token>
</histogram>

<histogram name="Network.Ash.WiFi.Hidden.RemovalAttempt"
    units="network removal attempts" expires_after="2026-12-01">
  <owner>chadduffin@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the number of WiFi networks that were determined to be wrongly
    configured as hidden and were attempted to be removed. This metric will be
    emitted each time we check for wrongly configured networks which happens
    once at startup and each time the primary user changes.
  </summary>
</histogram>

<histogram name="Network.Ash.WiFi.Hidden.RemovalAttempt.Result"
    enum="BooleanSuccess" expires_after="2026-12-01">
  <owner>chadduffin@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the result of an attempt to remove a WiFi network that was
    determined to be wrongly configured as hidden. This metric will be emitted
    for each network we attempt to remove if and when we are notified of the
    result of our removal request; while it is safe to expect that we will be
    notified most of the time, we are not guaranteed to be notified. These
    network removals will occur once at startup and each time the primary user
    changes.
  </summary>
</histogram>

<histogram name="Network.Ash.WiFi.Hidden.{LoginStatus}" enum="Boolean"
    expires_after="2026-12-01">
  <owner>chadduffin@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Logs whether the network in question is configured as hidden or not. Emitted
    when a network is newly configured.

    Note: This histogram was wrongly emitted for all network configurations when
    it should have only been emitted for new network configurations. This issue
    was resolved on 2023-07-19.
  </summary>
  <token key="LoginStatus">
    <variant name="LoggedIn"/>
    <variant name="NotLoggedIn"/>
  </token>
</histogram>

<histogram name="Network.Ash.WiFiDirect.CapabilitiesWhenUpgrade"
    enum="WifiP2PCapabilities" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Emitted whenever client queries the WiFi Direct capabilities.
  </summary>
</histogram>

<histogram name="Network.Ash.WiFiDirect.Connection.Duration" units="ms"
    expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the duration of each Wifi P2P connection. Emits when the connection
    is torn down.
  </summary>
</histogram>

<histogram name="Network.Ash.WiFiDirect.TagSocket.OperationResult"
    enum="BooleanSuccess" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Measures and tracks the result of the tag socket operation. Emitted whenever
    the operation is attempted.
  </summary>
</histogram>

<histogram name="Network.Ash.WiFiDirect.{GroupType}.DisconnectReason"
    enum="WifiP2PDisconnectReason" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Measures and tracks the disconnect reason of {GroupType} P2P connection.
    Emitted when the {GroupType} P2P connection disconnects.
  </summary>
  <token key="GroupType">
    <variant name="GroupClient"/>
    <variant name="GroupOwner"/>
  </token>
</histogram>

<histogram name="Network.Ash.WiFiDirect.{Operation}.OperationResult"
    enum="WifiP2POperationResult" expires_after="2026-12-01">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Measures and tracks the result of {Operation} operation. Emitted whenever
    {Operation} operation is attempted.
  </summary>
  <token key="Operation">
    <variant name="ConnectP2PGroup"/>
    <variant name="CreateP2PGroup"/>
    <variant name="DestroyP2PGroup"/>
    <variant name="DisconnectP2PGroup"/>
  </token>
</histogram>

<histogram name="Network.Ash.{NetworkType}.ConnectionResult.NonUserInitiated"
    enum="ShillConnectResult" expires_after="2027-02-14">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the result of automatic Network connection attempts. A success is
    emitted when a network of type {NetworkType} becomes connected from a
    non-connected state without user action.
  </summary>
  <token key="NetworkType" variants="AshNetworkType"/>
</histogram>

<histogram name="Network.Ash.{NetworkType}.ConnectionResult.UserInitiated"
    enum="UserInitiatedNetworkConnectResult" expires_after="2027-02-14">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the result of a user initiated connection attempt. Logged when a
    network of type {NetworkType} connection succeeds or fails.
  </summary>
  <token key="NetworkType" variants="AshNetworkType"/>
</histogram>

<histogram name="Network.Ash.{NetworkType}.ConnectionResult.{Filtering}"
    enum="ShillConnectResult" expires_after="2027-01-31">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the result of all Network connection attempts, it also tracks tracks
    non repeated connection errors. A success is emitted when a network of type
    {NetworkType} becomes connected from a non-connected state. When a network
    of type {NetworkType} goes from a connecting state to a disconnected state
    without a user initiated disconnect, a shill failure reason is emitted.
    {Filtering} is not emitted if the network has if the current error is the
    same as the previous error.
  </summary>
  <token key="Filtering">
    <variant name="All"/>
    <variant name="Filtered"/>
  </token>
  <token key="NetworkType" variants="AshNetworkType"/>
</histogram>

<histogram name="Network.Ash.{NetworkType}.DisconnectionsWithoutUserAction"
    enum="NetworkConnectionState" expires_after="2026-12-01">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks when a network of type {NetworkType} is connected and when a network
    of type {NetworkType} is disconnected without explicit user action.
  </summary>
  <token key="NetworkType" variants="AshNetworkType"/>
</histogram>

<histogram
    name="Network.Ash.{NetworkType}.DisconnectionsWithoutUserAction.ShillError"
    enum="ShillConnectResult" expires_after="2026-12-01">
  <owner>chadduffin@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the Shill error provided as the disconnection reason when a network
    of type {NetworkType} becomes disconnected without any user interaction.
  </summary>
  <token key="NetworkType" variants="AshNetworkType"/>
</histogram>

<histogram name="Network.Ash.{TechnologyType}.EnabledState.{Operation}.Result"
    enum="BooleanSuccess" expires_after="2026-12-01">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the rate of success of performing the {Operation} operation on the
    shill associated {TechnologyType} technology type.
  </summary>
  <token key="TechnologyType">
    <variant name="Cellular"/>
    <variant name="Ethernet"/>
    <variant name="VPN"/>
    <variant name="WiFi"/>
  </token>
  <token key="Operation">
    <variant name="Disable"/>
    <variant name="Enable"/>
  </token>
</histogram>

<histogram
    name="Network.Ash.{TechnologyType}.EnabledState.{Operation}.ResultCode"
    enum="ShillConnectResult" expires_after="2026-12-01">
  <owner>nikhilcn@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    This metric is emitted when users perform {Operation} operation on the
    {TechnologyType} technology. We capture all result codes returned by the
    platform API.
  </summary>
  <token key="TechnologyType">
    <variant name="Cellular"/>
    <variant name="Ethernet"/>
    <variant name="VPN"/>
    <variant name="WiFi"/>
  </token>
  <token key="Operation">
    <variant name="Disable"/>
    <variant name="Enable"/>
  </token>
</histogram>

<histogram name="Network.BrokeredTcpClientSocket.SocketCreationTime"
    units="microseconds" expires_after="2026-03-30">
  <owner>ricea@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The time elapsed between the start of a brokered TCP socket creation request
    and when the socket is received by the network service. This is recorded
    once for every brokered TCP socket that is created.

    The histogram is not reported on Windows machines without high resolution
    clocks.
  </summary>
</histogram>

<histogram name="Network.BrokeredUdpClientSocket.SocketCreationTime"
    units="microseconds" expires_after="2026-03-30">
  <owner>ricea@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The time elapsed between the start of a brokered UDP socket creation request
    and when the socket is received by the network service. This is recorded
    once for every brokered UDP socket that is created.

    The histogram is not reported on Windows machines without high resolution
    clocks.
  </summary>
</histogram>

<histogram name="Network.CaptivePortalResult" enum="CaptivePortalNetworkState"
    expires_after="2026-12-31">
  <owner>stevenjb@chromium.org</owner>
  <owner>cros-network-health-team@google.com</owner>
  <summary>
    The Shill network state received by Chrome when a network is connected, or
    when the connection state changes, including portal state.
  </summary>
</histogram>

<histogram name="Network.Cellular.Apn.UseAttachApnOnSave" enum="Boolean"
    expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    ChromeOS cellular network metric that tracks the Attach APN Toggle value
    when the user explicitly clicks the Save button in the 'Other' APN settings,
    with the intent of setting the cellular network APN properties.
  </summary>
</histogram>

<histogram
    name="Network.Cellular.CarrierLock.ConfigurationStateAfterInitialization"
    enum="CellularCarrierLockInitialState" expires_after="2027-04-05">
  <owner>ujjwalpande@google.com</owner>
  <owner>cros-cellular-core@google.com</owner>
  <summary>
    Emitted each time Carrier Lock Manager was successfully initialized and a
    new configuration process was started (only when Manager is not disabled and
    device has cellular modem).
  </summary>
</histogram>

<histogram name="Network.Cellular.CarrierLock.Error.{ErrorType}"
    enum="CellularCarrierLockError" expires_after="2027-04-05">
  <owner>ujjwalpande@google.com</owner>
  <owner>cros-cellular-core@google.com</owner>
  <summary>
    Emitted every time the error occurs during manager initialization, modem
    seup, OOBE stage or communication with FCM, PSM and provisioning servers.
  </summary>
  <token key="ErrorType">
    <variant name="FcmTopic"/>
    <variant name="ManagerInitialization"/>
    <variant name="ModemSetup"/>
    <variant name="Provisioning"/>
    <variant name="PsmClaim"/>
  </token>
</histogram>

<histogram name="Network.Cellular.CarrierLock.FcmCommunicationResult"
    enum="CellularCarrierLockFcmResult" expires_after="2027-04-05">
  <owner>ujjwalpande@google.com</owner>
  <owner>cros-cellular-core@google.com</owner>
  <summary>
    Emitted each time registration or subscription to FCM topic was successful.
  </summary>
</histogram>

<histogram name="Network.Cellular.CarrierLock.FcmNotificationType"
    enum="CellularCarrierLockFcmNotification" expires_after="2027-04-05">
  <owner>ujjwalpande@google.com</owner>
  <owner>cros-cellular-core@google.com</owner>
  <summary>Emitted on every notification received from FCM service.</summary>
</histogram>

<histogram name="Network.Cellular.CarrierLock.Initialization.{Trigger}"
    units="count" expires_after="2027-04-05">
  <owner>ujjwalpande@google.com</owner>
  <owner>cros-cellular-core@google.com</owner>
  <summary>
    Emitted every time the Initialization step is triggered. Reports number of
    events from each trigger group.
  </summary>
  <token key="Trigger">
    <variant name="FirstRun"/>
    <variant name="Network"/>
    <variant name="RetryStep"/>
    <variant name="Scheduler"/>
  </token>
</histogram>

<histogram name="Network.Cellular.CarrierLock.LockState"
    enum="CellularCarrierLockLockState" expires_after="2027-04-05">
  <owner>ujjwalpande@google.com</owner>
  <owner>cros-cellular-core@google.com</owner>
  <summary>
    Emitted when the property SimLockStatus was updated. State of LockType will
    tell if the modem is carrier-locked (but only if an incompatible SIM is
    inserted) and the internal disable flag of Carrier Lock Manager will tell
    whether the modem should be configured.
  </summary>
</histogram>

<histogram name="Network.Cellular.CarrierLock.ModemConfigurationResult"
    enum="CellularCarrierLockConfigurationResult" expires_after="2027-04-05">
  <owner>ujjwalpande@google.com</owner>
  <owner>cros-cellular-core@google.com</owner>
  <summary>Emitted each time the modem was successfully configured.</summary>
</histogram>

<histogram
    name="Network.Cellular.CarrierLock.NumConsecutiveConfigurationFailures"
    units="count" expires_after="2027-04-05">
  <owner>ujjwalpande@google.com</owner>
  <owner>cros-cellular-core@google.com</owner>
  <summary>
    Emits current number of failures every time the error counter (any cause of
    failure) reaches multiple of 10. It will help detect false negative (modem
    unlocked and config locked) failure which can happen when the modem was not
    properly configured.
  </summary>
</histogram>

<histogram name="Network.Cellular.CarrierLock.ProvisioningServerResponse"
    enum="CellularCarrierLockProvisioningResult" expires_after="2027-04-05">
  <owner>ujjwalpande@google.com</owner>
  <owner>cros-cellular-core@google.com</owner>
  <summary>
    Emitted each time lock configuration was downloaded from Provisioning
    server.
  </summary>
</histogram>

<histogram name="Network.Cellular.CarrierLock.PsmClaimResponse"
    enum="CellularCarrierLockPsmResult" expires_after="2027-04-05">
  <owner>ujjwalpande@google.com</owner>
  <owner>cros-cellular-core@google.com</owner>
  <summary>
    Emitted each time PSM service was requested about device membership.
  </summary>
</histogram>

<histogram name="Network.Cellular.CarrierLock.{ConsecutiveFailuresType}"
    units="count" expires_after="2027-04-05">
  <owner>ujjwalpande@google.com</owner>
  <owner>cros-cellular-core@google.com</owner>
  <summary>
    Emitted when the modem was successfully locked or unlocked. It reports the
    cumulative number of attempts made before successful configuration.
  </summary>
  <token key="ConsecutiveFailuresType">
    <variant name="NumConsecutiveFailuresBeforeLock"/>
    <variant name="NumConsecutiveFailuresBeforeUnlock"/>
  </token>
</histogram>

<histogram name="Network.Cellular.ESim.DisableProfile.Result"
    enum="HermesResponseStatus" expires_after="2027-04-05">
  <owner>khorimoto@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the success rate of disabling an eSIM profile. Note that the result
    for &quot;already disabled&quot; is considered a success for this metric.

    Emitted once the operation completes.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.EnableProfile.Result"
    enum="HermesResponseStatus" expires_after="2027-04-05">
  <owner>khorimoto@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the success rate of enabling an eSIM profile. Note that the result
    for &quot;already enabled&quot; is considered a success for this metric.

    Emitted once the operation completes.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.Installation.NonUserErrorSuccessRate"
    enum="HermesResponseStatus" expires_after="2027-04-05">
  <owner>nikhilcn@chromium.org</owner>
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    This metric is emitted when user attempts to install an eSIM profile. We
    record all hermes response status codes that are within our control. User
    and Carrier related errors such as invalid qr code, malformed carrier
    response are omitted. This will be used to measure the success rate of
    installing an eSIM profile when the input is valid and external dependencies
    are operating without errors.

    Emitted once the operation completes.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.InstallPendingProfile.Result"
    enum="HermesResponseStatus" expires_after="2027-04-05">
  <owner>khorimoto@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the success rate of installing a &quot;pending&quot; eSIM profile
    found via SM-DS. SM-DS provides all profiles which a carrier has associated
    with a device's EID; once this occurs, the user has the chance to install
    one of these pending profiles via the UI. The installation process involves
    making a network request to the cellular carrier and downloading a profile
    to the device.

    Emitted once the operation completes.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.InstallViaQrCode.DBusResult"
    enum="DBusResult" expires_after="2027-04-05">
  <owner>nikhilcn@chromium.org</owner>
  <owner>khorimoto@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the dbus result for all eSIM installation attempts. This gets logged
    only if we receive an unknown hermes response code.

    Emitted once the operation completes.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.InstallViaQrCode.Result{OperationType}"
    enum="HermesResponseStatus" expires_after="2027-04-05">
  <owner>khorimoto@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the success rate of installing an eSIM profile via a QR code. During
    this process, the user can either scan a QR code by using the device's
    webcam or can enter the QR code's decoded contents into a text field
    manually. Once this occurs, the device contacts the cellular carrier and
    downloads a profile to the device.

    Emitted once the operation completes.
  </summary>
  <token key="OperationType">
    <variant name=""/>
    <variant name=".InitialAttempt"/>
    <variant name=".Retry"/>
  </token>
</histogram>

<histogram name="Network.Cellular.ESim.Policy.BlockNonManagedCellularBehavior"
    enum="NetworkBlockNonManagedCellularBehavior" expires_after="2027-04-05">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks how often the admin allows only managed cellular networks to connect.
    This metric is logged for managed, cellular-capable devices when the primary
    user logs in or when there is an update to the
    allowOnlyPolicyCellularNetworks policy.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.Policy.ConnectionResult.All"
    enum="ShillCellularConnectResult" expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the result of all connection attempts. A success is emitted when a
    managed eSIM network becomes connected from a non-connected state. When a
    managed eSIM network goes from a connecting state to a disconnected state, a
    shill failure reason is emitted.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.Policy.Disconnections"
    enum="NetworkCellularConnectionState" expires_after="2027-04-05">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks when a managed eSIM cellular network is connected and when a managed
    eSIM cellular network is disconnected without explicit user action.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.Policy.EuiccStatusUploadResult"
    enum="BooleanSuccess" expires_after="2027-04-05">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the result of an attempt to upload euicc status to DM server. This
    metric provides the insights on how often ICCID/SM-DP+ get uploaded to the
    DM server and whether the upload operation is successful or not.

    Emitted once the euicc status upload operation completes.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.Policy.ResetEuicc.Duration" units="ms"
    expires_after="2027-04-05">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the amount of time taken to complete reset euicc operation.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.Policy.ResetEuicc.Result"
    enum="NetworkCellularResetEuiccResult" expires_after="2027-04-05">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the result of an attempt to reset euicc. This process includes both
    an attempt to inhibit modem scans as well as a request to reset EUICC. The
    metric tracks failures at each step of the process. Emitted once the
    operation completes.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.Policy.ServiceAtLogin.Count"
    units="units" expires_after="2027-04-05">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks how many managed eSIM profiles are installed on the devices after a
    primary user login.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.Policy.StatusAtLogin"
    enum="NetworkESimPolicyStatusAtLogin" expires_after="2027-04-05">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks status of managed eSIM cellular networks on the device. The status
    indicates whether the device has managed or only non-managed or both types
    of cellular networks. This is logged for managed cellular capable devices
    when the primary user logs in. This allows us to track what fraction of
    cellular network usage are controlled by policy.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.Policy.Usage.Count"
    enum="NetworkCellularUsage" expires_after="2027-04-05">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the number of times a managed eSIM cellular network is connected as
    the only network, or with other network or not connected at all.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.Policy.Usage.Duration" units="seconds"
    expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks how long users are using a managed eSIM cellular network as the sole
    network for connectivity on their device.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.ProfileDownload.ActivationCode.Latency"
    units="ms" expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the time for a profile to be fully downloaded from a provided
    activation code.

    This histogram was updated on 11/16/23 to only start counting how long it
    takes to install a profile until AFTER we inhibit the cellular device.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.ProfileDownload.PendingProfile.Latency"
    units="ms" expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the time for a pending profile to be fully downloaded.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.ProfileRenameResult"
    enum="BooleanSuccess" expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>Tracks the rate of success of setting a profile nickname.</summary>
</histogram>

<histogram name="Network.Cellular.ESim.ProfileUninstallationResult"
    enum="BooleanSuccess" expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>Tracks the rate of success of uninstalling a profile.</summary>
</histogram>

<histogram name="Network.Cellular.ESim.RefreshInstalledProfilesLatency"
    units="ms" expires_after="2027-04-05">
  <owner>nikhilcn@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the latency of call to SMDS server. This is emitted when a known or
    installed profile is refreshed. Call latency is calculated and emitted upon
    completion of the platform call.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.RequestPendingProfiles.OperationResult"
    enum="NetworkCellularESimRequestPendingProfilesResult"
    expires_after="2027-04-05">
  <owner>khorimoto@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the result of an attempt to request pending eSIM profiles (i.e.,
    those found via an SM-DS scan). This process includes both an attempt to
    inhibit modem scans as well as a request for the profiles. The metric tracks
    failures at each step of the process.

    Emitted once the operation completes.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.SetupFlowResult"
    enum="ESimSetupFlowResult" expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the result of the eSIM setup flow when the setup dialog closes.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.StatusAtLogin"
    enum="NetworkCellularESimProfileStatus" expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the ESim Cellular network profile status when the primary user
    logs-in to the device.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.UninstallProfile.OperationResult"
    enum="NetworkCellularESimUninstallOperationResult"
    expires_after="2027-04-05">
  <owner>khorimoto@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the result of the high-level operation of uninstalling an eSIM
    profile. This includes several steps before and after the core step of
    uninstalling the profile.

    Emitted once the operation completes.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.UninstallProfile.Result"
    enum="HermesResponseStatus" expires_after="2027-04-05">
  <owner>khorimoto@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the success rate of uninstalling an eSIM profile. Emitted once the
    operation completes.
  </summary>
</histogram>

<histogram name="Network.Cellular.ESim.Usage.Count" enum="NetworkCellularUsage"
    expires_after="2027-04-05">
  <owner>khorimoto@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the number of times a ESim cellular network is connected as the only
    network, or with other network or not connected at all.
  </summary>
</histogram>

<histogram name="Network.Cellular.InhibitResult"
    enum="NetworkCellularInhibitResult" expires_after="2027-04-05">
  <owner>khorimoto@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the result of a cellular device inhibit-uninhibit cycle.

    Emitted when uninhibit completes or when any step fails.
  </summary>
</histogram>

<histogram name="Network.Cellular.Pin.{SimPinOperation}"
    enum="SimPinOperationResult" expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the rate of success of various pin operations. Note: This histogram
    was expired from 2022-03-01 to 2022-03-23; data may be missing.
  </summary>
  <token key="SimPinOperation">
    <variant name="ChangeSuccess"/>
    <variant name="LockSuccess" summary="Deprecated on 2022-07-16."/>
    <variant name="Managed.UnblockSuccess"/>
    <variant name="Managed.UnlockSuccess"/>
    <variant name="RemoveLockSuccess"/>
    <variant name="RequireLockSuccess"/>
    <variant name="Restricted.UnblockSuccess"/>
    <variant name="Restricted.UnlockSuccess"/>
    <variant name="UnblockSuccess" summary="Deprecated on 2022-07-14."/>
    <variant name="UnlockSuccess" summary="Deprecated on 2022-07-14."/>
    <variant name="Unmanaged.UnblockSuccess"/>
    <variant name="Unmanaged.UnlockSuccess"/>
    <variant name="Unrestricted.UnblockSuccess"/>
    <variant name="Unrestricted.UnlockSuccess"/>
  </token>
</histogram>

<histogram name="Network.Cellular.PrepareCellularConnection.OperationResult"
    enum="NetworkCellularPrepareForConnectionResult" expires_after="2027-04-05">
  <owner>khorimoto@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the result of the high-level operation of preparing a cellular
    network for a connection. For eSIM networks, this involves several steps
    such as enabling the profile, each of which can fail or succeed.

    Emitted once the operation completes.
  </summary>
</histogram>

<histogram name="Network.Cellular.PSim.OtaActivationResult"
    enum="NetworkCellularPSimActivationResult" expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the result of attempting to activate a physical SIM card via an Over
    the Air (OTA) activation. Emitted once the operation completes.
  </summary>
</histogram>

<histogram name="Network.Cellular.PSim.SetupFlowResult"
    enum="PSimSetupFlowResult" expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the result of the physical SIM card setup flow when the setup dialog
    closes.
  </summary>
</histogram>

<histogram name="Network.Cellular.PSim.StatusAtLogin"
    enum="NetworkCellularPSimActivationState" expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the PSim Cellular network activation state when the primary user
    logs-in to the device.
  </summary>
</histogram>

<histogram name="Network.Cellular.PSim.Usage.Count" enum="NetworkCellularUsage"
    expires_after="2027-04-05">
  <owner>khorimoto@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the number of times an PSim cellular network is connected as the only
    network, or with other network or not connected at all.
  </summary>
</histogram>

<histogram name="Network.Cellular.{SimPinOperation}.SimPINLockPolicy"
    enum="BooleanEnabled" expires_after="2027-04-05">
  <owner>nikhilcn@chromium.org</owner>
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Sim PIN Lock policy is applied by enterprise administrators when they want
    to restrict their users from locking or changing the PIN of their SIM. This
    metric tracks instances where users have been able to successfully execute
    lock or change PIN operations on their SIM while this policy is turned on.
  </summary>
  <token key="SimPinOperation">
    <variant name="ChangePin"/>
    <variant name="RequirePin"/>
  </token>
</histogram>

<histogram name="Network.Cellular.{SimType}.CellularSetup.{Result}.Duration"
    units="ms" expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the time taken by the user to complete Cellular setup flow of a
    {SimType} network with result {Result}.
  </summary>
  <token key="SimType">
    <variant name="ESim"/>
    <variant name="PSim"/>
  </token>
  <token key="Result">
    <variant name="Failure"/>
    <variant name="Success"/>
  </token>
</histogram>

<histogram name="Network.Cellular.{SimType}.ConnectionResult.All"
    enum="ShillCellularConnectResult" expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the result of all connection attempts. A success is emitted when a
    {SimType} network becomes connected from a non-connected state. When a
    {SimType} network goes from a connecting state to a disconnected state, a
    shill failure reason is emitted.

    Warning: this histogram was expired from 2022-10-01 to 2023-02-28; data may
    be missing.
  </summary>
  <token key="SimType">
    <variant name="ESim"/>
    <variant name="PSim"/>
  </token>
</histogram>

<histogram name="Network.Cellular.{SimType}.ConnectionResult.UserInitiated"
    enum="UserInitiatedCellularConnectResult" expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the result of a user initiated connection attempt. Logged when a
    {SimType} connection succeeds or fails. This histogram logs failure reasons
    exposed by NetworkConnectionHandler.
  </summary>
  <token key="SimType">
    <variant name="ESim"/>
    <variant name="PSim"/>
  </token>
</histogram>

<histogram name="Network.Cellular.{SimType}.DisconnectByPolicy.Result"
    enum="BooleanSuccess" expires_after="2027-04-05">
  <owner>jiajunz@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the rate of success of disconnecting the connected unmanaged
    {SimType} networks when restricting cellular networks is enforced by policy.
  </summary>
  <token key="SimType">
    <variant name="ESim"/>
    <variant name="PSim"/>
  </token>
</histogram>

<histogram name="Network.Cellular.{SimType}.Disconnections"
    enum="NetworkCellularConnectionState" expires_after="2027-04-05">
  <owner>khorimoto@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks when cellular {SimType} network is connected and when cellular
    network is disconnected without explicit user action. Note: This histogram
    was expired from 2022-03-01 to 2022-03-23; data may be missing.
  </summary>
  <token key="SimType">
    <variant name="ESim"/>
    <variant name="PSim"/>
  </token>
</histogram>

<histogram name="Network.Cellular.{SimType}.ServiceAtLoginCount{PolicyState}"
    units="units" expires_after="2027-04-05">
  <owner>khorimoto@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the number of cellular networks that are {SimType} available to the
    device after a primary user logs in, {PolicyState}.
  </summary>
  <token key="SimType">
    <variant name="ESim"/>
    <variant name="PSim"/>
  </token>
  <token key="PolicyState">
    <variant name="" summary="regardless of SIM Lock policy state"/>
    <variant name=".SimLockAllowedByPolicy"
        summary="when SIM Lock is allowed by policy"/>
    <variant name=".SimLockProhibitedByPolicy"
        summary="when SIM Lock is prohibited by policy"/>
  </token>
</histogram>

<histogram name="Network.Cellular.{SimType}.TimeToConnected" units="ms"
    expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks the amount fo time taken between when cellular device starts and
    finishes connecting for {SimType} networks.
  </summary>
  <token key="SimType">
    <variant name="ESim"/>
    <variant name="PSim"/>
  </token>
</histogram>

<histogram name="Network.Cellular.{SimType}.Usage.Duration" units="seconds"
    expires_after="2027-04-05">
  <owner>hsuregan@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Tracks how long users are using a {SimType} cellular network as the sole
    network for connectivity on their device.
  </summary>
  <token key="SimType">
    <variant name="ESim"/>
    <variant name="PSim"/>
  </token>
</histogram>

<histogram
    name="Network.ContentDecodingInterceptor.CreateDataPipeSuccess.{ContentDecodingInterceptorClientType}"
    enum="Boolean" expires_after="2026-11-29">
  <owner>horo@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    Result of creating the Mojo data pipe used between the decoding thread and
    the data receiving thread for the RendererSideContentDecoding feature.
    Recorded whenever the renderer process receives a resource that needs to be
    decoded, or content decoding is intercepted for downloads initiated via
    navigation or for Signed Exchange (SXG) responses and when
    RendererSideContentDecoding feature is enabled.
  </summary>
  <token key="ContentDecodingInterceptorClientType"
      variants="ContentDecodingInterceptorClientType"/>
</histogram>

<histogram
    name="Network.ContentDecodingInterceptor.CreateDataPipeSuccessTime.{ContentDecodingInterceptorClientType}"
    units="microseconds" expires_after="2027-02-07">
  <owner>horo@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    The time taken to create the Mojo data pipe used between the decoding thread
    and the data receiving thread for the RendererSideContentDecoding feature.
    Recorded whenever the renderer process successfully creates the data pipe
    for a resource that needs to be decoded, or content decoding is intercepted
    for downloads initiated via navigation or for Signed Exchange (SXG)
    responses and when RendererSideContentDecoding feature is enabled.

    The histogram is not reported on Windows machines without high resolution
    clocks.
  </summary>
  <token key="ContentDecodingInterceptorClientType"
      variants="ContentDecodingInterceptorClientType"/>
</histogram>

<histogram name="Network.DnsProxy.DnsOverHttpsMode"
    enum="DnsProxy.DnsOverHttpsMode" expires_after="2026-12-31">
  <owner>garrick@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS DNS proxy that records the DOH mode setting
    whenever it is read from or changed in Chrome and propagated to shill.
  </summary>
</histogram>

<histogram name="Network.DnsProxy.DnsOverHttpsQuery.HttpErrors"
    enum="DnsProxy.HttpError" expires_after="2026-12-31">
  <owner>garrick@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS DNS proxy that records an value corresponding
    to the HTTP status returned when a DNS-over-HTTPS request returns in error.
  </summary>
</histogram>

<histogram name="Network.DnsProxy.NameserverTypes"
    enum="DnsProxy.NameserverType" expires_after="2026-12-31">
  <owner>garrick@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS DNS proxy that records the type of plain text
    nameservers used whenever they are obtained from shill for a given network.
  </summary>
</histogram>

<histogram name="Network.DnsProxy.PlainTextProbe.{Family}.Errors"
    enum="DnsProxy.QueryError" expires_after="2026-12-31">
  <owner>jasongustaman@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS DNS proxy that records any errors that occur
    during DNS probes made by the service. A value will be recorded whenever the
    probe completes in error.
  </summary>
  <token key="Family">
    <variant name="IPv4"/>
    <variant name="IPv6"/>
  </token>
</histogram>

<histogram name="Network.DnsProxy.PlainTextProbe.{Family}.FailedRetries"
    units="count" expires_after="2026-12-31">
  <owner>jasongustaman@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS DNS proxy that records number of retries for
    failing probes. A value will be recorded whenever the probe completes in
    error.
  </summary>
  <token key="Family">
    <variant name="IPv4"/>
    <variant name="IPv6"/>
  </token>
</histogram>

<histogram name="Network.DnsProxy.PlainTextProbe.{Family}.Results"
    enum="DnsProxy.QueryResult" expires_after="2026-12-31">
  <owner>jasongustaman@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS DNS proxy that records the results of the DNS
    probes made by the service. A value will be recorded whenever the probe
    completes.
  </summary>
  <token key="Family">
    <variant name="IPv4"/>
    <variant name="IPv6"/>
  </token>
</histogram>

<histogram name="Network.DnsProxy.PlainTextProbe.{Family}.ResultsWithRetries"
    enum="DnsProxy.QueryResult" expires_after="2026-12-31">
  <owner>jasongustaman@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS DNS proxy that records the results of the DNS
    probes made by the service. A value will be recorded whenever the probe
    completes. However, on error it is only recorded if it is a consistent
    error, meaning if it fails even after certain amount of retries.
  </summary>
  <token key="Family">
    <variant name="IPv4"/>
    <variant name="IPv6"/>
  </token>
</histogram>

<histogram name="Network.DnsProxy.PlainTextProbe.{Family}.RetriesUntilSuccess"
    units="count" expires_after="2026-12-31">
  <owner>jasongustaman@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS DNS proxy that records number of retries
    needed until a successful probe. A value will be recorded whenever the probe
    completes in success. This metric does not catch consistenly failing probes.
  </summary>
  <token key="Family">
    <variant name="IPv4"/>
    <variant name="IPv6"/>
  </token>
</histogram>

<histogram name="Network.DnsProxy.Query.Failed{Stage}Duration" units="ms"
    expires_after="2026-12-31">
  <owner>garrick@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS DNS proxy that records the duration of
    various stages of the resolution process, including the entire time elapsed
    processing the query. The measurement is started when the resolver first
    reads the query data from the client and completes when the reply is sent.

    This histogram collects data for stages of the query that have resulted in
    some kind of failure. It's possible that for any single query, both
    successful and failed stages may exist. The most obvious case is when a
    resolution step is retried. As such, the total time elapsed will necessarily
    include zero or more resolution stages which are recorded in the
    query-type-specific version of this histogram.

    A &quot;total&quot; duration will be successful if at least one resolve
    stage succeeds, but will be recorded as 'failed' if they all do, or if any
    other stage fails.

    All measurements are made within the Resolver class. The &quot;receive&quot;
    time is recorded in OnDNSQuery(). This is also when the &quot;total&quot;
    time starts. The &quot;resolve&quot; measurements all start from the
    Resolve() method, and will stop either in the same method (on failure) or
    handler applicable to the specific client that was used: HandleAresResult()
    and HandleCurlResult(). The &quot;reply&quot; time is recorded in the
    ReplyDNS() method.
  </summary>
  <token key="Stage">
    <variant name="Receive"/>
    <variant name="Reply"/>
    <variant name="Total"/>
  </token>
</histogram>

<histogram name="Network.DnsProxy.Query.{Stage}Duration" units="ms"
    expires_after="2026-12-31">
  <owner>garrick@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS DNS proxy that records the duration of
    various stages of the resolution process, including the entire time elapsed
    processing the query. The measurement is started when the resolver first
    reads the query data from the client and completes when the reply is sent.

    This histogram collects data for stages of the query that have resulted in
    success. It's possible that for any single query, both successful and failed
    stages may exist. The most obvious case is when a resolution step is
    retried. As such, the total time elapsed will necessarily include zero or
    more resolution stages which are recorded in the query-type-specific version
    of this histogram.

    A &quot;total&quot; duration will be successful if at least one resolve
    stage succeeds, but will be recorded as 'failed' if they all do, or if any
    other stage fails.

    All measurements are made within the Resolver class. The &quot;receive&quot;
    time is recorded in OnDNSQuery(). This is also when the &quot;total&quot;
    time starts. The &quot;resolve&quot; measurements all start from the
    Resolve() method, and will stop either in the same method (on failure) or
    handler applicable to the specific client that was used: HandleAresResult()
    and HandleCurlResult(). The &quot;reply&quot; time is recorded in the
    ReplyDNS() method.
  </summary>
  <token key="Stage">
    <variant name="Receive"/>
    <variant name="Reply"/>
    <variant name="Total"/>
  </token>
</histogram>

<histogram name="Network.DnsProxy.{Family}Nameservers" units="units"
    expires_after="2026-12-31">
  <owner>garrick@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS DNS proxy that records the number of
    nameserver addresses whenever they are obtained from shill for a given
    network.
  </summary>
  <token key="Family">
    <variant name="IPv4"/>
    <variant name="IPv6"/>
  </token>
</histogram>

<histogram name="Network.DnsProxy.{ProcessType}.Event"
    enum="DnsProxy.ProcessEvent" expires_after="2026-12-31">
  <owner>garrick@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS DNS proxy tracking critical process events,
    which are emitted when conditions arise that cause fatal or disruptive
    conditions to the service. This metric is used to monitor the stability of
    the service and provide detailed insight into failures.
  </summary>
  <token key="ProcessType">
    <variant name="ARCProxy"/>
    <variant name="Controller"/>
    <variant name="DefaultProxy"/>
    <variant name="SystemProxy"/>
  </token>
</histogram>

<histogram name="Network.DnsProxy.{Type}Query.Errors"
    enum="DnsProxy.QueryError" expires_after="2026-12-31">
  <owner>garrick@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS DNS proxy that records any errors that occur
    during DNS queries made by the service. A value will be recorded whenever
    the request completes in error.
  </summary>
  <token key="Type">
    <variant name="DnsOverHttps"/>
    <variant name="PlainText"/>
  </token>
</histogram>

<histogram name="Network.DnsProxy.{Type}Query.FailedResolveDuration" units="ms"
    expires_after="2026-12-31">
  <owner>garrick@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS DNS proxy that records the duration of a
    failed name resolution as part of an overall query. The measurement is
    started just before the client resolver (either plaintext or DoH) is run and
    stopped on its completion.

    All measurements are made within the Resolver class. The &quot;resolve&quot;
    measurements all start from the Resolve() method, and will stop either in
    the same method (on failure) or handler applicable to the specific client
    that was used: HandleAresResult() and HandleCurlResult().
  </summary>
  <token key="Type">
    <variant name="DnsOverHttps"/>
    <variant name="PlainText"/>
  </token>
</histogram>

<histogram name="Network.DnsProxy.{Type}Query.ResolveDuration" units="ms"
    expires_after="2026-12-31">
  <owner>garrick@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS DNS proxy that records the duration of a
    successful name resolution as part of an overall query. The measurement is
    started just before the client resolver (either plaintext or DoH) is run and
    stopped on its completion.

    All measurements are made within the Resolver class. The &quot;resolve&quot;
    measurements all start from the Resolve() method, and will stop either in
    the same method (on failure) or handler applicable to the specific client
    that was used: HandleAresResult() and HandleCurlResult().
  </summary>
  <token key="Type">
    <variant name="DnsOverHttps"/>
    <variant name="PlainText"/>
  </token>
</histogram>

<histogram name="Network.DnsProxy.{Type}Query.Results"
    enum="DnsProxy.QueryResult" expires_after="2026-12-31">
  <owner>garrick@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS DNS proxy that records the results of the DNS
    queries made by the service. A value will be recorded whenever the request
    completes.
  </summary>
  <token key="Type">
    <variant name="DnsOverHttps"/>
    <variant name="PlainText"/>
  </token>
</histogram>

<histogram name="Network.DnsProxy.{Type}Query.ResultsWithRetries"
    enum="DnsProxy.QueryResult" expires_after="2026-12-31">
  <owner>garrick@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS DNS proxy that records the results of the DNS
    queries made by the service. A value will be recorded whenever the request
    completes. If there are retries, only the last result will be recorded.
  </summary>
  <token key="Type">
    <variant name="DnsOverHttps"/>
    <variant name="PlainText"/>
  </token>
</histogram>

<histogram name="Network.GlobalPrivacyControlSource.Subsampled"
    enum="GPCSignalSourceType" expires_after="2026-12-31">
  <owner>arichiv@chromium.org</owner>
  <owner>zalmashni@google.com</owner>
  <summary>
    During request initialization, this metric records the source of each
    outgoing HTTP(S) request that had the Sec-GPC header set, categorized by the
    type of the request.

    Logged each time the Sec-GPC header is attached to an outgoing request,
    during request finalization. Subsampled to one out of one thousand times.
  </summary>
</histogram>

<histogram name="Network.Mdns.{ServiceType}" enum="MdnsQueryType"
    expires_after="2026-12-31">
  <owner>nmuggli@google.com</owner>
  <owner>project-bolton@google.com</owner>
  <summary>
    Number of mDNS packets sent for mDNS queries in support of different
    services. The individual enum values indicate whether the query is an
    initial query or a refresh query.
  </summary>
  <token key="ServiceType">
    <variant name="Googlecast"/>
    <variant name="Other"/>
    <variant name="PrintScan"/>
    <variant name="UUID"/>
  </token>
</histogram>

<histogram name="Network.Multicast.ARC.ActiveTime" units="%"
    expires_after="2026-12-31">
  <owner>chuweih@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Percentage of time WiFi multicast packets are forwarded from ChromeOS to
    ARC. This depends on ARC WiFi multicast lock state and ARC doze mode state.
    The metric is only emitted when ARC is running and WiFi is connected. The
    value is recorded for a network whenever it is disconnected.
  </summary>
</histogram>

<histogram name="Network.Multicast.ARC.WiFi.{Protocol}.ActiveCount"
    units="packets" expires_after="2026-12-31">
  <owner>jasongustaman@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Amount of WiFi multicast packets received by ChromeOS when multicast packets
    are forwarded to ARC and WiFi is connected. The value is recorded every 2
    minutes by ChromeOS's patchpanel. The metrics are separated by multicast
    protocol mDNS and SSDP.
  </summary>
  <token key="Protocol">
    <variant name="MDNS"/>
    <variant name="SSDP"/>
  </token>
</histogram>

<histogram name="Network.Multicast.ARC.WiFi.{Protocol}.InactiveCount"
    units="packets" expires_after="2026-12-31">
  <owner>jasongustaman@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Amount of WiFi multicast packets received by ChromeOS when multicast packets
    are not forwarded to ARC and WiFi is connected. The value is recorded every
    2 minutes by ChromeOS's patchpanel. The metrics are separated by multicast
    protocol mDNS and SSDP.
  </summary>
  <token key="Protocol">
    <variant name="MDNS"/>
    <variant name="SSDP"/>
  </token>
</histogram>

<histogram name="Network.Multicast.TotalCount" units="packets"
    expires_after="2026-12-31">
  <owner>jasongustaman@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Amount of multicast packets received by ChromeOS. The value is recorded
    every 2 minutes by ChromeOS's patchpanel. Only multicast protocols mDNS and
    SSDP are included.
  </summary>
</histogram>

<histogram name="Network.Multicast.{Technology}.ConnectedCount" units="packets"
    expires_after="2026-12-31">
  <owner>jasongustaman@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Amount of multicast packets received by ChromeOS when at least one network
    of the specified technology (ethernet or WiFi) is connected. When there are
    multiple networks of the same technology, the sum is reported. The value is
    recorded every 2 minutes by ChromeOS's patchpanel. Only multicast protocols
    mDNS and SSDP are included.
  </summary>
  <token key="Technology">
    <variant name="Ethernet"/>
    <variant name="WiFi"/>
  </token>
</histogram>

<histogram name="Network.Multicast.{Technology}.{Protocol}.ConnectedCount"
    units="packets" expires_after="2026-12-31">
  <owner>jasongustaman@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Amount of multicast packets received by ChromeOS when at least one network
    of the specified technology (ethernet or WiFi) is connected. When there are
    multiple networks of the same technology, the sum is reported. The value is
    recorded every 2 minutes by ChromeOS's patchpanel. The metrics are separated
    by multicast protocol mDNS and SSDP.
  </summary>
  <token key="Technology">
    <variant name="Ethernet"/>
    <variant name="WiFi"/>
  </token>
  <token key="Protocol">
    <variant name="MDNS"/>
    <variant name="SSDP"/>
  </token>
</histogram>

<histogram name="Network.NetworkPortalDetectorRunCount" units="attempts"
    expires_after="2026-12-31">
  <owner>stevenjb@chromium.org</owner>
  <owner>cros-network-health-team@google.com</owner>
  <summary>
    Number of Chrome portal detection attempts per network connection on
    ChromeOS.
  </summary>
</histogram>

<histogram name="Network.NetworkPortalDetectorState" enum="NetworkPortalState"
    expires_after="2026-12-31">
  <owner>stevenjb@chromium.org</owner>
  <owner>cros-network-health-team@google.com</owner>
  <summary>
    The PortalState result of Chrome portal detection when completed.
  </summary>
</histogram>

<histogram name="Network.NetworkPortalDetectorType" enum="NetworkTechnology"
    expires_after="2026-12-31">
  <owner>stevenjb@chromium.org</owner>
  <owner>cros-network-health-team@google.com</owner>
  <summary>
    Captive portal detection network type recorded when Chrome on ChromeOS
    detects a captive portal. NOTE: This metric used to be
    CaptivePortal.NetworkPortalDetectorType which was expired from 2021-09-27 to
    2022-09-18.
  </summary>
</histogram>

<histogram name="Network.NetworkPortalNotificationState"
    enum="CaptivePortalNetworkState" expires_after="2026-12-31">
  <owner>stevenjb@chromium.org</owner>
  <owner>cros-network-health-team@google.com</owner>
  <summary>
    Captive portal detection state when a notification is shown. Can be used
    with Network.NetworkPortalSigninMode to compare notification to signin
    ratio.
  </summary>
</histogram>

<histogram name="Network.NetworkPortalSigninMode"
    enum="NetworkPortalSigninMode" expires_after="2026-12-31">
  <owner>stevenjb@chromium.org</owner>
  <owner>cros-network-health-team@google.com</owner>
  <summary>
    Captive portal signin display mode when a UI element requests to show the
    signin UI. See also NetworkPortalSigninSource.
  </summary>
</histogram>

<histogram name="Network.NetworkPortalSigninSource"
    enum="NetworkPortalSigninSource" expires_after="2026-12-31">
  <owner>stevenjb@chromium.org</owner>
  <owner>cros-network-health-team@google.com</owner>
  <summary>
    Captive portal signin display source (notification, settings, etc.) when a
    UI element requests to show the signin UI. See also NetworkPortalSigninMode.
  </summary>
</histogram>

<histogram name="Network.NetworkPortalSigninTime" units="ms"
    expires_after="2026-12-31">
  <owner>stevenjb@chromium.org</owner>
  <owner>cros-network-health-team@google.com</owner>
  <summary>
    Time from showing a captive portal signin page to the network becoming
    online. Zero values represent a disconnect without becoming online.
  </summary>
</histogram>

<histogram name="Network.Patchpanel.ArcService"
    enum="NetworkPatchpanelArcEvent" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for ChromeOS patchpanel's ArcService which controls the
    virtual network setup for ARC++ and ARCVM. This metrics is recorded when the
    virtual network setup for ARC or ARCVM is created, deleted, or updated to
    track success and error rates of the various platform operations (network
    interface creation, iptables setup, etc) involved in the ARC virtual network
    setup.
  </summary>
</histogram>

<histogram name="Network.Patchpanel.Dbus" enum="NetworkPatchpanelDbusEvent"
    expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Diagnostic metric for the Dbus APIs implemented by ChromeOS patchpanel
    network service. This metrics is recorded whenever one of patchpanel DBus
    APIs is called and tracks success and error rates of various network
    platform primitives implemented by patchpanel (port forwarding APIs,
    firewall APIs, virtual network APIs for ARC and crosvm, etc).
  </summary>
</histogram>

<histogram name="Network.Patchpanel.Tethering.CreateTetheredNetwork"
    enum="NetworkPatchpanelDownstreamNetworkResult" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Result of creating a DownstreamNetwork tethered to an upstream network when
    calling the patchpanel DBus API CreateTetheredNetwork.
  </summary>
</histogram>

<histogram name="Network.Patchpanel.Tethering.DHCPServer"
    enum="NetworkPatchpanelDHCPServerEvent" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    DHCP server events happening for the DHCP server set up by the patchpanel
    DBus API CreateTetheredNetwork.
  </summary>
</histogram>

<histogram name="Network.PortalSuspectedToOnlineTime" units="ms"
    expires_after="2026-12-31">
  <owner>stevenjb@chromium.org</owner>
  <owner>cros-network-health-team@google.com</owner>
  <summary>
    Captive portal time from a portal-suspected state to an online state on
    ChromeOS. NOTE: Prior to M110 this used a range that was too small so those
    results are invalid.
  </summary>
</histogram>

<histogram name="Network.PrefetchMatches.FirstHeaderMissingFromPrefetch"
    enum="RequestHeader" expires_after="2026-07-19">
  <owner>ricea@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    For every failed match in network::PrefetchMatches() caused by a header in
    the `headers` field sent by the render process that was not in the prefetch,
    logs the name of the first header that was missing. Logged once per request
    that matched NIK and URL but failed to match due to an unexpected header.
    Not logged if a header value mismatch was seen first.
  </summary>
</histogram>

<histogram name="Network.PrefetchMatches.FirstHeaderValueMismatch"
    enum="RequestHeader" expires_after="2026-07-19">
  <owner>ricea@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    For every failed match in network::PrefetchMatches() caused by a header in
    the `headers` field sent by the render process that had a different value
    from the same header in the prefetch, logs the name of the first header that
    failed to match. Logged once per request that matched NIK and URL but failed
    to match due to a header value mismatch. Not logged in a header missing from
    the prefetch was seen first.
  </summary>
</histogram>

<histogram name="Network.PrefetchMatches.FirstMismatch"
    enum="PrefetchMatchesResourceRequestField" expires_after="2026-07-19">
  <owner>ricea@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    For every failed match in network::PrefetchMatches(), logs the first field
    that failed to match. Logged once per request that matched NIK and URL but
    failed to match on other fields.
  </summary>
</histogram>

<histogram name="Network.PrefetchMatches.HeaderOnlyInPrefetch"
    enum="RequestHeader" expires_after="2026-07-19">
  <owner>ricea@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    For every failed match in network::PrefetchMatches() caused by a header in
    the `headers` field of the prefetch that wasn't in the `headers` field sent
    by the render process, logs the name of a header that was missing. Logged
    for every missing header for every request that matched NIK and URL but
    failed to match due to a header value mismatch. Not logged if there were
    headers from the render process that were unexpected or had differing
    values.
  </summary>
</histogram>

<histogram name="Network.PrefetchMatches.Result" enum="Boolean"
    expires_after="2026-07-19">
  <owner>ricea@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    For every attempted match network::PrefetchMatches(), logs true if the
    ResourceRequest objects successfully matches, or false otherwise. Logged
    once per request that matched NIK and URL.
  </summary>
</histogram>

<histogram name="Network.RedirectFoundToOnlineTime" units="ms"
    expires_after="2026-12-31">
  <owner>stevenjb@chromium.org</owner>
  <owner>cros-network-health-team@google.com</owner>
  <summary>
    Captive portal time from a redirect-found state to an online state on
    ChromeOS. NOTE: Prior to M110 this used a range that was too small so those
    results are invalid.
  </summary>
</histogram>

<histogram
    name="Network.SharedDictionary.CreateBrotliSourceStreamWithDictionary"
    units="microseconds" expires_after="2027-01-03">
  <owner>pmeenan@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    The time spent creating a brotli source stream with a dictionary. Logged
    when the network service receives an HTTP response compressed with Shared
    Brotli.

    Note that clients without high-resolution clocks will report 0 for very
    short times.
  </summary>
</histogram>

<histogram name="Network.SharedDictionary.CreateZstdSourceStreamWithDictionary"
    units="microseconds" expires_after="2027-01-03">
  <owner>pmeenan@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    The time spent creating a zstd source stream with a dictionary. Logged when
    the network service receives an HTTP response compressed with Shared
    Zstandard.

    Note that clients without high-resolution clocks will report 0 for very
    short times.

    Warning: this histogram was expired from 2025-06-08 to 2024-08-27; data may
    be missing.
  </summary>
</histogram>

<histogram name="Network.SharedDictionary.DocumentRequestCacheResult"
    enum="SharedDictionaryDocumentRequestCacheResult"
    expires_after="2027-01-10">
  <owner>pmeenan@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    For each request that is for a document destination that has a shared
    compression dictionary available and is using the disk-based dictionary
    storage, records if the dictionary was available in one of the memory
    caches.

    Logged at the time a request is sent and only for those requests that were
    for a document destination and had a compression dictionary available.
  </summary>
</histogram>

<histogram name="Network.SharedDictionary.DocumentRequestMetadataResult"
    enum="SharedDictionaryDocumentRequestMetadataResult"
    expires_after="2027-02-07">
  <owner>wbjacksonjr@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    For each request that is for a document destination that has a shared
    compression dictionary available and is using the disk-based dictionary
    storage, records if the dictionary's metadata was ready in memory at request
    initiation time, or if the request had to wait for the metadata to load from
    disk.

    This metric is logged only for those requests that were for a document
    destination and had a compression dictionary available.
  </summary>
</histogram>

<histogram name="Network.SharedDictionary.EncodingType"
    enum="SharedDictionaryEncodingType" expires_after="2026-12-27">
  <owner>nidhijaju@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    For each shared dictionary network transaction, record the encoding type.
  </summary>
</histogram>

<histogram name="Network.Shill.CAPPORT.ContainsBytesRemaining"
    enum="BooleanSuccess" expires_after="2026-12-31">
  <owner>akahuang@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric indicating if a CAPPORT status response contains the
    &quot;bytes-remaining&quot; field defined in RFC8908. This metric is only
    recorded once per CAPPORT session and only if the CAPPORT server started
    advertising &quot;captive&quot; as false.
  </summary>
</histogram>

<histogram name="Network.Shill.CAPPORT.ContainsSecondsRemaining"
    enum="BooleanSuccess" expires_after="2026-12-31">
  <owner>akahuang@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric indicating if a CAPPORT status response contains the
    &quot;seconds-remaining&quot; field defined in RFC8908. This metric is only
    recorded once per CAPPORT session and only if the CAPPORT server started
    advertising &quot;captive&quot; as false.
  </summary>
</histogram>

<histogram name="Network.Shill.CAPPORT.ContainsVenueInfoURL"
    enum="BooleanSuccess" expires_after="2026-12-31">
  <owner>akahuang@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric indicating if a CAPPORT status response contains the
    &quot;venue-info-url&quot; field defined in RFC8908. This metric is only
    recorded once per CAPPORT session and only if the CAPPORT server started
    advertising &quot;captive&quot; as false.
  </summary>
</histogram>

<histogram name="Network.Shill.CAPPORT.MaxSecondsRemaining" units="seconds"
    expires_after="2026-12-31">
  <owner>akahuang@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric indicating if the maximum value advertised in
    CAPPORT status responses for the &quot;seconds-remaining&quot; field defined
    in RFC8908. This metric is only recorded once per CAPPORT session (the
    maximum value).
  </summary>
</histogram>

<histogram name="Network.Shill.CAPPORT.QueryResult" enum="CAPPORTQueryResult"
    expires_after="2026-12-31">
  <owner>akahuang@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric indicating the results for a CAPPORT query as
    defined in RFC8908.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.3GPPRegistrationDelayedDrop"
    enum="NetworkCellular3GPPRegistrationDelayedDrop"
    expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network diagnostic metric sampling the number of cellular network
    flakes. A network flake occurs when the signal strength goes below detection
    level for a short duration.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.AutoConnectTotalTime" units="ms"
    expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network diagnostic metric sampling the total amount of time spent
    from the start of the first auto-connect request until when the cellular
    modem successfully connects to the network.

    NOTE: This metric was expired from 2022-01-30 to 2022-04-01.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.AutoConnectTries" units="units"
    expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network diagnostic metric sampling the number of auto-connect tries
    that were attempted before the cellular modem successfully connected to the
    network.

    NOTE: This metric was expired from 2022-01-30 to 2022-04-01.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.ConnectResult"
    enum="PlatformCellularConnectResult" expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Reports the result of Cellular connection attempts through the platform
    layers. This captures any success or failure as a result of a Connect call
    through ModemManager, or any causes of early failure in shill that prevents
    a connect attempt altogether. Refer to go/cros-cellular-apn-metrics for
    details. This metric was replaced by
    Network.Shill.Cellular.ConnectResult.{ApnType} in R116.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.ConnectResult.{ApnType}"
    enum="PlatformCellularConnectResult" expires_after="2027-04-05">
  <owner>danielwinkler@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Reports the result of Cellular connection attempts through the platform
    layers when using the {ApnType}. This captures any success or failure as a
    result of a Connect call through ModemManager, or any causes of early
    failure in shill that prevents a connect attempt altogether. Refer to
    go/cros-cellular-apn-metrics for details.
  </summary>
  <token key="ApnType" variants="ApnTypes"/>
</histogram>

<histogram name="Network.Shill.Cellular.DevicePresenceStatus"
    enum="BooleanPresent" expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric that tracks the presence of a Cellular device in the
    system. A sample is emitted once every 3 minutes.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.Drop" enum="NetworkCellularTechnology"
    expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS cellular network metric that tracks the number of drops based on
    the network technology.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.EntitlementCheck"
    enum="NetworkCellularEntitlementCheck" expires_after="2027-04-05">
  <owner>andrewlassalle@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS cellular network metric that tracks the entitlement check results
    used for hotspot. This metric is triggered every time the user tries to
    enable hotspot using cellular as the upstream technology.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.ExpiredLeaseLengthSeconds2"
    units="seconds" expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric that tracks the length of a lease for a
    cellular network at the time it expired without the DHCP client being able
    to renew it.

    NOTE: This metric was expired from 2021-12-01 to 2022-04-01.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.NetworkConnectionIPType"
    enum="NetworkConnectionIPType" expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric that tracks the types of IP configuration used for
    establishing cellular connections.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.PortalResult"
    enum="NetworkPortalResult" expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network diagnostic metric sampling the result of portal detections
    for a cellular network.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.ServiceErrors"
    enum="NetworkServiceError" expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS connection manager service errors for cellular interface. NOTE:
    This metric was updated in M101. Data prior to that may be missing.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.SignalStrengthBeforeDrop" units="units"
    expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric sampling the signal strength (0-100) of the cellular
    modem before it dropped from the network.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TechnologyEnabled"
    enum="BooleanEnabled" expires_after="2027-04-05">
  <owner>rmao@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric that tracks the enablement of a Cellular device in
    the system. A sample is emitted once every 3 minutes.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeToConfig" units="ms"
    expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to join a cellular
    network and configure Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeToConnect" units="ms"
    expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to connect a cellular
    modem.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeToDisable" units="ms"
    expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to disable a cellular
    modem.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeToEnable" units="ms"
    expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to enable a cellular
    modem.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeToInitialize" units="ms"
    expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to initialize a
    cellular modem.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeToOnline" units="ms"
    expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to determine that a
    cellular network is online after configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeToPortal" units="ms"
    expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to determine that a
    cellular network is in a captive portal after configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeToRedirectFound" units="ms"
    expires_after="2027-04-05">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to determine that a
    cellular network is in a captive portal with a valid redirect URL after
    configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeToScan" units="ms"
    expires_after="2027-04-05">
  <owner>ejcaruso@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to scan a cellular
    network and register a modem.

    NOTE: This metric was expired from 2021-12-01 to 2022-04-01.
  </summary>
</histogram>

<histogram name="Network.Shill.ConnectionDiagnosticsIssue"
    enum="ConnectionDiagnosticsIssue" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric that tracks Layer 3 connectivity issues diagnosed by
    the ConnectionDiagnostics class in Shill ran on a connected network after
    Shill portal detection has failed to validate the network. This metric is
    logged each time a ConnectionDiagnostics object completes its diagnostics
    actions and reports the results to its caller.
  </summary>
</histogram>

<histogram name="Network.Shill.Eap.Event" enum="NetworkEapConnectionEvent"
    expires_after="2026-12-31">
  <owner>olsa@google.com</owner>
  <owner>chromeos-commercial-networking@google.com</owner>
  <summary>
    ChromeOS network metric that tracks the EAP TLS connection events.
  </summary>
</histogram>

<histogram name="Network.Shill.Eap.EventCaCertExperiment1"
    enum="NetworkEapConnectionEvent" expires_after="2026-12-31">
  <owner>olsa@google.com</owner>
  <owner>chromeos-commercial-networking@google.com</owner>
  <summary>
    ChromeOS network metric that tracks the EAP TLS connection events under the
    experiment SingleCaCertVerificationPhase1 if system CA certs are in use and
    custom cert is in use for the server authentication.
  </summary>
</histogram>

<histogram name="Network.Shill.Eap.EventCaCertExperiment2"
    enum="NetworkEapConnectionEvent" expires_after="2026-12-31">
  <owner>olsa@google.com</owner>
  <owner>chromeos-commercial-networking@google.com</owner>
  <summary>
    ChromeOS network metric that tracks the EAP TLS connection events under the
    experiment SingleCaCertVerificationPhase2 if system CA certs are in use and
    custom cert is in use for the server authentication.
  </summary>
</histogram>

<histogram name="Network.Shill.Eap.EventCaCertExpValidCondition"
    enum="NetworkEapConnectionEvent" expires_after="2026-12-31">
  <owner>olsa@google.com</owner>
  <owner>chromeos-commercial-networking@google.com</owner>
  <summary>
    ChromeOS network metric that tracks the EAP TLS connection events without
    experiments if system CA certs are in use and custom cert is in use for
    server authentication.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.DevicePresenceStatus"
    enum="BooleanPresent" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric that tracks the presence of an Ethernet device in
    the system. A sample is emitted once every 3 minutes.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.Driver" enum="EthernetDriver"
    expires_after="2026-12-31">
  <owner>chuweih@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Chrome OS metric that records the name of ethernet driver detected when an
    ethernet network is started.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.ExpiredLeaseLengthSeconds2"
    units="seconds" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric that tracks the length of a lease for an
    Ethernet network at the time it expired without the DHCP client being able
    to renew it.

    NOTE: This metric was expired from 2021-12-01 to 2022-04-01.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.PortalResult"
    enum="NetworkPortalResult" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network diagnostic metric sampling the result of portal detections
    for an Ethernet network.

    NOTE: This metric was expired from 2021-12-01 to 2022-04-01.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.ServiceErrors"
    enum="NetworkServiceError" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS connection manager service errors for ethernet interface. NOTE:
    This metric was updated in M101. Data prior to that may be missing.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.TimeToConfig" units="ms"
    expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to join a wired
    Ethernet network and configure Layer 3 state (typically acquire a DHCP
    lease).

    NOTE: This metric was expired from 2021-12-01 to 2022-04-01.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.TimeToInitialize" units="ms"
    expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to initialize an
    Ethernet device.

    NOTE: This metric was expired from 2021-12-01 to 2022-04-01.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.TimeToOnline" units="ms"
    expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to determine that an
    Ethernet network is online after configuring Layer 3 state.

    NOTE: This metric was expired from 2021-12-01 to 2022-04-01.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.TimeToPortal" units="ms"
    expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to determine that an
    Ethernet network is in a captive portal after configuring Layer 3 state.

    NOTE: This metric was expired from 2021-12-01 to 2022-04-01.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.TimeToRedirectFound" units="ms"
    expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to determine that an
    Ethernet network is in a captive portal with a valid redirect URL after
    configuring Layer 3 state.

    NOTE: This metric was expired from 2021-12-01 to 2022-04-01.
  </summary>
</histogram>

<histogram name="Network.Shill.PortalDector.CAPPORTAdvertised"
    enum="NetworkCAPPORTSupport" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Indicates how the network advertises supports for the CAPPORT protocol
    (RFC8908) using RFC8908. This metric is recorded once for every network
    connection where CAPPORT was advertised, even if no captive portal was found
    with HTTP probes.

    This metric is a redefinition of the same portal detection metric
    (&quot;Network.Shill.PortalDetector.CAPPORTAdvertised&quot;), but with a
    name matching the typo existing in the platform for m121 and m122 and fixed
    in crrev/c/5223768, and without the shill network Technology suffix. This
    metric can be removed once captive portal metrics data on m121 and m121 is
    not needed anymore.
  </summary>
</histogram>

<histogram name="Network.Shill.PortalDector.CAPPORTSupported"
    enum="NetworkCAPPORTSupport" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Indicates if the network advertises supports for the CAPPORT protocol
    (RFC8908) using RFC8908. This metric is recorded once for every network
    connection where a captive portal was found with an HTTP redirect.

    This metric is a redefinition of the same portal detection metric
    (&quot;Network.Shill.PortalDetector.CAPPORTAdvertised&quot;), but with a
    name matching the typo existing in the platform for m121 and m122 and fixed
    in crrev/c/5223768, and without the shill network Technology suffix. This
    metric can be removed once captive portal metrics data on m121 and m121 is
    not needed anymore.
  </summary>
</histogram>

<histogram
    name="Network.Shill.PortalDetector.AggregateCAPPORTResult.{Technology}"
    enum="PortalDetectorAggregateCAPPORTResult" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Result of ChromeOS network validation CAPPORT queries aggregated over
    multiple queries until Internet connectivity has been validated or until
    disconnection.
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram name="Network.Shill.PortalDetector.AggregateResult.{Technology}"
    enum="PortalDetectorAggregateResult" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Result of ChromeOS network validation aggregated over multiple attempts
    until Internet connectivity has been validated or until disconnection.
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram
    name="Network.Shill.PortalDetector.AttemptsToDisconnect.{Technology}"
    units="attempts" expires_after="2026-12-31">
  <owner>hugobenichi@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Number of network validation attempts before a physical network transitions
    to a non connected state, recorded when the Network transitions to the idle
    state and network validation could not confirm Internet access on that
    Network.
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram name="Network.Shill.PortalDetector.AttemptsToOnline.{Technology}"
    units="attempts" expires_after="2026-12-31">
  <owner>hugobenichi@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Number of network validation attempts until a physical network transitions
    to online, recorded when network validation confirms Internet access for the
    first time on a given Network connection.
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram
    name="Network.Shill.PortalDetector.AttemptsToRedirectFound.{Technology}"
    units="attempts" expires_after="2026-12-31">
  <owner>hugobenichi@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Number of network validation attempts before a physical network transitions
    to redirect-found, recorded when network validation returns the first
    portal-redirect result for a given Network connection.
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram name="Network.Shill.PortalDetector.CAPPORTAdvertised.{Technology}"
    enum="NetworkCAPPORTSupport" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Indicates how the network advertises supports for the CAPPORT protocol
    (RFC8908) using RFC8908. This metric is recorded once for every network
    connection where CAPPORT was advertised, even if no captive portal was found
    with HTTP probes.
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram name="Network.Shill.PortalDetector.CAPPORTSupported.{Technology}"
    enum="NetworkCAPPORTSupport" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Indicates if the network advertises supports for the CAPPORT protocol
    (RFC8908) using RFC8908. This metric is recorded once for every network
    connection where a captive portal was found with an HTTP redirect.
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram name="Network.Shill.PortalDetector.HTTPReponseCode.{Technology}"
    units="response code" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    HTTP response code received by an HTTP probe used for network validation.
    Response codes received for encrypted HTTPS probes are ignored because it is
    assumed that HTTPS probes cannot be spoofed and always receive the expected
    204 result.

    Possible values are HTTP response codes in the [100, 599] range or one of
    the three special values: 0 to indicate a bad response with an invalid
    response code, 1 to indicate a 302 or 307 redirect response without a
    Location header or with an invalid Location header which was not a URL, 2
    for a 200 response without a Content-Length header or with an invalid
    Content-Lenght header.

    This metric is a redefinition of the same portal detection metric
    (&quot;Network.Shill.PortalDetector.HTTPResponseCode&quot;), but with a name
    matching the typo existing in the platform for m121 and m122 and fixed in
    crrev/c/5267618. This metric can be removed once captive portal metrics data
    on m121 and m121 is not needed anymore.
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram
    name="Network.Shill.PortalDetector.HTTPReponseContentLength.{Technology}"
    units="bytes" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Length in bytes of 200 responses received by a network validation HTTP probe
    during a network validation attempt. 200 responses with no content or a
    single byte of content are treated as 204 answers. These events are expected
    to be recorded only once for a given network connection (network with
    Internet acess). 200 responses with some actual content are treated as a
    suspected portal redirect and trigger the portal sign-in flow. These events
    are expected to be recorded multiple times until the user has signed into
    the portal.

    This metric is a redefinition of the same portal detection metric
    (&quot;Network.Shill.PortalDetector.HTTPResponseContentLength&quot;), but
    with a name matching the typo existing in the platform for m121 and m122 and
    fixed in crrev/c/5267618. This metric can be removed once captive portal
    metrics data on m121 and m121 is not needed anymore.
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram name="Network.Shill.PortalDetector.HTTPResponseCode.{Technology}"
    units="response code" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    HTTP response code received by an HTTP probe used for network validation.
    Response codes received for encrypted HTTPS probes are ignored because it is
    assumed that HTTPS probes cannot be spoofed and always receive the expected
    204 result.

    Possible values are HTTP response codes in the [100, 599] range or one of
    the three special values: 0 to indicate a bad response with an invalid
    response code, 1 to indicate a 302 or 307 redirect response without a
    Location header or with an invalid Location header which was not a URL, 2
    for a 200 response without a Content-Length header or with an invalid
    Content-Lenght header.
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram
    name="Network.Shill.PortalDetector.HTTPResponseContentLength.{Technology}"
    units="bytes" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Length in bytes of 200 responses received by a network validation HTTP probe
    during a network validation attempt. 200 responses with no content or a
    single byte of content are treated as 204 answers. These events are expected
    to be recorded only once for a given network connection (network with
    Internet acess). 200 responses with some actual content are treated as a
    suspected portal redirect and trigger the portal sign-in flow. These events
    are expected to be recorded multiple times until the user has signed into
    the portal.
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram name="Network.Shill.PortalDetector.InitialResult.{Technology}"
    enum="PortalDetectorResult" expires_after="2026-12-31">
  <owner>hugobenichi@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Initial result of network validation for a given physical Network
    connection, recorded once after the first network validation result.
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram name="Network.Shill.PortalDetector.RepeatResult.{Technology}"
    enum="PortalDetectorResult" expires_after="2026-12-31">
  <owner>hugobenichi@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Subsequent result of network validation for a given physical Network
    connection, recorded after the first network validation result until
    Internet access is confirmed.
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram
    name="Network.Shill.PortalDetector.TermsAndConditionsAggregateResult"
    enum="TermsAndConditionsAggregateResult" expires_after="2026-12-31">
  <owner>damiendejean@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Result of terms and conditions URL detection aggregated with portal
    detection sampled once for every network connection.
  </summary>
</histogram>

<histogram
    name="Network.Shill.PortalDetector.{AttemptResult}Duration.{Technology}"
    units="ms" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Total duration of a full ChromeOS portal detection attempt on a {Technology}
    network when this attempt either validates Internet connectivity or when
    detects a portal with a redirected probe.
  </summary>
  <token key="AttemptResult">
    <variant name="InternetValidation"/>
    <variant name="PortalDiscovery"/>
  </token>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram name="Network.Shill.PortalDetector.{ProbeType}Duration.{Technology}"
    units="ms" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Duration of a single HTTP or HTTPS probe sent on a {Technology} network as
    part of ChromeOS platform portal detection.
  </summary>
  <token key="ProbeType">
    <variant name="HTTPProbe"/>
    <variant name="HTTPSProbe"/>
  </token>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram name="Network.Shill.PortalDetector.{Transition}.{Technology}"
    units="ms" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Total time it takes for ChromeOS network validation to find a captive portal
    redirection (&quot;TimeToRedirect&quot;), or to find a captive portal
    sign-in URL after a CAPPORT query as defined in RFC8908
    (&quot;TimeToCAPPORTUserPortalURL&quot;), or to validate Internet access
    starting from the initial network connection (&quot;TimeToInternet&quot;),
    or starting from the first discovery of a captive portal redirection
    (&quot;TimeToInternetAfterRedirect&quot;), or after interacting with a
    CAPPORT server as defined in RFC8908 (&quot;TimeToCAPPORTNotCaptive&quot;),
  </summary>
  <token key="Transition">
    <variant name="TimeToCAPPORTNotCaptive"/>
    <variant name="TimeToCAPPORTUserPortalURL"/>
    <variant name="TimeToInternet"/>
    <variant name="TimeToInternetAfterRedirect"/>
    <variant name="TimeToRedirect"/>
  </token>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram name="Network.Shill.PPPMTUValue" units="bytes"
    expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network diagnostic metric sampling the MTU value provided by the
    upstream PPP peer for L2TP VPN connections. A sample is emitted each time
    the client successfully negotiates an MTU value via PPP.
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.Driver" enum="VPNDriver"
    expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric sampled on each successful VPN connection that
    tracks the VPN connection type.
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.Ikev2.AuthenticationType"
    enum="VPNIPsecAuthenticationType" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful IKEv2 VPN
    connection that tracks how the client authenticates itself to the server.
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.L2tpIpsecTunnelGroupUsage"
    enum="VPNL2TPIPsecTunnelGroupUsage" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful L2TP/IPsec VPN
    connection that tracks whether tunnel group is used. The tunnel group
    property needs to be set when connecting to some Cisco L2TP/IPsec VPN.
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.OpenVPNCipher" enum="VPNOpenVPNCipher"
    expires_after="2026-12-31">
  <owner>taoyl@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric emitted on each successful OpenVPN connection that
    tracks the cipher algorithm negotiated with server.
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.RemoteAuthenticationType"
    enum="VPNRemoteAuthenticationType" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric sampled on each successful VPN connection that
    tracks the remote authentication method.
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.ServicesNumber" units="units"
    expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each user login that tracks the
    number of the configured VPN services in shill.
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.TimeToConfig" units="ms"
    expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to configure Layer 3
    state on a VPN network (typically acquire a DHCP lease).
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.TimeToOnline" units="ms"
    expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to determine that a
    VPN connection is online after configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.UserAuthenticationType"
    enum="VPNUserAuthenticationType" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric sampled on each successful VPN connection that
    tracks the user authentication method.
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.WireGuardAllowedIPsType"
    enum="VPNWireGuardAllowedIPsType" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful WireGuard VPN
    connection that tracks the type of the allowed IPs set in this connection.
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.WireGuardKeyPairSource"
    enum="VPNWireGuardKeyPairSource" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful WireGuard VPN
    connection that tracks the source of the key pair used in this connection.
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.WireGuardPeersNum" units="WireGuard peers"
    expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful WireGuard VPN
    connection that tracks the number of peers used in in this connection.
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.ConnectFailureReason"
    enum="VPNConnectFailureReason" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each failed {VPNType} VPN
    connection attempt that tracks the reason of the connect failure.
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.ConnectionLostReason"
    enum="VPNConnectionLostReason" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each {VPNType} VPN connection end
    event (i.e., the VPN is no longer connected) that tracks the reason that the
    connection gets lost.
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.EspEncryptionAlgorithm"
    enum="VPNIPsecEncryptionAlgorithm" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful {VPNType} VPN
    connection that tracks the encryption algorithm used by the ESP protocol in
    this connection.
  </summary>
  <token key="VPNType" variants="IPsecVPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.EspIntegrityAlgorithm"
    enum="VPNIPsecIntegrirtyAlgorithm" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful {VPNType} VPN
    connection that tracks the integrity algorithm used by the ESP protocol in
    this connection.
  </summary>
  <token key="VPNType" variants="IPsecVPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.IkeDHGroup" enum="VPNIPsecDHGroup"
    expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful {VPNType} VPN
    connection that tracks the DH group used by the IKE protocol in this
    connection.
  </summary>
  <token key="VPNType" variants="IPsecVPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.IkeEncryptionAlgorithm"
    enum="VPNIPsecEncryptionAlgorithm" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful {VPNType} VPN
    connection that tracks the encryption algorithm used by the IKE protocol in
    this connection.
  </summary>
  <token key="VPNType" variants="IPsecVPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.IkeIntegrityAlgorithm"
    enum="VPNIPsecIntegrirtyAlgorithm" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful {VPNType} VPN
    connection that tracks the integrity algorithm used by the IKE protocol in
    this connection.
  </summary>
  <token key="VPNType" variants="IPsecVPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.IPType" enum="NetworkIPType"
    expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful {VPNType} VPN
    connection that tracks the IP family provided in this connection.
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.IPv4ExcludedRoutesLargestPrefix"
    units="units" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful split-routing
    {VPNType} VPN connection that tracks the length of the largest IPv4 excluded
    route (the route with the shortest prefix).
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.IPv4ExcludedRoutesNumber"
    units="units" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful {VPNType} VPN
    connection that tracks the number of IPv4 excluded routes.
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.IPv4IncludedRoutesLargestPrefix"
    units="units" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful split-routing
    {VPNType} VPN connection that tracks the length of the largest IPv4 included
    route (the route with the shortest prefix).
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.IPv4IncludedRoutesNumber"
    units="units" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful {VPNType} VPN
    connection that tracks the number of IPv4 included routes. Note that for a
    default route, it will always be counted as an included route, even if it is
    not explicitly set.
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.IPv4RoutingType"
    enum="VPNRoutingType" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful {VPNType} VPN
    connection that tracks the type of routing setup for IPv4. Caveat: when we
    calculate whether the address space is fully covered, we will only check if
    there is a default route and no excluded route. If there is no /0 route but
    the address space is fully covered by multiple routes, it will be considered
    as split-routing.
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.IPv6ExcludedRoutesLargestPrefix"
    units="units" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful split-routing
    {VPNType} VPN connection that tracks the length of the largest IPv6 excluded
    route (the route with the shortest prefix).
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.IPv6ExcludedRoutesNumber"
    units="units" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful {VPNType} VPN
    connection that tracks the number of IPv4 excluded routes.
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.IPv6IncludedRoutesLargestPrefix"
    units="units" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful split-routing
    {VPNType} VPN connection that tracks the length of the largest IPv6 included
    route (the route with the shortest prefix).
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.IPv6IncludedRoutesNumber"
    units="units" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful {VPNType} VPN
    connection that tracks the number of IPv6 included routes. Note that for a
    default route, it will always be counted as an included route, even if it is
    not explicitly set.
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.IPv6RoutingType"
    enum="VPNRoutingType" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful {VPNType} VPN
    connection that tracks the type of routing setup for IPv6. Caveat: when we
    calculate whether the address space is fully covered, we will only check if
    there is a default route and no excluded route. If there is no /0 route but
    the address space is fully covered by multiple routes, it will be considered
    as split-routing.
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.MTU" units="units"
    expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful {VPNType} VPN
    connection that tracks the MTU value of this connection.
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.NameServers" enum="VPNNameServers"
    expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful {VPNType} VPN
    connection that tracks the type of the DNS setup.
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram
    name="Network.Shill.Vpn.{VPNType}.TimeConnectedToDisconnectedSeconds"
    units="seconds" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each time when the state of a
    {VPNType} VPN transits from connected to a non-connected state (reconnecting
    or idle), which tracks how long the VPN driver stays in the connected state
    of this connection.
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.TimeConnectToConnectedMillis"
    units="ms" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful new {VPNType} VPN
    connection that tracks time duration from the VPN driver starts connecting
    to the VPN driver reports connected. The time used by shill and patchpanel
    for datapath configuration is not counted in this metrics.
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.TimeConnectToIdleMillis"
    units="ms" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each time when the state of a
    {VPNType} VPN transits from connecting to idle (without being connected
    once), which tracks the time duration from the VPN driver starts connecting
    to the VPN driver becomes idle. This can be expected (e.g., user cancel the
    connection) or unexpected (e.g., cannot reach the VPN server).
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.TimeReconnectToConnectedMillis"
    units="ms" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each successful {VPNType} VPN
    reconnection (i.e., was connected before the reconnection restarts) that
    tracks time duration from the VPN driver starts reconnecting to the VPN
    driver reports connected. The time used by shill and patchpanel for datapath
    configuration is not counted in this metrics.
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.Vpn.{VPNType}.TimeReconnectToIdleMillis"
    units="ms" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted on each time when the state of a
    {VPNType} VPN transits from reconnecting (i.e., was connected before) to
    idle (without being connected once), which tracks the time duration from the
    VPN driver starts reconnecting to the VPN driver becomes idle. This can be
    expected (e.g., user disconnects the connection) or unexpected (e.g., VPN
    server is no longer reachable).
  </summary>
  <token key="VPNType" variants="VPNType"/>
</histogram>

<histogram name="Network.Shill.WiFi.AdapterAllowlisted"
    enum="WiFiAdapterInAllowlist" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS WiFi usage metric emitted every time the WiFi adapter is enabled.
    It tracks if the adapter that was detected on the device is in the allowlist
    to be reported via structured metrics (e.g. is it in AVL?) or not.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ANQP.AddressTypeAvailabilitySupport"
    enum="WiFiANQPAddressTypeAvailabilitySupport" expires_after="2026-12-31">
  <owner>damiendejean@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS WiFi metric emitted every time an access point compatible with ANQP
    is connected. It tracks the support of the ANQP Address Type Availability
    field.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ANQP.NetworkAuthTypeSupport"
    enum="WiFiANQPNetworkAuthTypeSupport" expires_after="2026-12-31">
  <owner>damiendejean@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS WiFi metric emitted every time an access point compatible with ANQP
    is connected. It tracks the support of the ANQP Network Authentication Type
    field.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ANQP.QueryResult"
    enum="WiFiANQPQueryResult" expires_after="2026-12-31">
  <owner>damiendejean@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS WiFi metric emitted every time an ANQP query is done. It tracks the
    success or the different types of failures of a query.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ANQP.VenueNameSupport"
    enum="WiFiANQPVenueNameSupport" expires_after="2026-12-31">
  <owner>damiendejean@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS WiFi metric emitted every time an access point compatible with ANQP
    is connected. It tracks the support of the ANQP Venue Name field.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ANQP.VenueURLSupport"
    enum="WiFiANQPVenueURLSupport" expires_after="2026-12-31">
  <owner>damiendejean@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS WiFi metric emitted every time an access point compatible with ANQP
    is connected. It tracks the support of the ANQP Venue URL field.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Ap80211kSupport" enum="WiFiAp80211kSupport"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric sampling the number of Wireless Access Points that
    support the 802.11k standard, sampled on successful connections to an AP.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Ap80211rSupport" enum="WiFiAp80211rSupport"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric sampling the number of Wireless Access Points that
    support the 802.11r standard, sampled on successful connections to an AP.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Ap80211uANQPSupport"
    enum="WiFiAp80211uANQPSupport" expires_after="2026-12-31">
  <owner>damiendejean@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric sampling the number of Wireless Access Points that
    support ANQP request protocol, sampled on successful connections to an AP.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Ap80211vBSSMaxIdlePeriodSupport"
    enum="WiFiAp80211vBSSMaxIdlePeriodSupport" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric sampling the number of Wireless Access Points that
    support the 802.11v BSS Max Idle Period feature, sampled on successful
    connections to an AP.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Ap80211vBSSTransitionSupport"
    enum="WiFiAp80211vBSSTransitionSupport" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric sampling the number of Wireless Access Points that
    support the 802.11v BSS Transition feature, sampled on successful
    connections to an AP.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Ap80211vDMSSupport"
    enum="WiFiAp80211vDMSSupport" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric sampling the number of Wireless Access Points that
    support the 802.11v DMS feature, sampled on successful connections to an AP.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ApAlternateEDCASupport"
    enum="WiFiApAlternateEDCASupport" expires_after="2026-12-31">
  <owner>damiendejean@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric sampling the number of Wireless Access Points that
    support transmit opportunity negotation, emitted on successful connections
    to an AP.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ApChannelSwitch" enum="WiFiApChannelSwitch"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric sampled when an AP switches channels. Shows
    the old frequency band and the new frequency band.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ApDisconnectReason" enum="WiFiReasonCode"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric. Reason code reported when the AP disconnects
    a WiFi connection.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ApDisconnectType" enum="WiFiStatusType"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric. Broad category of reason AP disconnected a
    WiFi connection.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ApSCSupport" enum="WiFiApSCSupport"
    expires_after="2026-12-31">
  <owner>damiendejean@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric sampling the number of Wireless Access Points that
    support stream classification, emitted on successful connections to an AP.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.AssocFailureType" enum="WiFiStatusCode"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric. Status code reported when an 802.11
    association fails. Note that not all disconnects are caused by an assoc
    failure, and so this metric shold not be correlated with the DisconnectType
    metrics.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.AuthFailureType" enum="WiFiStatusCode"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric. Status code reported when an 802.11
    authentication fails. Note that not all disconnects are caused by an auth
    failure, and so this metric should not be correlated with the DisconnectType
    metrics.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.AutoConnectableServices" units="units"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric sampling the number of wifi services available for
    auto-connect when auto-connect is initiated for wifi device.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.AvailableBSSesAtConnect" units="units"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric sampling the number of BSSes (endpoints) available
    for the currently connecting wifi service.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.BadPassphraseServiceType"
    enum="WiFiBadPassphraseServiceType" expires_after="2026-12-31">
  <owner>yichenyu@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric. This is recorded when a connection failure is
    due to bad-passphrase and indicates whether the attempt is initated by users
    or not and if the service has been previously connected.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Band6GHzSupport" enum="Band6GHzSupport"
    expires_after="2026-12-31">
  <owner>rmekonnen@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric that tracks the 6GHz Band support of access points
    that devices connect to. Results are recorded every time a device connects
    to an access point.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.BSSTransitionManagementSupport"
    enum="WiFiBSSTransitionManagementSupport" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric recording BSS Transition Management statuses. This
    is recorded every time a BSS Transition Management request is received from
    a wireless access point.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.Channel" enum="NetworkChannelType"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric. The channel used for each successful WiFi
    connection.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.CiscoAdaptiveFTSupport"
    enum="WiFiCiscoAdaptiveFTSupport" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric sampling the number of Wireless Access Points that
    support Cisco's Adaptive FT feature, sampled on successful connections to an
    AP.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ClientDisconnectReason"
    enum="WiFiReasonCode" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric. Reason code reported when the client
    disconnects a WiFi connection.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ClientDisconnectType" enum="WiFiStatusType"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric. Broad category of reason client disconnected
    a WiFi connection.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.CQMNotification"
    enum="WiFiCQMNotificationType" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS Wifi Connection Quality Monitor(CQM) Notifications metric. This is
    emitted when any packet or beacon loss is observed for signal strength
    greater than -80 dBm. This metric is rate-limited such that it is never
    emitted more than once every 6 minutes.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.DevicePresenceStatus" enum="BooleanPresent"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric that tracks the presence of a WiFi device in the
    system. A sample is emitted once every 3 minutes.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.Disconnect"
    enum="NetworkWiFiDisconnectType" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric that tracks the cause of an 802.11 wireless
    network disconnection. The disconnect types were expanded in release
    R129-15997.0.0. Refer to go/cros-wifi-disconnect-type for details.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.EapInnerProtocol" enum="EAPInnerProtocol"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric sampled on each successful 802.1x wireless
    connection that tracks the configured inner authentication method.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.EapOuterProtocol" enum="EAPOuterProtocol"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric sampled on each successful 802.1x wireless
    connection that tracks the configured outer authentication method.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.ExpiredLeaseLengthSeconds2" units="seconds"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric that tracks the length of a lease for a
    WiFi network at the time it expired without the DHCP client being able to
    renew it.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.FallbackDNSTestResult"
    enum="FallbackDNSTestResult" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric that tracks the result of the fallback
    DNS test. The fallback DNS test is performed when portal detection failed
    due to DNS failure.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Hidden.EverConnected"
    enum="BooleanConnected" expires_after="2026-12-31">
  <owner>jonmann@chromium.org</owner>
  <owner>tnagel@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <owner>pwg-cros@google.com</owner>
  <summary>
    ChromeOS network metric tracking whether there has ever been a successful
    connection for each WiFi network which is configured with a hidden SSID. The
    metric includes networks from system and user profile and it's recorded each
    time a user configuration profile is loaded, such as when a user logs in.
    Networks that were last connected before M-84 will show as never connected.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Hidden.LastConnected" units="days"
    expires_after="2026-12-31">
  <owner>jonmann@chromium.org</owner>
  <owner>tnagel@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <owner>pwg-cros@google.com</owner>
  <summary>
    ChromeOS network metric tracking the number of days since the last
    connection for each WiFi network configured with hidden SSID. The metric
    includes networks from system and user profile and it's recorded each time a
    user configuration profile is loaded, such as when a user logs in.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.HiddenSSIDEverConnected"
    enum="BooleanEverConnected" expires_after="2026-12-31">
  <owner>tnagel@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <owner>cros-privacy-core@google.com</owner>
  <summary>
    ChromeOS network metric tracking whether WiFi networks configured with
    hidden SSID have ever been connected. The metric includes networks from
    system and user profile and it's recorded each time a user configuration
    profile is loaded, such as when a user logs in.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.HiddenSSIDNetworkCount" units="units"
    expires_after="2026-12-31">
  <owner>tnagel@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <owner>cros-privacy-core@google.com</owner>
  <summary>
    ChromeOS network metric tracking WiFi networks configured with hidden SSID.
    The metric includes networks from system and user profile and it's recorded
    each time a user configuration profile is loaded, such as when a user logs
    in. The fraction of non-zero buckets should roughly correspond to the
    fraction of devices that are trying to connect to hidden SSIDs at any given
    point in time.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.HS20Support" enum="HotspotSupport"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric that tracks the Hotspot 2.0 support of access points
    that devices connect to. Results are recorded every time a device connects
    to an access point. The metric records either the HS20 version the AP
    supports, or that the AP does not support HS20.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.MBOSupport" enum="MBOSupport"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric that tracks the Multi-Band Operation (MBO) support
    of access points that devices connect to. Results are recorded every time a
    device connects to an access point.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.NeighborLinkMonitorFailure"
    enum="NeighborLinkMonitorFailureType" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS metric that signals the type of failure the NeighborLinkMonitor
    detected on 802.11 wireless network. Recorded after the NeighborLinkMonitor
    detects a layer 2 connectivity failure to a neighbor.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.NetworkConnectionIPType"
    enum="NetworkConnectionIPType" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric that tracks the types of IP configuration used for
    establishing WiFi connections.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.NetworkProblemDetected"
    enum="NetworkProblemType" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric that tracks the network problems
    encountered by TrafficMonitor after WiFi connection is established.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.ConnectionResult"
    enum="NetworkServiceError" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-networking@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Results of a WiFi connection attempt for a WiFi network provisioned through
    Passpoint.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.Domains" units="count"
    expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-networking@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Number of FQDNs specified in a Passpoint profile. Recorded once per
    Passpoint profile successfully provisioned in shill.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.HomeOis" units="count"
    expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-networking@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Number of Home Organization Identifiers specified in a Passpoint profile.
    Recorded once per Passpoint profile successfully provisioned in shill.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.InterworkingDurationMillis"
    units="ms" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-networking@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Duration in milliseconds of a single supplicant Interworking select
    operation.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.InterworkingMatches"
    units="count" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-networking@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Number of Passpoint match events during a single supplicant Interworking
    select operation.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.Match" enum="PasspointMatch"
    expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-networking@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Match event between a Passpoint profile provisioned in shill and a Passpoint
    network.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.Meteredness"
    enum="PasspointMeteredness" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-networking@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Meterdness configuration of Passpoint profiles. Recorded once per Passpoint
    profile successfully provisioned in shill.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.Origin" enum="PasspointOrigin"
    expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-networking@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Origin of a Passpoint profile successfully provisioned in shill.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.ProvisioningResult"
    enum="PasspointProvisioningResult" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-networking@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Result of a Passpoint profile provisioning operation in shill.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.RemovalResult"
    enum="PasspointRemovalResult" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-networking@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>Result of a Passpoint profile removal operation in shill.</summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.RequiredHomeOis" units="count"
    expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-networking@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Number of required Home Organization Identifiers specified in a Passpoint
    profile. Recorded once per Passpoint profile successfully provisioned in
    shill.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.RoamingOis" units="count"
    expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-networking@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Number of Roaming Organization Identifiers specified in a Passpoint profile.
    Recorded once per Passpoint profile successfully provisioned in shill.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.SavedCredentials" units="count"
    expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-networking@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Number of Passpoint profiles saved in a shill user profile. Recorded once
    every time a user profile is loaded in shill.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.Security"
    enum="PasspointSecurity" expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-networking@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    EAP method configuration of Passpoint profiles. Recorded once per Passpoint
    profile successfully provisioned in shill.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.TermsAndConditions"
    enum="PasspointTermsAndConditions" expires_after="2026-12-31">
  <owner>damiendejean@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Indicates if the network requires terms and conditions acceptance to access
    the network.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.PasspointNetworkCount" units="count"
    expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-networking@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Number of savd WiFi networks provisioned through Passpoint. Recorded once
    every time a user profile is loaded in shill.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.PhyMode" enum="NetworkPhyModeType"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric. The standard advertised by the AP for each
    successful WiFi connection. It is not necessarily the same as the standard
    used by the AP and STA to communicate. For example, if the AP supports
    802.11ax and the STA only supports 802.11ac, this metric will report
    802.11ax even though STA and AP will use 802.11ac. The metric is emitted
    when the device connects successfully to an AP.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.PortalResult" enum="NetworkPortalResult"
    expires_after="2026-12-31">
  <owner>hugobenichi@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network diagnostic metric sampling the result of portal detections
    for an 802.11 wireless network.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.RegulatoryDomain" enum="RegulatoryDomain"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric that tracks which country the WiFi regulatory
    domain is set to. Recorded every time a WiFi regulatory domain change is
    triggered or determined initially (Shill startup).
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.RememberedNetworkCount" units="units"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network diagnostic metric sampling the number of 802.11 wireless
    networks known by the connection manager at the time a configuration profile
    has been loaded. A configuration profile is loaded at each system startup,
    and when a user logs in.
  </summary>
</histogram>

<histogram
    name="Network.Shill.WiFi.RememberedSystemNetworkCount{ShillWiFiRememberedNetworkSecurityMode}"
    units="units" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric sampling the number of 802.11 wireless networks
    configured from the system configuration profile. This metric is sampled
    each time a user configuration profile is loaded, such as when a user logs
    in.

    It might be surprising to have a system configuration profile metric sampled
    when a user configuration profile is loaded. But this ensures that we have
    equal numbers of samples for system and user configuration profiles.
    {ShillWiFiRememberedNetworkSecurityMode}
  </summary>
  <token key="ShillWiFiRememberedNetworkSecurityMode"
      variants="ShillWiFiRememberedNetworkSecurityMode">
    <variant name=""/>
  </token>
</histogram>

<histogram
    name="Network.Shill.WiFi.RememberedUserNetworkCount{ShillWiFiRememberedNetworkSecurityMode}"
    units="units" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric sampling the number of 802.11 wireless networks
    configured from a user configuration profile. This metric is sampled each
    time a user configuration profile is loaded, such as when a user logs in.
    {ShillWiFiRememberedNetworkSecurityMode}
  </summary>
  <token key="ShillWiFiRememberedNetworkSecurityMode"
      variants="ShillWiFiRememberedNetworkSecurityMode">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Network.Shill.WiFi.RoamComplete{RoamSecurityType}"
    enum="WiFiRoamComplete" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric recording roam successes or failures. This is
    recorded every time a client succeeds or fails to roam from one wireless
    access point to another. {RoamSecurityType}
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.RoamTime{RoamSecurityType}" units="ms"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric recording roam time in milliseconds. This is
    recorded every time a successful roam from one wireless access point to
    another occurs. {RoamSecurityType}
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ScanResult{ProgressiveScan}"
    enum="WiFiScanResult" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric describing, for a WiFi scan attempt, what scan
    method is used and whether it ends in a connection. {ProgressiveScan}
  </summary>
  <token key="ProgressiveScan" variants="ProgressiveScan">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Network.Shill.WiFi.ScanTimeInEbusy" units="ms"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric describing, for a WiFi scan attempt, how many
    milliseconds were spent waiting to talk to the kernel/drivers.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.Security" enum="NetworkSecurityType"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric. The security setting for each successful WiFi
    connection.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.SecurityChange"
    enum="NetworkSecurityChange" expires_after="2026-12-31">
  <owner>andrzejo@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric for WiFi security changes. It is emitted every time
    a new BSSID is being added to a network, this network has already been
    connected before and configuration of this new BSSID causes network security
    to be changed in a non-trivial way - that is a downgrade or an upgrade that
    can cause split of an network into two services.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.ServiceErrors" enum="NetworkServiceError"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS connection manager service errors for wifi interface.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.SessionLength{RoamSecurityType}" units="ms"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric recording session length in milliseconds. This is
    recorded every time an uninterrupted session with a wireless access point is
    terminated. {RoamSecurityType}
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.SessionTagState.{Event}"
    enum="WiFiSessionTagState" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>druth@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS metric reporting the state of the &quot;session tag&quot; state
    machine that tags {Event} structured metrics events. The state of the
    session tag is emitted at the same time as the {Event} structured metric
    event is emitted. Details at go/cros-wifi-metrics-session-tag-dd.
  </summary>
  <token key="Event">
    <variant name="AuthenticationAttempt"/>
    <variant name="ConnectionAttempt"/>
    <variant name="ConnectionAttemptResult"/>
    <variant name="Disconnection"/>
  </token>
</histogram>

<histogram name="Network.Shill.Wifi.SignalAtDisconnect" units="negative dBm"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric indicating the negative of the dBm received signal
    strength recorded at the time of a WiFi disconnect.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.SignalStrength" units="negative dBm"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric indicating the negative of the dBm received signal
    strength recorded at the time a successful WiFi connection started.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.SupplicantAttempts" units="attempts"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Number of attempts required for a WiFi device to be established with WPA
    supplicant (shill retries on failure). This metric is reported either on
    success, reporting the number of attempts performed; or after repeated
    failures (currently 6), we give up and report an artificial maximum (10).

    Thus, a value of 10 means we aborted after repeated failures. Values of 1 to
    6 represent successful connections on the first to sixth try. Values of 7 to
    9 (which should not occur) represent successful connections after seven or
    more attempts (success reports are capped at 9).
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.TimeFromRekeyToFailureSeconds"
    units="seconds" expires_after="2026-12-31">
  <owner>billyzhao@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Time spent between network rekey attempt to connection failure. The metric
    timer starts when a rekey is initiated and stops once a connection failure
    is reported or another rekey is initiated. The metric is only reported if
    the timer is stopped by a connection failure within 180 seconds.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeResumeToReady" units="ms"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time from the resume event
    to the time when an 802.11 wireless network has configured its Layer 3
    state.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.TimeResumeToReadyHB" units="ms"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time from the resume event
    to the time when an 802.11 wireless network has configured its Layer 3 state
    if the AP associated to after resume is the same as the one before suspend,
    and the AP is on the 5GHz band.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.TimeResumeToReadyLB" units="ms"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time from the resume event
    to the time when an 802.11 wireless network has configured its Layer 3 state
    if the AP associated to after resume is the same as the one before suspend,
    and the AP is on the 2.4GHz band.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.TimeResumeToReadyUHB" units="ms"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time from the resume event
    to the time when an 802.11 wireless network has configured its Layer 3 state
    if the AP associated to after resume is the same as the one before suspend,
    and the AP is on the 6GHz band.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToConfig" units="ms"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to configure Layer 3
    state on an 802.11 wireless network (typically acquire a DHCP lease).
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToConnect{ProgressiveScan}" units="ms"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to connect to a WiFi
    Basic Service Set (which consists of the access point and associated
    stations on a particular WiFi channel for a specific network).
    {ProgressiveScan}
  </summary>
  <token key="ProgressiveScan" variants="ProgressiveScan">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToInitialize" units="ms"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to initialize an
    802.11 wireless device.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToJoin{ProgressiveScan}" units="ms"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to join (associate
    plus authenticate) an 802.11 wireless network. {ProgressiveScan}
  </summary>
  <token key="ProgressiveScan" variants="ProgressiveScan">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToOnline" units="ms"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to determine that an
    802.11 wireless network is online after configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToPortal" units="ms"
    expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to determine that an
    802.11 wireless network is in a captive portal after configuring Layer 3
    state.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToRedirectFound" units="ms"
    expires_after="2026-12-31">
  <owner>hugobenichi@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to determine that an
    802.11 wireless network is in a captive portal with a valid redirect URL
    after configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToScanAndConnect{ProgressiveScan}"
    units="ms" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time between the beginning
    of a WiFi scan (if the scan includes both a progressive scan and a full
    scan, the TimeToScanAndConnect starts with the first scan of the series) and
    the completion of a successful connection. {ProgressiveScan}
  </summary>
  <token key="ProgressiveScan" variants="ProgressiveScan">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToScan{ProgressiveScan}" units="ms"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric sampling the time to scan WiFi until a
    connection is found. {ProgressiveScan}
  </summary>
  <token key="ProgressiveScan" variants="ProgressiveScan">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Network.Shill.WiFi.TransmitBitrateMbps" units="Mbps"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric that tracks the transmit bitrate in Mbps
    for the wifi device when it is connected to a network. The bitrate is
    reported once every minute after the wifi connection is established.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.UnreliableLinkSignalStrength" units="units"
    expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network metric sampling the signal strength (0-100) of the wifi
    network when it becomes unreliable (experiencing multiple link failures in a
    short period of time).
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.UserInitiatedConnectionFailureReason"
    enum="ConnectionFailureReason" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric that tracks the reasons of failed
    user-initiated WiFi connection attempts. The result of the user-initiated
    WiFi connection attempts are being tracked by
    Network.Shill.WiFi.UserInitiatedConnectionResult.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.UserInitiatedConnectionResult"
    enum="ConnectionResult" expires_after="2026-12-31">
  <owner>kglund@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric that tracks the result of user-initiated
    WiFi connection attempts.
  </summary>
</histogram>

<histogram name="Network.Shill.{Technology}.DHCPv4ProvisionDurationMillis"
    units="ms" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted after a {Technology} connection has
    DHCPv4 provisioned, to track the duration from shill starts DHCPv4
    configuration until shill gets the DHCP configuration from the dhcpcd
    process.
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram name="Network.Shill.{Technology}.DHCPv4RenewRebind"
    enum="DHCPv4RenewRebind" expires_after="2026-12-31">
  <owner>chenzikai@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric that tracks the number of successful
    DHCPv4 Renew/Rebind events for {Technology}. The metric will be emitted once
    per DHCPv4 Renew/Rebind event in shill.
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram name="Network.Shill.{Technology}.IPType" enum="NetworkIPType"
    expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted after a {Technology} connection has
    been connected for 30 seconds, to track the IP type on this connection. Wait
    for 30 seconds because IPv4 and IPv6 configuration are usually provisioned
    at different time. Note that no metric will be emitted if the duration of
    the connection is shorter than 30 seconds.
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram name="Network.Shill.{Technology}.SLAACProvisionDurationMillis"
    units="ms" expires_after="2026-12-31">
  <owner>jiejiang@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network usage metric emitted after a {Technology} connection has
    SLAAC provisioned, to track the duration from shill requests the kernel to
    start SLAAC configuration until shill gets the first SLAAC address from the
    kernel.
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
</histogram>

<histogram
    name="Network.Shill.{Technology}.{DHCPProvisionReason}.DHCPv4ProvisionResult"
    enum="DHCPv4ProvisionResult" expires_after="2026-12-31">
  <owner>chenzikai@google.com</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    ChromeOS network performance metric that tracks the DHCPv4 provision result
    for {Technology} due to {DHCPProvisionReason}. The metric is emitted once
    the provisioning is done (either succeeded or failed).
  </summary>
  <token key="Technology" variants="PhysicalTechnology"/>
  <token key="DHCPProvisionReason" variants="DHCPProvisionReason"/>
</histogram>

<histogram name="Network.SyntheticResponse.IsHeaderConsistent" enum="Boolean"
    expires_after="2027-01-24">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-worker@google.com</owner>
  <summary>
    Records whether the committed response headers are consistent with the
    headers from the network when the service worker synthetic response is used.

    This is recorded in navigation, when the browser receives the response from
    the network, while committed the navigation with locally stored headers.
  </summary>
</histogram>

<histogram name="Network.TrafficCounters.{Technology}.AverageDailyDataUsage"
    units="MB" expires_after="2026-12-31">
  <owner>khegde@google.com</owner>
  <owner>cros-network-health-team@google.com</owner>
  <summary>
    Chrome metric emitted to store the average daily usage of technology
    {Technology} in megabytes. This metric is emitted once every time the
    TrafficCountersHandler class resets the data usage (automatically or
    manually) for this network.
  </summary>
  <token key="Technology">
    <variant name="Cellular"/>
    <variant name="WiFi"/>
  </token>
</histogram>

<histogram name="Network.TrafficCounters.{Technology}.DataUsageNoLastResetTime"
    units="MB" expires_after="2026-12-31">
  <owner>khegde@google.com</owner>
  <owner>cros-network-health-team@google.com</owner>
  <summary>
    Chrome metric emitted to store the data usage of technology {Technology}
    when the last reset time is not available. The metric is emitted once every
    time the TrafficCounterHandler class resets the data usage (automatically or
    manually) for this network and cannot obtain the last reset time to
    calculate the daily average data usage.
  </summary>
  <token key="Technology">
    <variant name="Cellular"/>
    <variant name="WiFi"/>
  </token>
</histogram>

<histogram name="Network.Wifi.Synced.Connection.FailureReason"
    enum="ConnectionFailureReason" expires_after="2027-06-01">
  <owner>crisrael@google.com</owner>
  <owner>jonmann@chromium.org</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    ChromeOS metric that tracks the failure reason for all connection attempts,
    manual or automatic, to Wi-Fi networks which were added from Chrome Sync.
  </summary>
</histogram>

<histogram name="Network.Wifi.Synced.Connection.Result" enum="BooleanSuccess"
    expires_after="2027-06-01">
  <owner>crisrael@google.com</owner>
  <owner>jonmann@chromium.org</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    ChromeOS metric that tracks the result of all connection attempts, manual or
    automatic, to Wi-Fi networks which were added from Chrome Sync.
  </summary>
</histogram>

<histogram name="Network.Wifi.Synced.Hidden.Fixed" units="networks"
    expires_after="2027-06-01">
  <owner>crisrael@google.com</owner>
  <owner>jonmann@chromium.org</owner>
  <owner>tnagel@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <owner>cros-privacy-core@google.com</owner>
  <summary>
    ChromeOS network metric tracking the count of synced networks that were
    fixed after getting saved to the device when out of range and marked as
    hidden. See b/178089463 for more details.
  </summary>
</histogram>

<histogram name="Network.Wifi.Synced.ManualConnection.FailureReason"
    enum="ConnectionFailureReason" expires_after="2027-06-01">
  <owner>crisrael@google.com</owner>
  <owner>jonmann@chromium.org</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    ChromeOS metric that tracks the failure reason for manual connection
    attempts to Wi-Fi networks which were added from Chrome Sync.
  </summary>
</histogram>

<histogram name="Network.Wifi.Synced.ManualConnection.Result"
    enum="BooleanSuccess" expires_after="2027-06-01">
  <owner>crisrael@google.com</owner>
  <owner>jonmann@chromium.org</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    ChromeOS metric that tracks the result of manual connection attempts to
    Wi-Fi networks which were added from Chrome Sync.
  </summary>
</histogram>

<histogram name="Network.Wifi.Synced.TotalCount" units="units"
    expires_after="2027-06-01">
  <owner>crisrael@google.com</owner>
  <owner>jonmann@chromium.org</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    ChromeOS metric that tracks the total number of Wi-Fi networks which are
    stored in Chrome Sync for the active user.
  </summary>
</histogram>

<histogram name="Network.Wifi.Synced.UpdateOperation.FailureReason"
    enum="ConnectionFailureReason" expires_after="2027-06-01">
  <owner>crisrael@google.com</owner>
  <owner>jonmann@chromium.org</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    ChromeOS metric that tracks the failure reason for update attempts to synced
    Wi-Fi networks. This includes create/modify/remove operations. Each retry is
    counted seperately.
  </summary>
</histogram>

<histogram
    name="Network.Wifi.Synced.UpdateOperation.GenerateLocalNetworkConfig.Result"
    enum="BooleanSuccess" expires_after="2027-06-01">
  <owner>crisrael@google.com</owner>
  <owner>jonmann@chromium.org</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    ChromeOS metric that tracks the success or failure to generate a local
    network config. Emitted on success and failure of add/update operations.
  </summary>
</histogram>

<histogram name="Network.Wifi.Synced.UpdateOperation.Result"
    enum="BooleanSuccess" expires_after="2027-06-01">
  <owner>crisrael@google.com</owner>
  <owner>jonmann@chromium.org</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    ChromeOS metric that tracks the result of update attempts to synced Wi-Fi
    networks. This includes create/modify/remove operations. failures are only
    recorded after all retries have been exhausted.
  </summary>
</histogram>

<histogram name="Network.Wifi.Synced.ZeroNetworksEligibleForSync.Reason"
    enum="NetworkEligibilityStatus" expires_after="2027-06-01">
  <owner>crisrael@google.com</owner>
  <owner>jonmann@chromium.org</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    ChromeOS metric logged for users who have the feature enabled but have zero
    networks eligible for sync. Tracks the reasons why none of the networks are
    eligible.
  </summary>
</histogram>

<histogram name="NetworkService.ConnectionAllowlist.Type"
    enum="ConnectionAllowlistType" expires_after="2027-02-14">
  <owner>averge@chromium.org</owner>
  <owner>mkwst@chromium.org</owner>
  <owner>shivanisha@chromium.org</owner>
  <owner>xiaochenzh@chromium.org</owner>
  <summary>
    Records the presence of parsed Connection-Allowlist and
    Connection-Allowlist-Report-Only headers. This is recorded when the network
    restrictions throttles are executed for either navigations or worker
    scripts, immediately before the allowlist takes effect.
  </summary>
</histogram>

<histogram name="NetworkService.CorsPreflightMethodAllowed"
    enum="NetworkServiceCorsPreflightMethodAllowed" expires_after="2023-06-18">
  <owner>hiroshige@chromium.org</owner>
  <owner>toyoshim@chromium.org</owner>
  <summary>
    Whether method or normalized method are allowed in CORS preflight request in
    PreflightResult::EnsureAllowedCrossOriginMethod(), to measure the impact of
    https://crbug.com/1228178.

    Logged for preflight requests that have method checked (i.e. those without
    errors before EnsureAllowedCrossOriginMethod).
  </summary>
</histogram>

<histogram
    name="NetworkService.CorsURLLoaderFactory.CreateLoaderAndStart2.Duration"
    units="microseconds" expires_after="2027-01-24">
  <owner>olivier@chromium.org</owner>
  <owner>cduvall@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Logs the time spent in CorsURLLoaderFactory::CreateLoaderAndStart.

    Logged on exiting the function. Subsampled to one out of one thousand times.

    Note that clients without high-resolution clocks will report 0 for very
    short times.
  </summary>
</histogram>

<histogram
    name="NetworkService.CorsURLLoaderFactory.CreateLoaderAndStart2.ThreadDuration"
    units="microseconds" expires_after="2025-09-10">
  <owner>olivier@chromium.org</owner>
  <owner>cduvall@chromium.org</owner>
  <summary>
    Logs the thread time spent in CorsURLLoaderFactory::CreateLoaderAndStart.

    Logged on exiting the function. Subsampled to one out of one thousand times.

    Note that clients without high-resolution clocks will report 0 for very
    short times.

    Only recorded on clients with thread tick support.
  </summary>
</histogram>

<histogram
    name="NetworkService.CorsURLLoaderFactory.IsOutermostMainFrameClamped"
    enum="Boolean" expires_after="2027-01-16">
  <owner>pmeenan@chromium.org</owner>
  <owner>src/services/network/OWNERS</owner>
  <summary>
    Recorded whenever a renderer request claims to originate from an outermost
    main frame while its browser-created URLLoaderFactory does not. The request
    value is clamped to the factory value. One known legitimate source is an
    initial empty document in an opener-retaining popup created by a subframe.
  </summary>
</histogram>

<histogram name="NetworkService.GrantAccessToDataPathError.{Directory}.Posix"
    enum="PopularOSErrno" expires_after="2026-01-22">
  <owner>ricea@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The system error code after a call to MaybeGrantAccessToDataPath() failed
    for directory '{Directory}'. Logged during instantiation of a new
    NetworkContext only on failure to grant access.

    Only logged for non-Windows platforms.
  </summary>
  <token key="Directory">
    <variant name="NoVarySearch" summary="No_Vary_Search"/>
    <variant name="SharedDictionary" summary="Shared Dictionary"/>
  </token>
</histogram>

<histogram name="NetworkService.GrantAccessToDataPathError.{Directory}.Windows"
    enum="WinGetLastError" expires_after="2026-08-23">
  <owner>ricea@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The system error code after a call to MaybeGrantAccessToDataPath() failed
    for directory '{Directory}'. Logged during instantiation of a new
    NetworkContext only on failure to grant access.

    Only logged on Windows.
  </summary>
  <token key="Directory">
    <variant name="NoVarySearch" summary="No_Vary_Search"/>
    <variant name="SharedDictionary" summary="Shared Dictionary"/>
  </token>
</histogram>

<histogram name="NetworkService.GrantSandboxResult"
    enum="NetworkServiceSandboxGrantResult" expires_after="2026-03-01">
  <owner>wfh@chromium.org</owner>
  <owner>mmenke@chromium.org</owner>
  <summary>
    The result of the attempt to grant the sandbox access to a network context
    data files, and migrate the data if a migration is requested. This is
    reported each time a network context instance is created on the network
    service, even when the sandbox is not enabled or no migration is requested.
  </summary>
</histogram>

<histogram name="NetworkService.NetworkLoaderCompletionTime2.{Source}"
    units="ms" expires_after="2027-01-10">
  <owner>hayato@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    The time taken to finish a network URLLoader to complete. A network
    URLLoader is a URLLoader that a CorsURLLoader used internally to load an
    HTTP response from the underlying layer. The underlying layer serves the
    response from either the disk cache backend or the network.

    This histogram is recorded for {Source}.
  </summary>
  <token key="Source">
    <variant name="DiskCache"/>
    <variant name="Network"/>
  </token>
</histogram>

<histogram
    name="NetworkService.NetworkLoaderCompletionTime2.{Source}.{Priority}"
    units="ms" expires_after="2027-01-31">
  <owner>hayato@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    The time taken to finish a network URLLoader to complete. A network
    URLLoader is a URLLoader that a CorsURLLoader used internally to load an
    HTTP response from the underlying layer. The underlying layer serves the
    response from either the disk cache backend or the network.

    This histogram is recorded for requests of {Priority} priority served from
    {Source}.
  </summary>
  <token key="Source">
    <variant name="DiskCache"/>
    <variant name="Network"/>
  </token>
  <token key="Priority" variants="RequestPriority"/>
</histogram>

<histogram name="NetworkService.ParsedHeaders.IPCHandleTime"
    units="microseconds" expires_after="2026-12-16">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records the elapsed time for pupulating parsed headers in the network
    service's ParseHeaders() IPC call.

    Note: The metrics is reported from all clients. Some of clients may not have
    high resolution timer that can send metrics with microseconds precision.
  </summary>
</histogram>

<histogram
    name="NetworkService.PrefetchMatchingURLLoaderFactory.QueueTime.CreateLoaderAndStart.{FrameType}"
    units="ms" expires_after="2027-08-11">
  <owner>nafisabedin@google.com</owner>
  <owner>clank-performance-team@google.com</owner>
  <summary>
    Measures the amount of time the task to run CreateLoaderAndStart was queued
    for a {FrameType} before running. Logged every time CreateLoaderAndStart is
    run in PrefetchMatchingURLLoaderFactory with a valid queue time.
  </summary>
  <token key="FrameType">
    <variant name="MainFrame" summary="main frame"/>
    <variant name="Subframe" summary="subframe"/>
  </token>
</histogram>

<histogram
    name="NetworkService.Scheduler.IOThread.NumberOfPendingTasks.{QueueName}Queue"
    units="count" expires_after="2027-01-10">
  <owner>hayato@chromium.org</owner>
  <owner>net-dev@chromium.org</owner>
  <summary>
    Records the number of pending tasks in {QueueName}Queue of
    NetworkServiceScheduler. Recorded with 0.001 probability when a task
    scheduled on the IO thread starts.
  </summary>
  <token key="QueueName" variants="QueueName"/>
</histogram>

<histogram
    name="NetworkService.Scheduler.IOThread.QueuingTime.{QueueName}Queue"
    units="ms" expires_after="2027-01-10">
  <owner>hayato@chromium.org</owner>
  <owner>net-dev@chromium.org</owner>
  <summary>
    Records the queuing time (from post to start processing) of a task posted to
    {QueueName}Queue of NetworkServiceScheduler. Recorded with 0.001 probability
    when a task scheduled on the IO thread starts.
  </summary>
  <token key="QueueName" variants="QueueName"/>
</histogram>

<histogram name="NetworkService.Scheduler.IOThread.TaskOffCpuDuration"
    units="ms" expires_after="2026-12-01">
  <owner>hayato@chromium.org</owner>
  <owner>net-dev@chromium.org</owner>
  <summary>
    Records the duration spent off-CPU by tasks running on the Network Service
    IO thread. Recorded with 0.001 probability when a task scheduled on the IO
    thread finishes running.
  </summary>
</histogram>

<histogram name="NetworkService.Scheduler.IOThread.TaskOnCpuDuration"
    units="ms" expires_after="2026-12-01">
  <owner>hayato@chromium.org</owner>
  <owner>net-dev@chromium.org</owner>
  <summary>
    Records the duration spent on-CPU by tasks running on the Network Service IO
    Thread. Recorded with 0.001 probability when a task scheduled on the IO
    thread finishes running.
  </summary>
</histogram>

<histogram name="NetworkService.Scheduler.IOThread.TaskOnCpuPercentage"
    units="%" expires_after="2026-12-01">
  <owner>hayato@chromium.org</owner>
  <owner>net-dev@chromium.org</owner>
  <summary>
    Records the percentage of wall time spent on-CPU by tasks running on the
    Network Service IO Thread. Recorded with 0.001 probability when a task
    scheduled on the IO thread finishes running.
  </summary>
</histogram>

<histogram name="NetworkService.SecCHHeaderSize" units="bytes"
    expires_after="2027-02-07">
  <owner>toyoshim@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The size of Sec-CH-* headers in bytes. Recorded when validating
    renderer-initiated requests in the Network Service. This helps monitor the
    impact of size limits imposed to protect the IPC boundary.
  </summary>
</histogram>

<histogram name="NetworkService.SecSpeculationTagsHeaderSize" units="bytes"
    expires_after="2027-02-07">
  <owner>toyoshim@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The size of Sec-Speculation-Tags headers in bytes. Recorded when validating
    renderer-initiated requests in the Network Service. This helps monitor the
    impact of size limits imposed to protect the IPC boundary.
  </summary>
</histogram>

<histogram name="NetworkService.SlopBucket.ChunkAllocationFailedReason"
    enum="SlopBucketChunkAllocationFailedReason" expires_after="2026-09-06">
  <owner>ricea@chromium.org</owner>
  <owner>yoichio@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    The first reason why the chunk allocation for a request was blocked.
    Recorded once per request that made use of SlopBucket, when it is completed.
  </summary>
</histogram>

<histogram name="NetworkService.SlopBucket.DisabledReason"
    enum="SlopBucketDisabledReason" expires_after="2026-07-05">
  <owner>ricea@chromium.org</owner>
  <owner>yoichio@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    The reason why slop bucket is disabled, if it has been disabled. Is not
    recorded when SlopBucket is disabled by feature setting. Recorded when
    SlopBucket is first needed, and at most once every 24 hours afterwards. Also
    recorded immediately if SlopBucket is disabled due to memory pressure.

    Warning: this histogram was expired from 2024-10-23 to 2025-06-24; data may
    be missing.
  </summary>
</histogram>

<histogram name="NetworkService.SlopBucket.PeakChunksAllocated" units="chunks"
    expires_after="2026-09-06">
  <owner>ricea@chromium.org</owner>
  <owner>yoichio@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    The peak number of chunks allocated for a request. Recorded once per request
    that made use of SlopBucket, when it is completed.

    Warning: this histogram was expired from 2024-10-23 to 2025-06-24; data may
    be missing.
  </summary>
</histogram>

<histogram name="NetworkService.SlopBucket.RequestedPriority"
    enum="NetRequestPriority" expires_after="2026-09-06">
  <owner>ricea@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    The priority of all requests passed to SlopBucket::RequestSlopBucket() while
    it is enabled. By default, requests with a priority lower than MEDIUM will
    not receive a SlopBucket, but they are still recorded here. Recorded once
    per request that attempts to make use of SlopBucket, ie. it filled up its
    mojo pipe and SlopBucket was enabled.

    Warning: this histogram was expired from 2024-10-23 to 2025-06-24; data may
    be missing.
  </summary>
</histogram>

<histogram name="NetworkService.TimeToFirstCreateNetworkContext" units="ms"
    expires_after="2027-02-21">
  <owner>horo@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    The time taken from NetworkService creation to the first
    CreateNetworkContext call. Recorded once per NetworkService initialization.
  </summary>
</histogram>

<histogram name="NetworkService.TimeToGrantCacheAccess" units="ms"
    expires_after="2026-07-05">
  <owner>wfh@chromium.org</owner>
  <owner>mmenke@chromium.org</owner>
  <summary>
    The time taken to permit the sandbox access to the cache directory during
    network context initialization. This is recorded each time a network context
    is created with a valid disk cache specified. This histogram is platform
    dependent so values from different platforms cannot be directly compared. On
    Windows, this records the amount of time taken to set the filesystem ACLs to
    allow the sandbox access to the cache directory.
  </summary>
</histogram>

<histogram name="NetworkService.TimeToGrantDataAccess" units="ms"
    expires_after="2026-07-05">
  <owner>wfh@chromium.org</owner>
  <owner>mmenke@chromium.org</owner>
  <summary>
    The time taken to permit the sandbox access to the data directory during
    network context initialization. This is recorded each time a network context
    is created with a valid set of NetworkContextFilePaths with
    unsandboxed_data_path specified indicating it could be sandboxed. This
    histogram is platform dependent so values from different platforms cannot be
    directly compared. On Windows, this records the amount of time taken to set
    the filesystem ACLs to allow the sandbox access to the data directory.

    Warning: this histogram was expired from 2023-10-08 to 2024-01-02; data may
    be missing.
  </summary>
</histogram>

<histogram name="NetworkService.TimeToGrantSharedDictionaryAccess" units="ms"
    expires_after="2026-08-30">
  <owner>pmeenan@chromium.org</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    The time taken to permit the sandbox access to the shared dictionary
    directory during network context initialization. This is recorded each time
    a network context is created with a valid shared dictionary directory
    specified. This histogram is platform dependent so values from different
    platforms cannot be directly compared. On Windows, this records the amount
    of time taken to set the filesystem ACLs to allow the sandbox access to the
    cache directory.
  </summary>
</histogram>

<histogram name="NetworkService.TimeToMigrateData" units="ms"
    expires_after="2026-03-01">
  <owner>wfh@chromium.org</owner>
  <owner>mmenke@chromium.org</owner>
  <summary>
    The time taken to copy the network context data files from the unsandboxed
    data path to the new sandbox data path. This is recorded each time an
    unmigrated network context is created with a valid set of data file paths,
    an unsandboxed_data_path to migrate from, and trigger_migration specified.
    This could include several logs from the same client for the same network
    context if the migration fails, since this is reported each time the
    migration is attempted.
  </summary>
</histogram>

<histogram name="NetworkTime.EstimatedTimeUncertainty" units="ms"
    expires_after="2027-05-20">
  <owner>rogerm@chromium.org</owner>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The uncertainty of the estimated network time, recorded when the current
    network time is estimated based on a previous network time synchronization.
    The uncertainty is calculated based on the uncertainty inherent in the
    previous network time update and any skew detected between the local wall
    and tick clocks since that update.
  </summary>
</histogram>

<histogram name="NetworkTime.NetworkTimeUncertainty" units="ms"
    expires_after="2027-05-20">
  <owner>rogerm@chromium.org</owner>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The uncertainty of the network time, recorded when the network time is
    successfully synchronized. The uncertainty is calculated based on the
    resolution of the time source, the latency of the query, and the resolution
    of the local tick clock. This is the uncertainty in the data which will
    later be used to estimate/calculate network time.
  </summary>
</histogram>

</histograms>

</histogram-configuration>
