chromium/tools/metrics/histograms/metadata/network/histograms.xml

<!--
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
[email protected].
-->

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

<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="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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.ApnTypes"
    enum="ApnTypes" expires_after="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Records the result of an attempt to create a custom APN.</summary>
</histogram>

<histogram
    name="Network.Ash.Cellular.Apn.CreateExclusivelyEnabledCustomApn.ApnTypes"
    enum="ApnTypes" expires_after="2025-08-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-08-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-08-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-08-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Records the result of an attempt to enable a custom APN.</summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.Login.AllowApnModification"
    enum="BooleanSuccess" expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Tracks the state of AllowApnModification policy at login.</summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.Managed.MigrationType"
    enum="ManagedApnMigrationType" expires_after="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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.ApnTypes"
    enum="ApnTypes" expires_after="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Records the result of an attempt to modify a custom APN.</summary>
</histogram>

<histogram name="Network.Ash.Cellular.Apn.RemoveCustomApn.ApnTypes"
    enum="ApnTypes" expires_after="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-08-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Emitted whenever client queries the WiFi Direct capabilities.
  </summary>
</histogram>

<histogram name="Network.Ash.WiFiDirect.Connection.Duration" units="ms"
    expires_after="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.CaptivePortalResult" enum="CaptivePortalNetworkState"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-05-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-05-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-05-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-05-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Emitted on every notification received from FCM service.</summary>
</histogram>

<histogram name="Network.Cellular.CarrierLock.Initialization.{Trigger}"
    units="count" expires_after="2025-05-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-05-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-05-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Emitted each time the modem was successfully configured.</summary>
</histogram>

<histogram
    name="Network.Cellular.CarrierLock.NumConsecutiveConfigurationFailures"
    units="count" expires_after="2025-05-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-05-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Emitted each time lock configuration was downloaded from Provisioning
    server.
  </summary>
</histogram>

<histogram name="Network.Cellular.CarrierLock.PsmClaimResponse"
    enum="CellularCarrierLockPsmResult" expires_after="2025-05-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Emitted each time PSM service was requested about device membership.
  </summary>
</histogram>

<histogram name="Network.Cellular.CarrierLock.{ConsecutiveFailuresType}"
    units="count" expires_after="2025-05-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Tracks the rate of success of setting a profile nickname.</summary>
</histogram>

<histogram name="Network.Cellular.ESim.ProfileUninstallationResult"
    enum="BooleanSuccess" expires_after="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Tracks the rate of success of uninstalling a profile.</summary>
</histogram>

<histogram name="Network.Cellular.ESim.RequestPendingProfiles.Latency"
    units="ms" expires_after="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the latency of call to SMDS server. This is emitted when pending eSIM
    profiles are requested. 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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.DnsProxy.DnsOverHttpsMode"
    enum="DnsProxy.DnsOverHttpsMode" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.QueryResult" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.Mdns.{ServiceType}" enum="MdnsQueryType"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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"/>
  </token>
</histogram>

<histogram name="Network.Multicast.ARC.ActiveTime" units="%"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of Chrome portal detection attempts per network connection on
    ChromeOS.
  </summary>
</histogram>

<histogram name="Network.NetworkPortalDetectorState" enum="NetworkPortalState"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The PortalState result of Chrome portal detection when completed.
  </summary>
</histogram>

<histogram name="Network.NetworkPortalDetectorType" enum="NetworkTechnology"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.RedirectFoundToOnlineTime" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-06">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram name="Network.SharedDictionary.EncodingType"
    enum="SharedDictionaryEncodingType" expires_after="2025-02-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For each shared dictionary network transaction, record the encoding type.
  </summary>
</histogram>

<histogram name="Network.Shill.CAPPORT.ContainsBytesRemaining"
    enum="BooleanSuccess" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-05-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.Ethernet.DevicePresenceStatus"
    enum="BooleanPresent" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Origin of a Passpoint profile successfully provisioned in shill.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.ProvisioningResult"
    enum="PasspointProvisioningResult" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Result of a Passpoint profile provisioning operation in shill.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.RemovalResult"
    enum="PasspointRemovalResult" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Result of a Passpoint profile removal operation in shill.</summary>
