<!--
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
chromium-metrics-reviews@google.com.
-->

<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="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="2024-03-01">
  <owner>kristianm@chromium.org</owner>
  <owner>agl@chromium.org</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="2024-02-20">
  <owner>kristianm@chromium.org</owner>
  <owner>wfh@chromium.org</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="2024-03-01">
  <owner>kristianm@chromium.org</owner>
  <owner>agl@chromium.org</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="2024-03-01">
  <owner>kristianm@chromium.org</owner>
  <owner>agl@chromium.org</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="2024-03-01">
  <owner>kristianm@chromium.org</owner>
  <owner>agl@chromium.org</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="2024-03-01">
  <owner>kristianm@chromium.org</owner>
  <owner>agl@chromium.org</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="2024-02-20">
  <owner>kristianm@chromium.org</owner>
  <owner>agl@chromium.org</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.{Operation}{SignatureAlgorithm}"
    enum="BooleanSuccess" expires_after="2024-02-20">
  <owner>kristianm@chromium.org</owner>
  <owner>wfh@chromium.org</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="2024-03-01">
  <owner>agl@chromium.org</owner>
  <owner>davidben@chromium.org</owner>
  <owner>wfh@chromium.org</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="2024-03-01">
  <owner>kristianm@chromium.org</owner>
  <owner>agl@chromium.org</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-01-14">
  <owner>alexilin@chromium.org</owner>
  <owner>kristianm@chromium.org</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-01-14">
  <owner>alexilin@chromium.org</owner>
  <owner>kristianm@chromium.org</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="2024-01-14">
  <owner>alexilin@chromium.org</owner>
  <owner>kristianm@chromium.org</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="2024-01-14">
  <owner>alexilin@chromium.org</owner>
  <owner>kristianm@chromium.org</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="2024-03-01">
  <owner>kristianm@chromium.org</owner>
  <owner>agl@chromium.org</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.AccessToDone" units="ms" expires_after="2024-02-04">
  <owner>morlovich@chromium.org</owner>
  <owner>yhirano@chromium.org</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="2024-03-24">
  <owner>bashi@chromium.org</owner>
  <owner>net-dev@chromium.org</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="2024-02-11">
  <owner>morlovich@chromium.org</owner>
  <owner>yhirano@chromium.org</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="2024-02-25">
  <owner>yhirano@chromium.org</owner>
  <owner>net-dev@chromium.org</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="2024-06-13">
  <owner>bashi@chromium.org</owner>
  <owner>blink-network-stack@google.com</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>shivanisha@chromium.org</owner>
  <owner>jkarlin@chromium.org</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="2024-02-25">
  <owner>yhirano@chromium.org</owner>
  <owner>net-dev@chromium.org</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="2024-03-17">
  <owner>morlovich@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>For each http cache transaction, the recorded pattern.</summary>
</histogram>

<histogram name="HttpCache.TotalDiskCacheTimePerTransaction.{AccessType}"
    units="ms" expires_after="2024-02-20">
  <owner>bashi@chromium.org</owner>
  <owner>blink-network-stack@google.com</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>dschinazi@chromium.org</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="2024-02-04">
  <owner>dschinazi@chromium.org</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="2024-02-11">
  <owner>dschinazi@chromium.org</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="2024-03-24">
  <owner>tbansal@chromium.org</owner>
  <owner>dschinazi@chromium.org</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-03-24">
  <owner>horo@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Information about the AlternativeService used for each request.
  </summary>
</histogram>

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

  <owner>mattm@chromium.org</owner>
  <owner>davidben@chromium.org</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.IgnoreCertificateErrorsSPKIListPresent"
    enum="BooleanPresent" expires_after="M77">
  <owner>martinkr@google.com</owner>
  <summary>
    Whether certificate validation was disabled for a set of public keys because
    the --ignore-certificate-errors-spki-list switch was set on startup.
  </summary>
</histogram>

<histogram name="Net.Certificate.IgnoreErrors" enum="BooleanEnabled"
    expires_after="M77">
  <owner>martinkr@google.com</owner>
  <summary>
    Whether certificate validation was disabled because the
    --ignore-certificate-errors switch was set on startup.
  </summary>
</histogram>

<histogram name="Net.Certificate.TLSFeatureExtensionWithPrivateRoot"
    enum="Boolean" expires_after="M77">
  <owner>estark@chromium.org</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>estark@chromium.org</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>rsleevi@chromium.org</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>rsleevi@chromium.org</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>rsleevi@chromium.org</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="2024-03-17">
  <owner>estark@chromium.org</owner>
  <owner>trusty-transport@chromium.org</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>estark@chromium.org</owner>
  <owner>rsleevi@chromium.org</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-02-01">
  <owner>hchao@chromium.org</owner>
  <owner>mattm@chromium.org</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.InvalidRsaPssParams" enum="Boolean"
    expires_after="M101">
  <obsolete>
    Removed 2022-02.
  </obsolete>
  <owner>bcb@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    While parsing an RSASSA-PSS signature algorithm, whether any invalid
    parameters were encountered that currently are not enforced as parsing
    errors.
  </summary>
</histogram>

<histogram name="Net.CertVerifier.MacKeychainCerts.IntermediateCacheInitTime"
    units="ms" expires_after="2024-02-01">
  <owner>mattm@chromium.org</owner>
  <owner>hchao@chromium.org</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-02-01">
  <owner>mattm@chromium.org</owner>
  <owner>hchao@chromium.org</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-02-01">
  <owner>mattm@chromium.org</owner>
  <owner>hchao@chromium.org</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>mattm@chromium.org</owner>
  <owner>hchao@chromium.org</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-02-01">
  <owner>mattm@chromium.org</owner>
  <owner>hchao@chromium.org</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>mattm@chromium.org</owner>
  <owner>hchao@chromium.org</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-02-01">
  <owner>mattm@chromium.org</owner>
  <owner>hchao@chromium.org</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>mattm@chromium.org</owner>
  <owner>rsleevi@chromium.org</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.PathBuilderIterationCount" units="units"
    expires_after="2024-02-20">
  <owner>mattm@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    When using the builtin cert verifier, records the number of iterations taken
    during path building for each attempted verification.
  </summary>
</histogram>

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

  <owner>mattm@chromium.org</owner>
  <owner>rsleevi@chromium.org</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>rsleevi@chromium.org</owner>
  <owner>mattm@chromium.org</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="2024-02-25">
  <owner>dschinazi@chromium.org</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="2024-02-04">
  <owner>dschinazi@chromium.org</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>mef@chromium.org</owner>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    For each CONTENT_DECODING_FAILED, record the filter that failed.
  </summary>
