chromium/tools/metrics/histograms/metadata/net/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 Net 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="DnsOverHttpsSecure">
  <variant name="Insecure" summary="DoH is not enabled"/>
  <variant name="Secure" summary="DoH is enabled"/>
</variants>

<variants name="DnsResolveTimeDiffBucket">
  <variant name="FirstRecord10msTo25ms"
      summary="between 10ms (inclusive) and 25ms (exclusive)"/>
  <variant name="FirstRecord25msTo50ms"
      summary="between 25ms (inclusive) and 50ms (exclusive)"/>
  <variant name="FirstRecord50msTo100ms"
      summary="between 50ms (inclusive) and 100ms (exclusive)"/>
  <variant name="FirstRecord100msTo250ms"
      summary="between 100ms (inclusive) and 250ms (exclusive)"/>
  <variant name="FirstRecord250msTo500ms"
      summary="between 250ms (inclusive) and 500ms (exclusive)"/>
  <variant name="FirstRecord500msTo1s"
      summary="between 500ms (inclusive) and 1s (exclusive)"/>
  <variant name="FirstRecordFasterThan10ms" summary="less than 10ms"/>
  <variant name="FirstRecordSlowerThan1s" summary="more than or equal to 1s"/>
</variants>

<variants name="NetworkTransactionBlockedHostType">
  <variant name=""/>
  <variant name="GoogleHost"/>
</variants>

<variants name="NetworkTransactionBlockedProtocol">
  <variant name="H1"/>
  <variant name="H2"/>
  <variant name="H3"/>
  <variant name="Unknown"/>
</variants>

<variants name="SuccessOrFailure">
  <variant name="Failure" summary="Operation failed"/>
  <variant name="Success" summary="Operation succeeded"/>
</variants>

<variants name="URLLoaderThrottleStages">
  <variant name="BeforeWillProcessResponse"/>
  <variant name="WillOnCompleteWithError"/>
  <variant name="WillProcessResponse"/>
  <variant name="WillRedirectRequest"/>
  <variant name="WillStartRequest"/>
</variants>

<variants name="WillProcessResponseThrottleNames">
  <variant name="MimeSniffingThrottle"/>
  <variant name="SafeBrowsingBrowserThrottle"/>
  <variant name="SafeBrowsingRendererThrottle"/>
</variants>

<variants name="WillStartRequestThrottleNames">
  <variant name="FrameRequestBlockerThrottle"/>
  <variant name="PrerenderThrottle"/>
  <variant name="SubresourceRedirectThrottle"/>
</variants>

<histogram name="Crypto.TPMDuration.Virtual.{Operation}{SignatureAlgorithm}"
    units="ms" expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Collected on Windows at startup. Records status for various virtual TPM
    operations that Chrome artificially triggers on startup for measurement
    purposes. Note that if new key creation fails, wrapped key creation and
    message signing will not take place.
  </summary>
  <token key="Operation">
    <variant name="MessageSigning"/>
    <variant name="NewKeyCreation"/>
    <variant name="WrappedKeyCreation"/>
  </token>
  <token key="SignatureAlgorithm">
    <variant name="ECDSA"/>
    <variant name="RSA"/>
  </token>
</histogram>

<histogram name="Crypto.TPMDuration.{Operation}{SignatureAlgorithm}" units="ms"
    expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Collected on Windows at startup. Records status for various TPM operations
    that Chrome artificially triggers on startup for measurement purposes. Note
    that if new key creation fails, wrapped key creation and message signing
    will not take place.
  </summary>
  <token key="Operation">
    <variant name="MessageSigning"/>
    <variant name="NewKeyCreation"/>
    <variant name="WrappedKeyCreation"/>
  </token>
  <token key="SignatureAlgorithm">
    <variant name="ECDSA"/>
    <variant name="RSA"/>
  </token>
</histogram>

<histogram name="Crypto.TpmError.VirtualCreateKey" units="win32 error code"
    expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Error code returned by NCryptCreatePersistedKey. One of the error codes from
    https://learn.microsoft.com/en-us/windows/win32/com/com-error-codes-4.
  </summary>
</histogram>

<histogram name="Crypto.TpmError.VirtualFinalizeKey" units="win32 error code"
    expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Error code returned by NCryptFinalizeKey. One of the error codes from
    https://learn.microsoft.com/en-us/windows/win32/com/com-error-codes-4.
  </summary>
</histogram>

<histogram name="Crypto.TpmError.VirtualOpenKey" units="win32 error code"
    expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Error code returned by NCryptOpenKey. One of the error codes from
    https://learn.microsoft.com/en-us/windows/win32/com/com-error-codes-4.
  </summary>
</histogram>

<histogram name="Crypto.TpmError.VirtualOpenStorage" units="win32 error code"
    expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Error code returned by NCryptOpenStorageProvider. One of the error codes
    from https://learn.microsoft.com/en-us/windows/win32/com/com-error-codes-4.
  </summary>
</histogram>

<histogram name="Crypto.TPMOperation.Virtual.{Operation}{SignatureAlgorithm}"
    enum="BooleanSuccess" expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Collected on Windows at startup. Records status for various virtual TPM
    actions that Chrome artificially triggers on startup for measurement
    purposes. Note that if new key creation fails, wrapped key creation and
    message signing will not take place.
  </summary>
  <token key="Operation">
    <variant name="MessageSigning"/>
    <variant name="MessageVerify"/>
    <variant name="NewKeyCreation"/>
    <variant name="WrappedKeyCreation"/>
  </token>
  <token key="SignatureAlgorithm">
    <variant name="ECDSA"/>
    <variant name="RSA"/>
  </token>
</histogram>

<histogram name="Crypto.TPMOperation.Win.{Operation}{SignatureAlgorithm}.Error"
    units="win32 error code" expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/crypto/OWNERS</owner>
  <summary>
    Collected on Windows when an operation failed while using a TPM-protected
    key. Represents the Win32 status returned by the API corresponding with that
    operation.
  </summary>
  <token key="Operation">
    <variant name="MessageSigning"/>
    <variant name="NewKeyCreation"/>
    <variant name="WrappedKeyCreation"/>
  </token>
  <token key="SignatureAlgorithm">
    <variant name="ECDSA"/>
    <variant name="RSA"/>
  </token>
</histogram>

<histogram name="Crypto.TPMOperation.{Operation}{SignatureAlgorithm}"
    enum="BooleanSuccess" expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Collected on Windows at startup. Records status for various TPM actions that
    Chrome artificially triggers on startup for measurement purposes. Note that
    if new key creation fails, wrapped key creation and message signing will not
    take place.
  </summary>
  <token key="Operation">
    <variant name="MessageSigning"/>
    <variant name="MessageVerify"/>
    <variant name="NewKeyCreation"/>
    <variant name="WrappedKeyCreation"/>
  </token>
  <token key="SignatureAlgorithm">
    <variant name="ECDSA"/>
    <variant name="RSA"/>
  </token>
</histogram>

<histogram name="Crypto.TPMSupport2" enum="TPMSupport"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Collected on Windows at startup. Records whether a TPM is present and, if
    so, what the best supported algorithm is.
  </summary>
</histogram>

<histogram name="Crypto.TPMSupportType" enum="TPMType"
    expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Collected on Windows at startup. Records whether a virtual and/or hardware
    TPM is present.
  </summary>
</histogram>

<histogram name="Crypto.UnexportableKeys.BackgroundTaskDuration{Priority}"
    units="ms" expires_after="2024-11-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time that passed between starting a TPM operation on an
    unexportable_keys::UnexportableKeyService and completing the operation
    (either successfully or not).

    This time includes both the time spent waiting in a task queue and the
    execution time. These sub-intervals are covered by
    Crypto.UnexportableKeys.BackgroundTaskQueueWaitDuration and
    Crypto.UnexportableKeys.BackgroundTaskRunDuration histograms
    correspondingly.

    Includes operations that were scheduled with {Priority}.

    Recorded right after a TPM operation completes.
  </summary>
  <token key="Priority">
    <variant name="" summary="all priorities"/>
    <variant name=".BestEffort" summary="the BestEffort priority"/>
    <variant name=".UserBlocking" summary="the UserBlocking priority"/>
    <variant name=".UserVisible" summary="the UserVisible priority"/>
  </token>
</histogram>

<histogram
    name="Crypto.UnexportableKeys.BackgroundTaskQueueWaitDuration{Priority}"
    units="ms" expires_after="2024-11-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time spent waiting in a task queue for the subset of TPM
    operations that are asynchronously scheduled through
    unexportable_keys::UnexportableKeyService.

    This duration is a sub-interval of
    Crypto.UnexportableKeys.BackgroundTaskDuration.

    Includes operations that were scheduled with {Priority}.

    Recorded right before a TPM operation is sent to the background thread for
    execution.
  </summary>
  <token key="Priority">
    <variant name="" summary="all priorities"/>
    <variant name=".BestEffort" summary="the BestEffort priority"/>
    <variant name=".UserBlocking" summary="the UserBlocking priority"/>
    <variant name=".UserVisible" summary="the UserVisible priority"/>
  </token>
</histogram>

<histogram name="Crypto.UnexportableKeys.BackgroundTaskResult{TaskType}"
    enum="UnexportableKeyServiceResult" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of the subset of TPM operations that are scheduled
    asynchronously through unexportable_keys::UnexportableKeyService. In some
    error cases, the result might be returned synchronously.

    Recorded right after a TPM operation completes. Recorded only for
    {TaskType}.
  </summary>
  <token key="TaskType">
    <variant name=".FromWrappedKey"
        summary="operations to create a signing key from a wrapped key"/>
    <variant name=".GenerateKey"
        summary="operations to generate a new signing key"/>
    <variant name=".Sign" summary="signing operations"/>
  </token>
</histogram>

<histogram name="Crypto.UnexportableKeys.BackgroundTaskRunDuration{TaskType}"
    units="ms" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time that passed between starting executing a TPM operation on a
    background thread and completing the operation (either successfully or not).
    Includes only a subset of TPM operations that are scheduled asynchronously
    through unexportable_keys::UnexportableKeyService.

    This duration is a sub-interval of
    Crypto.UnexportableKeys.BackgroundTaskDuration. Unlike
    Crypto.UnexportableKeys.BackgroundTaskDuration, this histogram is split by a
    task type instead of a task priority because the priority doesn't matter
    once a task starts executing. Only one task can be executed at the time due
    to TPM limitations.

    Includes {TaskType}.

    Recorded right after a TPM operation completes.
  </summary>
  <token key="TaskType">
    <variant name="" summary="all operation types"/>
    <variant name=".FromWrappedKey"
        summary="only operations to create a signing key from a wrapped key"/>
    <variant name=".GenerateKey"
        summary="only operations to generate a new signing key"/>
    <variant name=".Sign" summary="only signing operations"/>
  </token>
</histogram>

<histogram name="Crypto.VirtualKeySupport" enum="TPMSupport"
    expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Collected on Windows at startup. Records whether a virtual TPM is present
    and, if so, what the best supported algorithm is.
  </summary>
</histogram>

<histogram name="HttpCache.AccessToDone2" units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For every http cache transaction with a pattern (see HttpCache.Pattern), the
    time from the first access to the disk cache until the transaction was done.
  </summary>
</histogram>

<histogram name="HttpCache.AddTransactionToEntry" units="ms"
    expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time taken an HttpCache::Transaction to be added to ActiveEntry. It
    roughly captures time to acquire a write lock for an disk cache. Recorded
    every time a transaction (re)starts. Not recorded if the cache is
    memory-backed.
  </summary>
</histogram>

<histogram name="HttpCache.BeforeSend" units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For http cache transactions in which a network request was sent, the time
    elapsed between beginning the request and sending it over the network; this
    is the time spent accessing the disk cache.
  </summary>
</histogram>

<histogram name="HttpCache.CreateDiskEntry" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time taken to create a disk cache entry. Recorded when the entry is
    created for the first time in the HttpCacheTransaction. Not recorded if the
    cache is memory-backed.
  </summary>
</histogram>

<histogram name="HttpCache.IsNoStore{Type}" enum="Boolean"
    expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether or not a response has `Cache-Control: no-store`. Recorded when a
    HTTP transaction is finished. This histogram is for {Type}.
  </summary>
  <token key="Type">
    <variant name="" summary="all request types"/>
    <variant name=".MainFrameHTML" summary="main frame requests"/>
  </token>
</histogram>

<histogram name="HttpCache.MaxFileSizeOnInit" units="KB"
    expires_after="2022-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Max file size allowed to be cached in the http cache. This is logged at the
    time the backend is created.
  </summary>
</histogram>

<histogram name="HttpCache.OpenDiskEntry" units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time taken to open a disk cache entry. Recorded when the entry is
    created for the first time in the HttpCacheTransaction. Not recorded if the
    cache is memory-backed.
  </summary>
</histogram>

<histogram name="HttpCache.Pattern" enum="HttpCachePattern"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>For each http cache transaction, the recorded pattern.</summary>
</histogram>

<histogram name="HttpCache.TotalDiskCacheTimePerTransaction.{AccessType}"
    units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For each HTTP cache transaction, record total time spent {AccessType} the
    disk cache. Recorded when a transaction finished. This histogram does not
    record partial requests.
  </summary>
  <token key="AccessType">
    <variant name="Read" summary="reading from"/>
    <variant name="Write" summary="writing to"/>
  </token>
</histogram>

<histogram name="Net.AlternateProtocolBrokenLocation"
    enum="BrokenAlternateProtocolLocation" expires_after="2024-02-25">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Breakdown of the locations when SetBrokenAlternateProtocol is called.
  </summary>
</histogram>

<histogram name="Net.AlternateProtocolUsage" enum="AlternateProtocolUsage"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Breakdown of how requests which could potentially make use of an alternate
    protocol use or don't use the protocol.
  </summary>
</histogram>

<histogram name="Net.AlternateProtocolUsageGoogle"
    enum="AlternateProtocolUsage" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Breakdown of how requests which could potentially make use of an alternate
    protocol use or don't use the protocol, for connections to Google servers.
  </summary>
</histogram>

<histogram name="Net.AlternateServiceFailed" enum="NetErrorCodes"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Positive net error codes that failed alternative protocol requests end with.
    Recorded only when an alternative job fails, and the main job succeeds.
  </summary>
</histogram>

<histogram name="Net.AlternateServiceForDnsAlpnH3Failed" enum="NetErrorCodes"
    expires_after="2024-07-28">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Positive net error codes that failed alternative protocol requests end with.
    Recorded only when an DNS alpn H3 job fails, and the main job succeeds.
  </summary>
</histogram>

<histogram name="Net.AlternativeServiceTypeForRequest"
    enum="AlternativeServiceType" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Information about the AlternativeService used for each request.

    Warning: this histogram was expired from 2024-04-03 to 2024-05-31; data may
    be missing.
  </summary>
</histogram>

<histogram name="Net.Certificate.ChangeNotification"
    enum="CertificateChangeNotificationType" expires_after="never">
<!-- expires-never: core cert verifier metric; monitored by Chirps -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded each time a platform certificate change notification occurs. (Note
    that on Linux and ChromeOS these events are generated by the Chrome
    Certificate Manager but there are no notifications for changes that occurred
    outside of Chrome, and on Windows there are no notifications at all.)

    This does not count internal changes like Chrome Root Store and CRLSet
    updates.
  </summary>
</histogram>

<histogram name="Net.Certificate.TLSFeatureExtensionWithPrivateRoot"
    enum="Boolean" expires_after="M77">
  <owner>[email protected]</owner>
  <summary>
    This histogram is recorded every time Chrome successfully verifies a
    certificate that chains to a private root. A value of true indicates that
    the certificate contains the TLS Feature Extension, and false indicates that
    it doesn't.
  </summary>
</histogram>

<histogram name="Net.Certificate.TLSFeatureExtensionWithPrivateRootHasOCSP"
    enum="Boolean" expires_after="M77">
  <owner>[email protected]</owner>
  <summary>
    This histogram is recorded every time Chrome successfully verifies a
    certificate that chains to a private root and the certificate contains the
    TLS Feature Extension. A value of true indicates that the connection had an
    OCSP response stapled, and a value of false indicates that it did not.
  </summary>
</histogram>

<histogram name="Net.Certificate.TrustAnchor.Request" enum="NetTrustAnchors"
    expires_after="never">