</histogram>

<histogram name="Network.Shill.WiFi.Passpoint.RequiredHomeOis" units="count"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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" units="units"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.RememberedUserNetworkCount" units="units"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram base="true" name="Network.Shill.WiFi.RoamComplete"
    enum="WiFiRoamComplete" expires_after="2024-12-31">
<!-- Name completed by histogram_suffixes name="RoamSecurityType" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram base="true" name="Network.Shill.WiFi.RoamTime" units="ms"
    expires_after="2024-12-31">
<!-- Name completed by histogram_suffixes name="RoamSecurityType" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ScanResult" enum="WiFiScanResult"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    ChromeOS network usage metric describing, for a WiFi scan attempt, what scan
    method is used and whether it ends in a connection.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ScanTimeInEbusy" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    ChromeOS connection manager service errors for wifi interface.
  </summary>
</histogram>

<histogram base="true" name="Network.Shill.WiFi.SessionLength" units="ms"
    expires_after="2024-12-31">
<!-- Name completed by histogram_suffixes name="RoamSecurityType" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.SessionTagState.{Event}"
    enum="WiFiSessionTagState" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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).
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToInitialize" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    ChromeOS network performance metric sampling the time to initialize an
    802.11 wireless device.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToJoin" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    ChromeOS network performance metric sampling the time to join (associate
    plus authenticate) an 802.11 wireless network.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToOnline" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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.TimeToScan" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    ChromeOS network performance metric sampling the time to scan WiFi until a
    connection is found.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToScanAndConnect" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.TransmitBitrateMbps" units="Mbps"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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}.IPType" enum="NetworkIPType"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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.TrafficCounters.{Technology}.AverageDailyDataUsage"
    units="MB" expires_after="2025-06-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-06-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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.AwIpProtection.TokenBatchRequestTime"
    units="ms" expires_after="2025-01-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Records the elapsed time for successful requests by IpProtectionConfigGetter
    for blind-signed tokens from BSA.

    This metric only measures part of the Android WebView specific blind-signing
    implementation and does not encompass the full token batch generation
    process.
  </summary>
</histogram>

<histogram name="NetworkService.AwIpProtection.TryGetAuthTokensResult"
    enum="AwIpProtectionTokenBatchRequestResult" expires_after="2025-01-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    The result of handling a request by the network service to the Android
    WebView's browser logic for a batch of blind-signed auth tokens. This is
    recorded per request attempt. Retries may result in multiple logs for the
    same request.
  </summary>
</histogram>

<histogram name="NetworkService.CorsPreflightMethodAllowed"
    enum="NetworkServiceCorsPreflightMethodAllowed" expires_after="2023-06-18">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.DeletedOldCacheData" enum="Boolean"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports whether or not any old cache data was found and deleted from the
    http_cache_path when creating a network context within the network service.
    This is reported each time a network context is created in the network
    service with a valid http_cache_path and http_cache_enabled is set to true.

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