</histogram>

<histogram name="Net.ContentEncodingType" enum="ContentEncodingType"
    expires_after="2024-06-26">
  <owner>nidhijaju@chromium.org</owner>
  <owner>blink-network-stack@google.com</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-02-11">
  <owner>toyoshim@chromium.org</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-02-11">
  <owner>titouan@chromium.org</owner>
  <owner>clamy@chromium.org</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-05-23">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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-04-03">
  <owner>dschinazi@chromium.org</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="2024-03-17">
  <owner>horo@chromium.org</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.Nsswitch.Compatible" enum="BooleanValid"
    expires_after="2024-02-25">
  <owner>horo@chromium.org</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.FileChange" enum="BooleanChanged"
    expires_after="2024-02-20">
  <owner>horo@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Counter enum recorded whenever `net::DnsConfigService` detects a change to
    the nsswitch.conf DNS configuration file.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsConfig.Nsswitch.HostsFound" enum="BooleanFound"
    expires_after="2024-01-14">
  <owner>horo@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Whether or not the &quot;hosts:&quot; database was found in an nsswitch.conf
    DNS configuration file. Reported whenever Chrome has successfully read the
    nsswitch.conf file and is beginning to attempt to parse it.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsConfig.Nsswitch.IncompatibleService"
    enum="NsswitchService" expires_after="2024-02-11">
  <owner>horo@chromium.org</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.NisServiceInHosts"
    enum="BooleanIncluded" expires_after="2023-02-19">
  <obsolete>
    Deprecated 2022-20. As of M108, NIS is treated as incompatible. Instances
    where it was the cause of incompatibility will be recorded in
    Net.DNS.DnsConfig.Nsswitch.IncompatibleService.
  </obsolete>
  <owner>horo@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Whether or not NIS service is registered in the &quot;hosts:&quot; database
    of an nsswitch.conf. Recorded when a resolv.conf file is successfully read
    by Chrome and the DNS configuration read from the resolv.conf file is
    considered compatible with Chrome.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsConfig.Nsswitch.Read" enum="BooleanReceived"
    expires_after="2024-02-20">
  <owner>horo@chromium.org</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-02-20">
  <owner>horo@chromium.org</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-03-17">
  <owner>horo@chromium.org</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.Resolv.FileChange" enum="BooleanChanged"
    expires_after="2024-02-20">
  <owner>horo@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Counter enum recorded whenever `net::DnsConfigService` detects a change to
    the resolv.conf DNS configuration file.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsConfig.Resolv.Read" enum="BooleanReceived"
    expires_after="2024-02-20">
  <owner>horo@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Whether or not an attempt to read resolv.conf succeeded and produced a
    `__res_state` struct for Chrome to attempt to use. Reported on all attempts
    to read the configuration.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsConfig.Resolv.Valid" enum="BooleanValid"
    expires_after="2024-02-20">
  <owner>horo@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Whether or not the DNS configuration read from a resolv.conf file is
    considered &quot;valid&quot;, that is that it contains at least one DNS
    server. Reported whenever a resolv.conf file is successfully read by Chrome.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsConfig.SecureDnsMode" enum="SecureDnsModeDetails"
    expires_after="2024-02-11">
  <owner>horo@chromium.org</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-03-17">
  <owner>horo@chromium.org</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.DnsHosts.Count" units="count"
    expires_after="2024-02-04">
  <owner>horo@chromium.org</owner>
  <owner>net-dev@chromium.org</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-02-04">
  <owner>horo@chromium.org</owner>
  <owner>net-dev@chromium.org</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-02-04">
  <owner>horo@chromium.org</owner>
  <owner>net-dev@chromium.org</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="2024-02-25">
  <owner>awillia@chromium.org</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="2024-03-17">
  <owner>awillia@chromium.org</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.Errors" enum="NetErrorCodes"
    expires_after="M77">
  <obsolete>
    Removed in crrev.com/c/1355602.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <owner>mef@chromium.org</owner>
  <summary>
    Counts of specific error codes returned by DnsTask if a subsequent
    HostResolverSystemTask succeeded.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsTask.SuccessTime" units="ms"
    expires_after="2024-03-17">
  <owner>horo@chromium.org</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-03-17">
  <owner>horo@chromium.org</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="2024-03-17">
  <owner>horo@chromium.org</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="2024-06-13">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>awillia@chromium.org</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="2024-06-13">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>awillia@chromium.org</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="2024-06-13">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>awillia@chromium.org</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-01-30">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>awillia@chromium.org</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-01-30">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>awillia@chromium.org</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="2024-06-13">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>awillia@chromium.org</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="2024-06-13">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>awillia@chromium.org</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="2024-06-13">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>awillia@chromium.org</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>horo@chromium.org</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.TaskTypeMetadataAvailability"
    enum="DNS.TaskTypeMetadataAvailability" expires_after="M110">
  <obsolete>
    Replaced by Net.DNS.H3SupportedGoogleHost.TaskTypeMetadataAvailability2 on
    2022-12.
  </obsolete>
  <owner>horo@chromium.org</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 when a DNS Job succeeded for a domain if the
    domain is one of Google hosts which that is expected to have valid HTTPS DNS
    metadata with HTTP/3 support.
  </summary>
</histogram>

<histogram name="Net.DNS.H3SupportedGoogleHost.TaskTypeMetadataAvailability2"
    enum="DNS.TaskTypeMetadataAvailability" expires_after="2024-02-04">
  <owner>horo@chromium.org</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="2023-10-01">
  <owner>horo@chromium.org</owner>
  <owner>davidben@chromium.org</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="2023-10-01">
  <owner>horo@chromium.org</owner>
  <owner>davidben@chromium.org</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="2023-10-01">
  <owner>horo@chromium.org</owner>
  <owner>davidben@chromium.org</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="2023-10-01">
  <owner>horo@chromium.org</owner>
  <owner>davidben@chromium.org</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="2023-10-01">
  <owner>horo@chromium.org</owner>
  <owner>davidben@chromium.org</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="2023-10-01">
  <owner>horo@chromium.org</owner>
  <owner>davidben@chromium.org</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="2024-02-14">
  <owner>horo@chromium.org</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="2024-02-04">
  <owner>horo@chromium.org</owner>
  <owner>net-dev@chromium.org</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="2024-02-11">
  <owner>horo@chromium.org</owner>
  <owner>net-dev@chromium.org</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="2024-03-24">
  <owner>horo@chromium.org</owner>
  <owner>net-dev@chromium.org</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-02-04">
  <owner>awillia@chromium.org</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-01-30">
  <owner>awillia@chromium.org</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-01-30">
  <owner>awillia@chromium.org</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-01-30">
  <owner>awillia@chromium.org</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>horo@chromium.org</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>horo@chromium.org</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>horo@chromium.org</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="2024-01-30">