<!-- expires-never: Used for CA risk assessment ( https://goto.google.com/chrome-root-ca-stats ) -->

  <owner>[email protected]</owner>
  <summary>
    The SHA-256 hash of the subjectPublicKeyInfo of the most-specific trust
    anchor encountered in a successfully-verified certificate chain, during an
    HTTP URL request. The associated root certificate can be looked up using
    https://crt.sh/?spkisha256= .
  </summary>
</histogram>

<histogram name="Net.Certificate.TrustAnchor.Verify" enum="NetTrustAnchors"
    expires_after="never">
<!-- expires-never: Used for CA risk assessment ( https://goto.google.com/chrome-root-ca-stats ) -->

  <owner>[email protected]</owner>
  <summary>
    The SHA-256 hash of the subjectPublicKeyInfo of the most-specific trust
    anchor encountered in a successfully-verified certificate chain, during
    verification time. The associated root certificate can be looked up using
    https://crt.sh/?spkisha256= .
  </summary>
</histogram>

<histogram name="Net.Certificate.TrustAnchor.VerifyOutOfDate"
    enum="BooleanOutOfDate" expires_after="never">
<!-- expires-never: Used for CA risk assessment ( https://goto.google.com/chrome-root-ca-stats ) -->

  <owner>[email protected]</owner>
  <summary>
    This histogram is recorded every time Chrome successfully validates a
    certificate, but cannot determine a public trust anchor from the verified
    chain. A value of true indicates that the trust anchor list is out of date,
    as the OS believes a public trust anchor is being used, but the built-in
    list does not know about this trust anchor, while a value of false indicates
    that a public trust anchor was not used, thus there is no evidence that the
    list is out of date. This histogram is temporary until the transition to a
    unified root store (in source), at which point, the OS store will no longer
    be consulted for known roots.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.SCTOrigin" enum="SCTOrigin"
    expires_after="2025-07-21">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The origin breakdown of Signed Certificate Timestamps (SCTs). Emitted once
    for every SCT when first validated, which means 0 or more times during every
    SSL connection establishment.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.SCTStatus" enum="SCTVerifyStatus"
    expires_after="M85">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Breakdown of Signed Certificate Timestamps (SCTs) validation status. Emitted
    once for every SCT when first validated, which means 0 or more times during
    every SSL connection establishment.
  </summary>
</histogram>

<histogram name="Net.CertVerifier.AndroidTrustStoreInit" units="ms"
    expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time needed to initialize the Android platform Trust store when using the
    builtin certificate verifier on Android.
  </summary>
</histogram>

<histogram name="Net.CertVerifier.MacKeychainCerts.IntermediateCacheInitTime"
    units="ms" expires_after="2024-02-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When initializing the builtin certificate verifier on Mac using the
    DomainCacheFullCerts implementation of the system trust store integration,
    this records how long it took to query the Mac keychain and initialize the
    cache of intermediate certificates.

    Warning: this histogram was expired from 2023-04-09 to 2023-06-07(M116);
    data may be missing.
  </summary>
</histogram>

<histogram name="Net.CertVerifier.MacKeychainCerts.IntermediateCount"
    units="certificates" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When initializing the builtin certificate verifier on Mac using the
    DomainCacheFullCerts or KeychainCacheFullCerts implementation of the system
    trust store integration, this records the number of certificates that were
    included in the cache of intermediate certificates.
  </summary>
</histogram>

<histogram name="Net.CertVerifier.MacKeychainCerts.TotalCount"
    units="certificates" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When initializing the builtin certificate verifier on Mac using the
    DomainCacheFullCerts or KeychainCacheFullCerts implementation of the system
    trust store integration, this records the number of certificates found in
    the Mac keychain.
  </summary>
</histogram>

<histogram name="Net.CertVerifier.MacKeychainCerts.TrustCount"
    units="certificates" expires_after="2024-02-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When initializing the builtin certificate verifier on Mac using the
    KeychainCacheFullCerts implementation of the system trust store integration,
    this records the number of certificates found in the Mac keychain which had
    trust records marking them as either trusted or distrusted.
  </summary>
</histogram>

<histogram name="Net.CertVerifier.MacTrustDomainCacheInitTime" units="ms"
    expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When the builtin certificate verifier is used on Mac and the platform
    trusted certificates cache is initialized (or re-initialized if keychain
    trust settings changed), records how long it took to initialize all the
    trust domain caches. Only recorded by the DomainCacheFullCerts
    implementation, which may or may not be used depending on Finch trial
    parameters.
  </summary>
</histogram>

<histogram name="Net.CertVerifier.MacTrustDomainCertCount.{Domain}"
    units="certificates" expires_after="2024-02-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When the builtin certificate verifier is used on Mac and the platform
    trusted certificates cache is initialized (or re-initialized if keychain
    trust settings changed), records the number of certificates read from the
    {Domain} trust domain. Only counts certificates that were successfully
    parsed. Only recorded by the DomainCacheFullCerts implementation, which may
    or may not be used depending on Finch trial parameters.

    Warning: this histogram was expired from 2023-04-09 to 2023-06-07(M116);
    data may be missing.
  </summary>
  <token key="Domain">
    <variant name="Admin"/>
    <variant name="System"/>
    <variant name="User"/>
  </token>
</histogram>

<histogram name="Net.CertVerifier.MacTrustImplCacheInitTime" units="ms"
    expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When the builtin certificate verifier is used on Mac and the platform
    trusted certificates cache is initialized (or re-initialized if keychain
    trust settings changed), records how long it took to initialize both the
    trust cache and the intermediates cache. Only recorded by the
    DomainCacheFullCerts and KeychainCacheFullCerts implementations, which may
    or may not be used depending on Finch trial parameters.
  </summary>
</histogram>

<histogram base="true" name="Net.CertVerifier.NameNormalizationPrivateRoots"
    enum="NetCertificateNameNormalization" expires_after="2023-01-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether Name normalization was used in successfully validated certificate
    chains, only recorded for chains ending in privately trusted roots. Suffixed
    by the CertVerifyProc implementation.
  </summary>
</histogram>

<histogram name="Net.CertVerifier_First_Job_Latency" units="ms"
    expires_after="never">
<!-- expires-never: core cert verifier metric; monitored by Chirps -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The actual amount of time spent verifying a certificate using the underlying
    cryptographic APIs. Because parallel verifications for the same certificate
    may be coalesced, histograms such as Net.SSLCertVerificationTime may be
    skewed, due to later verifications taking less overall time. This records
    the overall time spent verifying the first job to capture initialization
    costs.
  </summary>
</histogram>

<histogram name="Net.CertVerifier_Job_Latency" units="ms" expires_after="never">
<!-- expires-never: core cert verifier metric; monitored by Chirps -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The actual amount of time spent verifying a certificate using the underlying
    cryptographic APIs. Because parallel verifications for the same certificate
    may be coalesced, histograms such as Net.SSLCertVerificationTime may be
    skewed, due to later verifications taking less overall time. This records
    the overall time spent verifying a single request, regardless of how many
    parallel requests are being served by the verification.
  </summary>
</histogram>

<histogram name="Net.ConnectionInfo.MainFrame" enum="ConnectionInfo"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Application protocol used for main frame resources. Logged by the renderer
    only for request that accessed the network and have received response
    headers.
  </summary>
</histogram>

<histogram name="Net.ConnectionInfo.SubResource" enum="ConnectionInfo"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Application protocol used for subresources (resources other than main
    frame). Logged by the renderer only for request that accessed the network
    and have received response headers.
  </summary>
</histogram>

<histogram name="Net.ContentDecodingFailed2" enum="NetFilterType2"
    expires_after="M77">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For each CONTENT_DECODING_FAILED, record the filter that failed.
  </summary>
</histogram>

<histogram name="Net.ContentEncodingType" enum="ContentEncodingType"
    expires_after="2024-12-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For each response stream, record the Content-Encoding type. If multiple
    encoding types are specified, this histogram only records the last one.
    Note: Compression Dictionary Transport headers (i.e. &quot;sbr&quot; for
    Shared Brotli) will be recorded as &quot;Unknown&quot; in this histogram.
  </summary>
</histogram>

<histogram name="Net.Cors.PreflightCheckError2" enum="CorsAccessCheckError"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>src/services/network/OWNERS</owner>
  <summary>
    The distribution of CORS error types on preflight requests. This reports
    whenever CORS checks detect an error on a preflight request. The
    InvalidResponse case corresponds to net errors for which there was no CORS
    error, e.g. CONNECTION_REFUSED, NX_DOMAIN, etc.
  </summary>
</histogram>

<histogram name="Net.Cors.PreflightCheckWarning" enum="CorsAccessCheckError"
    expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/services/network/OWNERS</owner>
  <summary>
    The distribution of CORS error types on preflight requests which are treated
    as warnings. This reports whenever CORS checks detect an error on a
    preflight request without failing the whole original network request, due to
    being configured to ignore these failures.
  </summary>
</histogram>

<histogram name="Net.CountOfBrokenAlternativeServices" units="services"
    expires_after="2024-09-29">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The number of broken alternative services loaded from the prefs file on
    startup. Alternative services allow an origin server to specify additional
    means of interacting with it on the network. A broken alternative service is
    one whose most recent connection attempt failed and whose retry timeout
    period has not yet expired. Recorded when broken alternative services are
    loaded from the prefs file on startup.
  </summary>
</histogram>

<histogram name="Net.CountOfQuicServerInfos" units="configs"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    This counts the number of server configs persisted in prefs file.
  </summary>
</histogram>

<histogram name="Net.CountOfRecentlyBrokenAlternativeServices" units="services"
    expires_after="2024-08-04">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The number of recently broken alternative services loaded from the prefs
    file on startup. Alternative services allow an origin server to specify
    additional means of interacting with it on the network. A recently broken
    alternative service is one whose most recent connection attempt failed.
    Recorded when broken alternative services are loaded from the prefs file on
    startup.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsConfig.AdditionalDnsQueryTypesEnabled"
    enum="BooleanEnabled" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Whether or not `prefs::kAdditionalDnsQueryTypesEnabled` is enabled. Recorded
    at startup if disabled or whenever Chrome is believed to be
    enterprise-managed (per the same detection as the default disabling of DoH).
    Measures whether or not enterprise admins are setting the disable,
    potentially due to issues encoutered with HTTPS/INTEGRITY query experiments.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsConfig.DnsClientCapability"
    enum="DNS.DnsClientCapability" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Whether DNS clients can and are allowed to perform secure and insecure DNS
    transactions. Logged when HostResolverManager receives a host resolution
    request using HostResolverSource::ANY.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsConfig.Nsswitch.Compatible" enum="BooleanValid"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Whether or not the DNS configuration read from a nsswitch.conf file is
    considered compatible with Chrome, that is that the configuration did not
    contain any options that Chrome is unable to support using the built-in
    resolver. Reported whenever a nsswitch.conf file is read by Chrome.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsConfig.Nsswitch.IncompatibleService"
    enum="NsswitchService" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Enumeration of the nsswitch.conf service that caused a compatibility issue,
    leading to the nsswitch.conf DNS configuration being considered incompatible
    with Chrome. Only emitted when a specific token is present in the
    nsswitch.conf file, causing the incompatibility, e.g. because the service is
    always incompatible with Chrome or because the service is configured with
    incompatible actions.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsConfig.Nsswitch.Read" enum="BooleanReceived"
    expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Whether or not an attempt to read nsswitch.conf succeeded. May fail due to
    missing file or filesystem issues, but does not consider it a failure if the
    file is larger than the size limit (see Net.DNS.DnsConfig.Nsswitch.TooLarge
    for that case). Reported for all attempts to read nsswitch.conf.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsConfig.Nsswitch.TooLarge" enum="BooleanExceeded"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Whether or not an attempt to read nsswitch.conf failed due to the file size
    being unreasonably large. Reported for all attempts to read nsswitch.conf.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsConfig.Resolv.Compatible" enum="BooleanValid"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Whether or not the DNS configuration read from a resolv.conf file is
    considered compatible with Chrome, that is that the configuration did not
    contain any options that Chrome is unable to support using the built-in
    resolver. Reported whenever a resolv.conf file is successfully read by
    Chrome.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsConfig.SecureDnsMode" enum="SecureDnsModeDetails"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    Records details of the secure DNS mode used to configure the host resolver
    at construction of the network service.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsConfig.Windows.Compatibility"
    enum="DNS.WindowsCompatibility" expires_after="2024-08-01">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Enumeration of whether or not the DNS configuration setting of Windows is
    considered compatible with Chrome and the reason why it is considered
    incompatible. Reported whenever the DNS configuration setting of Windows is
    read by Chrome.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsConfig.Windows.ReadSystemSettings{RetryCount}"
    enum="DNS.WindowsReadSystemSettingsResult" expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The result of reading system DNS settings. Reported whenever Chrome tries to
    read the DNS configuration setting of Windows.
  </summary>
  <token key="RetryCount">
    <variant name="0"/>
    <variant name="1"/>
    <variant name="2"/>
    <variant name="3"/>
  </token>
</histogram>

<histogram name="Net.DNS.DnsHosts.Count" units="count"
    expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of hosts parsed from a Hosts file. Reported whenever a Hosts file
    is read and parsed.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsHosts.EstimateMemoryUsage" units="bytes"
    expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Estimated memory usage to keep the parsed result of a Hosts file. Reported
    whenever a Hosts file is read and parsed.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsHosts.FileSize" units="bytes"
    expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The file size of a Hosts file. Reported whenever a Hosts file is read.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsTask.AdditionalHttps.Requested"
    enum="UnsolicitedHttpsRecordStatus" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    Status of HTTPS DNS records received as additional records in a DnsTask
    querying for HTTPS. This would represent a recurssive resolver that is
    HTTPS-aware and performing followup queries on behalf of the client.
    Recorded as DNS responses are parsed.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsTask.AdditionalHttps.Unsolicited"
    enum="UnsolicitedHttpsRecordStatus" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    Status of HTTPS DNS records received as additional records in a DnsTask
    querying for a type other than HTTPS. Recorded as DNS responses are parsed.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsTask.SuccessTime" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Duration of time taken by DnsTask (the grouping of all individual DNS
    queries for a single instance of resolving a name) in resolutions that
    succeeded.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsTask.SvcbHttpsTransactionError"
    enum="DNS.SvcbHttpsTransactionError" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Enumeration of whether or not an HTTPS (SVCB) record transaction succeeded
    and whether or not any failure is fatal to the DnsTask. Recorded for all
    completed HTTPS record transactions.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsTransaction.AttemptType" enum="DNS.AttemptType"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Enumeration of the logic path used (e.g. different protocols) for each
    started DnsAttempt (the representation of an individual network request to a
    DNS server).
  </summary>
</histogram>

<histogram base="true" name="Net.DNS.DnsTransaction.Insecure.FailureTime"
    units="ms" expires_after="2025-06-17">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    Duration of time taken by an insecure DnsTransaction to fail.
  </summary>
</histogram>

<histogram base="true" name="Net.DNS.DnsTransaction.Insecure.SuccessTime"
    units="ms" expires_after="2025-06-17">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    Duration of time taken by an insecure DnsTransaction to succeed.
  </summary>
</histogram>

<histogram base="true"
    name="Net.DNS.DnsTransaction.SecureNotValidated.FailureError"
    enum="NetErrorCodes" expires_after="2025-06-17">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    Counts of specific error codes returned by secure DnsTransactions to a DoH
    server that is unavailable or has unknown availability. These transactions
    may be probe queries or queries issued in the secure DNS mode.
  </summary>
</histogram>

<histogram base="true"
    name="Net.DNS.DnsTransaction.SecureNotValidated.FailureTime" units="ms"
    expires_after="2024-07-22">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    Duration of time taken by a secure DnsTransaction to a DoH server that is
    unavailable or has unknown availability to fail. These transactions may be
    probe queries or queries issued in the secure DNS mode.
  </summary>
</histogram>

<histogram base="true"
    name="Net.DNS.DnsTransaction.SecureNotValidated.SuccessTime" units="ms"
    expires_after="2024-07-22">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    Duration of time taken by a secure DnsTransaction to a DoH server that is
    unavailable or has unknown availability to succeed. These transactions may
    be probe queries or queries issued in the secure DNS mode.
  </summary>
</histogram>

<histogram base="true"
    name="Net.DNS.DnsTransaction.SecureValidated.FailureError"
    enum="NetErrorCodes" expires_after="2025-06-17">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    Counts of specific error codes returned by secure DnsTransactions to an
    available DoH server. A DoH server is available if a probe has been
    successfully completed and fewer than a threshold amount of failures have
    occurred.
  </summary>
</histogram>

<histogram base="true"
    name="Net.DNS.DnsTransaction.SecureValidated.FailureTime" units="ms"
    expires_after="2025-06-17">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    Duration of time taken by a secure DnsTransaction to an available DoH server
    to fail. A DoH server is available if a probe has been successfully
    completed and fewer than a threshold amount of failures have occurred.
  </summary>
</histogram>

<histogram base="true"
    name="Net.DNS.DnsTransaction.SecureValidated.SuccessTime" units="ms"
    expires_after="2025-06-17">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    Duration of time taken by a secure DnsTransaction to an available DoH server
    to succeed. A DoH server is available if a probe has been successfully
    completed and fewer than a threshold amount of failures have occurred.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsTransaction.UDP.LowEntropyReason"
    enum="DNS.UdpLowEntropyReason" expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Enumerated status of the reason why the built-in DNS resolver has detected a
    &quot;low entropy&quot; situation for DNS over UDP and has switched to DNS
    over TCP.
  </summary>
</histogram>

<histogram name="Net.DNS.H3SupportedGoogleHost.TaskTypeMetadataAvailability2"
    enum="DNS.TaskTypeMetadataAvailability" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The succeeded DNS Task type of HostResolverManager::Job (the basic internal
    unit of work for non-local host resolutions, potentially merging redundant
    requests from Chrome) that succeeded with or without valid HTTPS DNS
    metadata. This is recorded for successful https- or wss-schemed queries to a
    set of Google hosts expected to have HTTPS DNS metadata, if the query type
    requests the HTTPS record.
  </summary>
</histogram>

<histogram name="Net.DNS.HTTPSSVC.RecordHttps.{secure}.ExpectNoerror.DnsRcode"
    enum="HttpssvcDnsRcode" expires_after="2024-10-06">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Records which RCODE the DNS server specified when it responded to our HTTPS
    query. If the query timed out before getting a response,
    &quot;TimedOut&quot; is recorded instead of an RCODE value. Histograms are
    emitted at the completion of a DnsTask's final transaction.
  </summary>
  <token key="secure" variants="DnsOverHttpsSecure"/>
</histogram>

<histogram name="Net.DNS.HTTPSSVC.RecordHttps.{secure}.ExpectNoerror.Parsable"
    enum="BooleanValid" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Indicates whether the result of an HTTPS query was validly parsable or
    mangled. Only recorded when DnsRcode indicates NoError. Histograms are
    emitted at the completion of a DnsTask's final transaction.
  </summary>
  <token key="secure" variants="DnsOverHttpsSecure"/>
</histogram>

<histogram
    name="Net.DNS.HTTPSSVC.RecordHttps.{secure}.ExpectNoerror.RecordWithError"
    enum="Boolean" expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Records true when we receive an HTTPS record and an error RCODE at the same
    time. Only recorded for true. Histograms are emitted at the completion of a
    DnsTask's final transaction.
  </summary>
  <token key="secure" variants="DnsOverHttpsSecure"/>
</histogram>

<histogram
    name="Net.DNS.HTTPSSVC.RecordHttps.{secure}.ExpectNoerror.ResolveTimeAddressRecord"
    units="ms" expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Records how many ms the DNS server took to respond to address queries.
    Histograms are emitted at the completion of a DnsTask's final transaction.
  </summary>
  <token key="secure" variants="DnsOverHttpsSecure"/>
</histogram>

<histogram
    name="Net.DNS.HTTPSSVC.RecordHttps.{secure}.ExpectNoerror.ResolveTimeExperimental"
    units="ms" expires_after="2024-08-04">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Records how many ms the DNS server took to respond to an HTTPS query.
    Histograms are emitted at the completion of a DnsTask's final transaction.
  </summary>
  <token key="secure" variants="DnsOverHttpsSecure"/>
</histogram>

<histogram
    name="Net.DNS.HTTPSSVC.RecordHttps.{secure}.ExpectNoerror.ResolveTimeRatio"
    units="scaled ratio (% / 10)" expires_after="2024-08-04">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Records a ratio indicating the relative HTTPS query resolve time compared to
    the slower A or AAAA resolve time, where A/AAAA/HTTPS belong to the same
    DnsTask. Multiply this value by 10 to obtain a percentage P. The HTTPS query
    completed in roughly P% of the slower A/AAAA resolve time. Values smaller
    than 10 indicate that HTTPS query was faster than A/AAAA. Values larger than
    10 indicate that the HTTPS query was slower than A/AAAA. Histograms are
    emitted at the completion of a DnsTask's final transaction.
  </summary>
  <token key="secure" variants="DnsOverHttpsSecure"/>
</histogram>

<histogram name="Net.DNS.InsecureDnsTask.FailureTime" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Duration of time taken by an insecure DnsTask in resolutions that failed.
  </summary>
</histogram>

<histogram name="Net.DNS.JobQueueTime.Failure" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The duration of time DnsTransactions spend waiting to be started by a
    DnsTask, aggregated by HostResolverManager::Job. This metric is only
    recorded when the Job failed.
  </summary>
</histogram>

<histogram name="Net.DNS.JobQueueTime.PerTransaction" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The duration of time a DnsTransaction spends waiting to be started by a
    DnsTask. The dominant factor is likely the time spent waiting for other
    DnsTransactions to complete, i.e. waiting for DnsTask::StartNextTransaction
    to be invoked by the dispatcher. If there were no limit on the number of
    concurrent DNS queries, we would expect this metric to be near zero.
  </summary>
</histogram>

<histogram name="Net.DNS.JobQueueTime.Success" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The duration of time DnsTransactions spend waiting to be started by a
    DnsTask, aggregated by HostResolverManager::Job. This metric is only
    recorded when the Job succeeded.
  </summary>
</histogram>

<histogram name="Net.DNS.ProbeSequence.ConfigChange.Failure.AttemptTime"
    units="ms" expires_after="2024-07-22">
  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    Duration of time taken by a probe attempt to fail. The time is measured
    since the probe sequence was initiated due to a DNS config change.
  </summary>
</histogram>

<histogram name="Net.DNS.ProbeSequence.ConfigChange.Success.AttemptTime"
    units="ms" expires_after="2024-09-22">
  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    Duration of time taken by a probe attempt to succeed. The time is measured
    since the probe sequence was initiated due to a DNS config change.
  </summary>
</histogram>

<histogram name="Net.DNS.ProbeSequence.NetworkChange.Failure.AttemptTime"
    units="ms" expires_after="2024-07-22">
  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    Duration of time taken by a probe attempt to fail. The time is measured
    since the probe sequence was initiated due to a network change.
  </summary>
</histogram>

<histogram name="Net.DNS.ProbeSequence.NetworkChange.Success.AttemptTime"
    units="ms" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    Duration of time taken by a probe attempt to succeed. The time is measured
    since the probe sequence was initiated due to a network change.
  </summary>
</histogram>

<histogram name="Net.DNS.Request.TotalTime" units="ms" expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Duration of HostResolver requests from Start() until completion. Includes
    requests resolved synchronously using fast local sources, e.g. from cache,
    recorded as 0. Excludes speculative requests.
  </summary>
</histogram>

<histogram name="Net.DNS.Request.TotalTimeAsync" units="ms"
    expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Duration of HostResolver requests from Start() until completion. Excludes
    speculative requests and requests resolved using fast local sources, e.g.
    from cache.
  </summary>
</histogram>

<histogram name="Net.DNS.ResolveCategory" enum="ResolutionCategory"
    expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Whether a HostResolverManager::Job (the basic internal unit of work for
    non-local host resolutions, potentially merging redundant requests from
    Chrome) succeeded or failed, and whether it was speculative.
  </summary>
</histogram>

<histogram base="true" name="Net.DNS.ResolveContext.DohAutoupgrade.Status"
    enum="DohServerAutoupgradeStatus" expires_after="2025-07-22">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The state of the Secure DNS (DoH) auto-upgrade functionality. This histogram
    is only emitted by clients with secure DNS set to automatic mode, and the
    emission occurs one minute after the insecure DNS to secure DNS auto-upgrade
    network probing begins. There will be one histogram emission per DoH
    provider in the system DNS configuration per NetworkContext that allows
    using secure DNS queries, and re-emissions can occur each time the DNS
    configuration changes.
  </summary>
</histogram>

<histogram name="Net.DNS.ResolveError.Fast" enum="NetErrorCodes"
    expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    For DNS resolutions that failed after less than 10 ms, which are probably
    local failures, what error code the jobs failed with.
  </summary>
</histogram>

<histogram name="Net.DNS.ResolveError.Slow" enum="NetErrorCodes"
    expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    For DNS resolutions that failed after at least 10 ms, which are probably
    remote failures or connectivity problems, what error code the jobs failed
    with.
  </summary>
</histogram>

<histogram name="Net.DNS.ResolveFailureTime" units="ms" expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Duration of time taken by HostResolverManager::Job (the basic internal unit
    of work for non-local host resolutions, potentially merging redundant
    requests from Chrome) in resolutions that failed. This is the time to
    resolve a hostname from start to finish. Excludes jobs where all requests
    are speculative.
  </summary>
</histogram>

<histogram name="Net.DNS.ResolveSuccessTime" units="ms" expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Duration of time taken by HostResolverManager::Job (the basic internal unit
    of work for non-local host resolutions, potentially merging redundant
    requests from Chrome) in resolutions that succeeded. This is the time to
    resolve a hostname from start to finish. Excludes jobs where all requests
    are speculative.
  </summary>
</histogram>

<histogram name="Net.Dns.ResolveTimeDiff.AddressRecordBeforeHTTPS.{Bucket}"
    units="ms" expires_after="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time difference between the first address record (A or AAAA) and HTTPS
    record were resolved. Recorded when an address record was resolved before
    HTTPS record and the address record was resolved {Bucket}.
  </summary>
  <token key="Bucket" variants="DnsResolveTimeDiffBucket"/>
</histogram>

<histogram name="Net.Dns.ResolveTimeDiff.{Variant}.{Bucket}" units="ms"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time difference between A and AAAA records were resolved. Recorded when
    {Variant}, and the first one was resolved {Bucket}.
  </summary>
  <token key="Bucket" variants="DnsResolveTimeDiffBucket"/>
  <token key="Variant">
    <variant name="AAAABeforeA" summary="AAAA resolved before A"/>
    <variant name="ABeforeAAAA" summary="A resolved before AAAA"/>
  </token>
</histogram>

<histogram name="Net.DNS.SystemTask.FailureTime" units="ms"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Duration of time taken by HostResolverSystemTask (the grouping of all
    individual DNS queries for a single instance of resolving a name using the
    system resolver) in resolutions that failed.
  </summary>
</histogram>

<histogram name="Net.DNS.SystemTask.SuccessTime" units="ms"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Duration of time taken by HostResolverSystemTask (the grouping of all
    individual DNS queries for a single instance of resolving a name using the
    system resolver) in resolutions that succeeded.
  </summary>
</histogram>

<histogram name="Net.DNS.UI.ProbeAttemptSuccess" enum="Boolean"
    expires_after="2023-12-17">
  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    Records the outcome of a DoH probe attempt on the first valid entry in the
    custom text field.
  </summary>
</histogram>

<histogram name="Net.DNS.UI.ValidationAttemptSuccess" enum="Boolean"
    expires_after="2024-10-28">
  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    Records the outcome of a formatting validation attempt on the custom text
    field.
  </summary>
</histogram>

<histogram name="Net.DNS.UpgradeConfig.DotUpgradeSucceeded" enum="Boolean"
    expires_after="2025-05-08">
  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    True if upgrade to DoH from a DoT hostname was attempted and succeeded.
    False if it was attempted and failed.
  </summary>
</histogram>

<histogram name="Net.DNS.UpgradeConfig.HasPublicInsecureNameserver"
    enum="Boolean" expires_after="2025-05-08">
  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    True if there was at least one public nameserver during an attempt to
    upgrade to DoH from insecure DNS. False if there were no public nameservers
    during an attempt to upgrade to DoH from insecure DNS.

    Warning: this histogram was expired from 2023-04-23 to 2023-06-12; data may
    be missing.
  </summary>
</histogram>

<histogram name="Net.DNS.UpgradeConfig.Ineligible.DohSpecified" enum="Boolean"
    expires_after="2025-05-08">
  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    True if upgrade to DoH was not attempted because the DoH config was already
    specified. False if upgrade to DoH was not attempted for some other reason.
  </summary>
</histogram>

<histogram name="Net.DNS.UpgradeConfig.Ineligible.UnhandledOptions"
    enum="Boolean" expires_after="2025-05-08">
  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    True if upgrade to DoH was not attempted because of unhandled options in the
    system config. False if upgrade to DoH was not attempted for some other
    reason. Emitted each time the DnsConfig is updated.
  </summary>
</histogram>

<histogram name="Net.DNS.UpgradeConfig.InsecureUpgradeSucceeded" enum="Boolean"
    expires_after="2025-05-08">
  <owner>[email protected]</owner>
  <owner>src/net/dns/OWNERS</owner>
  <summary>
    True if upgrade to DoH from insecure DNS was attempted and succeeded. False
    if it was attempted and failed.
  </summary>
</histogram>

<histogram name="Net.DNS_Resolution_And_TCP_Connection_Latency2" units="ms"
    expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <summary>
    The time measured before starting DNS lookup until after the connection is
    complete.
  </summary>
</histogram>

<histogram name="Net.DomainReliability.BeaconOutcome"
    enum="DomainReliabilityBeaconOutcome" expires_after="2024-07-26">
  <owner>[email protected]</owner>
  <owner>src/net/network_error_logging/OWNERS</owner>
  <summary>
    The outcome of a Domain Reliability beacon, logged upon destruction of the
    beacon.
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForHTTPSGoogleMainFrame3" enum="NetErrorCodes"
    expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <summary>
    Positive net error codes that requests for pages end with, including net::OK
    and net::ERR_ABORTED. This only counts loads in &quot;main frames&quot; for
    https://www.google.com (it does not for example count the error codes for
    subresoures on a page). It excludes main frame navigations that are
    converted to downloads (unless they fail / are aborted before it's known
    that they would be a download), and requests handled externally (like mailto
    links).
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForIsolatedAppScheme" enum="NetErrorCodes"
    expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/web_applications/isolated_web_apps/OWNERS</owner>
  <summary>
    Positive net error codes that HTTP requests using the isolated-app: URL
    scheme end with, including net::OK and net::ERR_ABORTED.
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForMainFrame4" enum="NetErrorCodes"
    expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <summary>
    Positive net error codes that requests for pages end with, including net::OK
    and net::ERR_ABORTED. This only counts loads in &quot;main frames&quot; (it
    does not for example count the error codes for subresoures on a page). It
    excludes main frame navigations that are converted to downloads (unless they
    fail / are aborted before it's known that they would be a download), and
    requests handled externally (like mailto links).
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForSubresources3" enum="NetErrorCodes"
    expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <summary>
    Net error codes that requests for &quot;subresources&quot; end with,
    including net::OK and net::ERR_ABORTED.
  </summary>
</histogram>

<histogram name="Net.ErrorPageCounts" enum="NetErrorPageEvents"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Counts of various events that can occur on the network error page. Note that
    this histogram enum buckets are not mutually exclusive and so a single error
    page load might report samples into multiple ones. Each bucket has
    descriptions that further explain the context of their samples.
  </summary>
</histogram>

<histogram name="Net.ErrorPageCounts.WebAppAlternativeErrorPage"
    enum="NetErrorCodes" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of times web apps receive `ERR_INTERNET_DISCONNECTED` and
    the alternative error page (rather than the dino) is shown. Reported when
    the error page html is being prepared. See
    `NetErrorHelper::GenerateLocalizedErrorPage` (crbug.com/1280518).
  </summary>
</histogram>

<histogram name="Net.HttpAuthCount" enum="HttpAuthCount"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Per-authentication-scheme counts of HTTP authentication attempts and
    rejections.
  </summary>
</histogram>

<histogram name="Net.HttpAuthNtlmV2Usage" enum="HttpAuthNtlmV2Usage"
    expires_after="M79">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Whether NTLMv2 was enabled for an authentication handshake. For a given data
    set the number of samples here is expected to be equivalent to the
    &quot;NTLM Start&quot; count in the &quot;Net.HttpAuthCount&quot; histogram.
    Note that NTLMv2 being enabled makes the client behavior equivalent to
    setting LmCompatibilityLevel to 3 or higher.
  </summary>
</histogram>

<histogram name="Net.HttpAuthTarget" enum="HttpAuthTarget"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Per-authentication-scheme counts of HTTP authentication targets, such as
    secure servers or proxies.

    Emitted at the same time as Net.HttpAuthCount, on every HTTP authentication
    attempt or rejection.
  </summary>
</histogram>

<histogram name="Net.HttpContentLengthDifferenceWithValidOCL" units="bytes"
    expires_after="M85">
  <owner>[email protected]</owner>
  <summary>
    The difference between the size specified in the X-Original-Content-Length
    header and the size of the response body. Only includes resources that have
    the X-Original-Content-Length header.
  </summary>
</histogram>

<histogram name="Net.HttpContentLengthV2" units="bytes" expires_after="never">
<!-- expires-never: Input to Lingo pipelines. -->

  <owner>[email protected]</owner>
  <summary>
    Size of the response body. This is the actual number of bytes received,
    which usually agrees with but is not necessarily the same as the size
    specified by the Content-Length header. Replaces Net.HttpContentLength,
    recording non-DRP Http traffic as &quot;Http.Direct&quot; instead of
    &quot;Http.Other&quot;.
  </summary>
</histogram>

<histogram name="Net.HttpJob.BytesReceived2" units="bytes"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Total bytes received over the network for an HttpJob request. This is
    measured when the HttpJob is completed.

    Bytes after switching protocols (such as WebSockets) are not counted.

    There is no previous version of this metric. It is numbered to be in sync
    with similar metrics. Unlike PrefilterBytesRead, this metric accounts for
    all HTTP stream bytes (not just the content body), counts bytes for aborted
    jobs, and network bytes in 304 Not Modified exchanges (rather than cached
    content bodies).
  </summary>
</histogram>

<histogram name="Net.HttpJob.BytesSent2" units="bytes"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Total bytes sent over the network for an HttpJob request. This is measured
    when the HttpJob is completed.

    Bytes after switching protocols (such as WebSockets) are not counted.

    There is no previous version of this metric. It is numbered to be in sync
    with similar metrics.
  </summary>
</histogram>

<histogram name="Net.HttpJob.IpProtection.AllowListMatch.BytesReceived2"
    units="bytes" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Total bytes received over the network for an HttpJob request that would be
    covered by IP Protection based on match with respect to the masked domain
    list alone. This is irrespective of token and proxy availability. Any bypass
    logic (e.g. first party to top level frame) will be considered, if set.
    These bytes will be recorded even if `EnableIpPrivacyProxy` is `false`. This
    is measured when the HttpJob is completed.

    There is no previous version of this metric. It is numbered to be in sync
    with similar metrics. Unlike PrefilterBytesRead, this metric accounts for
    all HTTP stream bytes (not just the content body), counts bytes for aborted
    jobs, and network bytes in 304 Not Modified exchanges (rather than cached
    content bodies).
  </summary>
</histogram>

<histogram name="Net.HttpJob.IpProtection.AllowListMatch.BytesSent"
    units="bytes" expires_after="2025-01-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Total bytes sent over the network for an HttpJob request that would be
    covered by IP Protection based on match with respect to the masked domain
    list alone. This is irrespective of token and proxy availability. Any bypass
    logic (e.g. first party to top level frame) will be considered, if set.
    These bytes will be recorded even if `EnableIpPrivacyProxy` is `false`. This
    is measured when the HttpJob is completed.
  </summary>
</histogram>

<histogram name="Net.HttpJob.IpProtection.AllowListMatch.BytesSent2"
    units="bytes" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Total bytes sent over the network for an HttpJob request that would be
    covered by IP Protection based on match with respect to the masked domain
    list alone. This is irrespective of token and proxy availability. Any bypass
    logic (e.g. first party to top level frame) will be considered, if set.
    These bytes will be recorded even if `EnableIpPrivacyProxy` is `false`. This
    is measured when the HttpJob is completed.

    This version improves on BytesSent by counting bytes for aborted jobs and
    network bytes in 304 Not Modified exchanges.
  </summary>
</histogram>

<histogram
    name="Net.HttpJob.IpProtection.AllowListMatch.PrefilterBytesRead.Net"
    units="bytes" expires_after="2025-01-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Total prefilter (e.g., before decompression) bytes read for an HttpJob
    request that would be covered by IP Protection and served from the network
    based on match with respect to the masked domain list alone. This is
    irrespective of token and proxy availability. Any bypass logic (e.g. first
    party to top level frame) will be considered, if set. These bytes will be
    recorded even if `EnableIpPrivacyProxy` is `false`. This is measured when
    the HttpJob is completed.
  </summary>
</histogram>

<histogram name="Net.HttpJob.IpProtection.BytesSent" units="bytes"
    expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Total bytes sent over the network for an HttpJob request that is covered by
    IP Protection. These bytes will be recorded even if the IP Protection proxy
    is configured as `direct://` (i.e. an IP Protection proxy is configured but
    doesn't actually proxy any traffic).
  </summary>
</histogram>

<histogram name="Net.HttpJob.IpProtection.PrefilterBytesRead.Net" units="bytes"
    expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Total prefilter (e.g., before decompression) bytes read for an HttpJob
    request that is covered by IP Protection and served from the network. These
    bytes will be recorded even if the IP Protection proxy is configured as
    `direct://` (i.e. an IP Protection proxy is configured but doesn't actually
    proxy any traffic).
  </summary>
</histogram>

<histogram name="Net.HttpJob.IpProtection.TotalTimeNotCached" units="ms"
    expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Time it takes to complete an HttpJob that is covered by IP Protection, from
    starting the transaction until we are done reading, for jobs not served from
    the cache. This time will be recorded even if the IP Protection proxy is
    configured as `direct://` (i.e. an IP Protection proxy is configured but
    doesn't actually proxy any traffic).
  </summary>
</histogram>

<histogram name="Net.HttpJob.IpProtection.TotalTimeNotCached.{Chain}"
    units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/browser/ip_protection/OWNERS</owner>
  <summary>
    Similar to Net.HttpJob.IpProtection.TotalTimeNotCached, but only chains with
    the given chain_id, as provided in the GetProxyInfo RPC response.
  </summary>
  <token key="Chain">
    <variant name="Chain1"/>
    <variant name="Chain2"/>
    <variant name="Chain3"/>
  </token>
</histogram>

<histogram name="Net.HttpJob.MainJobWaitTimeWithAvailableSpdySession"
    units="ms" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Wait time of main job while there is an available SPDY session but no QUIC
    session.
  </summary>
</histogram>

<histogram name="Net.HttpJob.MainJobWaitTimeWithoutAvailableSpdySession"
    units="ms" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Wait time of main job while there is no available SPDY session and no QUIC
    session.
  </summary>
</histogram>

<histogram name="Net.HttpJob.PrefilterBytesRead.Ads.Net" units="bytes"
    expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Total prefilter (e.g., before decompression) bytes read for an HttpJob
    request that is run on behalf of a request tagged as advertising related.
  </summary>
</histogram>

<histogram name="Net.HttpJob.PrefilterBytesRead{Source}" units="bytes"
    expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Total prefilter (e.g., before decompression) bytes read for an HttpJob
    request.
  </summary>
  <token key="Source">
    <variant name=""/>
    <variant name=".Cache" summary="For requests served from the cache."/>
    <variant name=".Net" summary="For requests served from the network."/>
  </token>
</histogram>

<histogram name="Net.HttpJob.ProxyTypeFailed" enum="ProxyScheme"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Scheme of the proxy server used by an HTTP job that failed, or
    SCHEME_INVALID if no proxy was used. A value is emitted for each failed HTTP
    stream. Note: Although SCHEME_DIRECT is deprecated, value 1 corresponds to a
    direct proxy. Warning: this histogram was expired from 2022-11-13 to
    2023-12-01; data may be missing.
  </summary>
</histogram>

<histogram name="Net.HttpJob.ProxyTypeSuccess" enum="ProxyScheme"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Scheme of the proxy server used by an HTTP job that succeeded, or
    SCHEME_INVALID if no proxy was used. A value is emitted for each successful
    HTTP stream. Note: Although SCHEME_DIRECT is deprecated, value 1 corresponds
    to a direct proxy. Warning: this histogram was expired from 2023-03-19 to
    2023-12-01; data may be missing.
  </summary>
</histogram>

<histogram name="Net.HttpJob.TotalTime" units="ms" expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <summary>
    Time it takes to complete an HttpJob, from starting the transaction until we
    are done reading.
  </summary>
</histogram>

<histogram name="Net.HttpJob.TotalTime.TLS13.Google" units="ms"
    expires_after="2025-01-21">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time it takes to complete an HttpJob to a Google host, from starting the
    transaction until we are done reading, if the response was received over TLS
    1.3 and TCP. This is recorded to measure the impact of 0-RTT.
  </summary>
</histogram>

<histogram name="Net.HttpJob.TotalTimeCached" units="ms" expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <summary>
    Time it takes to complete an HttpJob, from starting the transaction until we
    are done reading, for jobs served from the cache.
  </summary>
</histogram>

<histogram name="Net.HttpJob.TotalTimeCancel" units="ms" expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <summary>
    Time it takes to complete an HttpJob, from starting the transaction until
    the job is killed. Note that we didn't detect the end of the data for this
    job.
  </summary>
</histogram>

<histogram name="Net.HttpJob.TotalTimeNotCached" units="ms"
    expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <summary>
    Time it takes to complete an HttpJob, from starting the transaction until we
    are done reading, for jobs not served from the cache.
  </summary>
</histogram>

<histogram name="Net.HttpJob.TotalTimeSuccess" units="ms" expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <summary>
    Time it takes to complete an HttpJob, from starting the transaction until we
    are done reading, for jobs when we read until no more data is available.
  </summary>
</histogram>

<histogram name="Net.HttpOriginalContentLengthV2" units="bytes"
    expires_after="never">
<!-- expires-never: Input to Lingo pipelines. -->

  <owner>[email protected]</owner>
  <summary>
    Net.HttpOriginalContentLength with non-data reduction proxy traffic properly
    labeled with the &quot;Direct&quot; suffix.

    Size specified in the X-Original-Content-Length header. If this header is
    not present in the response, the size of the response body is used. Replaces
    Net.HttpOriginalContentLength, breaking down traffic by Direct, ViaDRP,
    Bypassed, and Other.
  </summary>
</histogram>

<histogram name="Net.HttpOriginalContentLengthWithValidOCL" units="bytes"
    expires_after="M85">
  <owner>[email protected]</owner>
  <summary>
    Size specified in the X-Original-Content-Length header. Only includes
    resources that have the X-Original-Content-Length header.
  </summary>
</histogram>

<histogram name="Net.HttpProxy.ConnectLatency" units="ms"
    expires_after="2023-09-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Time taken to establish the connection to the HTTP proxy. Note that the
    histogram expired briefly for M-86 and M-87 non-stable versions. Exact
    counts during that period may not be meaningful.
  </summary>
</histogram>

<histogram name="Net.HttpRequestSSLUpgradeDecision"
    enum="HttpRequestSSLUpgradeDecision" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded for all top-frame HTTP/HTTPS/WS/WSS requests made by
    UrlRequestHttpJob. Records whether the request was upgraded from HTTP (or
    WS) to HTTPS (or WSS), and whether the decision to upgrade required dynamic
    STS data.
  </summary>
</histogram>

<histogram name="Net.HttpRequestStsState" enum="HttpRequestStsState"
    expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The HSTS status of top-frame HTTP/WS requests made by UrlRequestHttpJob.
    Requests with kProtectedHttp are immediately internally redirected to a
    secure request.
  </summary>
</histogram>

<histogram name="Net.HttpResponseCode" enum="HttpResponseCode"
    expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <summary>The count of HTTP Response codes encountered.</summary>
</histogram>

<histogram name="Net.HttpResponseCode2" enum="HttpResponseCode"
    expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The count of HTTP Response codes encountered, for codes registered in the
    IANA HTTP Status Code Registry. Ignores unknown response codes. Recorded
    when HttpResponseHeaders are constructed, after parsing.
  </summary>
</histogram>

<histogram name="Net.HttpTimeToFirstByte" units="ms" expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <summary>
    Time from when an HTTP request is issued to when the first byte is
    processed.
  </summary>
</histogram>

<histogram name="Net.HttpTimeToFirstByte.TLS13.Google" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time from when an HTTP request to a Google host is issued to when the first
    byte is processed, if the response was not cached and received over TLS 1.3
    and TCP. This is recorded to measure the impact of 0-RTT.
  </summary>
</histogram>

<histogram name="Net.NeedsHWCAP2Workaround" enum="BooleanBroken"
    expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>src/third_party/boringssl/OWNERS</owner>
  <summary>
    Records, on startup, for ARM devices running Android, whether the kernel is
    missing AT_HWCAP2 from the ELF auxv and /proc/cpuinfo reports support for
    ARMv8 features. Those features should also be reported in AT_HWCAP2. This is
    to measure the workaround in https://crbug.com/boringssl/46.
  </summary>
</histogram>

<histogram name="Net.NetworkChangeNotifier.NewConnectionCost"
    enum="NetworkConnectionCost" expires_after="2023-11-12">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The new network connection cost any time a change to the device's active
    default network is observed.
  </summary>
</histogram>

<histogram name="Net.NetworkChangeNotifier.NewConnectionType"
    enum="NetworkConnectionType" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The new network connection type any time a change to the device's active
    default network is observed.
  </summary>
</histogram>

<histogram name="Net.NetworkErrorLogging.SignedExchangeRequestOutcome"
    enum="NetNetworkErrorLoggingRequestOutcome" expires_after="2023-03-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When Network Error Logging observes a completed request of signed exchange
    that might generate a report, what happens to it. NEL observes all requests,
    both successful and unsuccessful. It sends reports for successful and
    unsuccessful requests at specified sampling rates so that error rates can be
    calculated. Insecure requests are discarded for having an insecure origin
    regardless of existence of a policy for the origin.
  </summary>
</histogram>

<histogram
    name="Net.NetworkTransaction.GenerateProxyAuthTokenBlocked{HostType}.{Protocol}"
    enum="Boolean" expires_after="2024-11-13">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Records whether generating a proxy auth token is blocked or not. Recorded
    every time HttpAuthController::MaybeGenerateAuthToken() is called in
    HttpNetworkTransaction::DoGenerateProxyAuthToken().
  </summary>
  <token key="HostType" variants="NetworkTransactionBlockedHostType"/>
  <token key="Protocol" variants="NetworkTransactionBlockedProtocol"/>
</histogram>

<histogram
    name="Net.NetworkTransaction.GenerateProxyAuthTokenBlockTime{HostType}.{Protocol}"
    units="ms" expires_after="2024-11-13">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The time taken for a proxy auth token generation to finish if the generation
    was blocked. Recorded in
    HttpNetworkTransaction::DoGenerateProxyAuthTokenComplete() when the
    generation is complete.
  </summary>
  <token key="HostType" variants="NetworkTransactionBlockedHostType"/>
  <token key="Protocol" variants="NetworkTransactionBlockedProtocol"/>
</histogram>

<histogram
    name="Net.NetworkTransaction.GenerateServerAuthTokenBlocked{HostType}.{Protocol}"
    enum="Boolean" expires_after="2024-11-13">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Records whether generating a server auth token is blocked or not. Recorded
    every time HttpAuthController::MaybeGenerateAuthToken() is called in
    HttpNetworkTransaction::DoGenerateServerAuthToken().
  </summary>
  <token key="HostType" variants="NetworkTransactionBlockedHostType"/>
  <token key="Protocol" variants="NetworkTransactionBlockedProtocol"/>
</histogram>

<histogram
    name="Net.NetworkTransaction.GenerateServerAuthTokenBlockTime{HostType}.{Protocol}"
    units="ms" expires_after="2024-11-13">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The time taken for a server auth token generation to finish if the
    generation was blocked. Recorded in
    HttpNetworkTransaction::DoGenerateServerAuthTokenComplete() when the
    generation is complete.
  </summary>
  <token key="HostType" variants="NetworkTransactionBlockedHostType"/>
  <token key="Protocol" variants="NetworkTransactionBlockedProtocol"/>
</histogram>

<histogram
    name="Net.NetworkTransaction.InitializeStreamBlocked{HostType}.{Protocol}"
    enum="Boolean" expires_after="2024-11-13">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Records whether HTTP stream initialization is blocked or not. Recorded every
    time HttpStream::InitializeStream() is called.
  </summary>
  <token key="HostType" variants="NetworkTransactionBlockedHostType"/>
  <token key="Protocol" variants="NetworkTransactionBlockedProtocol"/>
</histogram>

<histogram
    name="Net.NetworkTransaction.InitializeStreamBlockTime{HostType}.{Protocol}"
    units="ms" expires_after="2024-11-13">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The time taken for HTTP stream initialization to finish if the
    initialization was blocked. Recorded in
    HttpNetworkTransaction::DoInitStreamComplete when the stream initialization
    is complete.
  </summary>
  <token key="HostType" variants="NetworkTransactionBlockedHostType"/>
  <token key="Protocol" variants="NetworkTransactionBlockedProtocol"/>
</histogram>

<histogram name="Net.NetworkTransaction{HostType}.RetryReason"
    enum="HttpNetworkTransactionRetryReason" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>Log the reason when HttpNetworkTransaction retries.</summary>
  <token key="HostType">
    <variant name=""/>
    <variant name="H3SupportedGoogleHost"/>
  </token>
</histogram>

<histogram name="Net.NumQuicSessionsAtShutdown" units="units"
    expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of QUIC sessions when the QuicSessionPool is destroyed.
  </summary>
</histogram>

<histogram name="Net.OnTransferSizeUpdated.Experimental.OverridenBy"
    enum="OnTransferSizeUpdatedFrom" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of times OnTransferSizeUpdated is called from different
    overriding methods. This UMA is useful to understand the distribution of
    calls being made to this method and will help see the reductions in IPC when
    we implement a prototype (b/257057692) where we remove unnecessary
    URLLoaderClient::OnTransferSizeUpdated IPCs.
  </summary>
</histogram>

<histogram name="Net.ProxyScriptFetcher.FirstByteDuration" units="ms"
    expires_after="2024-04-03">
  <owner>[email protected]</owner>
  <summary>
    The time taken from requesting a PAC script to receiving the first byte of
    the response body on successful fetches. This does not include time spent
    doing proxy auto-discovery, or failed attempts at retrieving PAC scripts. If
    the response body was empty, this measures the total time to fetch the
    (empty) response body.
  </summary>
</histogram>

<histogram name="Net.PublicKeyPinReportSendingFailure2" enum="NetErrorCodes"
    expires_after="M77">
  <owner>[email protected]</owner>
  <summary>
    A validated certificate chain may be subject to additional pinning
    requirements on a per-domain basis. When pinning requirements are violated,
    Chrome attempts to send a report about the incident. This records the net
    error code when sending a pinning violation report fails.
  </summary>
</histogram>

<histogram name="Net.QuicActiveSessionCount.{GoingAwayReason}" units="sesions"
    expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of active sessions that are marked as going away because
    {GoingAwayReason}.
  </summary>
  <token key="GoingAwayReason">
    <variant name="CertDBChanged" summary="the certificate database changed"/>
    <variant name="CertVerifierChanged"
        summary="the certificate veriier changed"/>
    <variant name="ClockSkewDetected" summary="a clock skew was detected"/>
    <variant name="IPAddressChanged" summary="an IP address changed"/>
  </token>
</histogram>

<histogram name="Net.QuicActiveSessions" units="units"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of active QUIC sessions before we activate a new QUIC session.

    Warning: this histogram was expired from 09/12/2022 to 03/22/2023; data may
    be missing.
  </summary>
</histogram>

<histogram name="Net.QuicAltSvcFormat" enum="QuicAltSvcFormat"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Tracks the number of QUIC alt-svc advertisements parsed by Chrome in Google
    format vs in IETF format.
  </summary>
</histogram>

<histogram name="Net.QuicChromiumClientStream.HandleOnCloseConnectionError"
    enum="QuicErrorCodes" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Log the connection error code when QUIC stream handle closes.
  </summary>
</histogram>

<histogram name="Net.QuicChromiumClientStream.HandleOnCloseNetError"
    enum="NetErrorCodes" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>Log the net error code when QUIC stream handle closes.</summary>
</histogram>

<histogram name="Net.QuicChromiumClientStream.HandleOnCloseStreamError"
    enum="QuicRstStreamErrorCodes" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>Log the stream error code when QUIC stream handle closes.</summary>
</histogram>

<histogram name="Net.QuicChromiumClientStream.HeaderDecodingDelay{ServerType}"
    units="ms" expires_after="2025-06-07">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The delay in decoding received headers due to having to wait for dynamic
    table entries to arrive on the QPACK encoder stream. Zero if header block
    could be decoded as soon as it was received. This is recorded for
    connections made to {ServerType}.
  </summary>
  <token key="ServerType">
    <variant name="" summary="all QUIC servers"/>
    <variant name="Google" summary="Google servers"/>
  </token>
</histogram>

<histogram
    name="Net.QuicChromiumClientStream.Http3DatagramDroppedOnWriteConnectUdpPayload"
    enum="BooleanSuccess" expires_after="2024-12-04">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Records whether an HTTP Datagram was dropped when trying to send a UDP
    payload over the QUIC stream. Datagram is dropped if the QUIC session has
    not yet received SETTINGS_H3_DATAGRAM frame and therefore does not support
    sending or receiving datagrams.
  </summary>
</histogram>

<histogram name="Net.QuicChromiumClientStream.TrailingHeadersProcessSuccess"
    enum="BooleanSuccess" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>Log success rate of processing trailing headers.</summary>
</histogram>

<histogram name="Net.QuicConnection.MultiPortPathCreationCancelled"
    enum="PathValidationReason" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The reason for the existing path validation when a new multi-port path
    creation is attempted but failed because of existing validation.
  </summary>
</histogram>

<histogram name="Net.QuicConnection.MultiPortPathStatusWhenMigrating"
    enum="MultiPortStatusOnMigration" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The status of the multi-port path when the client initiates the migration.
  </summary>
</histogram>

<histogram name="Net.QuicConnection.ServerAllowsActiveMigrationForMultiPort"
    enum="BooleanEnabled" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    When multi-port is enabled, log whether the server allows active migration
    that's required for multi-port
  </summary>
</histogram>

<histogram name="Net.QuicConnection.WritePacketStatus" enum="QuicWriteStatus"
    expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The write result returned by the packet writer when the connection attempts
    to write a packet.
  </summary>
</histogram>

<histogram name="Net.QuicConnectivityMonitor.NumActiveDegradingSessions"
    units="sessions" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of active sessions that are degrading on network changes. The
    suffix specifies the network change. Emitted when there are more than one
    active sessions.

    The histogram is emitted when a network change happens which could affect
    the current default network, which includes the default network being
    changed, alternate networks being connected. It, however, doesn't emit when
    disconnecting an alternate network because that does not affect the current
    default network.
  </summary>
</histogram>

<histogram
    name="Net.QuicConnectivityMonitor.NumActiveQuicSessionsAtNetworkChange"
    units="sessions" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of active QUIC sessions when a network change is detected. The
    suffix specifies the network change.

    The histogram is emitted when a network change happens which could affect
    the current default network, which includes the default network being
    changed, alternate networks being connected. It, however, doesn't emit when
    disconnecting an alternate network because that does not affect the current
    default network.
  </summary>
</histogram>

<histogram name="Net.QuicConnectivityMonitor.NumAllDegradedSessions"
    units="sessions" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of all sessions that detectes path degradation until a network
    change happens, including both active sessions and closed sessions. The
    suffix specifies the network change.

    The histogram is emitted when a network change happens which could affect
    the current default network, which includes the default network being
    changed, alternate networks being connected. It, however, doesn't emit when
    disconnecting an alternate network because that does not affect the current
    default network.
  </summary>
</histogram>

<histogram
    name="Net.QuicConnectivityMonitor.NumAllSessionsDegradedAtNetworkChange"
    units="sessions" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The total number of sessions that reports path degradation before a network
    change happens, including both still active sessions and closed sessions.

    The histogram is emitted when a network change happens which could affect
    the current default network, which includes the default network being
    changed, alternate networks being connected. It, however, doesn't emit when
    disconnecting an alternate network because that does not affect the current
    default network.
  </summary>
</histogram>

<histogram
    name="Net.QuicConnectivityMonitor.NumSessionsTrackedSinceSpeculativeError"
    units="sessions" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of total sessions that has been tracked since the first
    speculative error, including both active and closed sessions. Only recorded
    if non-zero.

    The histogram is emitted when a network change happens which could affect
    the current default network, which includes the default network being
    changed, alternate networks being connected. It, however, doesn't emit when
    disconnecting an alternate network because that does not affect the current
    default network.
  </summary>
</histogram>

<histogram
    name="Net.QuicConnectivityMonitor.NumWriteErrorsSeenBeforeDegradation"
    units="errors" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of total sessions that has been closed due to
    QUIC_PACKET_WRITE_ERROR before first path degradation detection.

    The histogram is emitted when session path degrading is detected for the
    first time on the current network and there was a session closed with a
    speculative signal (QUIC_PACKET_WRITE_ERROR).
  </summary>
</histogram>

<histogram name="Net.QuicConnectivityMonitor.PercentageActiveDegradingSessions"
    units="%" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The percentage of active sessions that are degrading on network changes. The
    suffix specifies the network change. Emitted when there are at least two
    active sessions.

    The histogram is emitted when a network change happens which could affect
    the current default network, which includes the default network being
    changed, alternate networks being connected. It, however, doesn't emit when
    disconnecting an alternate network because that does not affect the current
    default network.
  </summary>
</histogram>

<histogram name="Net.QuicConnectivityMonitor.PercentageAllDegradedSessions"
    units="%" expires_after="2023-09-17">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The percentage of all sessions that detectes path degradation until a
    network change happens, including both active sessions and closed sessions.
    Always emit 0 when there is no session reporting path degrading to speculate
    a connectivity failure on the current network. The suffix specifies the
    network change.

    The histogram is emitted when a network change happens which could affect
    the current default network, which includes the default network being
    changed, alternate networks being connected. It, however, doesn't emit when
    disconnecting an alternate network because that does not affect the current
    default network.
  </summary>
</histogram>

<histogram name="Net.QuicConnectivityMonitor.SessionDegradedBeforeWriteError"
    enum="BooleanDetected" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    When a packet write error is detected by the session, if path degradation
    has been detected already on the same session.

    The histogram is emitted when a session encounters a QUIC_PACKET_WRITE_ERROR
    and is soon to be closed.
  </summary>
</histogram>

<histogram name="Net.QuicDiskCache.FailureReason"
    enum="QuicDiskCacheFailureReason" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Tracks failure reasons to read/load/write of QuicServerInfo to and from disk
    cache.
  </summary>
</histogram>

<histogram name="Net.QuicDroppedPacketReason" enum="QuicDroppedPacketReason"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The reason a QUIC packet could not be processed, logged for each dropped
    packet.
  </summary>
</histogram>

<histogram name="Net.QuicHandshakeNotConfirmedNumPacketsReceived" units="units"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of QUIC packets received by a QUIC connection whose handshake was
    not confirmed when that connection is closed.

    Warning: this histogram was expired from 09/12/2022 to 03/22/2023; data may
    be missing.
  </summary>
</histogram>

<histogram name="Net.QuicHandshakeState" enum="QuicHandshakeState"
    expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The state of a QUIC connection's crypto hanshake as it progresses from
    starting to confirmation or failure.
  </summary>
</histogram>

<histogram name="Net.QuicHttpStream.ProcessResponseHeaderSuccess"
    enum="BooleanSuccess" expires_after="2024-01-21">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Log the success rate of HTTP layer reading QUIC response headers, for
    investigating b/177893733.
  </summary>
</histogram>

<histogram name="Net.QuicHttpStream.ResponseStatus"
    enum="QuicRstStreamErrorCodes" expires_after="2024-11-27">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Stream error of QuicSpdyStream when QuicHttpStream::ComputeResponseStatus()
    returns ERR_QUIC_PROTOCOL_ERROR, for investigating b/177893733.
  </summary>
</histogram>

<histogram name="Net.QuicMultiPort.AltPortFailureWhenPathDegradingVsGeneral"
    units="%" expires_after="2024-11-17">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The percentage comparison between alternative port probe failure when
    default path is degrading and in general.
  </summary>
</histogram>

<histogram name="Net.QuicMultiPort.AltPortRttWhenPathDegradingVsGeneral"
    units="%" expires_after="2024-07-07">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The percentage comparison between alternative port response time when
    default path is degrading and response time in general.
  </summary>
</histogram>

<histogram name="Net.QuicMultiPort.NumMultiPortFailureWhenPathDegrading"
    units="times" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of alternative port probing failure when the default path is
    degrading.
  </summary>
</histogram>

<histogram name="Net.QuicMultiPort.NumMultiPortFailureWhenPathNotDegrading"
    units="times" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of alternative port probing failure when the default path is
    healthy.
  </summary>
</histogram>

<histogram name="Net.QuicMultiPort.NumProbeAttempts" units="times"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>The number of alternative port probing attempts.</summary>
</histogram>

<histogram name="Net.QuicMultiPort.NumSuccessfulProbes" units="times"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>The number of successful alternative port probes.</summary>
</histogram>

<histogram name="Net.QuicNetworkDegradingDurationTillConnected" units="ms"
    expires_after="2023-09-17">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Time from when QUIC detects performance degradation on the current network
    to when QUIC notices a new network is connected.
  </summary>
</histogram>

<histogram name="Net.QuicNetworkDegradingDurationTillDisconnected" units="ms"
    expires_after="2024-05-05">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Time from when QUIC detects performance degradation on the current network
    to when QUIC notices the current network is disconnected.
  </summary>
</histogram>

<histogram name="Net.QuicNetworkDegradingDurationTillNewNetworkMadeDefault"
    units="ms" expires_after="2024-05-26">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The time from QUIC detecting network performance degradation to an
    alternative network becoming default.
  </summary>
</histogram>

<histogram name="Net.QuicNetworkDisconnectionDuration" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The time from network disconnection to an alternative network becoming
    default.
  </summary>
</histogram>

<histogram name="Net.QuicNumServerConfig.UpdateMessagesIgnored"
    enum="BooleanIgnored" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>The number of times ServerConfigUpdateMessages ignored.</summary>
</histogram>

<histogram name="Net.QuicProxyDatagramClientSocket.MaxQueueSizeReached"
    enum="BooleanSuccess" expires_after="2024-12-04">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Records whether queue is at maximum capacity when an HTTP/3 datagram arrives
    on the QUIC stream in client socket. A QUIC connection parses the Datagram
    frame and passes it to the QUIC SPDY session, which then extracts the
    quarter stream ID to determine which stream to invoke `OnHttp3Datagram`
    method on. The incoming datagram is dropped if full and added to queue
    otherwise.
  </summary>
</histogram>

<histogram name="Net.QuicServerInfo.DiskCacheState"
    enum="QuicServerConfigState" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The state of the QUIC server information when it's loaded from the disk
    cache.
  </summary>
</histogram>

<histogram name="Net.QuicSession.AbortedPendingStreamRequests"
    units="stream requests" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of pending stream requests aborted when the session is closed.
    Pending streams are those which could not be created immediately because
    there were too many active streams.
  </summary>
</histogram>

<histogram name="Net.QuicSession.AcceptChForOrigin" enum="Boolean"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Records whether the QUIC session received an Accept-CH entry for the given
    origin, which GetAcceptChViaAlps() returns. Logged every time
    QuicHttpStream::GetAcceptChViaAlps() is called, typically once for each
    request that is served over HTTP/3.
  </summary>
</histogram>

<histogram name="Net.QuicSession.AcceptChFrameReceivedViaAlps"
    enum="AcceptChEntries" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Records both whether there are any valid origin fields and whether there are
    any invalid ones in the ACCEPT_CH frame. Logged during the TLS handshake of
    a QUIC connection if ALPS is negotiated, once for every ACCEPT_CH HTTP/3
    frame received (possibly zero, typically not more than one).
  </summary>
</histogram>

<histogram name="Net.QuicSession.ActiveStreamsOnGoAwayAfterPathDegrading"
    units="Streams" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of active streams when the quic session decides to go away on
    path degrading.
  </summary>
</histogram>

<histogram name="Net.QuicSession.AsyncRead" enum="Boolean"
    expires_after="2024-11-17">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    True if the result of reading a packet from the network was ERR_IO_PENDING.
    Recorded for each packet when Read() returns.

    Warning: this histogram was expired from 09/12/2022 to 03/22/2023; data may
    be missing.
  </summary>
</histogram>

<histogram name="Net.QuicSession.BlockedFrames.Received" units="units"
    expires_after="2024-02-04">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of BLOCKED frames recevied by a QuicSession when the session is
    closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.BlockedFrames.Sent" units="units"
    expires_after="2024-02-04">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of BLOCKED frames sent by a QuicSession when the session is
    closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.CertVerificationResult" enum="NetErrorCodes"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The network error code returned to a QUIC session from the CertVerifier when
    a certification verification is attempted.
  </summary>
</histogram>

<histogram name="Net.QuicSession.CertVerifierJob.CompleteTime"
    units="Milliseconds" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Time spent verifying a certificate when racing cert veriifcation with host
    resolution.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ClientSideMtu" units="bytes"
    expires_after="2025-04-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The final maximum packet size of the connection used by the client before
    the session is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.CloseAllSessionsError" enum="NetErrorCodes"
    expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The network error code which resulted in all sessions being closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ClosedByPublicReset{HandshakeType}"
    enum="Boolean" expires_after="2024-06-02">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    For a QUIC session that is closed by a public reset, where the handshake was
    {HandshakeType}, this boolean shows whether it is a public reset sent from a
    Google server or not.
  </summary>
  <token key="HandshakeType">
    <variant name="" summary="not confirmed"/>
    <variant name=".HandshakeConfirmed" summary="confirmed"/>
  </token>
</histogram>

<histogram name="Net.QuicSession.ClosedByRtoAtClient.ReceivedPacketCount"
    units="packets" expires_after="2023-11-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    For a QUIC session that is closed by QUIC_TOO_MANY_RTOS at client, this is
    the number of packets it received before it is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ClosedByRtoAtClient.SentPacketCount"
    units="packets" expires_after="2023-11-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    For a QUIC session that is closed by QUIC_TOO_MANY_RTOS at client, this is
    the number of packets it sent before it is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ClosedDuringInitializeSession" enum="Boolean"
    expires_after="2024-05-26">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    True if the QUIC session is closed during the call to InitializeSession,
    logged for each session just after InitializeSession is called.
  </summary>
</histogram>

<histogram name="Net.QuicSession.CloseSessionOnError" enum="NetErrorCodes"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The network error code which resulted in the session being closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.CoalesceStreamFrameStatus"
    enum="BooleanCoalesced" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    When a new stream frame is added to a QUIC packet, record whether it's
    coalesced with the existing stream frames.
  </summary>
</histogram>

<histogram name="Net.QuicSession.Connect" units="RTTs"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Samples of the number of round-trips needed by a QUIC connection before a
    request could be sent by the client.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectAfterBroken" enum="BooleanSuccess"
    expires_after="2024-06-02">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    True if a QUIC connection connected successfully after having been broken.
    Only emitted after a QUIC connection attempt to a server that was previous
    marked as broken.
  </summary>
</histogram>

<histogram
    name="Net.QuicSession.ConnectionClose.HandshakeFailureBlackHole.QuicError"
    enum="QuicErrorCodes" expires_after="2023-09-17">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The QUIC error which caused a QUIC connection to be closed before the
    hanshake was confirmed, in the case where no packets were received. This
    provides a breakdown of the entires in
    Net.QuicSession.ConnectionClose.HandshakeNotConfirmed.Reason where the value
    is BLACK_HOLE.
  </summary>
</histogram>

<histogram
    name="Net.QuicSession.ConnectionClose.HandshakeFailureUnknown.QuicError"
    enum="QuicErrorCodes" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The QUIC error which caused a QUIC connection to be closed before the
    hanshake was confirmed, in the case where at least 1 packet was received.
    This provides a breakdown of the entires in
    Net.QuicSession.ConnectionClose.HandshakeNotConfirmed.Reason where the value
    is UNKNOWN.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionClose.HandshakeNotConfirmed.Reason"
    enum="QuicHandshakeFailureReason" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>The reason a QUIC handshake failed.</summary>
</histogram>

<histogram
    name="Net.QuicSession.ConnectionClose.NumOpenStreams.HandshakeTimedOut"
    units="units" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of streams open when a QUIC session crypto handshake timed out.

    Warning: this histogram was expired from 09/12/2022 to 03/22/2023; data may
    be missing.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionClose.NumOpenStreams.TimedOut"
    units="units" expires_after="2024-02-11">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>The number of streams open when a QUIC session timed out.</summary>
</histogram>

<histogram
    name="Net.QuicSession.ConnectionClose.NumTotalStreams.HandshakeTimedOut"
    units="units" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of total streams created when a QUIC session crypto handshake
    timed out.
  </summary>
</histogram>

<histogram
    name="Net.QuicSession.ConnectionCloseErrorCodeServerIetfApplication{GQuicMissing}{ServerType}{HandshakeType}"
    enum="QuicHttp3ErrorCodes" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The QUIC application transport error code in a CONNECTION_CLOSE frame
    received from the server{GQuicMissing}. This is recorded for connections
    made to {ServerType}{HandshakeType}.
  </summary>
  <token key="GQuicMissing">
    <variant name="" summary=""/>
    <variant name="GQuicErrorMissing"
        summary=", when the GQUIC error was missing"/>
  </token>
  <token key="ServerType">
    <variant name="" summary="all QUIC servers"/>
    <variant name="ECH" summary="ECH-capable servers">
      <owner>[email protected]</owner>
      <owner>[email protected]</owner>
      <owner>src/net/quic/OWNERS</owner>
    </variant>
    <variant name="Google" summary="Google servers"/>
  </token>
  <token key="HandshakeType">
    <variant name="" summary=""/>
    <variant name=".HandshakeConfirmed"
        summary=", where the handshake was confirmed"/>
    <variant name=".HandshakeNotConfirmed"
        summary=", where the handshake was not confirmed"/>
  </token>
</histogram>

<histogram
    name="Net.QuicSession.ConnectionCloseErrorCodeServerIetfTransport{GQuicMissing}{ServerType}{HandshakeType}"
    enum="QuicTransportErrorCodes" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The QUIC transport error code in a CONNECTION_CLOSE frame received from the
    server{GQuicMissing}. This is recorded for connections made to
    {ServerType}{HandshakeType}.

    Warning: the ConnectionCloseErrorCodeServerIetfTransportGoogle variant was
    expired from 09/12/2022 to 03/22/2023; data may be missing.
  </summary>
  <token key="GQuicMissing">
    <variant name="" summary=""/>
    <variant name="GQuicErrorMissing"
        summary=", when the GQUIC error was missing"/>
  </token>
  <token key="ServerType">
    <variant name="" summary="all QUIC servers"/>
    <variant name="ECH" summary="ECH-capable servers">
      <owner>[email protected]</owner>
      <owner>[email protected]</owner>
      <owner>src/net/quic/OWNERS</owner>
    </variant>
    <variant name="Google" summary="Google servers"/>
  </token>
  <token key="HandshakeType">
    <variant name="" summary=""/>
    <variant name=".HandshakeConfirmed"
        summary=", where the handshake was confirmed"/>
    <variant name=".HandshakeNotConfirmed"
        summary=", where the handshake was not confirmed"/>
  </token>
</histogram>

<histogram
    name="Net.QuicSession.ConnectionCloseErrorCode{Closer}{ServerType}{HandshakeType}"
    enum="QuicErrorCodes" expires_after="2025-02-09">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The QUIC error code which resulted in the QUIC connection being closed by
    the {Closer}. This is recorded for connections made to
    {ServerType}{HandshakeType}.
  </summary>
  <token key="Closer">
    <variant name="Client" summary="client"/>
    <variant name="Server" summary="server"/>
  </token>
  <token key="ServerType">
    <variant name="" summary="all QUIC servers"/>
    <variant name="ECH" summary="ECH-capable servers">
      <owner>[email protected]</owner>
      <owner>[email protected]</owner>
      <owner>src/net/quic/OWNERS</owner>
    </variant>
    <variant name="Google" summary="Google servers"/>
  </token>
  <token key="HandshakeType">
    <variant name="" summary=""/>
    <variant name=".HandshakeConfirmed"
        summary=", where the handshake was confirmed"/>
    <variant name=".HandshakeNotConfirmed"
        summary=", where the handshake was not confirmed"/>
  </token>
</histogram>

<histogram name="Net.QuicSession.ConnectionDuration" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The duration of a QUIC connection starting from 1-RTT key available to
    connection close.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionDurationWithPublicReset" units="ms"
    expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>Duration of connections received PUBLIC_RESET.</summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionFlowControlBlocked"
    enum="BooleanBlocked" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Whether QUIC session's connection is flow control blocked when a PING
    message is sent to server.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionIpPooled" enum="Boolean"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    True if an active session already exists for a given Ip during connection.
    Recorded when attempting to create a new session. Warning: this histogram
    was expired from 2024-02-04 to 2024-03-28; data may be missing.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionMigration"
    enum="QuicConnectionMigrationStatus" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The result of a QUIC connection migration attempt. The suffix specifies the
    cause of connection migration.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionTypeFromPeer" enum="AddressFamily"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The IP Address family of this connection, as reported by the server.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionTypeFromSelf" enum="AddressFamily"
    expires_after="2023-09-17">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>The IP Address family of this connection, as seen locally.</summary>
</histogram>

<histogram name="Net.QuicSession.ConnectRandomPortRequiringConfirmation"
    units="RTTs" expires_after="2024-02-11">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Samples of the number of round-trips needed by a QUIC connection before a
    request could be sent by the client, when handshake confirmation was
    required. (The operating system randomly selected a source port for the
    connection.)
  </summary>
</histogram>

<histogram name="Net.QuicSession.CreationError" enum="QuicSessionErrorCodes"
    expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Count of errors during attempts to create a QUIC session (before even using
    the session).
  </summary>
</histogram>

<histogram name="Net.QuicSession.CryptoRetransmitCount.HandshakeConfirmed"
    units="count" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Times of retransmission time out of connections with successful handshake.
  </summary>
</histogram>

<histogram name="Net.QuicSession.CryptoRetransmitCount.HandshakeNotConfirmed"
    units="count" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Times of crypto retransmission timeout of connections with failed handshake.
  </summary>
</histogram>

<histogram name="Net.QuicSession.DrainingStreamsOnGoAwayAfterPathDegrading"
    units="Streams" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of draining streams when the quic session decides to go away on
    path degrading.
  </summary>
</histogram>

<histogram name="Net.QuicSession.DuplicatePacketsReceived" units="units"
    expires_after="2024-02-04">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of duplicate packets recevied by a QuicSession when the session
    is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.EcnMarksObserved" enum="EcnPermutations"
    expires_after="2024-10-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The combination of ECN marks observed on a single QuicSession. Recorded when
    the session is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.EncryptionEstablishedTime"
    units="Milliseconds" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The elapsed time between starting the crypto handshake and installing the
    first encryption key that can carry application data (either 0-RTT or
    1-RTT).
  </summary>
</histogram>

<histogram name="Net.QuicSession.FinalTcpCwnd" units="units"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The value of the TCP cubic sender's CWND when the session is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.FinchConfigIsValid" enum="Boolean"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Logged every time we parse a QUIC Finch config, and logs whether the config
    was valid. Invalid configs are most likely to be obsolete configs. Note that
    this is still logged (as true) when no variations config is present.

    Warning: this histogram was expired from 09/12/2022 to 03/22/2023; data may
    be missing.
  </summary>
</histogram>

<histogram name="Net.QuicSession.FinchObsoleteVersion" enum="Boolean"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Triggered any time Finch configures an obsolete QUIC version. Only recorded
    when obsolete versions are not allowed (which is the default).
  </summary>
</histogram>

<histogram name="Net.QuicSession.FindMatchingIpSessionResult{ServerType}"
    enum="QuicFindMatchingIpSessionResult" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Result of finding matching IP session when DNS resolution finishes.
  </summary>
  <token key="ServerType">
    <variant name="" summary="all QUIC servers"/>
    <variant name="Google" summary="Google servers"/>
  </token>
</histogram>

<histogram name="Net.QuicSession.GapBetweenWriteErrorAndNetworkDisconnection"
    units="ms" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    This measures the time gap between the most recent write error and the
    network disconnection.
  </summary>
</histogram>

<histogram name="Net.QuicSession.GoAwayReceivedForConnectionMigration"
    enum="BooleanReceived" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Whether QuicGoAwayFrame is received from server for connection migration due
    to client's port change. Logged when a QuicGoAwayFrame with error code
    QUIC_ERROR_MIGRATING_PORT is received.
  </summary>
</histogram>

<histogram name="Net.QuicSession.HandshakeConfirmedTime" units="Milliseconds"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The elapsed time between starting the crypto handshake, and receiving
    confirmation from the server.

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

<histogram name="Net.QuicSession.HandshakeConfirmedTime.ECH"
    units="Milliseconds" expires_after="2024-08-04">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The elapsed time between starting the crypto handshake, and receiving
    confirmation from the server, measured only for ECH-capable servers.
  </summary>
</histogram>

<histogram name="Net.QuicSession.HandshakeStatusOnConnectionMigration"
    enum="BooleanConfirmed" expires_after="2023-09-17">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The handshake status when the session attempts to migrate the connection
    according to different migration causes.
  </summary>
</histogram>

<histogram
    name="Net.QuicSession.HandshakeStatusOnMigratingToServerPreferredAddress"
    enum="BooleanConfirmed" expires_after="2024-05-11">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The handshake status when the session attempts to validate received server
    preferred address.
  </summary>
</histogram>

<histogram name="Net.QuicSession.HandshakeStatusOnPortMigration"
    enum="BooleanConfirmed" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The handshake status when the session attempts to port migration on path
    degrading.
  </summary>
</histogram>

<histogram name="Net.QuicSession.HandshakeTimeout.PathDegradingDetected"
    enum="BooleanDetected" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Whether path degrading has been detected by the time a QUIC connection is
    closed due to handshake timeout.
  </summary>
</histogram>

<histogram name="Net.QuicSession.HeaderCompressionRatioHpackReceived" units="%"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Header compression ratio as percentage for received headers using HPACK.

    Warning: this histogram was expired from 09/12/2022 to 03/22/2023; data may
    be missing.
  </summary>
</histogram>

<histogram name="Net.QuicSession.HeaderCompressionRatioHpackSent" units="%"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Header compression ratio as percentage for sent headers using HPACK.

    Warning: this histogram was expired from 09/12/2022 to 03/22/2023; data may
    be missing.
  </summary>
</histogram>

<histogram name="Net.QuicSession.HeaderCompressionRatioQpackReceived" units="%"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Header compression ratio as percentage for received headers using QPACK.

    Warning: this histogram was expired from 09/12/2022 to 03/22/2023; data may
    be missing.
  </summary>
</histogram>

<histogram name="Net.QuicSession.HeaderCompressionRatioQpackSent" units="%"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Header compression ratio as percentage for sent headers using QPACK.
  </summary>
</histogram>

<histogram name="Net.QuicSession.HostResolution.HandshakeConfirmedTime"
    units="Milliseconds" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The elapsed time between the end of resolving the DNS name of the server for
    a QUIC connection, and receiving crypto handshake confirmation from the
    server. Logged after crypto handshake is confirmed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.IncorrectConnectionIDsReceived" units="units"
    expires_after="2024-02-04">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number packets recevied by a QuicSession with an incorrect connection id
    when the sesesion is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.InitialRttEsitmateSource"
    enum="InitialRttEstimateSource" expires_after="2024-02-04">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The source for the initial RTT estimate recorded when a QUIC session is
    created.
  </summary>
</histogram>

<histogram name="Net.QuicSession.KeyUpdate.PerConnection2" units="count"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of key updates processed per connection, recorded on connection
    close. Only logged for connections which reached the 1-RTT level and
    supported key update.
  </summary>
</histogram>

<histogram name="Net.QuicSession.KeyUpdate.PotentialPeerKeyUpdateAttemptCount"
    units="count" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Count of packets received that appeared to attempt a key update but failed
    decryption which have been received since the last successfully decrypted
    packet, recorded on connection close. Only logged for connections which
    reached the 1-RTT level and supported key update.
  </summary>
</histogram>

<histogram name="Net.QuicSession.KeyUpdate.Reason" enum="QuicKeyUpdateReason"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>The reason why each key update occured.</summary>
</histogram>

<histogram name="Net.QuicSession.KeyUpdate.Success.{Group}"
    enum="QuicKeyUpdateSuccess" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Records the success or failure of the last key update for connections where
    the key update was initiated by the {Group} side. Failure is defined as
    having sent at least one packet in the new key phase but never receiving an
    ack for any packet sent in the new key phase before the connection was
    closed.
  </summary>
  <token key="Group">
    <variant name="Local"/>
    <variant name="Remote"/>
  </token>
</histogram>

<histogram
    name="Net.QuicSession.LastInFlightPacketSentTimeFromHandshakeCompletionWithPublicReset"
    units="ms" expires_after="2024-02-11">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Time from handshake completion to last packet was sent for connections
    received PUBLIC_RESET.
  </summary>
</histogram>

<histogram name="Net.QuicSession.LastSentPacketContentBeforePublicReset"
    units="bitfield value" expires_after="2024-05-26">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    A bitfield representing the last sent packet content before connection
    receives PUBLIC_RESET.
  </summary>
</histogram>

<histogram name="Net.QuicSession.MaxConsecutiveRtoWithForwardProgress"
    units="count" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Max consecutive retransmission timeout before making forward progress.
  </summary>
</histogram>

<histogram
    name="Net.QuicSession.MaxConsecutiveRtoWithForwardProgressAndBlackholeDetected"
    units="count" expires_after="2023-11-19">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Max consecutive retransmission timeout before making forward progress when
    blackhole has been detected.
  </summary>
</histogram>

<histogram name="Net.QuicSession.MaxReordering" units="units"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The maximum packet sequence number reordering observed by a QUIC connection.
  </summary>
</histogram>

<histogram name="Net.QuicSession.MaxReorderingTime" units="%"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The ratio of the maximum reordering time of a QUIC packet to the min rtt.
  </summary>
</histogram>

<histogram name="Net.QuicSession.MaxReorderingTimeLongRtt" units="%"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The ratio of the maximum reordering time of a QUIC packet to the min rtt,
    only for those sessions with a min rtt larger than 100 ms.
  </summary>
</histogram>

<histogram name="Net.QuicSession.MigrateToSocketSuccess" enum="Boolean"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Records whether the migration of the QuicSession to a new socket is
    successful.
  </summary>
</histogram>

<histogram name="Net.QuicSession.MinRTT" units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The minimum RTT observed during the life of a QUIC connection.
  </summary>
</histogram>

<histogram name="Net.QuicSession.MtuProbesSent" units="units"
    expires_after="2025-04-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of MTU probes sent by the client during the session. Logged when
    the connection is destroyed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.NumActiveStreamsOnIdleTimeout" units="streams"
    expires_after="2022-12-18">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of active streams when idle timeout is detected and connection is
    being closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.NumDefaultPathDegrading" units="times"
    expires_after="2024-11-17">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of times that a session enters path-degrading state on the
    default path.
  </summary>
</histogram>

<histogram name="Net.QuicSession.NumForwardProgressMadeAfterPathDegrading"
    units="times" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of times that a session makes forward progress after the original
    default path is degrading.
  </summary>
</histogram>

<histogram name="Net.QuicSession.NumMigrations" units="units"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>The number of successful migrations for a QUIC session.</summary>
</histogram>

<histogram name="Net.QuicSession.NumMigrationsExercisedBeforePublicReset"
    units="migrations" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Number of connection migrations exercised before the connection receives a
    public reset.
  </summary>
</histogram>

<histogram name="Net.QuicSession.NumOpenStreams" units="units"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of QUIC streams opened when a new QUIC stream is created.
  </summary>
</histogram>

<histogram name="Net.QuicSession.NumPendingStreamRequests"
    units="stream requests" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of pending stream requests when a new stream request is added to
    the pending list. Pending streams are those which could not be created
    immediately because there were too many active streams.
  </summary>
</histogram>

<histogram name="Net.QuicSession.NumPingsSent" units="pings"
    expires_after="2024-10-13">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of pings a QUIC connection sends during its lifetime.
  </summary>
</histogram>

<histogram name="Net.QuicSession.NumReceivedOrigins" units="origins"
    expires_after="2025-02-11">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of origins in received ORIGIN frames. This is recorded for each
    received ORIGIN frame. If multiple ORIGIN frames are received over the
    duration of a connection, this count is recorded for each frame.
  </summary>
</histogram>

<histogram name="Net.QuicSession.NumStreamsWaitingToWriteOnIdleTimeout"
    units="streams" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of streams waiting to write when idle timeout is detected and
    connection is being closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.NumTotalStreams" units="units"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The total number of streams created by the client when the session is
    closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.OnServerPreferredAddressAvailable"
    enum="QuicConnectionMigrationStatus" expires_after="2024-08-25">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The result of a QUIC server preferred address migration attempt.
  </summary>
</histogram>

<histogram name="Net.QuicSession.OutOfOrderGapReceived" units="units"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of missing packets between the current received packet and the
    previously largest received packet sequence number, when the current
    received packet had a lower sequence number than the previously received
    packet sequence number.
  </summary>
</histogram>

<histogram name="Net.QuicSession.OutOfOrderLargePacketsReceived" units="units"
    expires_after="2024-02-04">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of times the current received packet had a lower sequence number
    than the previously received packet sequence number, and the size of the
    current packet is larger than the size of the previous packet.
  </summary>
</histogram>

<histogram name="Net.QuicSession.OutOfOrderPacketsReceived" units="units"
    expires_after="2024-02-04">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of times the current received packet had a lower sequence number
    than the previously received packet sequence number.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PacketGapReceived" units="units"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of missing packets between the current received packet and the
    previously largest received packet sequence number.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PacketGapReceivedNearPing" units="count"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of missing packets between the last received packet before a PING
    frame sent and the first packet received after PING sent.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PacketGapSent" units="units"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of missing packets between the current received packet and the
    previously largest received packet sequence number, as reported by the
    remote end of the connection.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PacketLossRate" units="1/10th Percent"
    expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The ratio of the number of missing packets, to the maximum packet sequence
    number received, for QUIC connections longer than 21 packets received via

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

<histogram name="Net.QuicSession.PacketRetransmitsPerMille" units="permille"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of packets retransmitted per 1000. Only sessions with
    packets_sent &gt;= 100 are included. Recorded in session destructor.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PacketsBeforeEcnTransition" units="packets"
    expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of packets received before the session observes an Explicit
    Congestion Notification (ECN) marking different from the first one in the
    session. Reported when the session occurs. A value of zero means no
    transition occurred.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PacketWriteTime" units="units"
    expires_after="2024-09-06">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The time taken to Write() a QUIC packet to the socket. Recorded for each
    packet when it is sent. The suffix specifies if the write completed
    synchonously or asynchronously.

    Warning: this histogram was expired from 2023-11-19 to 2024-03-06; data may
    be missing.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PathValidationSuccess" enum="BooleanSuccess"
    expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The result of path validation according to different migration causes.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PendingStreamsWaitTime" units="ms"
    expires_after="2023-02-12">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The wait time of the pending stream when it is finally serviced. Pending
    streams are those which could not be created immediately because there were
    too many active streams.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PlatformNotification"
    enum="QuicPlatformNotification" expires_after="2024-01-21">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The platform notification received by QUIC when network change happens.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PortMigration"
    enum="QuicConnectionMigrationStatus" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>The result of a QUIC port migration attempt.</summary>
</histogram>

<histogram name="Net.QuicSession.PreferAesGcm" enum="BooleanPreferred"
    expires_after="never">
<!-- expires-never: Core metric used to monitor hardware capabilities -->

  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    True if the QUIC session prefers to use AES GCM because of hardware support.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ProbingRetryCountUntilSuccess" units="retries"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Number of retries to send connectivity probing packet on new path until
    success.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ProbingTimeInMillisecondsUntilSuccess"
    units="ms" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The wait time to receive a matched probing response to mark connectivity
    probing as successful.
  </summary>
</histogram>

<histogram name="Net.QuicSession.Qpack.HeaderListCountWhenBlockedStreamLimited"
    units="count" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The ordinality of a header list within a connection during the encoding of
    which unacknowledged dynamic table entries could not be referenced due to
    the limit on the number of blocked streams.
  </summary>
</histogram>

<histogram name="Net.QuicSession.Qpack.HeaderListCountWhenInsertionBlocked"
    units="count" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The ordinality of a header list within a connection during the encoding of
    which at least one dynamic table insertion was blocked.
  </summary>
</histogram>

<histogram name="Net.QuicSession.Qpack.HeaderListCountWhenInsertionNotBlocked"
    units="count" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The ordinality of a header list within a connection during the encoding of
    which no dynamic table insertion was blocked.
  </summary>
</histogram>

<histogram
    name="Net.QuicSession.Qpack.HeaderListCountWhenNotBlockedStreamLimited"
    units="count" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The ordinality of a header list within a connection during the encoding of
    which the limit on the number of blocked streams did not prevent referencing
    unacknowledged dynamic table entries.
  </summary>
</histogram>

<histogram name="Net.QuicSession.QuicVersion" units="units"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>Version of the QUIC protocol used for this connection.</summary>
</histogram>

<histogram name="Net.QuicSession.ReadError" enum="NetErrorCodes"
    expires_after="2023-10-08">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The network error code returned when attempting to read from a QUIC
    connection. The suffix specifies the condition/source of the read error.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ReadError.CurrentNetwork.HandshakeConfirmed"
    enum="NetErrorCodes" expires_after="2023-10-08">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The network error code returned when attempting to read on the current
    network from a QUIC connection after handshake has been confirmed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ReceivedSettings.BlockedStreams" units="units"
    expires_after="2023-09-24">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The value of the SETTINGS_QPACK_BLOCKED_STREAMS parameter received on an
    HTTP/3 connection, if any.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ReceivedSettings.CountPlusOne" units="units"
    expires_after="2023-09-17">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of SETTINGS parameters received on an HTTP/3 connection,
    incremented by one (the SETTINGS frame can be empty).
  </summary>
</histogram>

<histogram name="Net.QuicSession.ReceivedSettings.MaxHeaderListSize2"
    units="bytes" expires_after="2023-09-24">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The value of the SETTINGS_MAX_HEADER_LIST_SIZE parameter received on an
    HTTP/3 connection, if any.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ReceivedSettings.MaxTableCapacity2"
    units="bytes" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The value of the SETTINGS_QPACK_MAX_TABLE_CAPACITY parameter received on an
    HTTP/3 connection, if any.

    Warning: this histogram was expired from 09/12/2022 to 03/22/2023; data may
    be missing.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ReceivedSettings.ReservedCountPlusOne"
    units="units" expires_after="2023-09-17">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of reserved SETTINGS parameters (that is, with identifier in the
    form 0x1f * N + 0x21 for a non-negative integer value of N) received on an
    HTTP/3 connection, incremented by one (there might be zero reserved
    identifiers). Defined at
    https://quicwg.org/base-drafts/draft-ietf-quic-http.html#name-defined-settings-parameters.
    These should not be treated specially on the receive side, because they are
    sent to exercise the requirement that unknown identifiers are ignored. Here
    an exception is made for logging only, to understand what kind of
    identifiers are received.
  </summary>
</histogram>

<histogram name="Net.QuicSession.RejectHasProof" enum="Boolean"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    True if the QUIC REJ message received from the server contains a proof.
  </summary>
</histogram>

<histogram name="Net.QuicSession.RejectLength" units="units"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The length in bytes of a QUIC REJ message received from the server.
  </summary>
</histogram>

<histogram name="Net.QuicSession.RetryAfterWriteErrorCount2" units="retries"
    expires_after="2024-06-02">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of consecutive times a packet was retried after a write error,
    using exponential backoff.
  </summary>
</histogram>

<histogram name="Net.QuicSession.RstStreamErrorCodeClient"
    enum="QuicRstStreamErrorCodes" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The QUIC error code which resulted in a stream being reset by the client.
  </summary>
</histogram>

<histogram name="Net.QuicSession.RstStreamErrorCodeServer"
    enum="QuicRstStreamErrorCodes" expires_after="2023-03-19">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The QUIC error code which resulted in a stream being reset by the server.
  </summary>
</histogram>

<histogram name="Net.QuicSession.SecureResourceSecureSession" units="units"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of request for secure resources over QUIC sessions. True if the
    session is secure, false if it is not.
  </summary>
</histogram>

<histogram name="Net.QuicSession.SelfShloAddressMismatch"
    enum="QuicAddressMismatch" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    When a SHLO handshake message is received, whether the client IP address and
    port number in it differ from the local client IP address and port number.
    In the comparison, the first address is the one in SHLO and the second
    address is the client IP address.
  </summary>
</histogram>

<histogram name="Net.QuicSession.SendPacketSize" units="bytes"
    expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The size in bytes of an encrypted QUIC packet sent to the peer at the
    specified encryption level.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ServerSideMtu" units="bytes"
    expires_after="2025-04-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The largest packet which the client received from the server during the
    session. Warning: this histogram was expired from 2023-11-19 to 2024-04-11;
    data may be missing.
  </summary>
</histogram>

<histogram name="Net.QuicSession.SmoothedRTT" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The final smoothed RTT observed during the life of a QUIC connection.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StaleAndFreshHostMatched" enum="Boolean"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    True if fresh host lists contains stale host used in racing connection.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StaleConnectionTime" units="ms"
    expires_after="2024-06-16">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The time a QUIC connection from invalid stale dns result takes to do Crypto
    handshake. This starts on DoConnect and ends when the connection finishes.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StatelessResetAfterProbingCancelled"
    enum="BooleanReceived" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Records when a STATELESS_RESET is received after a connectivity probing is
    cancelled.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StatelessResetDuringProbing"
    enum="BooleanReceived" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    When probing is cancelled, records whether a STATELESS_RESET is received.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StopSendingErrorCodeClient"
    enum="QuicRstStreamErrorCodes" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>The QUIC error code that we sent in a STOP_SENDING frame.</summary>
</histogram>

<histogram name="Net.QuicSession.StopSendingErrorCodeServer"
    enum="QuicRstStreamErrorCodes" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The QUIC error code that we received in a STOP_SENDING frame.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StreamCloseErrorCodeClient.HandshakeConfirmed"
    enum="QuicErrorCodes" expires_after="2023-09-10">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The QUIC error code which resulted in the stream (and connection) being
    closed by the client after the handshake was confirmed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StreamCloseErrorCodeServer.HandshakeConfirmed"
    enum="QuicErrorCodes" expires_after="2024-02-11">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The QUIC error code which resulted in the stream (and connection) being
    closed by the client after the handshake was confirmed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StreamFlowControlBlocked"
    enum="BooleanBlocked" expires_after="2023-09-17">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Whether any of QUIC session's streams are flow control blocked when a PING
    message is sent to server.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StreamFrameDuplicatedLongConnection"
    units="1/10th Percent" expires_after="2024-02-04">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of stream frames received which were duplicates, out of every
    1000 stream frames received. Only for QUIC sessions which received at least
    100 packets.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StreamFrameDuplicatedPercentLongConnection"
    units="units" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The percentage of stream frames received which were duplicates. Only for
    QUIC sessions which received at least 100 packets.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StreamFrameDuplicatedPercentShortConnection"
    units="units" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The percentage of stream frames received which were duplicates. Only for
    QUIC sessions which received fewer than 100 packets.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StreamFrameDuplicatedShortConnection"
    units="1/10th Percent" expires_after="2024-02-04">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of stream frames received which were duplicates, out of every
    1000 stream frames received. Only for QUIC sessions which received fewer
    than 100 packets.
  </summary>
</histogram>

<histogram name="Net.QuicSession.TimedOutWithOpenStreams.ConsecutivePTOCount"
    units="units" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    If a QUIC connection timed out with open streams, this contains a count of
    consecutive PTOs.
  </summary>
</histogram>

<histogram name="Net.QuicSession.TimedOutWithOpenStreams.ConsecutiveRTOCount"
    units="units" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    If a QUIC connection timed out with open streams, this contains a count of
    consecutive RTOs.
  </summary>
</histogram>

<histogram name="Net.QuicSession.TimedOutWithOpenStreams.ConsecutiveTLPCount"
    units="units" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    If a QUIC connection timed out with open streams, this contains a count of
    consecutive TLPs.
  </summary>
</histogram>

<histogram name="Net.QuicSession.TimedOutWithOpenStreams.HasUnackedPackets"
    units="units" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    If a QUIC connection timed out with open streams, this will be true when the
    connection has unacked packets.
  </summary>
</histogram>

<histogram name="Net.QuicSession.TimedOutWithOpenStreams.LocalPort"
    units="units" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    If a QUIC connection timed out locally with open streams, this contains the
    local port number for the connection.
  </summary>
</histogram>

<histogram name="Net.QuicSession.TimeFromResolveHostToConfirmConnection"
    units="Milliseconds" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The time a QuicSessionPool Job takes from host rersolution to connection
    confirmation.
  </summary>
</histogram>

<histogram name="Net.QuicSession.TooManyOpenStreams" enum="BooleanTooMany"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    True if more than 100 streams are open when a new stream is activated.
  </summary>
</histogram>

<histogram name="Net.QuicSession.TooSmallInitialSentPacket" units="bytes"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    When a QUIC packet is sent at initial encryption that is smaller than the
    minimum size, this records the size difference (minimum_size -
    observed_size).
  </summary>
</histogram>

<histogram name="Net.QuicSession.UndecryptablePacketsReceived" units="units"
    expires_after="2024-02-04">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of undecryptable packets recevied by a QuicSession when the
    session is closed. Includes packets where a decryption key was not present.
  </summary>
</histogram>

<histogram name="Net.QuicSession.UndecryptablePacketsReceivedWithDecrypter"
    units="units" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of undecryptable packets recevied by a QuicSession when the
    session is closed. Only includes packets where a decryption key was present
    for the packet's encryption level.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ValidConnectionTime" units="ms"
    expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The time a QUIC connection that will be confirmed takes for Crypto
    handshake. The event starts on DoConnect, and ends when the connection
    finishes.
  </summary>
</histogram>

<histogram name="Net.QuicSession.VerifyProofTime{Type}" units="ms"
    expires_after="2024-05-26">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Time spent verifying the signature and certificate chain. This is logged
    whenever QUIC verifies the certificate chain and signature during crypto
    handshake.

    Warning: this histogram was expired from 09/12/2022 to 03/22/2023; data may
    be missing.
  </summary>
  <token key="Type">
    <variant name="" summary="Verification time for a server."/>
    <variant name=".CachedServerConfig"
        summary="Verification time for a server when server config from cache
                 is used."/>
    <variant name=".google"
        summary="Verification time for www.google.com server."/>
  </token>
</histogram>

<histogram name="Net.QuicSession.WriteError" enum="NetErrorCodes"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The network error code returned when attempting to write to a QUIC
    connection.
  </summary>
</histogram>

<histogram name="Net.QuicSession.WriteError.HandshakeConfirmed"
    enum="NetErrorCodes" expires_after="2024-07-16">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The network error code returned when attempting to write to a QUIC
    connection after the handshake has been confirmed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.WriteError.NetworkDisconnected"
    enum="NetErrorCodes" expires_after="2023-09-17">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The most recent network error code when attempting to write to a QUIC
    connection when the network gets disconnected.
  </summary>
</histogram>

<histogram name="Net.QuicSession.WritePacketNotReusableReason"
    enum="QuicNotReusableReason" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The reason QUIC packet writer needed to allocate a new buffer, rather than
    the expected case of reusing its existing one.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ZeroRttReason"
    enum="SSLHandshakeEarlyDataReason" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Indicates whether a QUIC handshake attempted or used 0-RTT on the
    connection, and if 0-RTT was not used, it provides reasons why.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ZeroRttReasonGoogle"
    enum="SSLHandshakeEarlyDataReason" expires_after="2023-06-04">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Indicates whether a QUIC handshake attempted or used 0-RTT on the
    connection, and if 0-RTT was not used, it provides reasons why. Only records
    connections with Google hosted servers.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ZeroRttReasonNonGoogle"
    enum="SSLHandshakeEarlyDataReason" expires_after="2023-03-19">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Indicates whether a QUIC handshake attempted or used 0-RTT on the
    connection, and if 0-RTT was not used, it provides reasons why. Only records
    connections with non-Google servers.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ZeroRttState" enum="ZeroRttState"
    expires_after="2024-05-19">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>Whether 0-RTT was successfully used in the connection.</summary>
</histogram>

<histogram name="Net.QuicStreamFactory.AttemptMigrationBeforeHandshake"
    enum="BooleanAttempted" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Records if a new connection on the alternate network is attempted when a
    connection fails before handshake is confirmed.
  </summary>
</histogram>

<histogram
    name="Net.QuicStreamFactory.AttemptMigrationBeforeHandshake.FailedConnectionType"
    enum="NetworkConnectionType" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Connection type of the default network when the connection fails with
    handshake not confirmed.
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.BadPacketLossEvents5"
    enum="QuicBadPacketLossEvents" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    A count of how often a user hits 1, 2, 3, 4 and 5 bad packet loss events for
    port 443. Recorded whenever QUIC has bad packet loss (high packet loss on
    multiple consecutive connections).
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.ConnectionOnNonDefaultNetwork"
    enum="BooleanSuccess" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Status of the connection on the non-default network when it finishes. A
    connection may stay on the non-default network during the initial setup when
    the platform's default network changes.
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.DefaultNetworkMatch"
    enum="BooleanMatched" expires_after="2023-10-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Records, for initial socket created for each new QUIC connection, whether
    the bound network matched the default network tracked by QuicSessionPool.
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.DisabledReasons"
    enum="QuicDisabledReason" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Rrecords reasons QUIC is disabled (for all ports), if sufficent recent
    connections experience: public reset post crypto handshake, or timeouts with
    streams open. QUIC is disabled until the next reboot of Chrome. Logged
    during session close.
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.DoConnectFailureLocation"
    enum="JobProtocolErrorLocation" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Log the location in QuicSessionPool where QUIC_PROTOCOL_ERROR is reported.
  </summary>
</histogram>

<histogram
    name="Net.QuicStreamFactory.MigrationBeforeHandshake.NewConnectionType"
    enum="NetworkConnectionType" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Connection type of the alternate network when a connection is about to be
    attempted when the original connection fails on the default network with
    handshake not confirmed.
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.MigrationBeforeHandshake2"
    enum="BooleanSuccess" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Status of the connection which is created for migration before handshake is
    confirmed.
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.MigrationBeforeHandshakeFailedReason"
    enum="NetErrorCodes" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The network error code returned when the retried connection on the alternate
    network before handshake fails.
  </summary>
</histogram>

<histogram
    name="Net.QuicStreamFactory.NetworkChangeDuringMigrationBeforeHandshake"
    enum="BooleanChanged" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Captures whether the default network has been changed when the new
    connection succeeds on the &quot;alternate&quot; network.
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.PublicResetsPostHandshake"
    units="resets" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Captures the maximum number of public resets post handshake that occurred
    within a window of recent connections (default 20). Will help inform the
    choice of threshold to disable QUIC for clients that experience pathalogical
    errors. Logged during session close.
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.QuicIsDisabled" enum="Ports"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Recorded whenever QUIC is disabled for a port due to repeated lossy
    connections (high packet loss on multiple consecutive connections). QUIC is
    disabled until next reboot of Chrome.
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.TimeoutsWithOpenStreams"
    units="timeouts" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Captures the maximum number of connection timeouts with streams open that
    occurred within a window of recent connections (default 20). Will help
    inform the choice of threshold to disable QUIC for clients that experience
    pathalogical errors. Logged during session close.
  </summary>
</histogram>

<histogram name="Net.Reporting.HeaderType" enum="NetReportingHeaderType"
    expires_after="2025-04-23">
  <owner>[email protected]</owner>
  <owner>src/net/reporting/OWNERS</owner>
  <summary>
    The type of header received for configuring reporting API endpoints,
    recorded when reporting API headers are successfully parsed.

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

<histogram name="Net.Reporting.UploadHeaderType"
    enum="NetReportingUploadHeaderType" expires_after="2025-04-23">
  <owner>[email protected]</owner>
  <owner>src/net/reporting/OWNERS</owner>
  <summary>
    The type of header that produced the endpoint used for uploading reports for
    the Reporting API, recorded when reports have been succesfully uploaded,
    counted once for each report.
  </summary>
</histogram>

<histogram name="Net.ResourceLoader.ReadDeferral" units="ms"
    expires_after="M77">
  <owner>[email protected]</owner>
  <summary>
    When starting a cross-site navigation, the time between reading the headers
    and body of the response.
  </summary>
</histogram>

<histogram name="Net.RestrictedCookieManager.CookiePartitionKeyOK"
    enum="Boolean" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/net/cookies/OWNERS</owner>
  <summary>
    Logged whenever a partitioned cookie is set from a renderer process, which
    can be from either document.cookie or the CookieStore API. True if the
    partition key was set with the FromScript constructor (used by the
    CookieStore API) or if the partition key matches the
    RestrictedCookieManager's internal partition key (which is the case for
    cookies set/modified by document.cookie).
  </summary>
</histogram>

<histogram name="Net.RestrictedCookieManager.GetCookiesString.Count30Seconds"
    units="IPCs" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of RestrictedCookieManager::GetCookiesString IPCs received
    over 30 second periods at the Network Service.

    We start recording the metric when the Network Service is created and keep
    updating it for the entire lifetime of the Network Service process.
  </summary>
</histogram>

<histogram name="Net.RestrictedCookieManager.PartitionedCookiesInScript"
    units="cookies" expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>src/net/cookies/OWNERS</owner>
  <summary>
    Logs the number of partitioned cookies accessed by a script. Logged only
    when partitioned cookies are enabled.
  </summary>
</histogram>

<histogram name="Net.RestrictedCookieManager.SetPartitionedCookie"
    enum="Boolean" expires_after="2024-12-01">
  <owner>[email protected]</owner>
  <owner>src/net/cookies/OWNERS</owner>
  <summary>
    True iff the cookie set by RestrictedCookieManager is a partitioned cookie.
    Only logged when partitioned cookies are enabled and the cookie set by RCM
    will be accepted.
  </summary>
</histogram>

<histogram name="Net.RestrictedCookieManager.SiteForCookiesOK"
    enum="BooleanMatched" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/cookies/OWNERS</owner>
  <summary>
    Logged on any document.cookie or CookieStore API operation. True if the
    browser-side site_for_cookies and the render-provided value match.
  </summary>
</histogram>

<histogram name="Net.RestrictedCookieManager.TopFrameOriginOK"
    enum="BooleanMatched" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/net/cookies/OWNERS</owner>
  <summary>
    Logged on any document.cookie or CookieStore API operation. True if the
    browser-side top_frame_origin and the render-provided value match.
  </summary>
</histogram>

<histogram name="Net.SafeSearch.CacheHit" enum="CacheAccessStatus"
    expires_after="2025-07-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records if a URL classification in safe_search_api::URLChecker was provided
    from the cache or not. In the latter case, it distinguishes between true
    cache misses and cache hits which were unfit for classification.

    Missing data between 2024-04-28 and 2024-07-30.
  </summary>
</histogram>

<histogram name="Net.SharedDictionaryManagerOnDisk.DictionarySizeKB" units="KB"
    expires_after="2024-12-20">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    The size of shared dictionary written on disk. Emitted when
    SharedDictionaryManagerOnDisk succeeded to store the dictionary in disk
    cache and database.
  </summary>
</histogram>

<histogram
    name="Net.SharedDictionaryManagerOnDisk.DiskCacheEntryMissingDictionaryCount"
    units="count" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    The number of dictionaries evicted as there is no matching disk cache entry.
    Emitted when MismatchingEntryDeletionTask finishes.
  </summary>
</histogram>

<histogram name="Net.SharedDictionaryManagerOnDisk.InvalidDiskCacheEntryCount"
    units="count" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    The number of disk cache entries evicted as the key is invalid for token.
    Emitted when MismatchingEntryDeletionTask finishes.
  </summary>
</histogram>

<histogram
    name="Net.SharedDictionaryManagerOnDisk.MetadataMissingDictionaryCount"
    units="count" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    The number of disk cache entries evicted as there is no matching metadata.
    Emitted when MismatchingEntryDeletionTask finishes.
  </summary>
</histogram>

<histogram
    name="Net.SharedDictionaryManagerOnDisk.TotalDictionaryCountWhenAdded"
    units="count" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    The total count of shared dictionary on disk. Emitted when
    SharedDictionaryManagerOnDisk succeeded to store a dictionary in disk cache
    and database.
  </summary>
</histogram>

<histogram
    name="Net.SharedDictionaryManagerOnDisk.TotalDictionarySizeKBWhenAdded"
    units="KB" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    The total size of shared dictionary on disk. Emitted when
    SharedDictionaryManagerOnDisk succeeded to store a dictionary in disk cache
    and database.
  </summary>
</histogram>

<histogram
    name="Net.SharedDictionaryOnDisk.OpenEntryLatency.{SuccessOrFailure}"
    units="ms" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    The time taken to open a disk cache entry of a shared dictionary. Recorded
    when the entry is opened in the SharedDictionaryOnDisk.
  </summary>
  <token key="SuccessOrFailure" variants="SuccessOrFailure"/>
</histogram>

<histogram name="Net.SharedDictionaryOnDisk.ReadDataLatency.{SuccessOrFailure}"
    units="ms" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    The time taken to read the data of a shared dictionary's disk cache entry.
    Recorded when the whole data is read in the SharedDictionaryOnDisk.
  </summary>
  <token key="SuccessOrFailure" variants="SuccessOrFailure"/>
</histogram>

<histogram name="Net.SharedDictionaryStorageOnDisk.IsMetadataReadyOnFirstUse"
    enum="Boolean" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    Records whether the shared dictionary metadata has been read when
    GetDictionary() is called for the first time.
  </summary>
</histogram>

<histogram name="Net.SharedDictionaryStorageOnDisk.MetadataReadTime.{Result}"
    units="ms" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    The time taken to read shared dictionary metadata from the database.
    Recorded when SharedDictionaryStorageOnDisk receives the result.
  </summary>
  <token key="Result">
    <variant name="Empty"/>
    <variant name="Failure"/>
    <variant name="NonEmpty"/>
  </token>
</histogram>

<histogram name="Net.SharedDictionaryStore.DictionaryCountPerSiteWhenAdded"
    units="count" expires_after="2024-12-20">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    The count of shared dictionary per top frame site on metadata. Emitted when
    SQLitePersistentSharedDictionaryStore is writing a dictionary in the
    database.
  </summary>
</histogram>

<histogram name="Net.SharedDictionaryStore.DictionarySizeKBPerSiteWhenAdded"
    units="KB" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    The size of shared dictionary per top frame site on metadata. Emitted when
    SQLitePersistentSharedDictionaryStore is writing a dictionary in the
    database.
  </summary>
</histogram>

<histogram name="Net.SharedDictionaryStore.{MethodName}.Error"
    enum="SharedDictionaryStoreError" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    Records the status (OK or error code) returned by
    SQLitePersistentSharedDictionaryStore. Recorded when the database operation
    finishes.
  </summary>
  <token key="MethodName">
    <variant name="ClearAllDictionaries"/>
    <variant name="ClearDictionaries"/>
    <variant name="ClearDictionariesForIsolationKey"/>
    <variant name="DeleteDictionariesByDiskCacheKeyTokens"/>
    <variant name="DeleteExpiredDictionaries"/>
    <variant name="GetAllDictionaries"/>
    <variant name="GetAllDiskCacheKeyTokens"/>
    <variant name="GetDictionaries"/>
    <variant name="GetTotalDictionarySize"/>
    <variant name="GetUsageInfo"/>
    <variant name="ProcessEviction"/>
    <variant name="RegisterDictionary"/>
  </token>
</histogram>

<histogram
    name="Net.SharedDictionaryTransaction.AbortedWhileReadingDictionary.{SuccessOrFailure}"
    units="ms" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    The delay to read a shared dictionary from a SharedDictionaryTransaction
    which is already aborted. Recorded when the dictionary is read, but the
    SharedDictionaryTransaction was aborted before the read operation was
    completed.
  </summary>
  <token key="SuccessOrFailure" variants="SuccessOrFailure"/>
</histogram>

<histogram
    name="Net.SharedDictionaryTransaction.DictionaryReadLatency.{SuccessOrFailure}"
    units="ms" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    The delay of SharedDictionaryTransaction caused by reading a shared
    dictionary. Recorded when the dictionary is read in the
    SharedDictionaryTransaction.
  </summary>
  <token key="SuccessOrFailure" variants="SuccessOrFailure"/>
</histogram>

<histogram name="Net.SharedDictionaryTransaction.NetResultWithDict.{CertState}"
    enum="NetErrorCodes" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    Positive net error codes returned from the network layer for requests with
    Sec-Available-Dictionary header. Recorded when a
    SharedDictionaryNetworkTransaction received the result from the network
    layer.
  </summary>
  <token key="CertState">
    <variant name="KnownRootCert"/>
    <variant name="UnknownRootCertOrNoCert"/>
  </token>
</histogram>

<histogram
    name="Net.SharedDictionaryUsedByResponseWhenAvailable.MainFrame.{ConnectionType}.{CertState}"
    enum="Boolean" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    Records whether the response used a shared dictionary when it was available.
    This is recorded only for main frame requests. Recorded when the URLLoader
    request is completed.
  </summary>
  <token key="ConnectionType">
    <variant name="Http1"/>
    <variant name="Http2"/>
    <variant name="Http3"/>
    <variant name="Other"/>
  </token>
  <token key="CertState">
    <variant name="KnownRootCert"/>
    <variant name="NoCert"/>
    <variant name="UnknownRootCert"/>
  </token>
</histogram>

<histogram
    name="Net.SharedDictionaryUsedResponseErrorCodes.{DestinationType}.{CertState}"
    enum="NetErrorCodes" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    Positive net error codes of responses which used shared dictionaries.
    Recorded when the URLLoader request is completed.
  </summary>
  <token key="DestinationType">
    <variant name="MainFrame"/>
    <variant name="SubFrame"/>
    <variant name="Subresource"/>
  </token>
  <token key="CertState">
    <variant name="KnownRootCert"/>
    <variant name="NoCert"/>
    <variant name="UnknownRootCert"/>
  </token>
</histogram>

<histogram name="Net.SharedDictionaryWriterInMemory.DictionarySize"
    units="bytes" expires_after="2024-12-20">
  <owner>[email protected]</owner>
  <owner>src/net/extras/shared_dictionary/OWNERS</owner>
  <summary>
    The size of shared dictionary written in memory. Emitted when
    SharedDictionaryWriterInMemory succeeded to store the dictionary in memory.
  </summary>
</histogram>

<histogram name="Net.SocketUnchangeableReceiveBuffer" units="Bytes"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The size of a socket's receive buffer when the attempt to change it via
    setsockopt failed.
  </summary>
</histogram>

<histogram name="Net.SocketUnchangeableSendBuffer" units="Bytes"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The size of a socket's send buffer when the attempt to change it via
    setsockopt failed.
  </summary>
</histogram>

<histogram name="Net.SpdyFrameStreamAndSessionFlowControlState"
    enum="SpdyFrameFlowControlState" expires_after="2025-04-24">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The counts of the flow control state of each frame (with stream and session
    flow control on).
  </summary>
</histogram>

<histogram name="Net.SpdyHeadersCompressionPercentage" units="%"
    expires_after="2025-04-24">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The percent compression achieved when compressing HEADERS frames.

    Warning: this histogram was expired from 2024-03-17 to 2024-04-24; data may
    be missing.
  </summary>
</histogram>

<histogram name="Net.SpdyIPPoolDomainMatch" enum="SpdyIPPoolDomainMatch"
    expires_after="2025-04-24">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Status of checking if a SPDY domain can handle a IP match. If a match is
    found, we successfully used the IP Pooling. If a match is not found, we
    could have used IP Pooling, except the TLS Cert didn't match the IP-pooled
    domain.
  </summary>
</histogram>

<histogram name="Net.SpdyResponseCode" enum="HttpResponseCode"
    expires_after="2022-09-11">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    HTTP status codes received in HTTP/2 HEADERS frames. If a stream contains
    one or more informational (1xx) response preceeding the main response, each
    status code is logged separately.
  </summary>
</histogram>

<histogram name="Net.SpdySession.AcceptChForOrigin" enum="Boolean"
    expires_after="2024-11-27">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Records whether the HTTP/2 session received an Accept-CH entry for the given
    origin, which GetAcceptChViaAlps() returns. Logged every time
    SpdyHttpStream::GetAcceptChViaAlps() is called, typically once for each
    request that is served over HTTP/2.
  </summary>
</histogram>

<histogram name="Net.SpdySession.AlpsAcceptChEntries" enum="AcceptChEntries"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Records both whether there are any valid origin fields and whether there are
    any invalid ones in ACCEPT_CH frames. Logged once for each TLS handshake of
    a HTTP/2 connection if ALPS is negotiated, regardless of the number of
    ACCEPT_CH frames received in ALPS.
  </summary>
</histogram>

<histogram name="Net.SpdySession.AlpsDecoderStatus" enum="AlpsDecoderError"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Records the status (OK or error code) returned by AlpsDecoder when parsing
    ALPS data. Logged once for each TLS handshake of a HTTP/2 connection if ALPS
    is negotiated.
  </summary>
</histogram>

<histogram name="Net.SpdySession.AlpsDecoderStatus.Bypassed"
    enum="AlpsDecoderError" expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Net.SpdySession.AlpsDecoderStatus records errors returned by the AlpsDecoder
    class in HTTP/2 responses. Errors logged to that histogram cause a session
    termination, which isn't always desired. This histogram records errors that
    we want to note, but that shouldn't stop the connection.
  </summary>
</histogram>

<histogram name="Net.SpdySession.AlpsSettingParameterCount" units="parameters"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Records the total number of setting parameters received in SETTINGS frames
    in ALPS. Logged once for each TLS handshake of a HTTP/2 connection if ALPS
    is negotiated, regardless of the number of SETTINGS frames received in ALPS.
  </summary>
</histogram>

<histogram name="Net.SpdySession.ClosedOnError" enum="NetErrorCodes"
    expires_after="2025-04-24">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>Net error codes when SpdySession was closed.</summary>
</histogram>

<histogram name="Net.SpdySession.CreateStreamWithSocketConnected"
    enum="BooleanSuccess" expires_after="2025-04-24">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>Socket connected status in SpdySession::CreateStream.</summary>
</histogram>

<histogram name="Net.SpdySession.GoAwayReceived" enum="Http2WireErrorCodes"
    expires_after="2024-11-27">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Records the error code value received in each HTTP/2 GOAWAY frame.
  </summary>
</histogram>

<histogram name="Net.SpdySession.OnSettings.{StreamState}StreamCount2"
    units="count" expires_after="2024-11-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of {StreamState} streams when a SpdySession receives an
    HTTP/2 SETTINGS frame for the first time.
  </summary>
  <token key="StreamState">
    <variant name="Active" summary="active"/>
    <variant name="Created" summary="created"/>
    <variant name="CreatedAndActive" summary="created and active"/>
    <variant name="Pending" summary="pending"/>
  </token>
</histogram>

<histogram name="Net.SpdySession.RstStreamReceived" enum="Http2WireErrorCodes"
    expires_after="2024-10-06">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Records the error code value received in each HTTP/2 RST_STREAM frame.
  </summary>
</histogram>

<histogram name="Net.SpdySession.ServerSupportsWebSocket" enum="Boolean"
    expires_after="2024-09-22">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Whether the server has advertised support for WebSockets over HTTP/2.
  </summary>
</histogram>

<histogram name="Net.SpdySessionErrorDetails2" enum="SpdyProtocolErrorDetails2"
    expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>The type of SPDY Protocol error encountered.</summary>
</histogram>

<histogram name="Net.SpdySessionErrorDetails_Google2"
    enum="SpdyProtocolErrorDetails2" expires_after="2025-04-24">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    WARNING: r181910 added an enum value in the middle, so don't trust the
    counts for values 9 and above for Chrome builds after that revision.

    The type of SPDY Protocol error encountered when talking to a google.com
    server.
  </summary>
</histogram>

<histogram name="Net.SpdySessionGet" enum="SpdySessionGet"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>The type of SPDY Session used when looking up a session.</summary>
</histogram>

<histogram name="Net.SpdySessionGetPeerAddressNotConnected"
    enum="BooleanSuccess" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Whether SpdySession::Get{Peer,Local}Address was called when the connection
    had no socket.
  </summary>
</histogram>

<histogram name="Net.SpdyStreamsAbandonedPerSession" units="units"
    expires_after="2024-10-06">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The number of pushed, but abandoned streams over a single session.
  </summary>
</histogram>

<histogram name="Net.SpdyStreamsPerSession" units="units"
    expires_after="2024-10-06">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>The number of streams issued over a single session.</summary>
</histogram>

<histogram name="Net.SSL.ECHResult" enum="SSLECHResult"
    expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For each TLS connection that offered Encrypted ClientHello (ECH), what was
    the result of that connection. In particular, this measures if the recovery
    flow was needed and, if so, whether it fixed the connection.
  </summary>
</histogram>

<histogram name="Net.SSL_CipherSuite" enum="SSLCipherSuite"
    expires_after="never">
<!-- expires-never: Used to keep track of the TLS ecosystem. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The SSL/TLS cipher suite that was negotiated. Recorded for each SSL/TLS
    connection in the socket pool where Connect() succeeds.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Error" enum="NetErrorCodes"
    expires_after="never">
<!-- expires-never: Used to keep track of the TLS ecosystem. -->

  <owner>[email protected]</owner>
  <summary>
    Counts of specific error codes returned when opening an SSL connection.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Error_ECH" enum="NetErrorCodes"
    expires_after="2024-07-21">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts of specific error codes returned when opening an SSL connection.
    Recorded for connections to servers that advertise support for Encrypted
    ClientHello (ECH) in DNS. (Specifically, connections where the HTTPS record
    used included an ECHConfigList.)
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Latency_2" units="ms" expires_after="never">
<!-- expires-never: Used to keep track of the TLS ecosystem. -->

  <owner>[email protected]</owner>
  <summary>Time from when the Connect() starts until it completes.</summary>
</histogram>

<histogram name="Net.SSL_Connection_Latency_ECH" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time from when the Connect() starts until it completes. Recorded for
    successful connections to servers that advertise support for Encrypted
    ClientHello (ECH) in DNS. (Specifically, connects where the HTTPS record
    used included an ECHConfigList.)
  </summary>
</histogram>

<histogram name="Net.SSL_KeyExchange.ECDHE" enum="ECDHECurves"
    expires_after="never">
<!-- expires-never: Used to keep track of the TLS ecosystem. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The curve used for key exchange for ECDHE. Recorded for each SSL/TLS
    connection in the socket pool where Connect() succeeds.
  </summary>
</histogram>

<histogram name="Net.SSLClientCertSignatureAlgorithm"
    enum="SSLSignatureAlgorithm" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    For each non-resumption TLS handshake that sends a client certificate, the
    signature algorithm used by the client.
  </summary>
</histogram>

<histogram name="Net.SSLExtendedMainSecretSupported" enum="BooleanSupported"
    expires_after="2025-08-20">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    For each TLS handshake, whether the server supports the Extended Main Secret
    extension (RFC 7627). If the server negotiated TLS 1.3, which is always
    patched against this bug, it is considered to support the extension. Servers
    that do not implement this extension may be vulnerable to attacks when using
    channel binding or key exporters.

    Note this extension was originally defined with a different name in RFC
    7276. It is being renamed in draft-ietf-tls-rfc8446bis to Extended Main
    Secret. With both names, it is often referred to by the acronym EMS.
  </summary>
</histogram>

<histogram name="Net.SSLHandshakeDetails" enum="SSLHandshakeDetails"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    For each successful TLS handshake, what kind of handshake was used. This
    metric distinguishes TLS 1.2 (or earlier) and TLS 1.3 as they have very
    different resumption and round-trip behaviors. It also distinguishes full
    handshakes, resumption, 0-RTT, and False Start.
  </summary>
</histogram>

<histogram name="Net.SSLHandshakeEarlyDataReason"
    enum="SSLHandshakeEarlyDataReason" expires_after="2022-05-11">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Indicates whether a TLS 1.3 connection ended up using 0-RTT or not, and why;
    this includes reasons such as the server declining to resume the connection
    and the client not having enough tickets available. This metric is only
    recorded if 0-RTT supported is enabled in the client.
  </summary>
</histogram>

<histogram name="Net.SSLHandshakeEarlyDataReason.Google"
    enum="SSLHandshakeEarlyDataReason" expires_after="2022-08-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Indicates whether a TLS 1.3 connection to a Google host ended up using 0-RTT
    or not, and why; this includes reasons such as the server declining to
    resume the connection and the client not having enough tickets available.
    This metric is only recorded if 0-RTT supported is enabled in the client.
  </summary>
</histogram>

<histogram name="Net.SSLKeyLogFileUse" enum="SSLKeyLogFileAction"
    expires_after="2023-11-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts when the SSLKEYLOGFILE environment variable or --ssl-key-log-file
    command-line flag are set, and when they enable the SSLKeyLogger feature.

    This histogram was temporarily expired from M92 until M104.
  </summary>
</histogram>

<histogram name="Net.SSLNegotiatedAlpnProtocol"
    enum="SSLNegotiatedAlpnProtocol" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    For each TLS handshake, whether ALPN was negotiated; and if so, the
    negotiated protocol.
  </summary>
</histogram>

<histogram name="Net.SSLRenegotiationInfoSupported" enum="BooleanSupported"
    expires_after="2025-08-20">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    For each TLS handshake, whether the server supports the renegotiation_info
    extension (RFC 5746). If the server negotiated TLS 1.3, which removed
    renegotiation, it is considered to support the extension. Servers that do
    not support it are potentially vulnerable to an attack involving TLS
    renegotiation.
  </summary>
</histogram>

<histogram name="Net.SSLSignatureAlgorithm" enum="SSLSignatureAlgorithm"
    expires_after="never">
<!-- expires-never: Used to keep track of the TLS ecosystem. -->

  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    For each SSL connection with a full handshake using a DHE- or ECDHE-based
    key exchange, the signature algorithm used to authenticate the peer. In TLS
    1.2, this is the signature on the ServerKeyExchange message. (Note: Although
    the ECDSA values specify a curve, the curve is only enforced in TLS 1.3.)
  </summary>
</histogram>

<histogram name="Net.SSLVersion" enum="SSLOrQUICVersion" expires_after="never">
<!-- expires-never: Used to keep track of the TLS ecosystem. -->

  <owner>[email protected]</owner>
  <summary>
    The SSL/TLS version that was negotiated. Recorded for each SSL/TLS
    connection in the socket pool where Connect() succeeds.
  </summary>
</histogram>

<histogram name="Net.TCP_Connection_Latency" units="ms" expires_after="never">
<!-- expires-never: Core network stack health metric -->

  <owner>[email protected]</owner>
  <summary>
    Time from when the Connect() starts until it completes. Only times under 10
    minutes are logged.
  </summary>
</histogram>

<histogram name="Net.TcpConnectAttempt.Latency.Error" units="ms"
    expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Time taken when failed to establish a TCP connection to an individual
    endpoint. This includes the case when the attempt was aborted by a higher
    layer (likely because it took too long).
  </summary>
</histogram>

<histogram name="Net.TcpConnectAttempt.Latency.Success" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Time taken to successfully establish a TCP connection to an individual
    endpoint.
  </summary>
</histogram>

<histogram base="true" name="Net.TrustTokens.NetErrorForFetchFailure"
    enum="NetErrorCodes" expires_after="2023-06-06">
<!-- Name completed by histogram_suffixes name="TrustTokenOperationType" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The net error for a failed Fetch API call with an associated Trust Tokens
    operation. This was originally added to help debug a surfeit of 'TypeError:
    failed to fetch' observed in live testing, and it is now retained since it's
    useful for ongoing health monitoring.
  </summary>
</histogram>

<histogram base="true" name="Net.TrustTokens.NetErrorForTrustTokenOperation"
    enum="NetErrorCodes" expires_after="2023-06-06">
<!-- Name completed by histogram_suffixes name="TrustTokenOperationType" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The //net status codes for resource requests that had started Trust Tokens
    operations. This captures the reasons why requests with Trust Tokens
    operations fail and might help debug a surfeit of &quot;TypeError: failed to
    fetch&quot; observed in live testing.
  </summary>
</histogram>

<histogram base="true" name="Net.TrustTokens.OperationOutcome"
    enum="TrustTokenOperationStatus" expires_after="2025-07-01">
<!-- Name completed by histogram_suffixes name="TrustTokenOperationType" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For Private State Token (PST) operations, the result of the operation. This
    is recorded everytime a PST operation completed in URLLoader. See
    network::URLLoader::OnDoneBeginningTrustTokenOperation for details. This can
    help debug the use of the API observed in the ecosystem.
  </summary>
</histogram>

<histogram name="Net.TrustTokens.Operation{TimeSpan}Time.{Outcome}.{Type}"
    units="ms" expires_after="2023-06-06">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time taken to execute various parts of a Trust Tokens operation: 1. Begin =
    time taken to execute the operation's outbound Begin half 2. Server = time
    from the end of the outbound Begin half to the beginning of the inbound
    Finalize half 3. Finalize = time taken to execute the inbound Finalize half
    4. Total = Begin + Server + Finalize (only recorded for operations that see
    server responses)

    The other variants (see histogram_suffixes_list's TrustTokenOperationType
    entry): 1. Outcome (Success or Failure) 2. The type of Trust Tokens
    operation 3. Whether the operation was platform-provided (i.e. executed by a
    method other than a direct HTTP request to the issuer's server)
  </summary>
  <token key="TimeSpan">
    <variant name="Begin"/>
    <variant name="Finalize"/>
    <variant name="Server"/>
    <variant name="Total"/>
  </token>
  <token key="Outcome">
    <variant name="Failure"/>
    <variant name="Success"/>
  </token>
  <token key="Type">
    <variant name="Issuance"/>
    <variant name="Redemption"/>
    <variant name="Signing"/>
  </token>
</histogram>

<histogram name="Net.TrustTokens.RedemptionRequestEmpty" enum="BooleanEmpty"
    expires_after="2023-06-06">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether the Trust Tokens redemption logic received an empty redemption
    request string from its underlying cryptographic library. If this is always
    true, but servers occasionally see empty redemption request headers, it
    might suggest middleware (namely extensions) is removing the headers'
    values.
  </summary>
</histogram>

<histogram base="true" name="Net.TrustTokens.RequestHelperFactoryOutcome"
    enum="TrustTokenRequestHelperFactoryOutcome" expires_after="2025-01-05">
<!-- Name completed by histogram_suffixes name="TrustTokenOperationType" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For resource requests that bear Trust Tokens parameters, the results of
    running TrustTokenRequestHelperFactory to initialize Trust Tokens handling
    logic. This might help debug a surfeit of failed Trust Tokens issuance
    operations observed in live testing.
  </summary>
</histogram>

<histogram name="Net.UDPSocketWinClose" units="ms" expires_after="2024-03-24">
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>The time spent in closesocket call in UDPSocketWin::Close.</summary>
</histogram>

<histogram name="Net.URLLoaderThrottle.OnReceiveResponseTime" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time spent on the callback called when the response head is received. Logged
    every time a throttle receives a response.
  </summary>
</histogram>

<histogram name="Net.URLLoaderThrottleDeferTime.WillProcessResponse.{Throttle}"
    units="ms" expires_after="2023-02-13">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures time {Throttle} deferred a request on WillProcessResponse. Logged
    every time {Throttle} defers a request.
  </summary>
  <token key="Throttle" variants="WillProcessResponseThrottleNames"/>
</histogram>

<histogram name="Net.URLLoaderThrottleDeferTime.WillStartRequest.{Throttle}"
    units="ms" expires_after="2023-02-13">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures time {Throttle} deferred a request on WillStartRequest. Logged
    every time {Throttle} defers a request.
  </summary>
  <token key="Throttle" variants="WillStartRequestThrottleNames"/>
</histogram>

<histogram name="Net.URLLoaderThrottleDeferTime.{Stage}" units="ms"
    expires_after="2023-02-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures time a URLLoaderThrottle was deferred when on {Stage}. Logged every
    time a throttle defers a request.
  </summary>
  <token key="Stage" variants="URLLoaderThrottleStages"/>
</histogram>

<histogram name="Net.URLLoaderThrottleExecutionTime.{Stage}" units="ms"
    expires_after="2023-02-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures time a URLLoaderThrottle took to execute {Stage}. Logged every time
    a throttle runs.
  </summary>
  <token key="Stage" variants="URLLoaderThrottleStages"/>
</histogram>

<histogram name="Net.URLRequest.ReferrerHasInformativePath"
    enum="BooleanPathIsInformative" expires_after="2023-04-16">
<!-- Name completed by histogram_suffixes name="ReferrerPolicySameOrigin" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records for each URLRequest whether its referrer contains more information
    than just its origin (this is the case exactly when it has at least one
    character apart from a leading slash in its path, e.g. http://example.com/a
    but not http://example.com/ nor http://example.com).
  </summary>
</histogram>

<histogram name="Net.URLRequest.ReferrerPolicyForRequest"
    enum="URLRequestReferrerPolicy" expires_after="2023-04-16">
<!-- Name completed by histogram_suffixes name="ReferrerPolicySameOrigin" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the distribution of referrer policies provided with outgoing
    URLRequests, and whether or not the requests were cross-origin.
  </summary>
</histogram>

<histogram name="Net.WebSocket.ErrorCodes{Protocol}" enum="NetErrorCodes"
    expires_after="never">
<!-- expires-never: needed for long-term tracking of ecosystem -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Positive net error codes that WebSockets end with, including OK and ABORTED.
  </summary>
  <token key="Protocol">
    <variant name="" summary="All protocols"/>
    <variant name=".Http2" summary="HTTP/2"/>
  </token>
</histogram>

<histogram name="Net.WebSocket.FallbackResult" enum="WebSocketFallbackResult"
    expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Fallback result of WebSocket handshakes. Recorded when a WebSocket handshake
    completed.
  </summary>
</histogram>

<histogram name="Net.WebSocket.HandshakeResult2"
    enum="WebSocketHandshakeResult2" expires_after="never">
<!-- expires-never: needed for long-term tracking of ecosystem -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Results of WebSocket handshakes, including information whether the handshake
    happened over HTTP/1, HTTP/2 or HTTP/3. Use this histogram as a baseline for
    investigating feature usage counters.
  </summary>
</histogram>

<histogram name="Net.WebSocket.ProtocolHeaderSize" units="bytes"
    expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The size of the value of the Sec-WebSocket-Protocol header in the WebSocket
    handshake request, in bytes. Recorded once for every WebSocket handshake
    request sent, regardless of HTTP version.
  </summary>
</histogram>

<histogram name="Net.WebSocket.ResponseCode" enum="HttpResponseCode"
    expires_after="never">
<!-- expires-never: needed for long-term tracking of ecosystem -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>All HTTP status codes seen during WebSocket handshakes.</summary>
</histogram>

<histogram name="Net.WebTransport.NegotiatedHttpDatagramVersion"
    enum="NegotiatedHttpDatagramVersion" expires_after="2025-06-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Negotiated HTTP Datagram version. Recorded when a WebTransport session
    becomes ready.
  </summary>
</histogram>

<histogram name="Net.WebTransport.NegotiatedWebTransportVersion"
    enum="NegotiatedWebTransportVersion" expires_after="2025-06-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Negotiated WebTransport version. Recorded when a WebTransport session
    becomes ready.
  </summary>
</histogram>

<histogram name="Net.ZstdFilter.CompressionRatio" units="%"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Compressed/Decompressed size ratio as a percentage when using zstd.
  </summary>
</histogram>

<histogram name="Net.ZstdFilter.ErrorCode" enum="ZstdFilterErrorCode"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Error code observed after failing to decode a Zstd-compressed response
    stream from the network. Recorded once per layer of Zstd compression that
    encountered a decoding error. See Net.ZstdFilter.Status to get the overall
    error rate.
  </summary>
</histogram>

<histogram name="Net.ZstdFilter.MaxMemoryUsage" units="KB"
    expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The maximum memory allocation by the zstd library to decode a
    Zstd-compressed response stream from the network. Recorded once per layer of
    Zstd compression (usually once per zstd-compressed response), at the end of
    decoding.
  </summary>
</histogram>

<histogram name="Net.ZstdFilter.Status" enum="ZstdFilterDecodingStatus"
    expires_after="2024-12-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The final state of the ZstdFilter. Recorded once per layer of Zstd
    compression (usually once per zstd-compressed response), at the end of
    decoding.
  </summary>
</histogram>

</histograms>

</histogram-configuration>