<histogram name="NetworkService.GrantSandboxResult"
    enum="NetworkServiceSandboxGrantResult" expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.IpProtection.AndroidAuthClient.AuthAndSignTime"
    units="ms" expires_after="2025-02-22">
  <owner>[email protected]</owner>
  <owner>src/android_webview/browser/ip_protection/OWNERS</owner>
  <summary>
    Records the time taken to perform a successful AuthAndSign request via the
    Android auth client/service. The timer begins when the request is passed
    onto the auth client, and thus does not include any time for which requests
    are queued waiting for an auth client to be created.

    This histogram applies only to WebView and will only be emitted if the
    MaskedDomainList and EnableIpPrivacyProxy features are enabled. The
    system-provided auth service must also be accessible and able to service
    requests successfully. The histogram is emitted during auth token
    generation, which may happen multiple times during a session.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.AndroidAuthClient.CreationTime"
    units="ms" expires_after="2025-02-22">
  <owner>[email protected]</owner>
  <owner>src/android_webview/browser/ip_protection/OWNERS</owner>
  <summary>
    Records the time taken to create an Android IP Protection auth client,
    including binding to the system-provided auth service. Measured between
    BlindSignMessageAndroidImpl::CreateIpProtectionAuthClient and
    BlindSignMessageAndroidImpl::OnCreateIpProtectionAuthClientComplete.

    This histogram applies only to WebView and will only be emitted if the
    MaskedDomainList and EnableIpPrivacyProxy features are enabled. The
    system-provided auth service must also be accessible, but not necessarily
    able to service requests successfully. The histogram is typically emitted
    only once for the first auth token generation workflow, but may happen
    multiple times in the case of serious service-related errors.
  </summary>
</histogram>