<!-- Name completed by histogram_suffixes
   name="DohProviderId" -->

  <owner>awillia@chromium.org</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>horo@chromium.org</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>horo@chromium.org</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>horo@chromium.org</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>horo@chromium.org</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="2024-01-29">
  <owner>bashi@chromium.org</owner>
  <owner>chrome-network-stack@google.com</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="2024-01-29">
  <owner>bashi@chromium.org</owner>
  <owner>chrome-network-stack@google.com</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="2024-03-10">
  <owner>horo@chromium.org</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="2024-03-10">
  <owner>horo@chromium.org</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>awillia@chromium.org</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-06-21">
  <owner>awillia@chromium.org</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="2024-06-12">
  <owner>horo@chromium.org</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="2024-06-12">
  <owner>horo@chromium.org</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="2024-06-12">
  <owner>horo@chromium.org</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="2024-06-12">
  <owner>horo@chromium.org</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="2024-06-12">
  <owner>horo@chromium.org</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>mmenke@chromium.org</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>ricea@chromium.org</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>mmenke@chromium.org</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="2024-03-17">
  <owner>cmfcmf@chromium.org</owner>
  <owner>peletskyi@chromium.org</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>mmenke@chromium.org</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>mmenke@chromium.org</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="2024-03-17">
  <owner>edwardjung@chromium.org</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.SuggestionClicked"
    enum="NetErrorOfflineSuggestionType" expires_after="2021-12-19">
  <owner>sclittle@chromium.org</owner>
  <owner>offline-dev@chromium.org</owner>
  <summary>
    Counts of the type of offline content suggestions clicked on the network
    error page. Reported upon click.
  </summary>
</histogram>

<histogram name="Net.ErrorPageCounts.SuggestionPresented"
    enum="NetErrorOfflineSuggestionType" expires_after="2021-12-05">
  <owner>sclittle@chromium.org</owner>
  <owner>offline-dev@chromium.org</owner>
  <summary>
    Counts of the type of offline content suggestions shown on the network error
    page. Multiple suggestions can be shown at the same time. Reported when the
    suggestions are presented.
  </summary>
</histogram>

<histogram name="Net.ErrorPageCounts.WebAppAlternativeErrorPage"
    enum="NetErrorCodes" expires_after="2024-02-20">
  <owner>finnur@chromium.org</owner>
  <owner>alexbn@chromium.org</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.Fetch.CheckPoint.BodyConsumerBase"
    enum="BodyConsumerBaseFetchCheckPoint" expires_after="2024-03-17">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records check points in the `BodyConsumerBase` class have been executed.
    This metrics is for investigating crbug.com/1431885.
  </summary>
</histogram>

<histogram name="Net.Fetch.CheckPoint.FetchManagerLoader"
    enum="FetchManagerLoaderCheckPoint" expires_after="2024-02-01">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records check points in the `FetchManager::Loader` class have been executed.
    This metrics is for investigating crbug.com/1431885.
  </summary>
</histogram>

<histogram name="Net.HasBrokenNEON" enum="BooleanBroken"
    expires_after="2023-02-19">
  <obsolete>
    Removed 2023-01. The workaround is now effectively disabled in Chromium (but
    not Cronet, as of writing), and the latest Chromium-side metrics report
    0.00% of devices are still affected.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    Records, on startup, for ARM devices running Android, whether the CPU is
    known to have a broken NEON unit. See https://crbug.com/341598.
  </summary>
</histogram>

<histogram name="Net.HttpAuthCount" enum="HttpAuthCount"
    expires_after="2024-02-29">
  <owner>mpdenton@chromium.org</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>mmenke@chromium.org</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.HttpAuthPromptType" enum="HttpAuthPromptType"
    expires_after="2021-12-26">
  <owner>meacer@chromium.org</owner>
  <owner>src/chrome/browser/ui/login/OWNERS</owner>
  <summary>Type of the HTTP auth prompt displayed.</summary>
</histogram>

<histogram name="Net.HttpAuthTarget" enum="HttpAuthTarget"
    expires_after="2024-02-29">
  <owner>mpdenton@chromium.org</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.HttpContentFreshnessLifetime" units="seconds"
    expires_after="M85">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Length of time that a received resource will be cacheable.</summary>
</histogram>

<histogram name="Net.HttpContentLengthDifferenceWithValidOCL" units="bytes"
    expires_after="M85">
  <owner>bengr@chromium.org</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>bengr@chromium.org</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.HttpIdentSrcURL" units="requests" expires_after="M85">
  <owner>tsepez@chromium.org</owner>
  <summary>
    Count of requests which contained a basic auth username and password
    embedded in the URL itself.
  </summary>
</histogram>

<histogram name="Net.HttpJob.CanIncludeCookies" enum="Boolean"
    expires_after="2024-06-18">
  <owner>cfredric@chromium.org</owner>
  <owner>kaustubhag@chromium.org</owner>
  <summary>
    Counts the HTTP requests which involve reading from the cookie jar to
    construct a Cookie header vs. the HTTP requests which are disallowed from
    including a Cookie header.
  </summary>
</histogram>

<histogram name="Net.HttpJob.IpProtection.BytesSent" units="bytes"
    expires_after="2024-03-10">
  <owner>aakallam@chromium.org</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="2024-03-10">
  <owner>aakallam@chromium.org</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="2024-03-10">
  <owner>djmitche@chromium.org</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.MainJobWaitTimeWithAvailableSpdySession"
    units="ms" expires_after="2024-03-17">
  <owner>fayang@chromium.org</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="2024-03-17">
  <owner>fayang@chromium.org</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{Source}" units="bytes"
    expires_after="2024-03-22">
  <owner>jkarlin@chromium.org</owner>
  <owner>shivanisha@chromium.org</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="2022-11-13">
  <owner>rch@chromium.org</owner>
  <summary>
    Scheme of the proxy server used by an HTTP job that failed, or SCHEME_DIRECT
    if not proxy was used.
  </summary>
</histogram>

<histogram name="Net.HttpJob.ProxyTypeSuccess" enum="ProxyScheme"
    expires_after="2023-03-19">
  <owner>rch@chromium.org</owner>
  <summary>
    Scheme of the proxy server used by an HTTP job that succeeded, or
    SCHEME_DIRECT if not proxy was used.
  </summary>
</histogram>

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

  <owner>mmenke@chromium.org</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" units="ms"
    expires_after="2022-06-19">
  <owner>davidben@chromium.org</owner>
  <owner>trusty-transport@chromium.org</owner>
  <summary>
    Time it takes to complete an HttpJob, 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.TotalTime.TLS13.Google" units="ms"
    expires_after="2024-03-17">
  <owner>davidben@chromium.org</owner>
  <owner>trusty-transport@chromium.org</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>mmenke@chromium.org</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>mmenke@chromium.org</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>mmenke@chromium.org</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>mmenke@chromium.org</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>bengr@chromium.org</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>bengr@chromium.org</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>dschinazi@chromium.org</owner>
  <owner>tbansal@chromium.org</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.HttpRequestHeaders.HeaderCount" units="count"
    expires_after="2023-11-07">
  <owner>ricea@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The total number of headers for a net::HttpRequestHeaders object, recorded
    at destruction time. Because these objects are created and copied in many
    places and not necessarily sent over the network, this should not be
    considered an unbiased estimate of how many headers are sent in practice.

    The purpose of this histogram is to measure the appropriate amount of memory
    to allocate for headers when the object is created. See
    https://crbug.com/1477132.
  </summary>
</histogram>

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

  <owner>mmenke@chromium.org</owner>
  <summary>The count of HTTP Response codes encountered.</summary>
</histogram>

<histogram name="Net.HttpServerProperties.CountOfServers" units="units"
    expires_after="M85">
  <owner>mmenke@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The total number of ServerInfo structs written to the network service's
    prefs file, recorded each time the HttpServerProperties are serialized to
    update the copy stored on disk.
  </summary>
</histogram>

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

  <owner>mmenke@chromium.org</owner>
  <summary>
    Time from when an HTTP request is issued to when the first byte is
    processed.
  </summary>
</histogram>

<histogram name="Net.HttpTimeToFirstByte.TLS13" units="ms"
    expires_after="2022-05-11">
  <owner>davidben@chromium.org</owner>
  <owner>trusty-transport@chromium.org</owner>
  <summary>
    Time from when an HTTP request 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.HttpTimeToFirstByte.TLS13.Google" units="ms"
    expires_after="2024-03-17">
  <owner>davidben@chromium.org</owner>
  <owner>trusty-transport@chromium.org</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.MediaCache.Response.EnabledOrDisabled"
    enum="MediaResponseCacheType" expires_after="2020-12-31">
  <owner>morlovich@chromium.org</owner>
  <owner>wicarr@microsoft.com</owner>
  <owner>webmedia@microsoft.com</owner>
  <summary>
    Records decision points on whether response-side media content will be
    cached or not. This is determined after receiving the HTTP response headers
    and before attempting to write the the cache.
  </summary>
</histogram>

<histogram name="Net.NeedsHWCAP2Workaround" enum="BooleanBroken"
    expires_after="2024-02-25">
  <owner>davidben@chromium.org</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>fbeaufort@chromium.org</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="2024-01-14">
  <owner>dschinazi@chromium.org</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>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</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{HostType}.RetryReason"
    enum="HttpNetworkTransactionRetryReason" expires_after="2024-03-01">
  <owner>horo@chromium.org</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-02-11">
  <owner>dschinazi@chromium.org</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of QUIC sessions when the QuicStreamFactory is destroyed.
  </summary>
</histogram>

<histogram name="Net.OnTransferSizeUpdated.Experimental.OverridenBy"
    enum="OnTransferSizeUpdatedFrom" expires_after="2024-02-25">
  <owner>amanvr@chromium.org</owner>
  <owner>carlscab@chromium.org</owner>
  <owner>woa-performance@google.com</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>dschinazi@chromium.org</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.ProxyScriptFetcher.SuccessDuration" units="ms"
    expires_after="2023-11-19">
  <owner>dschinazi@chromium.org</owner>
  <summary>
    The time taken to successfully fetch a PAC script. This does not include
    time spent doing proxy auto-discovery, or failed attempts at retrieving PAC
    scripts.
  </summary>
</histogram>

<histogram name="Net.PublicKeyPinReportSendingFailure2" enum="NetErrorCodes"
    expires_after="M77">
  <owner>estark@chromium.org</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.PublicKeyPinSuccess" enum="BooleanSuccess"
    expires_after="M77">
  <owner>agl@chromium.org</owner>
  <summary>
    A validated certificate chain may be subject to additional
    &quot;pinning&quot; requirements on a per-domain basis. This records the
    fraction of successful matches between a certificate chain and a pin list.
  </summary>
</histogram>

<histogram name="Net.PushedStreamVaryResponseHeader"
    enum="PushedStreamVaryResponseHeaderValues" expires_after="2024-04-03">
  <obsolete>
    Removed 2023-05.
  </obsolete>
  <owner>bnc@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Information about the value of the Vary response header in HTTP/2 pushed
    streams.
  </summary>
</histogram>

<histogram name="Net.QuicActiveSessions" units="units"
    expires_after="2024-03-22">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-03-24">
  <owner>renjietang@chromium.org</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="2024-03-24">
  <owner>renjietang@chromium.org</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="2024-03-24">
  <owner>renjietang@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>Log the stream error code when QUIC stream handle closes.</summary>
</histogram>

<histogram name="Net.QuicChromiumClientStream.TrailingHeadersProcessSuccess"
    enum="BooleanSuccess" expires_after="2024-04-03">
  <owner>renjietang@chromium.org</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="2024-03-24">
  <owner>renjietang@chromium.org</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="2024-03-03">
  <owner>renjietang@chromium.org</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-04-03">
  <owner>renjietang@chromium.org</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-03-24">
  <owner>wub@chromium.org</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="2024-01-14">
  <owner>dschinazi@chromium.org</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="2024-07-16">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-03-22">
  <owner>dschinazi@chromium.org</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="2024-07-16">
  <owner>dschinazi@chromium.org</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>renjietang@chromium.org</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-04-03">
  <owner>bnc@chromium.org</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-03-03">
  <owner>renjietang@chromium.org</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-03-03">
  <owner>renjietang@chromium.org</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.NumDefaultPathDegrading" units="times"
    expires_after="2023-10-22">
  <obsolete>
    Replaced by Net.QuicSession.NumDefaultPathDegrading in May 2023, as
    num_path_degrading is no longer specific to the multi-port feature.
  </obsolete>
  <owner>renjietang@chromium.org</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of time that a session which has multi-port enabled enters
    path-degrading state on the default path.
  </summary>
</histogram>