<histogram
    name="NetworkService.IpProtection.AndroidAuthClient.GetInitialDataTime"
    units="ms" expires_after="2025-02-22">
  <owner>[email protected]</owner>
  <owner>src/android_webview/browser/ip_protection/OWNERS</owner>
  <summary>
    Records the time taken to perform a successful GetInitialData request via
    the Android auth client/service. The timer begins when the request is passed
    onto the auth client, and thus does not include any time for which requests
    are queued waiting for an auth client to be created.

    This histogram applies only to WebView and will only be emitted if the
    MaskedDomainList and EnableIpPrivacyProxy features are enabled. The
    system-provided auth service must also be accessible and able to service
    requests successfully. The histogram is emitted during auth token
    generation, which may happen multiple times during a session.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.AreAuthTokensAvailable"
    enum="BooleanSuccess" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    The result of a call to `IpProtectionConfigCache::AreAuthTokensAvailable()`
    when `NetworkServiceProxyDelegate::OnResolveProxy()` is determining if the
    request is eligible for IP Protection. If this fails, tokens were not
    available in all token caches and the request will bypass the IP Protection
    proxy.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.EmptyTokenCache"
    enum="IpProtectionProxyLayer" expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Records which token cache (if any) was empty when calling
    `IpProtectionConfigCache::AreAuthTokensAvailable()`.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.GeoChangeTokenPresence"
    enum="BooleanAvailable" expires_after="2025-02-09">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    This histogram is emitted to when changing to a new geo, and tracks whether
    the token cache already contains tokens for the new geo.

    `IpProtectionConfigCache::SetCurrentGeo(geo_id)` is called when a geo is
    observed in the `IpProtectionProxyListManager` or
    `IpProtectionTokenCacheManager`. This metric is useful to help understand if
    token caching by geo is useful in providing tokens for when a geo shifts
    back to a previous geo that is contained within the cache.

    If the value is `Available`, it means that when the geo change was observed,
    the token cache contained some number of tokens for the new geo from a
    previous refill.

    If the value is `Not Available`, it means that the a new geo was observed,
    but there was no tokens already in the cache that matched this new geo.

    This histogram will only be emitted to if the MaskedDomainList and
    EnableIpPrivacyProxy features are enabled, the IpPrivacyCacheTokensByGeo
    feature parameter is enabled, and a platform-dependent sign-in is complete.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.GetAuthTokenResult"
    enum="BooleanSuccess" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    The result of a call to `IpProtectionConfigCache::GetAuthToken()`, which
    will not happen unless `IpProtectionConfigCache::AreAuthTokensAvailable()`
    is true. If this fails, it is because the cache was empty when a new
    connection to a proxy was initiated.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.GetAuthTokenResultForGeo"
    enum="IpProtectionGetAuthTokenResultForGeo" expires_after="2025-02-09">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    This metric tracks the effectiveness of token caching in IpProtection,
    especially during network transitions or non-ideal conditions. It records
    the outcome of `IpProtectionConfigCache::GetAuthToken()` requests, focusing
    on token availability and its alignment with the current or a previously
    cached geographical location. The four possible outcomes indicate successful
    token retrieval (for current or other geo), or unavailability with or
    without other cached tokens. This metric is only measured when geo caching
    is enabled.

    This histogram will only be emitted if the MaskedDomainList and
    EnableIpPrivacyProxy features are enabled as well as the feature parameter,
    IpPrivacyCacheTokensByGeo. Some kind of platform-dependent signin is also
    required.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.GetProxyListResult"
    enum="IpProtectionGetProxyListResult" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Whether a call to `IpProtectionConfigCache::GetProxyList()` resulted in
    obtaining a proxy list. This is measured in
    `IpProtectionProxyListManagerImpl::OnGotProxyList`.

    If a proxy list was obtained, this histogram also records whether it had at
    least one valid entry. (It is possible to obtain an empty list from the
    server, or the list from the server could contain only invalid entries that
    are rejected by the client.)

    This histogram will only be emitted if the MaskedDomainList and
    EnableIpPrivacyProxy features are enabled. Some kind of platform-dependent
    signin is also required.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.IsProxyListAvailable"
    enum="BooleanAvailable" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    The result of a call to `IpProtectionConfigCache::IsProxyListAvailable()`
    when `NetworkServiceProxyDelegate::OnResolveProxy()` is determining if the
    request is eligible for IP Protection. If this fails, the proxy list was not
    available and the request will not be routed via any IP Protection proxy.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.OAuthTokenFetchTime" units="ms"
    expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Records the elapsed time for successful requests by IpProtectionConfigGetter
    for an OAuth token.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.ProtectionIsAvailableForRequest"
    enum="BooleanAvailable" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Whether IP Protection was considered available at the time
    IpProtectionProxyDelegate::OnResolveProxy identified an IP
    Protection-eligible request.

    The reasons for why protection is unavailable are not captured by this
    histogram and are instead each measured in independent histograms.

    This histogram can only be emitted if both the MaskedDomainList and
    EnableIpPrivacyProxy features are enabled.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.ProxyAllowList.UpdateProcessTime"
    units="ms" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Records the time it takes to update the MaskedDomainListManager with the
    contents of the Masked Domain List after the Network Service receives an
    update from Component Updater.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.ProxyAllowList.UpdateSuccess"
    enum="BooleanSuccess" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Records the result of an attempt to update the MaskedDomainListManager with
    the contents of the Masked Domain List when it is received from Component
    Updater.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.ProxyChainFallback"
    enum="IpProtectionProxyChainId" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Logged when a proxy chain failure is detected in the proxy delegate's
    `OnFallback` method, with values defined by the `chain_id` value given in
    the GetProxyInfo RPC response.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.ProxyListRefreshTime" units="ms"
    expires_after="2025-01-02">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Time taken to successfully refresh the IP Protection proxy list, measured
    from IpProtectionProxyListManagerImpl::RefreshProxyList to
    IpProtectionProxyListManagerImpl::OnGotProxyList.

    A successful refresh is anything where OnGotProxyList receives a non-nullopt
    proxy_list, which may include cases where an empty proxy list or a proxy
    list with only unsuitable entries was fetched over the network. Outright
    failures and refreshes which were inhibited due to client-side rate limiting
    will not be measured.

    This histogram will only be emitted if the MaskedDomainList and
    EnableIpPrivacyProxy features are enabled. Some kind of platform-dependent
    signin is also required.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.RequestIsEligibleForProtection"
    enum="IpProtectionEligibility" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Whether IpProtectionProxyDelegate::OnResolveProxy determined that a request
    is eligible for IP Protection, meaning it has matched the network service
    proxy allowlist (Masked Domain List) and doesn't have an exemption. This
    histogram also records when the allowlist isn't sufficiently set up to
    determine eligibility, and the eligibility is therefore unknown.

    The reasons for why the network service proxy allowlist may not be ready are
    not captured by this histogram. The lack of a Masked Domain List is only one
    possible reason, whilst an inconclusive bypass policy could be another. Such
    failure cases should probably be measured via separate histograms as
    necessary.

    The code path which emits this histogram is only reached if the
    MaskedDomainList feature is enabled.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.TokenBatchGenerationTime"
    units="ms" expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Records the time taken for a successful attempt to generate auth tokens.
    This only measures the time across a single attempt (not across retries,
    which may be delayed by a variable backoff).

    This measures the whole token batch generation process, from an
    IpProtectionTokenCacheManagerImpl's perspective, from just before calling
    IpProtectionConfigGetter::TryGetAuthTokens until OnGotAuthTokens. Note that
    if OnGotAuthTokens receives a non-nullopt but empty vector of tokens this is
    considered a success by this metric.

    Note that if multiple token caches exist (one for each proxy layer), the
    attempts in each token cache are timed independently, but they will all feed
    into the same histogram.

    This histogram will only be emitted if the MaskedDomainList and
    EnableIpPrivacyProxy features are enabled. Some kind of platform-dependent
    signin is also required.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.TokenBatchRequestTime" units="ms"
    expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Records the elapsed time for successful requests by IpProtectionConfigGetter
    for blind-signed tokens from BSA.

    This metric only measures part of the Chrome-specific blind-signing
    implementation and does not encompass the full token batch generation
    process. See NetworkService.IpProtection.TokenBatchGenerationTime for a
    generic measurement of the full token batch generation process.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.TryGetAuthTokensResult"
    enum="IpProtectionTokenBatchRequestResult" expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    The result of handling a request by the network process to the browser
    process for a batch of blind-signed auth tokens.
  </summary>