<histogram name="Net.QuicMultiPort.NumMultiPortFailureWhenPathDegrading"
    units="times" expires_after="2024-03-24">
  <owner>renjietang@chromium.org</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-03-24">
  <owner>renjietang@chromium.org</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.QuicNetworkDegradingDurationTillConnected" units="ms"
    expires_after="2023-09-17">
  <owner>dschinazi@chromium.org</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-03-03">
  <owner>dschinazi@chromium.org</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-03-24">
  <owner>dschinazi@chromium.org</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="2024-03-24">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>The number of times ServerConfigUpdateMessages ignored.</summary>
</histogram>

<histogram name="Net.QuicProtocolErrorRetryDelay{HostType}.{FinalResult}"
    units="ms" expires_after="2024-03-01">
  <owner>horo@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Log the retry delay caused by ERR_QUIC_PROTOCOL_ERROR. Recorded when
    HttpNetworkTransaction finishes.
  </summary>
  <token key="HostType">
    <variant name=""/>
    <variant name="H3SupportedGoogleHost"/>
  </token>
  <token key="FinalResult">
    <variant name="Failure"/>
    <variant name="Success"/>
  </token>
</histogram>

<histogram name="Net.QuicProtocolError{HostType}.RetryStatus"
    enum="QuicProtocolErrorRetryStatus" expires_after="2024-03-01">
  <owner>horo@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The status of how HttpNetworkTransaction handles a ERR_QUIC_PROTOCOL_ERROR.
    Recorded when HttpNetworkTransaction finishes.
  </summary>
  <token key="HostType">
    <variant name=""/>
    <variant name="H3SupportedGoogleHost"/>
  </token>
</histogram>

<histogram name="Net.QuicProtocolError{HostType}.{RetryStatus}.QuicErrorCode"
    enum="QuicErrorCodes" expires_after="2024-03-01">
  <owner>horo@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Log the QUIC error code when HttpNetworkTransaction handles a
    ERR_QUIC_PROTOCOL_ERROR.
  </summary>
  <token key="HostType">
    <variant name=""/>
    <variant name="H3SupportedGoogleHost"/>
  </token>
  <token key="RetryStatus">
    <variant name="NoRetryExceededMaxRetries"/>
    <variant name="NoRetryHeaderReceived"/>
    <variant name="NoRetryNoAlternativeService"/>
    <variant name="RetryAltServiceBroken"/>
    <variant name="RetryAltServiceNotBroken"/>
  </token>
</histogram>

<histogram
    name="Net.QuicProtocolError{HostType}.{RetryStatus}.QuicStreamErrorCode"
    enum="QuicRstStreamErrorCodes" expires_after="2024-03-01">
  <owner>horo@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Log the QUIC stream error code when HttpNetworkTransaction handles a
    ERR_QUIC_PROTOCOL_ERROR.
  </summary>
  <token key="HostType">
    <variant name=""/>
    <variant name="H3SupportedGoogleHost"/>
  </token>
  <token key="RetryStatus">
    <variant name="NoRetryExceededMaxRetries"/>
    <variant name="NoRetryHeaderReceived"/>
    <variant name="NoRetryNoAlternativeService"/>
    <variant name="RetryAltServiceBroken"/>
    <variant name="RetryAltServiceNotBroken"/>
  </token>
</histogram>

<histogram name="Net.QuicServerInfo.DiskCacheState"
    enum="QuicServerConfigState" expires_after="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2023-12-10">
  <owner>bnc@chromium.org</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="2024-02-20">
  <owner>bnc@chromium.org</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="2024-04-03">
  <owner>renjietang@chromium.org</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-03-22">
  <owner>dschinazi@chromium.org</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>dschinazi@chromium.org</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>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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-03-24">
  <owner>dschinazi@chromium.org</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-04-03">
  <owner>wub@chromium.org</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>wub@chromium.org</owner>
  <owner>fayang@chromium.org</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>wub@chromium.org</owner>
  <owner>fayang@chromium.org</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-03-24">
  <owner>dschinazi@chromium.org</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="2024-03-24">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>renjietang@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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-04-03">
  <owner>dschinazi@chromium.org</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>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-03-22">
  <owner>dschinazi@chromium.org</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>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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>davidben@chromium.org</owner>
      <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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>davidben@chromium.org</owner>
      <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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>davidben@chromium.org</owner>
      <owner>dschinazi@chromium.org</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="2024-03-24">
  <owner>renjietang@chromium.org</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-02-11">
  <owner>fayang@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-02-04">
  <owner>renjietang@chromium.org</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    True if an active session already exists for a given Ip during connection.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionMigration"
    enum="QuicConnectionMigrationStatus" expires_after="2024-02-11">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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>dschinazi@chromium.org</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>dschinazi@chromium.org</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-02-04">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>fayang@chromium.org</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="2024-04-03">
  <owner>fayang@chromium.org</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="2024-04-03">
  <owner>renjietang@chromium.org</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>dschinazi@chromium.org</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.EncryptionEstablishedTime"
    units="Milliseconds" expires_after="2024-02-04">
  <owner>fayang@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-03-22">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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.GapBetweenWriteErrorAndNetworkDisconnection"
    units="ms" expires_after="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2023-01-15">
  <owner>dschinazi@chromium.org</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The elapsed time between starting the crypto handshake, and receiving
    confirmation from the server.
  </summary>
</histogram>

<histogram name="Net.QuicSession.HandshakeConfirmedTime.ECH"
    units="Milliseconds" expires_after="2024-04-03">
  <owner>davidben@chromium.org</owner>
  <owner>dschinazi@chromium.org</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>dschinazi@chromium.org</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>fayang@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-03-22">
  <owner>dschinazi@chromium.org</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="2024-03-22">
  <owner>dschinazi@chromium.org</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="2024-03-22">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-02-04">
  <owner>dschinazi@chromium.org</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>dschinazi@chromium.org</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>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>mattm@chromium.org</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="2024-04-03">
  <owner>mattm@chromium.org</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>fayang@chromium.org</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-03-24">
  <owner>fayang@chromium.org</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="2024-04-03">
  <owner>fayang@chromium.org</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>fayang@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-03-24">
  <owner>renjietang@chromium.org</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="2024-02-04">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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>renjietang@chromium.org</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-03-03">
  <owner>renjietang@chromium.org</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="2024-02-25">
  <owner>renjietang@chromium.org</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="2024-01-28">
  <owner>renjietang@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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-04-03">
  <owner>renjietang@chromium.org</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.NumStreamsWaitingToWriteOnIdleTimeout"
    units="streams" expires_after="2024-04-03">
  <owner>renjietang@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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-06-04">
  <owner>fayang@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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>dschinazi@chromium.org</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>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2023-10-01">
  <owner>dschinazi@chromium.org</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
  </summary>
</histogram>

<histogram name="Net.QuicSession.PacketRetransmitsPerMille" units="permille"
    expires_after="2024-02-05">
  <owner>dschinazi@chromium.org</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.PacketWriteTime" units="units"
    expires_after="2023-11-19">
  <owner>dschinazi@chromium.org</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.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PathValidationSuccess" enum="BooleanSuccess"
    expires_after="2024-06-18">
  <owner>renjietang@chromium.org</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>dschinazi@chromium.org</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>dschinazi@chromium.org</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="2024-02-11">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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.Pushed" units="count"
    expires_after="2024-04-03">
  <obsolete>
    Removed 2023-06.
  </obsolete>
  <owner>dschinazi@chromium.org</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of push streams received when the session is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PushedAndClaimed" units="count"
    expires_after="2024-04-03">
  <obsolete>
    Removed 2023-06.
  </obsolete>
  <owner>dschinazi@chromium.org</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of pushed and used streams when the session is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PushedAndUnclaimedBytes" units="count"
    expires_after="2024-04-03">
  <obsolete>
    Removed 2023-06.
  </obsolete>
  <owner>dschinazi@chromium.org</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of bytes that is pushed but not used when the session is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PushedBytes" units="count"
    expires_after="2023-11-19">
  <obsolete>
    Removed 2023-06.
  </obsolete>
  <owner>dschinazi@chromium.org</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The number of bytes that is pushed when the session is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.Qpack.HeaderListCountWhenBlockedStreamLimited"
    units="count" expires_after="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-02-11">
  <owner>dschinazi@chromium.org</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>dschinazi@chromium.org</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>dschinazi@chromium.org</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>dschinazi@chromium.org</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>dschinazi@chromium.org</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.EnableExtendedConnect"
    enum="Boolean" expires_after="2024-01-21">
  <owner>momoka@google.com</owner>
  <owner>ricea@chromium.org</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The value of the SETTINGS_ENABLE_CONNECT_PROTOCOL parameter received on an
    HTTP/3 connection, if the parameter is not present log false.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ReceivedSettings.MaxHeaderListSize2"
    units="bytes" expires_after="2023-09-24">
  <owner>dschinazi@chromium.org</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="2024-03-22">
  <owner>dschinazi@chromium.org</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>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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-04-03">
  <owner>dschinazi@chromium.org</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="2023-11-19">
  <owner>dschinazi@chromium.org</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The largest packet which the client received from the server during the
    session.
  </summary>
</histogram>

<histogram name="Net.QuicSession.SmoothedRTT" units="ms"
    expires_after="2024-02-11">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>renjietang@chromium.org</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-04-03">
  <owner>renjietang@chromium.org</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="2024-04-03">
  <owner>renjietang@chromium.org</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="2024-04-03">
  <owner>renjietang@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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>dschinazi@chromium.org</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>dschinazi@chromium.org</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>dschinazi@chromium.org</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>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-02-04">
  <owner>renjietang@chromium.org</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    The time a QuicStreamFactory Job takes from host rersolution to connection
    confirmation.
  </summary>
</histogram>

<histogram name="Net.QuicSession.TooManyOpenStreams" enum="BooleanTooMany"
    expires_after="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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-02-04">
  <owner>renjietang@chromium.org</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-03-22">
  <owner>dschinazi@chromium.org</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="2024-03-17">
  <owner>dschinazi@chromium.org</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>dschinazi@chromium.org</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>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-02-11">
  <owner>dschinazi@chromium.org</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>renjietang@chromium.org</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>renjietang@chromium.org</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-03-17">
  <owner>renjietang@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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-04-03">
  <owner>dschinazi@chromium.org</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>dschinazi@chromium.org</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 QuicStreamFactory.
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.DisabledReasons"
    enum="QuicDisabledReason" expires_after="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-02-04">
  <owner>renjietang@chromium.org</owner>
  <owner>src/net/quic/OWNERS</owner>
  <summary>
    Log the location in QuicStreamFactory where QUIC_PROTOCOL_ERROR is reported.
  </summary>
</histogram>

<histogram
    name="Net.QuicStreamFactory.MigrationBeforeHandshake.NewConnectionType"
    enum="NetworkConnectionType" expires_after="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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.RedirectChainLength" units="redirects" expires_after="M85">
  <owner>csharrison@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    The total number of redirects encountered during processing a URLRequest.
    This includes redirects generated by servers (for example, 302 Found) and
    redirects generated internally (for example, HSTS redirects or error pages).
  </summary>
</histogram>

<histogram name="Net.RedirectWithUnadvertisedContentEncoding" enum="Boolean"
    expires_after="M77">
  <owner>eustas@chromium.org</owner>
  <summary>
    True for redirect responses with unadvertised &quot;Content-Encoding&quot;.
    False for valid redirect responses. See http://crbug.com/714514
  </summary>
</histogram>

<histogram name="Net.Reporting.HeaderType" enum="NetReportingHeaderType"
    expires_after="2023-02-18">
  <owner>rodneyding@google.com</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.
  </summary>
</histogram>

<histogram name="Net.Reporting.UploadHeaderType"
    enum="NetReportingUploadHeaderType" expires_after="2024-03-17">
  <owner>rodneyding@google.com</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>clamy@chromium.org</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="2024-03-03">
  <owner>dylancutler@google.com</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="2024-03-03">
  <owner>carlscab@google.com</owner>
  <owner>olivierli@chromium.org</owner>
  <owner>woa-performance@google.com</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="2024-03-03">
  <owner>dylancutler@google.com</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-01-01">
  <owner>dylancutler@google.com</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="2024-02-25">
  <owner>morlovich@chromium.org</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="2024-01-14">
  <owner>morlovich@chromium.org</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.SharedDictionaryManagerOnDisk.DictionarySizeKB" units="KB"
    expires_after="2023-12-01">
  <owner>horo@chromium.org</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="2024-02-04">
  <owner>horo@chromium.org</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="2024-02-04">
  <owner>horo@chromium.org</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="2024-02-04">
  <owner>horo@chromium.org</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="2024-03-03">
  <owner>horo@chromium.org</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="2024-03-03">
  <owner>horo@chromium.org</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="2024-03-03">
  <owner>horo@chromium.org</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="2024-03-03">
  <owner>horo@chromium.org</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="2024-02-04">
  <owner>horo@chromium.org</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="2024-02-20">
  <owner>horo@chromium.org</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="2023-12-01">
  <owner>horo@chromium.org</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="2024-03-03">
  <owner>horo@chromium.org</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="2024-02-20">
  <owner>horo@chromium.org</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.DictionaryReadLatency.{SuccessOrFailure}"
    units="ms" expires_after="2024-03-03">
  <owner>horo@chromium.org</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.SharedDictionaryWriterInMemory.DictionarySize"
    units="bytes" expires_after="2023-12-01">
  <owner>horo@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-03-17">
  <owner>dschinazi@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The percent compression achieved when compressing HEADERS frames.
  </summary>