</histogram>

<histogram name="NetworkService.IpProtection.{ProxyLayer}.TokenExpirationRate"
    units="tokens" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Number of auth tokens for {ProxyLayer} that expired before they were used,
    as a rate per hour, up to 100,000. This value is measured approximately
    every 5 minutes.
  </summary>
  <token key="ProxyLayer">
    <variant name="ProxyA"/>
    <variant name="ProxyB"/>
  </token>
</histogram>

<histogram name="NetworkService.IpProtection.{ProxyLayer}.TokenSpendRate"
    units="tokens" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Number of auth tokens spent for {ProxyLayer}, as a rate per hour, up to
    1000. This value is measured approximately every 5 minutes.
  </summary>
  <token key="ProxyLayer">
    <variant name="ProxyA"/>
    <variant name="ProxyB"/>
  </token>
</histogram>

<histogram
    name="NetworkService.MaskedDomainList.NetworkServiceProxyAllowList.EstimatedMemoryUsageInKB"
    units="KB" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Records the estimated memory usage of the MaskedDomainListManager every time
    the Masked Domain List is updated.
  </summary>
</histogram>

<histogram name="NetworkService.MaskedDomainList.SizeInKB" units="KB"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Record the size of the Masked Domain List proto in KB. Emitted when the raw
    proto bytes are received from Component Updater and parsed.
  </summary>
</histogram>

<histogram name="NetworkService.NetworkLoaderCompletionTime2.{Source}"
    units="ms" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.SlopBucket.DisabledReason"
    enum="SlopBucketDisabledReason" expires_after="2024-10-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram name="NetworkService.SlopBucket.PeakChunksAllocated" units="chunks"
    expires_after="2024-10-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The peak number of chunks allocated for a request. Recorded once per request
    that made use of SlopBucket, when it is completed.
  </summary>
</histogram>

<histogram name="NetworkService.SlopBucket.RequestedPriority"
    enum="NetRequestPriority" expires_after="2024-10-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram name="NetworkService.TimeToGrantCacheAccess" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</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="2024-03-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="NetworkService.URLLoaderFactory.UpdateLoadInfo" units="ms"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it takes for each invocation of URLLoaderFactory.UpdateLoadInfo.

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

</histograms>

</histogram-configuration>