</histogram>

<histogram name="Net.SpdyIPPoolDomainMatch" enum="SpdyIPPoolDomainMatch"
    expires_after="2024-04-03">
  <owner>dschinazi@chromium.org</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.SpdyPushedStreamFate" enum="SpdyPushedStreamFate"
    expires_after="2024-04-03">
  <obsolete>
    Removed 2023-05.
  </obsolete>
  <owner>dschinazi@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    This histogram is recorded exactly once for every PUSH_PROMISE frame
    received on an HTTP/2 connection, and tracks the fate of the pushed stream.
  </summary>
</histogram>

<histogram name="Net.SpdyResponseCode" enum="HttpResponseCode"
    expires_after="2022-09-11">
  <owner>dschinazi@chromium.org</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-04-03">
  <owner>bnc@chromium.org</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="2024-07-26">
  <owner>bnc@chromium.org</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="2024-09-11">
  <owner>bnc@chromium.org</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="2024-09-11">
  <owner>arichiv@chromium.org</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="2024-04-03">
  <owner>bnc@chromium.org</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="2024-02-04">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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-04-03">
  <owner>bnc@chromium.org</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.PushedAndUnclaimedBytes" units="count"
    expires_after="2024-04-03">
  <obsolete>
    Removed 2023-06.
  </obsolete>
  <owner>dschinazi@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The number of bytes that is pushed but not used when the session is closed.
  </summary>
</histogram>

<histogram name="Net.SpdySession.PushedBytes" units="count"
    expires_after="2024-04-03">
  <obsolete>
    Removed 2023-06.
  </obsolete>
  <owner>dschinazi@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The number of bytes that is pushed when the session is closed.
  </summary>
</histogram>

<histogram name="Net.SpdySession.RstStreamReceived" enum="Http2WireErrorCodes"
    expires_after="2024-04-03">
  <owner>bashi@chromium.org</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-03-17">
  <owner>dschinazi@chromium.org</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="2023-12-06">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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="2024-03-17">
  <owner>dschinazi@chromium.org</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="2024-04-03">
  <owner>dschinazi@chromium.org</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-04-03">
  <owner>dschinazi@chromium.org</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-02-04">
  <owner>dschinazi@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>The number of streams issued over a single session.</summary>
</histogram>

<histogram name="Net.SpdyStreamsPushedAndClaimedPerSession" units="units"
    expires_after="2023-12-04">
  <obsolete>
    Removed 2023-06.
  </obsolete>
  <owner>dschinazi@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The number of pushed, and used streams over a single session.
  </summary>
</histogram>

<histogram name="Net.SpdyStreamsPushedPerSession" units="units"
    expires_after="2024-04-03">
  <obsolete>
    Removed 2023-06.
  </obsolete>
  <owner>dschinazi@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>The number of push streams received over a single session.</summary>
</histogram>

<histogram name="Net.SSL.ECHResult" enum="SSLECHResult"
    expires_after="2024-03-17">
  <owner>davidben@chromium.org</owner>
  <owner>trusty-transport@chromium.org</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>agl@chromium.org</owner>
  <owner>rsleevi@chromium.org</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>agl@chromium.org</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-03-17">
  <owner>davidben@chromium.org</owner>
  <owner>trusty-transport@chromium.org</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>agl@chromium.org</owner>
  <summary>Time from when the Connect() starts until it completes.</summary>
</histogram>

<histogram name="Net.SSL_Connection_Latency_ECH" units="ms"
    expires_after="2024-03-17">
  <owner>davidben@chromium.org</owner>
  <owner>trusty-transport@chromium.org</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>agl@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <owner>sigbjorn@opera.com</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.SSLCertVerificationTime" units="ms" expires_after="M89">
  <owner>rsleevi@chromium.org</owner>
  <summary>Time to complete a certificate verification (success case).</summary>
</histogram>

<histogram name="Net.SSLCertVerificationTimeError" units="ms"
    expires_after="M89">
  <owner>rsleevi@chromium.org</owner>
  <summary>Time to complete a certificate verification (error case).</summary>
</histogram>

<histogram name="Net.SSLClientCertSignatureAlgorithm"
    enum="SSLSignatureAlgorithm" expires_after="2024-03-17">
  <owner>davidben@chromium.org</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.SSLHandshakeDetails" enum="SSLHandshakeDetails"
    expires_after="2024-03-17">
  <owner>davidben@chromium.org</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>davidben@chromium.org</owner>
  <owner>svaldez@chromium.org</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>davidben@chromium.org</owner>
  <owner>trusty-transport@chromium.org</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>cthomp@chromium.org</owner>
  <owner>trusty-transport@chromium.org</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.SSLLegacyCryptoFallback" enum="SSLLegacyCryptoFallback"
    expires_after="2022-12-25">
  <obsolete>
    Replaced by Net.SSLLegacyCryptoFallback2. This one incorrectly counted all
    SHA-1-based algorithms in certificates, rather than just RSASSA-PKCS1-v1_5.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <owner>trusty-transport@chromium.org</owner>
  <summary>
    For each TLS connection, whether it needed the legacy crypto fallback and a
    classification as to why. See https://crbug.com/658905 and
    https://crbug.com/691888. Note some connections are reported as sending
    SHA-1 certificates because, although SHA-1 is no longer accepted in
    certificates, servers may send unused certificates in the handshake. Some
    such servers additionally match their certificate chains against the
    ClientHello. These servers require the client advertise legacy algorithms
    despite not actually using them.
  </summary>
</histogram>

<histogram name="Net.SSLLegacyCryptoFallback2" enum="SSLLegacyCryptoFallback"
    expires_after="2024-02-11">
  <owner>davidben@chromium.org</owner>
  <owner>trusty-transport@chromium.org</owner>
  <summary>
    For each TLS connection, whether it needed the legacy crypto fallback and a
    classification as to why. See https://crbug.com/658905 and
    https://crbug.com/691888. Note some connections are reported as sending
    SHA-1 certificates because, although SHA-1 is no longer accepted in
    certificates, servers may send unused certificates in the handshake. Some
    such servers additionally match their certificate chains against the
    ClientHello. These servers require the client advertise legacy algorithms
    despite not actually using them.
  </summary>
</histogram>

<histogram name="Net.SSLNegotiatedAlpnProtocol"
    enum="SSLNegotiatedAlpnProtocol" expires_after="2024-02-11">
  <owner>dschinazi@chromium.org</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="2023-11-20">
  <owner>davidben@chromium.org</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.SSLRSAKeyUsage.UnknownRoot" enum="RSAKeyUsage"
    expires_after="2024-02-11">
  <owner>davidben@chromium.org</owner>
  <summary>
    For each TLS connection which uses a unknown root, an RSA key, and TLS 1.2
    or below, what the result of checking the RSA key usage would have been.
  </summary>
</histogram>

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

  <owner>davidben@chromium.org</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>davidben@chromium.org</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.SSLVersionGoogle" enum="SSLOrQUICVersion"
    expires_after="2024-02-04">
  <owner>davidben@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    The SSL/TLS version that was negotiated to a Google host. Recorded for each
    appplicable SSL/TLS connection in the socket pool where Connect() succeeds.
    Google servers all support TLS 1.2, so any occurrences of TLS 1.0 or TLS 1.1
    indicate an outdated insecure TLS MITM proxy, such as some antivirus
    configurations. TLS 1.0 and 1.1 are deprecated, so record these to see how
    prevalent they are. See https://crbug.com/896013.
  </summary>
</histogram>

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

  <owner>mmenke@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes. Only times under 10
    minutes are logged.
  </summary>
</histogram>

<histogram name="Net.TCP_Connection_Latency_IPv4_No_Race" units="ms"
    expires_after="M85">
  <obsolete>
    Removed 2022-02.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes when the network
    address only contains IPv4 addresses. Only times under 10 minutes are
    logged.
  </summary>
</histogram>

<histogram name="Net.TCP_Connection_Latency_IPv4_Wins_Race" units="ms"
    expires_after="M85">
  <obsolete>
    Removed 2022-02.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes when the IPv4
    fallback connection won the race against IPv6. Only times under 10 minutes
    are logged.
  </summary>
</histogram>

<histogram name="Net.TCP_Connection_Latency_IPv6_Raceable" units="ms"
    expires_after="M85">
  <obsolete>
    Removed 2022-02.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes when we race an IPv6
    connection against an IPv4 connection with a 300ms delay. Only times under
    10 minutes are logged.
  </summary>
</histogram>

<histogram name="Net.TCP_Connection_Latency_IPv6_Solo" units="ms"
    expires_after="M85">
  <obsolete>
    Removed 2022-02.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes when the network
    address only contains IPv6 addresses. Only times under 10 minutes are
    logged.
  </summary>
</histogram>

<histogram name="Net.TcpConnectAttempt.Latency.Error" units="ms"
    expires_after="2023-12-06">
  <owner>bashi@chromium.org</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="2024-02-04">
  <owner>bashi@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Time taken to successfully establish a TCP connection to an individual
    endpoint.
  </summary>
</histogram>

<histogram name="Net.TcpRtt.AtDisconnect" units="ms" expires_after="M85">
  <owner>bmcquade@chromium.org</owner>
  <summary>
    The kernel's estimated TCP round trip time. Recorded for each TCP socket, at
    the time it is disconnected.
  </summary>
</histogram>

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

  <owner>svaldez@chromium.org</owner>
  <owner>timhuber@google.com</owner>
  <owner>yhirano@chromium.org</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>svaldez@chromium.org</owner>
  <owner>timhuber@google.com</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 name="Net.TrustTokens.Operation{TimeSpan}Time.{Outcome}.{Type}"
    units="ms" expires_after="2023-06-06">
  <owner>svaldez@chromium.org</owner>
  <owner>timhuber@google.com</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>svaldez@chromium.org</owner>
  <owner>timhuber@google.com</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="2024-02-04">
<!-- Name completed by histogram_suffixes name="TrustTokenOperationType" -->

  <owner>svaldez@chromium.org</owner>
  <owner>timhuber@google.com</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.UdpSocketRandomBindErrorCode" enum="NetErrorCodes"
    expires_after="M77">
  <owner>mgersh@chromium.org</owner>
  <summary>Chromium error code from call to RandomBind() UDP socket.</summary>
</histogram>

<histogram name="Net.UDPSocketWinClose" units="ms" expires_after="2024-03-24">
  <owner>dschinazi@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>The time spent in closesocket call in UDPSocketWin::Close.</summary>
</histogram>

<histogram name="Net.URLLoaderThrottleDeferTime.WillProcessResponse.{Throttle}"
    units="ms" expires_after="2023-02-13">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</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>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</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>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</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>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</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>davidvc@chromium.org</owner>
  <owner>kaustubhag@chromium.org</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>davidvc@chromium.org</owner>
  <owner>kaustubhag@chromium.org</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>ricea@chromium.org</owner>
  <owner>blink-network-stack@google.com</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-02-20">
  <owner>bashi@chromium.org</owner>
  <owner>blink-network-stack@google.com</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>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</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.ResponseCode" enum="HttpResponseCode"
    expires_after="never">
<!-- expires-never: needed for long-term tracking of ecosystem -->

  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>All HTTP status codes seen during WebSocket handshakes.</summary>
</histogram>

<histogram name="Net.WebTransport.NegotiatedHttpDatagramVersion"
    enum="NegotiatedHttpDatagramVersion" expires_after="2024-07-20">
  <owner>bashi@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    Negotiated HTTP Datagram version. Recorded when a WebTransport session
    becomes ready.
  </summary>
</histogram>

<histogram name="Net.WebTransport.NegotiatedWebTransportVersion"
    enum="NegotiatedWebTransportVersion" expires_after="2024-07-20">
  <owner>bashi@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    Negotiated WebTransport version. Recorded when a WebTransport session
    becomes ready.
  </summary>
</histogram>

<histogram name="Net.ZstdFilter.CompressionRatio" units="%"
    expires_after="2024-06-26">
  <owner>nidhijaju@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    Compressed/Decompressed size ratio as a percentage when using zstd.
  </summary>
</histogram>

<histogram name="Net.ZstdFilter.ErrorCode" enum="ZstdFilterErrorCode"
    expires_after="2024-06-26">
  <owner>nidhijaju@chromium.org</owner>
  <owner>blink-network-stack@google.com</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="2024-03-03">
  <owner>nidhijaju@chromium.org</owner>
  <owner>blink-network-stack@google.com</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-06-26">
  <owner>nidhijaju@chromium.org</owner>
  <owner>blink-network-stack@google.com</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>
