<!--
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 others 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="BlueZPerProfileResult">
  <variant name="A2DPSink."
      summary="This metric records results for A2DP Sink profile."/>
  <variant name="AVRCP."
      summary="This metric records results for AVRCP Controller profile."/>
  <variant name="Battery."
      summary="This metric records results for Battery profile."/>
  <variant name="HFP." summary="This metric records results for HFP profile."/>
  <variant name="HID." summary="This metric records results for HID profile."/>
  <variant name="HOG." summary="This metric records results for HOG profile."/>
</variants>

<variants name="BootVariant">
  <variant name="FirstBoot"
      summary="first boot after ChromeOS has been updated"/>
  <variant name="RegularBoot" summary="subsequent boot after first boot"/>
</variants>

<variants name="ImportantFileClients">
  <variant name="" summary="Unknown file"/>
  <variant name=".AccountManager" summary="ChromeOS serialized accounts file"/>
  <variant name=".AccountPreferences" summary="Account Preferences file"/>
  <variant name=".All" summary="Aggregate of all files"/>
  <variant name=".BookmarkMergedSurfaceOrderingStorage"
      summary="Bookmarks ordering file"/>
  <variant name=".BookmarkStorage" summary="Bookmarks file"/>
  <variant name=".BookmarkStorageEncrypted" summary="Bookmarks encrypted file"/>
  <variant name=".BookmarkStorageEncryptedImmediate"
      summary="Bookmarks encrypted file saved immediately while loading
               profile (needed for encryption migration)"/>
  <variant name=".BookmarkStorageImmediate"
      summary="Bookmarks file saved immediately while loading profile (needed
               for encryption migration)"/>
  <variant name=".FeedbackReport" summary="Feedback Report file"/>
  <variant name=".Local_State" summary="Local State file"/>
  <variant name=".LoopBackServer" summary="Sync file"/>
  <variant name=".Nigori" summary="Nigori sync file"/>
  <variant name=".PersistentHistogramAllocator"
      summary="Persistent Histogram Allocator"/>
  <variant name=".Preferences" summary="Preferences file"/>
  <variant name=".SCTAuditing"
      summary="Signed Certificate Timestamp auditing report file"/>
  <variant name=".Secure_Preferences" summary="Secure Preferences file"/>
  <variant name=".StructuredMetricsPersistentProto"
      summary="Structured metrics persistent proto"/>
  <variant name=".TransportSecurityPersister"
      summary="TransportSecurity state file"/>
  <variant name=".TrustedVault" summary="Trusted Vault file"/>
  <variant name=".VariationsSeedsV2" summary="Variations seeds files"/>
</variants>

<variants name="PageImageServiceClientId">
  <variant name="" summary="all requests"/>
  <variant name=".Bookmarks" summary="from Bookmarks"/>
  <variant name=".HistoryEmbeddings"
      summary="from the AI results inside History"/>
  <variant name=".Journeys" summary="from Journeys inside History"/>
  <variant name=".JourneysSidePanel" summary="from Journeys inside Side Panel"/>
  <variant name=".NtpQuests" summary="from the Quests module on the NTP"/>
  <variant name=".NtpRealbox" summary="from the realbox on the NTP"/>
  <variant name=".NtpTabResumption"
      summary="from the Tab resumption module on the NTP"/>
</variants>

<variants name="Spellcheck_Windows_LocaleSupportType">
  <variant name=".Both"
      summary="This variation counts the number of locales that are supported
               by both Hunspell and the OS spell checker."/>
  <variant name=".HunspellOnly"
      summary="This variation counts the number of locales that are only
               supported by Hunspell."/>
  <variant name=".NativeOnly"
      summary="This variation counts the number of locales that are only
               supported by the OS spell checker."/>
  <variant name=".NoSupport"
      summary="This variation counts the number of locales that are not
               supported by either Hunspell or the OS spell checker."/>
</variants>

<variants name="Spellcheck_Windows_SpellcheckType">
  <variant name=".HunspellOnly"
      summary="This variation measures the duration when only Hunspell is
               used."/>
  <variant name=".Hybrid"
      summary="This variation measures the duration when Hunspell is used for
               some locales and the OS spell checker is used for others."/>
  <variant name=".NativeOnly"
      summary="This variation measures the duration when only by the OS spell
               checker is used."/>
</variants>

<variants name="WebContentsObserverMethods">
  <variant name="DidChangeVisibleSecurityState"/>
  <variant name="DidFinishLoad"/>
  <variant name="DidFinishNavigation"/>
  <variant name="DidFirstVisuallyNonEmptyPaint"/>
  <variant name="DidRedirectNavigation"/>
  <variant name="DidStartLoading"/>
  <variant name="DidStartNavigation"/>
  <variant name="DidStopLoading"/>
  <variant name="DidUpdateNavigationHandleTiming"/>
  <variant name="DocumentAvailableInMainFrame"/>
  <variant name="DOMContentLoaded"/>
  <variant name="LoadProgressChanged"/>
  <variant name="NavigationEntryChanged"/>
  <variant name="NavigationEntryCommitted"/>
  <variant name="NavigationEntryDeleted"/>
  <variant name="OnVisibilityChanged"/>
  <variant name="OnVisibilityWillChange"/>
  <variant name="PrimaryMainDocumentElementAvailable"/>
  <variant name="RenderFrameCreated"/>
  <variant name="RenderFrameDeleted"/>
  <variant name="RenderViewReady"/>
  <variant name="TitleWasSet"/>
  <variant name="TitleWasSetForMainFrame"/>
</variants>

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

<variants name="WebUIHostnameForCodeCache">
  <variant name="Bookmarks"/>
  <variant name="BookmarksSidePanel"/>
  <variant name="CustomizeChromeSidePanel"/>
  <variant name="Downloads"/>
  <variant name="History"/>
  <variant name="HistoryClustersSidePanel"/>
  <variant name="HistorySidePanel"/>
  <variant name="NewTabPage"/>
  <variant name="NewTabPageThirdParty"/>
  <variant name="ReadAnythingSidePanel"/>
  <variant name="ReadLater"/>
  <variant name="Resources"/>
  <variant name="Settings"/>
  <variant name="TabSearch"/>
  <variant name="Theme"/>
  <variant name="TopChrome"/>
</variants>

<!-- LINT.ThenChange(//tools/metrics/histograms/metadata/ui/histograms.xml:WebUIHostname) -->

<histogram name="BlueZ.PerProfile.{BlueZPerProfileResult}ConnectionResult"
    enum="BlueZResultOfPerProfileConnection" expires_after="2023-06-11">
  <owner>mmandlik@google.com</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    Records the outcome of bluetooth profile connection request to a remote
    device. This helps to understand the percentage of successful profile
    connections against failures and the causes of failures.
    {BlueZPerProfileResult}
  </summary>
  <token key="BlueZPerProfileResult" variants="BlueZPerProfileResult">
    <variant name=""/>
  </token>
</histogram>

<histogram name="BlueZ.PerProfile.{BlueZPerProfileResult}ProbingResult"
    enum="BlueZResultOfPerProfileProbing" expires_after="2023-06-11">
  <owner>mmandlik@google.com</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    Records the outcome of bluetooth profile probing while pairing with a remote
    device. This helps to understand the percentage of successful profile
    probing against failures and the causes of failures. {BlueZPerProfileResult}
  </summary>
  <token key="BlueZPerProfileResult" variants="BlueZPerProfileResult">
    <variant name=""/>
  </token>
</histogram>

<histogram name="BlueZ.ReasonOfDisconnection" enum="BlueZReasonOfDisconnection"
    expires_after="2024-03-17">
  <owner>mcchou@chromium.org</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    This is specific to Chrome OS. Records the reason of Bluetooth disconnection
    between the local device and the remote Bluetooth device. This helps us
    better understand the initiator of disconnection request.
  </summary>
</histogram>

<histogram name="BlueZ.ResultOfAdvertisementRegistration"
    enum="BlueZResultOfAdvertisementRegistration" expires_after="2023-06-11">
  <owner>mcchou@chromium.org</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    This is specific to Chrome OS. Records the outcomes of advertisement
    registration. This helps us better understand the persentage of successful
    advertisements against failures and the causes of failures.
  </summary>
</histogram>

<histogram name="BlueZ.ResultOfConnection" enum="BlueZResultOfConnection"
    expires_after="2024-11-03">
  <owner>mcchou@chromium.org</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    This is specific to Chrome OS. Records the outcomes of connection requests
    to remote devices. This helps us better understand the persentage of
    successful connections against failures and the causes of failures.
  </summary>
</histogram>

<histogram name="BlueZ.ResultOfPairing" enum="BlueZResultOfPairing"
    expires_after="2024-04-28">
  <owner>mcchou@chromium.org</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    This is specific to Chrome OS. Records the outcomes of pairing with remote
    devices. This helps us better understand the persentage of successful
    pairing against failures and the causes of failures.
  </summary>
</histogram>

<histogram name="BlueZ.TimeLengthOfAdvertisement" units="seconds"
    expires_after="2023-06-11">
  <owner>mcchou@chromium.org</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    This is specific to Chrome OS. Records the duration when the local device is
    performing Bluetooth advertisment and discoverable as a Bluetooth Low Energy
    device by other devices. This helps us better understand the amount of
    successful advertisment sessions and the duration.
  </summary>
</histogram>

<histogram name="BlueZ.TimeLengthOfDiscoverable" units="seconds"
    expires_after="2023-08-13">
  <owner>mcchou@chromium.org</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    This is specific to Chrome OS. Records the duration when the local device is
    discoverable by other devices as a Bluetooth classic device. This helps us
    better understand the amount of requests to expose the local device as a
    Bluetooth classic device and the duration.
  </summary>
</histogram>

<histogram name="BlueZ.TimeLengthOfDiscovering" units="seconds"
    expires_after="2023-08-13">
  <owner>mcchou@chromium.org</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    This is specific to Chrome OS. Records the duration for the local device to
    perform device discovery. This helps us better understand the amount of
    device discovery request and the duration for users to find the target
    device.
  </summary>
</histogram>

<histogram name="BlueZ.TimeLengthOfPairing" units="seconds"
    expires_after="2023-10-15">
  <owner>mcchou@chromium.org</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    This is specific to Chrome OS. Records the duration taken to finish a
    successful pairing between the local device and a remote Bluetooth device.
    This helps us better understand the latency of completing Bluetooth pairing.
  </summary>
</histogram>

<histogram name="BlueZ.TimeLengthOfSetupConnection" units="seconds"
    expires_after="2023-10-15">
  <owner>mcchou@chromium.org</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    This is specific to Chrome OS. Records the duration taken to finish a
    successful connection between the local device and a remote Bluetooth
    device. This helps us better understand the latency of connecting to a
    Bluetooth device.
  </summary>
</histogram>

<histogram name="BlueZ.TypeOfDiscovery" enum="BlueZTypeOfDiscovery"
    expires_after="2023-10-15">
  <owner>mcchou@chromium.org</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    This is specific to Chrome OS. Records the types of device discovery
    performed by the local device. This helps us better understand the most
    common type of device discovery performed.
  </summary>
</histogram>

<histogram name="BlueZ.TypeOfFoundDevice" enum="BlueZTypeOfFoundDevice"
    expires_after="2023-06-11">
  <owner>mcchou@chromium.org</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    This is specific to Chrome OS. Records the types of discovered devices in
    terms of Bluetooth classic, Bluetooth low energy and Dual-mode supports.
    This helps us better understand the persentage of Bluetooth devices in terms
    of type.
  </summary>
</histogram>

<histogram name="BootTime.BrowserLaunchedAfterTPMOwn-Start" units="ms"
    expires_after="2026-10-12">
  <owner>hidehiko@chromium.org</owner>
  <owner>junis@google.com</owner>
  <owner>cros-sw-perf@google.com</owner>
  <summary>
    Time from TPMOwn-Start BootTime event until BrowserLaunched BootTime event
    during the user login on Chrome OS.
  </summary>
</histogram>

<histogram name="BootTime.Chrome" units="ms" expires_after="never">
<!-- expires-never: This is a primary metric for the ChromeOS total boot time. -->

  <owner>hidehiko@chromium.org</owner>
  <owner>junis@google.com</owner>
  <owner>cros-sw-perf@google.com</owner>
  <owner>cros-oac@google.com</owner>
  <summary>
    Time from chrome binary exec to login UI ready on Chrome OS. This is
    recorded from the platform side after receiving &quot;login-ui-visible&quot;
    event on the platform side in the send-boot-metrics.conf script.

    Warning: this histogram was expired from M83 to M105; data may be missing.
  </summary>
</histogram>

<histogram name="BootTime.Chrome.{Type}" units="ms" expires_after="2027-04-07">
  <owner>takayas@google.com</owner>
  <owner>uekawa@google.com</owner>
  <summary>
    Time from chrome binary exec to login UI ready on ChromeOS. This variant
    will only track the time taken on {Type}. This is recorded from the platform
    side after send-boot-metrics.conf script receives login-ui-visible event at
    the end of the boot.

    The identification of boot type and actual recording is done by the
    send-boot-metrics.sh script.
  </summary>
  <token key="Type" variants="BootVariant"/>
</histogram>

<histogram name="BootTime.Firmware" units="ms" expires_after="never">
<!-- expires-never: This is a primary metric for ChromeOS boot time. -->

  <owner>briannorris@chromium.org</owner>
  <owner>ctshao@google.com</owner>
  <owner>alemate@chromium.org</owner>
  <owner>baseos-perf@google.com</owner>
  <summary>
    Time from power on to kernel start (Chrome OS).

    Warning: this histogram was expired from M83 to M105; data may be missing.
  </summary>
</histogram>

<histogram name="BootTime.Firmware.{Type}" units="ms"
    expires_after="2027-04-07">
  <owner>takayas@google.com</owner>
  <owner>uekawa@google.com</owner>
  <summary>
    Time from power on to kernel start (ChromeOS). This variant will only track
    the time taken on {Type}. This is recorded from the platform side after
    send-boot-metrics.conf script receives login-ui-visible event at the end of
    the boot.

    The identification of boot type and actual recording is done by the
    send-boot-metrics.sh script.
  </summary>
  <token key="Type" variants="BootVariant"/>
</histogram>

<histogram name="BootTime.Kernel" units="ms" expires_after="never">
<!-- expires-never: This is a primary metric for ChromeOS boot time. -->

  <owner>briannorris@chromium.org</owner>
  <owner>ctshao@google.com</owner>
  <owner>alemate@chromium.org</owner>
  <owner>baseos-perf@google.com</owner>
  <summary>
    Time from kernel start to system code being called (Chrome OS).

    Warning: this histogram was expired from M83 to M105; data may be missing.
  </summary>
</histogram>

<histogram name="BootTime.Kernel.{Type}" units="ms" expires_after="2027-04-07">
  <owner>takayas@google.com</owner>
  <owner>uekawa@google.com</owner>
  <summary>
    Time from kernel start to system code being called (ChromeOS). This variant
    will only track the time taken on {Type}. This is recorded from the platform
    side after send-boot-metrics.conf script receives login-ui-visible event at
    the end of the boot.

    The identification of boot type and actual recording is done by the
    send-boot-metrics.sh script.
  </summary>
  <token key="Type" variants="BootVariant"/>
</histogram>

<histogram name="BootTime.Login2" units="ms" expires_after="never">
<!-- expires-never: This is a primary metric for the ChromeOS login. -->

  <owner>antrim@chromium.org</owner>
  <owner>hidehiko@chromium.org</owner>
  <owner>junis@google.com</owner>
  <owner>cros-oac@chromium.org</owner>
  <summary>
    Time from the moment sign in authentication is started until the post login
    animation finishes. (Chrome OS).
  </summary>
</histogram>

<histogram name="BootTime.Login3" units="ms" expires_after="never">
<!-- expires-never: This is a primary metric for the ChromeOS login. -->

  <owner>hidehiko@chromium.org</owner>
  <owner>junis@google.com</owner>
  <owner>cros-sw-perf@google.com</owner>
  <summary>
    Chrome OS: The time it takes from when sign-in authentication ends to when
    the login animation finishes. This marks the end of the login process, as
    the user's session should be usable at this point.

    This does not replace the BootTime.Login2 histogram.

    Warning: this does not include the cryptohome authentication period, unlike
    BootTime.Login2.

    TODO(b/323098858): deprecate this with Login4, once we have confirmed the
    compositor animation waiting time is negligible.
  </summary>
</histogram>

<histogram name="BootTime.Login4" units="ms" expires_after="never">
<!-- expires-never: This is going to be a primary metric for the ChromeOS login. -->

  <owner>hidehiko@chromium.org</owner>
  <owner>junis@google.com</owner>
  <owner>cros-sw-perf@google.com</owner>
  <summary>
    Chrome OS: The time it takes from when sign-in authentication ends to when
    the login finishes. This marks the end of the login process, as the user's
    session should be usable at this point.

    This is very close to BootTime.Login3, but animation part is not included.
    The purpose is to make sure animation waiting part is negligible by
    comparing to BootTime.Login3.

    Warning: this does not include the cryptohome authentication period, unlike
    BootTime.Login2.

    TODO(b/323098858): deprecate this with Login3, once we have confirmed the
    compositor animation waiting time is negligible.
  </summary>
</histogram>

<histogram name="BootTime.OnAuthSuccessAfterLoginStarted" units="ms"
    expires_after="2026-10-12">
  <owner>hidehiko@chromium.org</owner>
  <owner>junis@google.com</owner>
  <owner>cros-sw-perf@google.com</owner>
  <summary>
    Time from the LoginStarted BootTime event until OnAuthSuccess event
    received.
  </summary>
</histogram>

<histogram name="BootTime.System" units="ms" expires_after="never">
<!-- expires-never: This is a primary metric for the ChromeOS total boot time. -->

  <owner>briannorris@chromium.org</owner>
  <owner>ctshao@google.com</owner>
  <owner>alemate@chromium.org</owner>
  <owner>baseos-perf@google.com</owner>
  <summary>
    Time from system code being called to starting Chrome (Chrome OS).

    Warning: this histogram was expired from M83 to M105; data may be missing.
  </summary>
</histogram>

<histogram name="BootTime.System.{Type}" units="ms" expires_after="2027-04-07">
  <owner>takayas@google.com</owner>
  <owner>uekawa@google.com</owner>
  <summary>
    Time from system code being called to starting Chrome (ChromeOS). This
    variant will only track the time taken on {Type}. This is recorded from the
    platform side after send-boot-metrics.conf script receives login-ui-visible
    event at the end of the boot.

    The identification of boot type and actual recording is done by the
    send-boot-metrics.sh script.
  </summary>
  <token key="Type" variants="BootVariant"/>
</histogram>

<histogram name="BootTime.Total2" units="ms" expires_after="never">
<!-- expires-never: This is a primary metric for the ChromeOS total boot time. -->

  <owner>takayas@google.com</owner>
  <owner>uekawa@google.com</owner>
  <owner>cros-sw-perf@google.com</owner>
  <owner>cros-oac@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time from power on to login UI ready on Chrome OS. This is recorded from the
    platform side after receiving &quot;login-ui-visible&quot; event on the
    platform side in the send-boot-metrics.conf script.

    Warning: this histogram was expired from 2022-04-03 to M105; data may be
    missing.

    Warning: this histogram is capped at 20 seconds and is not correctly
    representing longer end of boot time.
  </summary>
</histogram>

<histogram name="BootTime.Total2.{Type}" units="ms" expires_after="2027-04-07">
  <owner>takayas@google.com</owner>
  <owner>uekawa@google.com</owner>
  <summary>
    Time from power on to login UI ready on ChromeOS. This variant will only
    track the time taken on {Type}. This is recorded from the platform side
    after send-boot-metrics.conf script receives login-ui-visible event at the
    end of the boot.

    The identification of boot type and actual recording is done by the
    send-boot-metrics.sh script.
  </summary>
  <token key="Type" variants="BootVariant"/>
</histogram>

<histogram name="BootTime.TPMOwn-StartAfterUserProfileGotten" units="ms"
    expires_after="2026-10-12">
  <owner>hidehiko@chromium.org</owner>
  <owner>junis@google.com</owner>
  <owner>cros-sw-perf@google.com</owner>
  <summary>
    Time from the UserProfileGotten BootTime event until TPM ownershp check
    starts during the user login on Chrome OS.
  </summary>
</histogram>

<histogram name="BootTime.UserProfileGottenAfterAuthSuccess" units="ms"
    expires_after="2026-10-12">
  <owner>hidehiko@chromium.org</owner>
  <owner>junis@google.com</owner>
  <owner>cros-sw-perf@google.com</owner>
  <summary>
    Time from the AuthSuccess BootTime event until user profile loaded during
    the user login on Chrome OS.

    Usually it's time spent on user profile loading and parsing.
  </summary>
</histogram>

<histogram name="BrotliFilter.CompressionPercent" units="%"
    expires_after="2027-01-31">
  <owner>eustas@chromium.org</owner>
  <summary>Compressed/Decompressed size ratio.</summary>
</histogram>

<histogram name="ClientHints.AcceptCHFrame" enum="AcceptCHFrameRestart"
    expires_after="2027-02-21">
  <owner>victortan@chromium.org</owner>
  <owner>miketaylr@chromium.org</owner>
  <owner>katabolism-finch@google.com</owner>
  <summary>
    Emitted on two related events: First, when an request that is eligable to be
    restarted receives an ACCEPT_CH HTTP2/HTTP3 frame via a TLS connection with
    the relevent ALPS setting. Next, if that frame causes that request to be
    restarted.
  </summary>
</histogram>

<histogram name="ClientHints.CriticalCHRestart" enum="CriticalCHRestart"
    expires_after="2026-12-27">
  <owner>victortan@chromium.org</owner>
  <owner>miketaylr@chromium.org</owner>
  <owner>katabolism-finch@google.com</owner>
  <summary>
    Count of requests restarted because of the Critical-CH response header.
  </summary>
</histogram>

<histogram name="ClientHints.FetchLatency{OperationType}" units="microseconds"
    expires_after="2027-01-03">
  <owner>victortan@chromium.org</owner>
  <owner>miketaylr@chromium.org</owner>
  <owner>katabolism-finch@google.com</owner>
  <summary>
    The latency (in microseconds) to fetch the client hints for a given origin
    from the Accept-CH cache for {OperationType}.
  </summary>
  <token key="OperationType">
    <variant name="_OriginTrialCheck"
        summary="checking origin trial client hints"/>
    <variant name="_PrefRead" summary="PrefService read"/>
    <variant name="_PrerenderHost" summary="prerender host"/>
    <variant name="_Total"
        summary="all subcategories operations: PrefRead, PrerenderHost, and
                 OriginTrialCheck"/>
  </token>
</histogram>

<histogram name="ClientHints.StoreLatency" units="ms"
    expires_after="2027-02-14">
  <owner>victortan@chromium.org</owner>
  <owner>miketaylr@chromium.org</owner>
  <owner>katabolism-finch@google.com</owner>
  <summary>
    The latency (in milliseconds) to store the client hints for a given origin
    in the Accept-CH cache.
  </summary>
</histogram>

<histogram name="ClientHints.UpdateEventCount" units="count"
    expires_after="2027-02-14">
  <owner>victortan@chromium.org</owner>
  <owner>katabolism-finch@google.com</owner>
  <summary>
    Count of events when the client hints needs to be persisted to the disk by
    the browser. Collected while navigation responses are being processed.
  </summary>
</histogram>

<histogram name="ClientHints.UpdateSize" units="count"
    expires_after="2027-02-14">
  <owner>victortan@chromium.org</owner>
  <owner>katabolism-finch@google.com</owner>
  <summary>
    Count of client hints that need to be persisted to the disk. Recorded by the
    renderer. Collected while navigation responses are being processed.
  </summary>
</histogram>

<histogram
    name="ComponentUpdater.AndroidComponentLoader.LoadStatus.{Component}"
    enum="BooleanSuccess" expires_after="2027-04-01">
  <owner>pbirk@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/components/component_updater/android/OWNERS</owner>
  <summary>
    Records {Component} component loading success, or the failure reason if the
    component loading fails using the EmbeddedComponentLoader. Note that success
    here just means that the component has been fetched successfully from the
    components provider service. However, this doesn't neccessary mean that the
    component will be then loaded successfully in the system by its respective
    ComponentLoaderPolicy implementation.
  </summary>
  <token key="Component">
    <variant name="OriginTrials" summary="OriginTrials"/>
    <variant name="TrustTokenKeyCommitments"
        summary="TrustTokenKeyCommitments"/>
    <variant name="WebViewEmptyComponent" summary="WebViewEmptyComponent"/>
  </token>
</histogram>

<histogram name="ComponentUpdater.Calls" enum="ComponentUpdaterCalls"
    expires_after="2027-02-14">
  <owner>sorin@chromium.org</owner>
  <owner>src/components/component_updater/OWNERS</owner>
  <summary>
    The number of times the component updater called UpdateClient::Install or
    UpdateClient::Update. These correspond to the number of manual component
    update checks performed as a result of a user action, and the number of
    automated component update checks. Warning: this histogram was expired from
    2022-12-20 to 2023-12-04; data may be missing.
  </summary>
</histogram>

<histogram name="ComponentUpdater.InstallResult" enum="ComponentManagerError"
    expires_after="2027-01-25">
  <owner>wanghaifan@google.com</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <owner>src/components/component_updater/OWNERS</owner>
  <summary>
    Chrome OS only. The installation result of the cros component manager.
  </summary>
</histogram>

<histogram name="ComponentUpdater.PlatformRuntime.InstallTrigger"
    enum="PlatformRuntimeInstallTrigger" expires_after="2027-01-03">
  <owner>marwant@google.com</owner>
  <owner>src/chrome/browser/component_updater/OWNERS</owner>
  <summary>
    Counts the different reasons/ways the platform runtime component got
    installed: either on startup due to being missing, or on startup due to
    being stale, or via the background updater process.
  </summary>
</histogram>

<histogram name="ComponentUpdater.PlatformRuntime.RequestHeaderIntegrityResult"
    enum="PlatformRuntimeIntegrityResult" expires_after="2027-01-03">
  <owner>quarz@chromium.org</owner>
  <owner>src/chrome/common/platform_runtime/OWNERS</owner>
  <summary>
    Counts the different outcomes when processing request headers for integrity
    checks.
  </summary>
</histogram>

<histogram name="ComponentUpdater.TranslateKit.LanguagePack.UpdateError"
    enum="UpdateClientErrors" expires_after="2026-12-31">
  <owner>paugomez@chromium.org</owner>
  <owner>danft@chromium.org</owner>
  <owner>mardelpi@chromium.org</owner>
  <summary>
    The error code for a failed on-demand update of a Translate Kit language
    pack component. Recorded when a user action requires an on-device
    translation for a language pair for which the language pack is not yet
    installed.
  </summary>
</histogram>

<histogram name="ComponentUpdater.TranslateKit.MountError"
    enum="UpdateClientErrors" expires_after="2026-12-31">
  <owner>paugomez@chromium.org</owner>
  <owner>danft@chromium.org</owner>
  <owner>mardelpi@chromium.org</owner>
  <summary>
    Chrome OS only. The error code for a failed mount of the Translate Kit
    component. This is recorded when the component is installed but mounting it
    via the ImageLoaderClient fails. Can occur as part of the component
    installation process the first time a user needs on device translation and
    the component is not yet installed.
  </summary>
</histogram>

<histogram name="ComponentUpdater.TranslateKit.UpdateError"
    enum="UpdateClientErrors" expires_after="2026-12-31">
  <owner>paugomez@chromium.org</owner>
  <owner>danft@chromium.org</owner>
  <owner>mardelpi@chromium.org</owner>
  <summary>
    The error code for a failed on-demand update of the Translate Kit component.
    Recorded when an on-demand update of the main TranslateKit component fails.
    This is a one time event indirectly triggered by a user action. (not
    periodic or on startup)
  </summary>
</histogram>

<histogram name="ComponentUpdater.UpdateCompleteError"
    enum="UpdateClientErrors" expires_after="2026-12-31">
  <owner>sorin@chromium.org</owner>
  <owner>src/components/component_updater/OWNERS</owner>
  <summary>The result of an install or an update check.</summary>
</histogram>

<histogram name="ComponentUpdater.UpdateCompleteResult" enum="BooleanError"
    expires_after="2026-12-31">
  <owner>sorin@chromium.org</owner>
  <owner>src/components/component_updater/OWNERS</owner>
  <summary>The result of an install or an update check.</summary>
</histogram>

<histogram name="ComponentUpdater.UpdateCompleteTime" units="ms"
    expires_after="2026-12-20">
  <owner>sorin@chromium.org</owner>
  <owner>src/components/component_updater/OWNERS</owner>
  <summary>
    Time to complete an Install or an Update component update call. Warning:
    this histogram was expired from 2022-12-20 to 2023-12-04; data may be
    missing.
  </summary>
</histogram>

<histogram name="DeclarativePerformanceObserver.BufferLimitExceeded"
    enum="Boolean" expires_after="2026-12-19">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records whether a document's declarative performance observer exceeded its
    quota and dropped entries. Recorded at the end of the document's lifecycle
    (session end).
  </summary>
</histogram>

<histogram name="DeclarativePerformanceObserver.PeakBufferSize" units="KB"
    expires_after="2026-12-19">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records the peak buffer size (in KB) accumulated by a document's declarative
    performance observer. Recorded at the end of the document's lifecycle
    (session end).
  </summary>
</histogram>

<histogram name="DirectSockets.TCPNetworkFailures" enum="NetErrorCodes"
    expires_after="2026-09-27">
  <owner>greengrape@google.com</owner>
  <owner>iwa-team@google.com</owner>
  <summary>
    How often tcp socket opening finishes with a network failure.
  </summary>
</histogram>

<histogram name="DirectSockets.TCPReadableStreamError" enum="NetErrorCodes"
    expires_after="2027-02-07">
  <owner>greengrape@google.com</owner>
  <owner>iwa-team@google.com</owner>
  <summary>How often tcp socket readable stream is errored.</summary>
</histogram>

<histogram name="DirectSockets.TCPServerNetworkFailures" enum="NetErrorCodes"
    expires_after="2026-09-13">
  <owner>greengrape@google.com</owner>
  <owner>iwa-team@google.com</owner>
  <summary>
    How often tcp server socket opening finishes with a network failure.
  </summary>
</histogram>

<histogram name="DirectSockets.TCPServerReadableStreamError"
    enum="NetErrorCodes" expires_after="2026-09-13">
  <owner>greengrape@google.com</owner>
  <owner>iwa-team@google.com</owner>
  <summary>How often tcp server socket readable stream is errored.</summary>
</histogram>

<histogram name="DirectSockets.TCPWritableStreamError" enum="NetErrorCodes"
    expires_after="2026-09-13">
  <owner>greengrape@google.com</owner>
  <owner>iwa-team@google.com</owner>
  <summary>How often tcp socket writable stream is errored.</summary>
</histogram>

<histogram name="DirectSockets.UDPNetworkFailures" enum="NetErrorCodes"
    expires_after="2026-09-13">
  <owner>greengrape@google.com</owner>
  <owner>iwa-team@google.com</owner>
  <summary>
    How often udp socket opening finishes with a network failure.
  </summary>
</histogram>

<histogram name="DirectSockets.UDPReadableStreamError" enum="NetErrorCodes"
    expires_after="2027-01-24">
  <owner>greengrape@google.com</owner>
  <owner>iwa-team@google.com</owner>
  <summary>How often udp socket readable stream is errored.</summary>
</histogram>

<histogram name="DirectSockets.UDPWritableStreamError" enum="NetErrorCodes"
    expires_after="2027-01-17">
  <owner>greengrape@google.com</owner>
  <owner>iwa-team@google.com</owner>
  <summary>How often udp socket writable stream is errored.</summary>
</histogram>

<histogram name="Document.BeforeUnloadDialog" enum="BeforeUnloadDialogResult"
    expires_after="2026-12-01">
  <owner>panicker@chromium.org</owner>
  <owner>chikamune@chromium.org</owner>
  <summary>
    Records result of invoking beforeunload handler, that determines whether to
    show the dialog.

    Warning: this histogram was expired from M77 to M108; data may be missing.
  </summary>
</histogram>

<histogram name="DocumentEventTiming.BeforeUnloadDialogDuration.ByNavigation"
    units="ms" expires_after="2027-02-07">
  <owner>sullivan@chromium.org</owner>
  <owner>chikamune@chromium.org</owner>
  <summary>
    Milliseconds spent in beforeunload dialog. Does not include time to process
    beforeunload event in JavaScript. Recorded immediately after closing dialog,
    upon user confirmation to navigate away from the page.

    Warning: this histogram was expired from 2020-09-05 to M108, and from
    2023-10-01 to M144; data may be missing.
  </summary>
</histogram>

<histogram name="DocumentScan.ScanFailed" enum="DocumentScanSaneBackend"
    expires_after="2026-12-06">
  <owner>bmgordon@chromium.org</owner>
  <owner>project-bolton@google.com</owner>
  <summary>
    Chrome OS document scan metric that tracks which SANE backend (effectively a
    scanner driver) was used when a scan failed.
  </summary>
</histogram>

<histogram name="DocumentScan.ScanFailureProgress" enum="ScanFailureProgress"
    expires_after="2023-12-14">
  <owner>rishabhagr@google.com</owner>
  <owner>project-bolton@google.com</owner>
  <summary>
    Chrome OS document scan metric that tracks the stage at which the scan
    failed.
  </summary>
</histogram>

<histogram name="DocumentScan.ScanFailureReason" enum="ScanJobFailureReason"
    expires_after="2023-11-30">
  <owner>rishabhagr@google.com</owner>
  <owner>project-bolton@google.com</owner>
  <summary>
    Chrome OS document scan metric that tracks the reason of a scan failure.
  </summary>
</histogram>

<histogram name="DocumentScan.ScanRequested" enum="DocumentScanSaneBackend"
    expires_after="2027-01-17">
  <owner>bmgordon@chromium.org</owner>
  <owner>project-bolton@google.com</owner>
  <summary>
    Chrome OS document scan metric that tracks which SANE backend (effectively a
    scanner driver) that a user requested to use for a scan.
  </summary>
</histogram>

<histogram name="DocumentScan.ScanSucceeded" enum="DocumentScanSaneBackend"
    expires_after="2027-01-17">
  <owner>bmgordon@chromium.org</owner>
  <owner>project-bolton@google.com</owner>
  <summary>
    Chrome OS document scan metric that tracks which SANE backend (effectively a
    scanner driver) was used when a scan succeeded.
  </summary>
</histogram>

<histogram name="Downgrade.RestoreSnapshot.Result"
    enum="SnapshotOperationResult" expires_after="never">
<!-- expires-never: To monitor snapshot restoration results. -->

  <owner>grt@chromium.org</owner>
  <owner>ydago@chromium.org</owner>
  <summary>
    Indicates whether or not restoring a snapshot of the user data dir succeeded
    or failed.
  </summary>
</histogram>

<histogram name="Drive.PushNotificationRegistered" enum="BooleanRegistered"
    expires_after="2025-09-28">
  <owner>simmonsjosh@google.com</owner>
  <owner>src/ui/file_manager/OWNERS</owner>
  <summary>
    Tracks whether the push notification request is registered correctly for
    Drive. Recorded when the push notification manager is initialized.
  </summary>
</histogram>

<histogram name="DrmUtil.CreateDisplaySnapshot.BitsPerChannel" units="bits"
    expires_after="2026-09-01">
  <owner>hiroh@chromium.org</owner>
  <owner>chromeos-gfx-video@google.com</owner>
  <summary>
    Number of bits per channel described by a parsed EDID blob. This UMA is
    recorded whenever the color space is extracted from an EDID blob. Warning:
    this histogram was expired from 2022-01-03 to 2023-05-17; data may be
    missing. Warning: this histogram was expired from 2024-05-16 to 2025-09-01;
    data may be missing.
  </summary>
</histogram>

<histogram name="DrmUtil.CreateDisplaySnapshot.HasEdidBlob" enum="Boolean"
    expires_after="2026-09-01">
  <owner>hiroh@chromium.org</owner>
  <owner>chromeos-gfx-video@google.com</owner>
  <summary>
    Whether an EDID blob was detected. This UMA is recorded whenever we attempt
    to parse the EDID from a display. Warning: this histogram was expired from
    2022-01-03 to 2023-05-17; data may be missing. Warning: this histogram was
    expired from 2024-05-16 to 2025-09-01; data may be missing.
  </summary>
</histogram>

<histogram name="DrmUtil.CreateDisplaySnapshot.IsHDR" enum="Boolean"
    expires_after="2026-09-01">
  <owner>hiroh@chromium.org</owner>
  <owner>chromeos-gfx-video@google.com</owner>
  <summary>
    Whether a EDID blob contained an HDR transfer function (e.g. SMPT SE2084 or
    HLG). This UMA is recorded whenever the color space is extracted from an
    EDID blob. Warning: this histogram was expired from 2022-01-03 to
    2023-05-17; data may be missing.
  </summary>
</histogram>

<histogram name="DrmUtil.GetColorSpaceFromEdid.ChecksOutcome"
    enum="EdidColorSpaceChecksOutcome" expires_after="2026-09-01">
  <owner>andrescj@chromium.org</owner>
  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@google.com</owner>
  <summary>
    When attempting to get the color space from an EDID blob, whether the sanity
    checks passed (and if not, which check failed). This UMA is recorded
    whenever the color space is extracted from an EDID blob.

    Expired in January 2022, and revived in June 2023 (M117). Data collected
    between those dates may be incomplete.
  </summary>
</histogram>

<histogram name="Eche.AppListUpdate.Latency" units="ms"
    expires_after="2027-05-30">
  <owner>crisrael@google.com</owner>
  <owner>jonmann@chromium.org</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    This metric tracks the time it takes from the phone becoming connected to
    the Chromebook and sending the PhoneStatusSnapshot proto until the phone
    sends over the entire apps list via the AppListUpdate proto. Emitted after
    the app stream launcher loads the app list.
  </summary>
</histogram>

<histogram name="Eche.AppStream.LaunchAttempt" enum="AppStreamLaunchEntryPoint"
    expires_after="2027-05-30">
  <owner>crisrael@google.com</owner>
  <owner>jonmann@chromium.org</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    This metric logs where the Eche app was launched from. The metric is emmited
    when the eche app is launched.
  </summary>
</histogram>

<histogram name="Eche.Connection.Duration" units="ms"
    expires_after="2027-05-30">
  <owner>crisrael@google.com</owner>
  <owner>exo-core-eng@google.com</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    The duration of time the phone is in the state connected to eche signaling
    service, and becomes disconnected.
  </summary>
</histogram>

<histogram name="Eche.Connection.Result" enum="BooleanSuccess"
    expires_after="2027-05-30">
  <owner>crisrael@google.com</owner>
  <owner>exo-core-eng@google.com</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    Measures Eche connection success rate. This is recorded at the end of each
    connection attempt whether it fails or succeeds and the failure bucket is
    broken down to more specific segments in
    Eche.Connection.Result.FailureReason
  </summary>
</histogram>

<histogram name="Eche.Connection.Result.FailureReason"
    enum="SecureChannelConnectionAttemptFailureReason"
    expires_after="2027-05-30">
  <owner>jonmann@chromium.org</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    The reason for which the connection attempt to the phone has failed. This is
    a breakdown of the failure bucket of Eche.Connection.Result and is recorded
    at the time a connection attempt fails.
  </summary>
</histogram>

<histogram name="Eche.Connectivity.Latency" units="ms"
    expires_after="2027-05-30">
  <owner>crisrael@google.com</owner>
  <owner>exo-core-eng@google.com</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    The duration of time the phone is in the state connecting to eche signaling
    service, and becomes connected.
  </summary>
</histogram>

<histogram name="Eche.MultiDeviceFeatureState" enum="MultiDevice_FeatureState"
    expires_after="2027-05-30">
  <owner>jonmann@chromium.org</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    Indicates the feature state of the Exo feature. This metric is emitted to at
    the creation of the user session (when the user logs in), when any
    multi-device feature state changes, and every 30 minutes.
  </summary>
</histogram>

<histogram name="Eche.NetworkCheck.FailureReason" enum="ConnectionFailReason"
    expires_after="2027-05-30">
  <owner>jonmann@google.com</owner>
  <owner>nayebi@google.com</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    Failure reason emitted by EcheSignaler on background connect attempt
    failures.
  </summary>
</histogram>

<histogram name="Eche.NetworkCheck.Result" enum="BooleanSuccess"
    expires_after="2027-05-30">
  <owner>jonmann@google.com</owner>
  <owner>nayebi@google.com</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    Emitted on success or failure of a background network connection attempt.
    Triggered when Phone Hub first connects, and on each bubble opened event.
  </summary>
</histogram>

<histogram name="Eche.Onboarding.UserAction" enum="OnboardingUserActionMetric"
    expires_after="2027-05-30">
  <owner>crisrael@google.com</owner>
  <owner>exo-core-eng@google.com</owner>
  <owner>samchiu@google.com</owner>
  <summary>
    Events logged the user action in the Eche onboarding. Recorded when users
    start Eche onboarding and grant the permission that onboarding needs.
  </summary>
</histogram>

<histogram name="Eche.StreamEvent" enum="StreamState"
    expires_after="2027-05-30">
  <owner>crisrael@google.com</owner>
  <owner>exo-core-eng@google.com</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    Events logged in the Eche stream state. Records when a stream is started and
    initialized after the user interacts with a PhoneHub notification or the
    recent app by clicking it to launch the app streaming window.
  </summary>
</histogram>

<histogram name="Eche.StreamEvent.ConnectionFail" enum="ConnectionFailReason"
    expires_after="2027-05-30">
  <owner>crisrael@google.com</owner>
  <owner>exo-core-eng@google.com</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    Events logged the root cause of Eche connection failure. Records when
    signaling timeout on EcheSignaler or the tablet mode check on EcheTray.
  </summary>
</histogram>

<histogram name="Eche.StreamEvent.Duration.FromInitializeToClose" units="ms"
    expires_after="2027-05-30">
  <owner>crisrael@google.com</owner>
  <owner>exo-core-eng@google.com</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    Records the elapsed time from when the stream is initializing to when the
    stream is closed before the stream doesn't started. Fires during the process
    of closing Eche streaming when the stream doesn't start. It is not sent on a
    successful connection attempt.
  </summary>
</histogram>

<histogram name="Eche.StreamEvent.FromLauncher" enum="StreamState"
    expires_after="2027-05-30">
  <owner>pushi@google.com</owner>
  <owner>jonmann@google.com</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    Events logged in the Eche stream state. Records when a stream is initialized
    and started after the user clicks on an app from full app list (Launcher) to
    launch the app streaming window.
  </summary>
</histogram>

<histogram name="Eche.StreamEvent.FromNotification" enum="StreamState"
    expires_after="2027-05-30">
  <owner>pushi@google.com</owner>
  <owner>jonmann@google.com</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    Events logged in the Eche stream state. Records when a stream is initialized
    and started after the user clicks on a PhoneHub notification to launch the
    app streaming window.
  </summary>
</histogram>

<histogram
    name="Eche.StreamEvent.FromNotification.PreviousNetworkCheckFailed.ConnectionFail"
    enum="ConnectionFailReason" expires_after="2027-05-30">
  <owner>pushi@google.com</owner>
  <owner>jonmann@google.com</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    Events logged the root cause of Eche connection failure when triggered from
    a notification and failed in last network connection check. Records when
    signaling timeout on EcheSignaler or the tablet mode check on EcheTray.
    Separate from Eche.StreamEvent.ConnectionFail.
  </summary>
</histogram>

<histogram
    name="Eche.StreamEvent.FromNotification.PreviousNetworkCheckFailed.Result"
    enum="StreamState" expires_after="2027-05-30">
  <owner>pushi@google.com</owner>
  <owner>jonmann@google.com</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    Records the success rate of app streaming when triggered from notificaiton
    and failed in last network connection check. Recorded when the stream is
    initialized in EcheTray or when it starts in EcheStreamStatusChangeHandler.
    Separate from Eche.StreamEvent.
  </summary>
</histogram>

<histogram name="Eche.StreamEvent.FromRecentApps" enum="StreamState"
    expires_after="2027-05-30">
  <owner>pushi@google.com</owner>
  <owner>jonmann@google.com</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    Events logged in the Eche stream state. Records when a stream is initialized
    and started after the user clicks on an app from recent app list to launch
    the app streaming window.
  </summary>
</histogram>

<histogram name="Eche.UniqueAppsStreamed.PerDay" units="count"
    expires_after="2027-05-30">
  <owner>crisrael@google.com</owner>
  <owner>jonmann@chromium.org</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    This metric tracks the number of unique apps the user attempts to launch an
    app stream. Emitted when the app stream is launched and the app has not been
    launched in the current session.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.CanContactUser"
    enum="FeedbackAppContactUserConsentType" expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records whether users allow Google to contact them about the issues. Fires
    when feedback report is being sent.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.DescriptionLength" units="characters"
    expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Record the length of description in the textbox. Fires when the feedback
    report is being sent.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.Duration.GetBigFeedbackLogs" units="ms"
    expires_after="2027-01-30">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the elapsed time from the start of fetching Debugd logs via the
    GetBigFeedbackLogs dbus method to when the data has been retrieved. Fires
    during the process of sending a feedback report on Chrome OS, or when the
    user previews the system logs from the feedback app on Chrome OS.
    GetBigFeedbackLogs is the dbus method used.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.ExitPath" enum="FeedbackAppExitPath"
    expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records a summary of the actions the user took before exiting the app. Fires
    when user closes the feedback app, case includes: User quits on search page
    after clicking some help contents; User quits on search page without
    clicking some help contents; User closes on search page because no help
    content is shown(Offline or Search is down); User closes on share data page
    after clicking help content; User closes on share data page without clicking
    help content; User submits feedback after clicking the help content; User
    submits feedback without clicking the help content.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.GetBigFeedbackLogs.EmptyCount"
    units="logs" expires_after="2027-01-30">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the number of logs with empty data retrieved from debugd for
    feedback reports. Fires during the process of sending a feedback report on
    Chrome OS, or when the user previews the system logs from the feedback app
    on Chrome OS.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.GetBigFeedbackLogs.NotAvailableCount"
    units="logs" expires_after="2027-01-30">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the number of logs with not available data retrieved from debugd for
    feedback reports. Fires during the process of sending a feedback report on
    Chrome OS, or when the user previews the system logs from the feedback app
    on Chrome OS.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.GetBigFeedbackLogs.OtherCount"
    units="logs" expires_after="2027-01-30">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the number of logs with data not empty or not available retrieved
    from debugd for feedback reports. Fires during the process of sending a
    feedback report on Chrome OS, or when the user previews the system logs from
    the feedback app on Chrome OS.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.GetBigFeedbackLogs.Success"
    enum="Boolean" expires_after="2027-01-30">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the success status of fetching the feedback logs via debus method
    GetBigFeedbackLogs. Fires during the process of sending a feedback report on
    Chrome OS, or when the user previews the system logs from the feedback app
    on Chrome OS.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.GetFeedbackLogsV2.DBusResult"
    enum="GetFeedbackLogsV2DbusResult" expires_after="2027-01-30">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the different results of fetching the feedback logs via debus method
    GetFeedbackLogsV2. Fires during the process of sending a feedback report on
    Chrome OS, or when the user previews the system logs from the feedback app
    on Chrome OS.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.HelpContentOutcome"
    enum="FeedbackAppHelpContentOutcome" expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Record the outcome of checking help contents. Fires when user leaves the
    search page by clicking continue or by clicking x on top right to close the
    app.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.HelpContentSearchResultCount"
    units="numbers" expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the number of help content results returned in each search. Fires
    when user clicks and views the help content on search page.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.IncludedEmail" enum="Boolean"
    expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records whether the email is included when the feedback report is submitted.
    Fires when user's feedback report is being sent.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.IncludedFile" enum="Boolean"
    expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records whether attached file is included when the feedback report is
    submitted. Fires when user's feedback report is being sent.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.IncludedScreenshot" enum="Boolean"
    expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records whether the screenshot is included when the feedback report is
    submitted. Fires when a user's feedback report is successfully sent.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.IncludedSystemInfo" enum="Boolean"
    expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records whether the system and information is included when the feedback
    report is submitted. Fires when a user's feedback report is being sent.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.IncludedUrl" enum="Boolean"
    expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records whether the page url is included when the feedback report is
    submitted. Fires when user's feedback report is being sent.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.Openduration" units="ms"
    expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the duration that the Feedback App is open. Emitted when the app is
    closed.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.PostSubmitAction"
    enum="FeedbackAppPostSubmitAction" expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the first action that the users take after sending feedback. Fires
    on the first action taken on post submit page after the user has sent the
    feedback.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.TimeOnPage.{FeedbackAppPage}" units="s"
    expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the duration that the Feedback App is open on {FeedbackAppPage}
    page. Fires when the user closes the app or starts new report after feedback
    report has been sent.
  </summary>
  <token key="FeedbackAppPage">
    <variant name="ConfirmationPage"/>
    <variant name="SearchPage"/>
    <variant name="ShareDataPage"/>
  </token>
</histogram>

<histogram name="Feedback.ChromeOSApp.ViewedHelpContent" enum="Boolean"
    expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Record number of times the user viewed the help content. Fires when user
    clicks help content on search page.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.ViewedImage" enum="Boolean"
    expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Record number of times the user viewed the attached image. Fires when user
    clicks the thumbnail and views the larger image.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.ViewedMetrics" enum="Boolean"
    expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Record number of times the user viewed the metrics. Fires when user clicks
    metrics link and views metrics.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.ViewedScreenshot" enum="Boolean"
    expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Record number of times the user viewed the screenshot. Fires when user
    clicks the thumbnail on and views the larger screenshot.
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.ViewedSystemAndAppInfo" enum="Boolean"
    expires_after="2027-01-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Record number of times the user viewed the system and app information. Fires
    when system and app info link is clicked.
  </summary>
</histogram>

<histogram name="Feedback.Duration.FetchSystemInformation" units="ms"
    expires_after="2027-01-30">
  <owner>xiangdongkong@google.com</owner>
  <owner>fernandex@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the elapsed time from the start of fetching system information to
    when the data has been retrieved. Fires during the process of sending a
    feedback report on Chrome (Desktop + Android) or Chrome OS.
  </summary>
</histogram>

<histogram name="Feedback.Duration.FormOpenToSubmit" units="ms"
    expires_after="2027-01-30">
  <owner>xiangdongkong@google.com</owner>
  <owner>fernandex@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the elapsed time from when the feedback app window is opened to when
    the backend receives the send report request submitted by a user. Fires
    during the process of sending a feedback report on Chrome (Desktop +
    Android) or Chrome OS.
  </summary>
</histogram>

<histogram name="Feedback.Duration.FormSubmitToConfirmation" units="ms"
    expires_after="2022-08-21">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the elapsed time from when the backend receives the send report
    request submitted by a user to when it starts to send confirmation back to
    the frontend. Fires during the process of sending a feedback report on
    Chrome or Chrome OS.
  </summary>
</histogram>

<histogram name="Feedback.Duration.FormSubmitToSendQueue" units="ms"
    expires_after="2027-01-30">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the elapsed time from when the backend receives the send report
    request submitted by a user and the report has been added to the send queue.
    Fires during the process of sending a feedback report on Chrome or Chrome
    OS.
  </summary>
</histogram>

<histogram name="Feedback.HappinessTrackingSurvey.ShouldShowSurveyReason"
    enum="HappinessTrackingSurveyShouldShowSurveyReasons"
    expires_after="2027-02-07">
  <owner>sauski@google.com</owner>
  <owner>msramek@chromium.org</owner>
  <summary>
    Records the first reason why the Happiness Tracking Surveys (HaTS) bubble
    was or was not shown. While the request to show may not meet multiple
    criteria, the first criterion is reported here.
  </summary>
</histogram>

<histogram name="Feedback.HappinessTrackingSurvey.SurveyCompleted"
    enum="Boolean" expires_after="2027-02-07">
  <owner>ravjit@google.com</owner>
  <owner>msramek@google.com</owner>
  <summary>
    Recorded whenever a Happiness Tracking Survey (HaTS) survey is completed.
    Only recorded the survey is fully completed.
  </summary>
</histogram>

<histogram name="Feedback.HappinessTrackingSurvey.{SurveyName}"
    enum="HappinessTrackingSurvey" expires_after="2027-02-07">
  <owner>zhouzj@google.com</owner>
  <owner>msramek@google.com</owner>
  <summary>
    Records the responses for HaTS questions. Emitted during the lifecycle of a
    survey and when a user answers any question on a HaTS survey.
  </summary>
  <token key="SurveyName">
    <variant name="BeforeFirstRunDesktopRefreshSurvey"/>
    <variant name="FirstRunDesktopRefreshSurvey"/>
    <variant name="PerformanceControlsPPMSurvey"/>
  </token>
</histogram>

<histogram name="Feedback.NotAllowed.RequestSource" enum="FeedbackSource"
    expires_after="2026-12-20">
  <owner>jlebel@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Recorded when the user attempts to submit feedback, but feedback submission
    is not allowed for that user. This counts cases where the feedback entry
    point was available, but the feedback dialog was blocked.
  </summary>
</histogram>

<histogram name="Feedback.RedactionTool" enum="PIIType"
    expires_after="2025-08-10">
  <owner>nikj@google.com</owner>
  <owner>dpchromeos-core-eng@google.com</owner>
  <summary>
    Records how many times PIIs are redacted by the Client side log redaction
    tool.
  </summary>
</histogram>

<histogram name="Feedback.RedactionTool.Caller" enum="RedactionToolCaller"
    expires_after="2025-10-12">
  <owner>rohkap@google.com</owner>
  <owner>dpchromeos-core-eng@google.com</owner>
  <summary>
    Records which caller invoked the redaction tool. This helps us determine
    where the most redactions are happening and so places emitting most PII in
    logs.
  </summary>
</histogram>

<histogram name="Feedback.RedactionTool.CreditCardMatch"
    enum="CreditCardDetection" expires_after="2025-09-14">
  <owner>cschlosser@chromium.org</owner>
  <owner>dpchromeos-core-eng@google.com</owner>
  <summary>
    The redaction tool can be used to redact potential PII on the client side
    before logs and other data is sent to servers. This histogram is recorded
    when attempting to verify if a matched string is a credit card. Since we
    don't have guaranteed context for credit cards in our logs, unlike e.g.
    shill log format, we have to do apply some heuristic. There are several
    steps where the validation could detect a false positive and we want to
    measure how effective these mechanisms are.
  </summary>
</histogram>

<histogram name="Feedback.RedactionTool.TimeSpentRedacting" units="ms"
    expires_after="2025-10-12">
  <owner>cschlosser@chromium.org</owner>
  <owner>dpchromeos-core-eng@google.com</owner>
  <summary>
    Records how many milliseconds elapsed while redacting the input text by the
    redaction_tool. This metric is recorded after each redaction (JS error or
    feedback report). This metric should be a rough control so we aren't running
    a very long time in the background after a report.
  </summary>
</histogram>

<histogram name="Feedback.RedactionTool.TimeSpentRedactingCrash" units="ms"
    expires_after="2025-10-12">
  <owner>cschlosser@chromium.org</owner>
  <owner>dpchromeos-core-eng@google.com</owner>
  <summary>
    Records how many milliseconds elapsed while redacting the logs of a crash
    inside ChromeOS's crash_reporter. This metric is recorded for each crash
    that has text logs that need redaction, at the time the crash happens. This
    metric should be a rough control so we aren't running a very long time after
    a crash and the user has to wait for the frozen screen to disappear.
  </summary>
</histogram>

<histogram name="Feedback.ReportSending.Online" enum="Boolean"
    expires_after="2027-02-07">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records whether the user is online when the feedback report was submitted.
  </summary>
</histogram>

<histogram name="Feedback.ReportSending.Result"
    enum="FeedbackReportSendingResult" expires_after="2027-02-07">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the feedback report sending states to help track the success rate of
    feedback report offline submission.
  </summary>
</histogram>

<histogram name="Feedback.RequestSource" enum="FeedbackSource"
    expires_after="2027-02-14">
  <owner>afakhry@chromium.org</owner>
  <owner>cros-device-enablement@google.com</owner>
  <summary>
    Records the source that requested showing the feedback app. Only recorded if
    feedback submission is allowed.

    This histogram is only recorded on desktop platforms (Windows, macOS, Linux,
    ChromeOS). For iOS, see IOS.Feedback.ReportAnIssue.Displayed and
    IOS.Feedback.ReportAnIssue.NotDisplayed.
  </summary>
</histogram>

<histogram name="Feedback.TrustSafetySentiment.CallTriggerOccurred"
    enum="TrustSafetySentimentFeatureArea" expires_after="2026-11-15">
  <owner>skrakowi@google.com</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records the associated feature area when the Trust and Safety sentiment
    service detects that the user has performed a trigger action. This is
    recorded before the associated probability check and will be used to verify
    the infrastructure of newly integrated feature areas. We will remove this
    histogram once we verify the implementation.
  </summary>
</histogram>

<histogram name="Feedback.TrustSafetySentiment.SurveyRequested"
    enum="TrustSafetySentimentFeatureArea" expires_after="2024-12-24">
  <owner>sauski@google.com</owner>
  <owner>chrome-hats-eng@google.com</owner>
  <summary>
    Records the associated feature area when the Trust and Safety Sentiment
    service requests a survey be shown from the HaTS service.
  </summary>
</histogram>

<histogram name="Feedback.TrustSafetySentiment.TriggerOccurred"
    enum="TrustSafetySentimentFeatureArea" expires_after="2026-11-01">
  <owner>sauski@google.com</owner>
  <owner>chrome-hats-eng@google.com</owner>
  <summary>
    Records the associated feature area when the Trust and Safety sentiment
    service detects that the user has performed a trigger action. This is
    recorded after the associated probability check.
  </summary>
</histogram>

<histogram name="FetchKeepAlive.RequestDuration{RequestState}" units="ms"
    expires_after="2025-05-12">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded the duration of a fetch keepalive request between when such request
    is constructed by a blink::FetchManager and when the blink::FetchManager
    {RequestState}

    This does not log for non-fetch types of keepalive request, meaning that
    beacons or pings are all excluded. Note that as this is from the view of a
    renderer, it contains only partial metrics when fetch keepalive in-browser
    is enabled.
  </summary>
  <token key="RequestState">
    <variant name=""
        summary="receives a response (succeeded) or fails to load/receive a
                 response. If multiple errors happen, the duration logging
                 ends at the first error. Refer to
                 FetchManager::Loader::Failed() for details."/>
    <variant name=".Failed"
        summary="fails to load/receive a response. If multiple errors happen,
                 the duration logging ends with the first error. Refer to
                 FetchManager::Loader::Failed() for details."/>
    <variant name=".Succeeded" summary="receives a response (succeeded)."/>
  </token>
</histogram>

<histogram name="FetchKeepAlive.RequestOutliveDuration" units="ms"
    expires_after="2026-08-30">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded the time a fetch keepalive request stays alive after its renderer
    has detached, starting from when a blink::ThreadableLoader::Detach() of the
    keepalive request is called, and ending with when such ThreadableLoader is
    cleared.

    This does not log for non-fetch types of keepalive request, meaning that
    beacons or pings are all excluded.

    This is to measure how much time the keepalive in-browser migration is able
    to save.
  </summary>
</histogram>

<histogram name="FetchKeepAlive.Requests2.Network"
    enum="FetchKeepAliveRequestNetworkMetricType" expires_after="2026-09-06">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded an entry when a Fetch keepalive request loader in the Network
    service meets the states defined in the enum, e.g. request created or
    response received.
  </summary>
</histogram>

<histogram name="FetchKeepAlive.Requests2.Shutdown.IsStarted.Browser"
    enum="Boolean" expires_after="2025-10-26">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded true when a Fetch keepalive request loader in the browser process
    is about to shut down and the request loading has been started.
  </summary>
</histogram>

<histogram
    name="FetchKeepAlive.Requests2.{RequestState}.IsContextDetached.{Process}"
    enum="Boolean" expires_after="2026-08-30">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded true when a Fetch keepalive request loader in the {Process}
    {RequestState} while the context is already detached.
  </summary>
  <token key="RequestState">
    <variant name="Retried" summary="starts a retry of a failed load"/>
    <variant name="Started" summary="starts to load (non-retry)"/>
    <variant name="Succeeded" summary="succeeds to load"/>
  </token>
  <token key="Process">
    <variant name="Browser" summary="browser process"/>
    <variant name="Renderer" summary="renderer process"/>
  </token>
</histogram>

<histogram name="FetchKeepAlive.Requests2.{RequestState}.{Process}"
    enum="FetchKeepAliveRequestMetricType" expires_after="2027-02-07">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded a Fetch keepalive request type every time a request loader of such
    request in the {Process} {RequestState}
  </summary>
  <token key="RequestState">
    <variant name="Failed"
        summary="fails to load. A failure can be caused by either server
                 response or browser checking the request/response. In the
                 case of multiple errors, only the first encountered is
                 recorded. Refer to where
                 FetchUtils::LogFetchKeepAliveRequestMetric(...,kFailed) is
                 called for details. Note this includes failures that get
                 retried later."/>
    <variant name="Retried" summary="starts a retry of a failed load."/>
    <variant name="SentToService"
        summary="gets sent to NetworkService (or Browser)."/>
    <variant name="Started" summary="starts a load."/>
    <variant name="Succeeded" summary="succeeds to load."/>
    <variant name="Total"
        summary="is created. It does NOT equal to the total number of
                 JavaScript Fetch API call, as the latter can be immediately
                 rejected with various JavaScript exceptions. This metric is
                 recorded to compare whether different behavior happens
                 between renderer and browser."/>
  </token>
  <token key="Process">
    <variant name="Browser" summary="browser process"/>
    <variant name="Renderer" summary="renderer process"/>
  </token>
</histogram>

<histogram name="FetchLater.Browser.Metrics" enum="FetchLaterBrowserMetricType"
    expires_after="2026-05-03">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Records once every time a scheduled FetchLater request is either aborted or
    started in browser.
  </summary>
</histogram>

<histogram name="FetchLater.Browser.Total{LoaderStatus}" enum="Boolean"
    expires_after="2025-12-28">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>Records true every time {LoaderStatus}</summary>
  <token key="LoaderStatus">
    <variant name=""
        summary="a new FetchLater request is scheduled by a browser. It does
                 NOT equal to the total number of JavaScript FetchLater API
                 call, as the latter can be immediately rejected with various
                 JavaScript exceptions. This number should be compared with
                 `FetchLater.Renderer.Total`, and it may be &gt;= the sum of
                 `FetchLater.Browser.Metrics`, as a request may be dropped
                 for other undocumented reasons like browser killed or
                 crashes."/>
    <variant name=".Retried"
        summary="a retried attempt for a previously started FetchLater
                 request is started in browser."/>
    <variant name=".Started"
        summary="a scheduled FetchLater request is started in browser. This
                 number should be the sum of enum values
                 &quot;kStarted*&quot; in `FetchLater.Browser.Metrics`."/>
  </token>
</histogram>

<histogram name="FetchLater.Renderer.Metrics"
    enum="FetchLaterRendererMetricType" expires_after="2025-12-21">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Records once every time a scheduled FetchLater request is either aborted or
    activated in renderer.
  </summary>
</histogram>

<histogram name="FetchLater.Renderer.Total" enum="Boolean"
    expires_after="2025-12-28">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Records true every time a new FetchLater request is scheduled by a renderer.
    It does NOT equal to the total number of JavaScript FetchLater API call, as
    the latter can be immediately rejected with various JavaScript exceptions.

    This metric is recorded to compare whether different behavior happens
    between renderer and browser. This number should be compared with
    `FetchLater.Browser.Total`, and it should be equal to the sum of
    `FetchLater.Renderer.Metrics`.
  </summary>
</histogram>

<histogram name="Finds.ExecutionTime" units="ms" expires_after="2027-06-01">
  <owner>wylieb@chromium.org</owner>
  <owner>bjfong@google.com</owner>
  <summary>
    Records the end-to-end time taken from receiving a request for suggestions
    (ExecuteModelAndScheduleNotification) to delivering those suggestions back
    to the caller.
  </summary>
</histogram>

<histogram name="Finds.Result" enum="FindsResult" expires_after="2027-06-01">
  <owner>wylieb@chromium.org</owner>
  <owner>bjfong@google.com</owner>
  <summary>
    Records the status of attempting to execute the Finds model and schedule a
    notification. Recorded when the FindsService attempts to fetch suggestions
    based on themes derived from the user's history. It tracks successes and
    various failure reasons like service unavailability, empty history, or
    cooldown restrictions.
  </summary>
</histogram>

<histogram name="FirstRun.ImportBookmarksDict"
    enum="FirstRunImportBookmarksResult" expires_after="M160">
  <owner>atharvmaan@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Tracks the success or failure of the automatic bookmark import from the
    Initial Preferences file. This is a one-time import that occurs during the
    user's First Run experience.
  </summary>
</histogram>

<histogram name="FirstRun.LaunchSource" enum="FirstRunLaunchSource"
    expires_after="2027-04-01">
  <owner>jlebel@chromium.org</owner>
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    Counts the number of times First Run experience was triggered by another
    application launching Chrome. This metric measures the effectiveness of
    Smart App Banner promotions on installation of Chrome.
  </summary>
</histogram>

<histogram name="FirstRun.NewUserExperience.GoogleAppsInteraction"
    enum="NuxGoogleAppsInteractions" expires_after="2025-04-13">
  <owner>johntlee@chromium.org</owner>
  <owner>dpapad@chromium.org</owner>
  <summary>
    Records when a user interacted with the Google Apps new user experience. We
    record both accept and reject but are not recording when a user ignored the
    prompt completely. Users can ignore this prompt by closing the tab or
    navigating away, we record when the prompt is shown.

    Warning: this histogram was expired from M76 to M100; data may be missing.
  </summary>
</histogram>

<histogram name="FirstRun.NewUserExperience.LandingPageInteraction"
    enum="NuxLandingPageInteractions" expires_after="never">
<!-- expires-never: Captures users' initial interaction with chrome. We will
    need to track how the metrics change over time, and how different
    acquisition campaigns impact this metric. -->

  <owner>scottchen@chromium.org</owner>
  <summary>
    Records when a user interacted with the landing page of the onboarding
    process. We record that the page was seen and what action the user took.
  </summary>
</histogram>

<histogram name="FirstRun.NewUserExperience.NtpBackgroundInteraction"
    enum="NuxNtpBackgroundInteractions" expires_after="2025-04-13">
  <owner>johntlee@chromium.org</owner>
  <owner>dpapad@chromium.org</owner>
  <summary>
    Records when a user interacts with the NTP Backgrounds new user experience.
    We record the number of times the page is seen, how they interacted with the
    page (i.e. interacted with the options and buttons), and through what method
    they leave the page (i.e, confirm, cancel, neither). The new user experience
    should only be shown once to new profiles.
  </summary>
</histogram>

<histogram name="FirstRun.NewUserExperience.SetAsDefaultInteraction"
    enum="NuxSetAsDefaultInteractions" expires_after="never">
<!-- expires-never: Captures users' initial interaction with chrome. We will
    need to track how the metrics change over time, and how different
    acquisition campaigns impact this metric. -->

  <owner>johntlee@chromium.org</owner>
  <owner>dpapad@chromium.org</owner>
  <summary>
    Records when a user interacted with the set default page of the onboarding
    process. We record that the page was seen and what action the user took.
  </summary>
</histogram>

<histogram name="FirstRun.Sentinel.Created" enum="FirstRunSentinelResult"
    expires_after="2027-01-03">
  <owner>jlebel@chromium.org</owner>
  <owner>chrome-signin-team@google.com</owner>
  <summary>
    Records the result of an attempt to create the first run sentinel file.

    On iOS, file system errors are detailed further by the
    FirstRun.Sentinel.CreatedFileError histogram.
  </summary>
</histogram>

<histogram name="FirstRun.Sentinel.CreatedFileError" enum="PlatformFileError"
    expires_after="2027-04-01">
  <owner>jlebel@chromium.org</owner>
  <owner>chrome-signin-team@google.com</owner>
  <summary>File error when the sentinel file was not written.</summary>
</histogram>

<histogram name="FirstRun.SignIn" enum="FirstRunSignInResult"
    expires_after="never">
<!-- expires-never: Used to monitor sign-in during the first run experience.
  -->

  <owner>jlebel@chromium.org</owner>
  <owner>msarda@chromium.org</owner>
  <owner>chrome-signin-team@google.com</owner>
  <summary>Result of the sign in flow during first run on iOS.</summary>
</histogram>

<histogram name="FirstRun.Stage" enum="FirstRunStageResult"
    expires_after="2027-01-10">
  <owner>tinazwang@chromium.org</owner>
  <owner>bling-get-started@google.com</owner>
  <summary>
    When Chrome is opened for the first time, the first run (onboarding) UI will
    be shown. Metircs will be recorded in different first run stages such as
    when first run experience is started, and when first run experience is
    completed.
  </summary>
</histogram>

<histogram name="FirstUserAction.BackgroundTime{ActionType}{DeviceType}"
    units="minutes" expires_after="2027-08-07">
  <owner>justincohen@chromium.org</owner>
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    WARNING: The list of actions used to identify new tasks hasn't been
    attentively updated for several years (as of 2017). Some actions that should
    likely be considered new tasks are probably missing. Take this histogram
    with a grain of salt. Was expired for M85, M86.

    The amount of time (in seconds) that the app was in the background before
    the user started it {ActionType}. {DeviceType}
  </summary>
  <token key="ActionType">
    <variant name=""/>
    <variant name="Continuation"
        summary="and performed an user action indicating that they were
                 continuing a task from the last time they used the app"/>
    <variant name="Expiration"
        summary="and did not perform any user actions that indicate either a
                 new task or a continued task before some timeout expired"/>
    <variant name="NewTask"
        summary="and performed an user action indicating that they were
                 beginning a new task from the last time they used the app"/>
  </token>
  <token key="DeviceType">
    <variant name="Handset" summary="(handset only)"/>
    <variant name="Tablet" summary="(tablet only)"/>
  </token>
</histogram>

<histogram name="FirstUserAction.HandsetUserActionType"
    enum="FirstUserActionType" expires_after="2027-08-07">
  <owner>justincohen@chromium.org</owner>
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    WARNING: The list of actions used to identify new tasks hasn't been
    attentively updated for several years (as of 2017). Some actions that should
    likely be considered new tasks are probably missing. Take this histogram
    with a grain of salt. Was expired for M77-M86.

    On handsets, the type of the first user action performed after the app was
    started or unbackgrounded.
  </summary>
</histogram>

<histogram name="FirstUserAction.TabletUserActionType"
    enum="FirstUserActionType" expires_after="2027-08-07">
  <owner>justincohen@chromium.org</owner>
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    WARNING: The list of actions used to identify new tasks hasn't been
    attentively updated for several years (as of 2017). Some actions that should
    likely be considered new tasks are probably missing. Take this histogram
    with a grain of salt. Was expired for M82-M86.

    On tablets, the type of the first user action performed after the app was
    started or unbackgrounded.
  </summary>
</histogram>

<histogram name="Gaia.AuthFetcher.ListAccounts.NetErrorCodes"
    enum="NetErrorCodes" expires_after="never">
<!-- expires-never: used to monitor and troubleshoot the signin component -->

  <owner>droger@chromium.org</owner>
  <owner>msarda@chromium.org</owner>
  <summary>
    Reports the network error code for requests to the ListAccounts Gaia
    endpoint.
  </summary>
</histogram>

<histogram name="Gaia.ResponseCodesForOAuth2AccessToken"
    enum="CombinedHttpResponseAndNetErrorCode" expires_after="never">
<!-- expires-never: Used to monitor OAuth code health and debug issues. -->

  <owner>msarda@chromium.org</owner>
  <owner>droger@chromium.org</owner>
  <owner>chrome-signin-team@google.com</owner>
  <summary>
    URLFetcher response codes for OAuth2AccessToken. Positive values are HTTP
    status codes, negative values are network error codes. Recorded on responses
    to OAuth access token requests.
  </summary>
</histogram>

<histogram name="Gaia.ResponseForOAuth2AccessToken" enum="OAuth2Response"
    expires_after="never">
<!-- expires-never: Used to monitor OAuth code health and debug issues. -->

  <owner>msarda@chromium.org</owner>
  <owner>droger@chromium.org</owner>
  <owner>chrome-signin-team@google.com</owner>
  <summary>
    Records the result of the Oauth2 access token request when a response is
    received from the LSO server except in net failure cases. In error cases, it
    records the error code in the response body.
  </summary>
</histogram>

<histogram name="Gamepad.ConnectedGamepadSource" enum="GamepadSource"
    expires_after="2027-02-18">
  <owner>robpitkin@google.com</owner>
  <owner>deviceapi-team@google.com</owner>
  <summary>
    Records the data fetcher source when a new gamepad is detected and assigned
    a device slot.
  </summary>
</histogram>

<histogram name="Gamepad.DeduplicatedGamepadSource" enum="GamepadSource"
    expires_after="2027-02-18">
  <owner>robpitkin@google.com</owner>
  <owner>deviceapi-team@google.com</owner>
  <summary>
    Records an enumeration value identifying the data fetcher that ignored a
    device because it is already handled by a more specialized data fetcher.
  </summary>
</histogram>

<histogram name="Gamepad.KnownGamepadConnectedWithId"
    enum="GamepadVendorProduct" expires_after="2027-01-03">
  <owner>mattreynolds@chromium.org</owner>
  <owner>deviceapi-team@google.com</owner>
  <summary>
    Records an integer value that can be used to identify a connected gamepad
    device. The value is constructed from the 16-bit vendor ID in the high-order
    bytes and the 16-bit product ID in the low-order bytes, then cast to a
    32-bit signed integer. The GamepadVendorProduct enum lists IDs for several
    popular gamepads but is incomplete. To identify a device not included in the
    enum, convert back to the vendor/product IDs and look up the human-friendly
    product name in go/gamepad-ids. This histogram records a new entry when a
    device with a vendor and product ID matching a known gaming input device is
    detected during Gamepad API enumeration.
  </summary>
</histogram>

<histogram name="Gamepad.Mac.GameController.ConnectionOutcome"
    enum="GameControllerMacOutcome" expires_after="2027-02-24">
  <owner>robpitkin@google.com</owner>
  <owner>mattreynolds@chromium.org</owner>
  <summary>
    The outcome of a gamepad connection attempt in the macOS GameController data
    fetcher. Recorded exactly once per recognized connection attempt.
  </summary>
</histogram>

<histogram name="Gamepad.Mac.GamepadPlatform.ConnectionOutcome"
    enum="GamepadPlatformMacOutcome" expires_after="2027-02-24">
  <owner>robpitkin@google.com</owner>
  <owner>mattreynolds@chromium.org</owner>
  <summary>
    The outcome of a gamepad connection attempt in the macOS GamepadPlatform
    data fetcher. Recorded exactly once per recognized connection attempt.
  </summary>
</histogram>

<histogram name="Gamepad.Mac.Xbox.ConnectionOutcome" enum="XboxMacOutcome"
    expires_after="2027-02-24">
  <owner>robpitkin@google.com</owner>
  <owner>mattreynolds@chromium.org</owner>
  <summary>
    The outcome of a gamepad connection attempt in the macOS Xbox (USB) data
    fetcher. Recorded exactly once per recognized connection attempt.
  </summary>
</histogram>

<histogram name="Gamepad.RawInputChangeEventDelay" units="microseconds"
    expires_after="2027-03-09">
  <owner>mattreynolds@google.com</owner>
  <owner>gabrielbrito@microsoft.com</owner>
  <summary>
    Records the elapsed time in microseconds between the gamepad's last hardware
    update (as reported by the gamepad timestamp) and the moment before the
    gamepadrawinputchanged event starts dispatching. This measures the total
    end-to-end delay from input to event delivery.

    This is only recorded on clients with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Gamepad.RawInputChangeEventTimeToHandle" units="microseconds"
    expires_after="2027-03-09">
  <owner>mattreynolds@google.com</owner>
  <owner>gabrielbrito@microsoft.com</owner>
  <summary>
    Records the elapsed time in microseconds spent dispatching a single
    gamepadrawinputchanged event, measured from just before DispatchEvent is
    called to just after it returns. This reflects the time taken to run all
    registered event listeners for the event.

    This is only recorded on clients with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Gamepad.ReadContentionCount" units="Contentions"
    expires_after="2024-05-12">
  <owner>mattreynolds@google.com</owner>
  <owner>reillyg@google.com</owner>
  <summary>
    Counts the number of read contentions on the gamepad SeqLock. This is
    sampled at 60Hz when the gamepad API is active for the page. It is capped at
    a maximum of 10, after which the read fails.
  </summary>
</histogram>

<histogram name="Gamepad.UnknownGamepadConnected" enum="GamepadSource"
    expires_after="2024-05-12">
  <owner>mattreynolds@chromium.org</owner>
  <owner>deviceapi-team@google.com</owner>
  <summary>
    Records an enumeration value identifying the active data fetcher when a
    fetcher enumerates a device that is not on the list of known gamepads, but
    is recognized as a gamepad by the fetcher.
  </summary>
</histogram>

<histogram name="Gamepad.UsbDeviceOpenMacResult"
    enum="GamepadUsbDeviceOpenMacResult" expires_after="2027-01-12">
  <owner>robpitkin@google.com</owner>
  <owner>mattreynolds@google.com</owner>
  <owner>deviceapi-team@google.com</owner>
  <summary>
    Records the result of opening a USB Xbox gamepad on macOS. This helps
    diagnose issues where Chrome fails to get exclusive access to the device.
  </summary>
</histogram>

<histogram name="Gamepad.ValidSharedMemoryHandle" enum="HandleValidity"
    expires_after="2024-05-12">
  <owner>mattreynolds@google.com</owner>
  <owner>reillyg@google.com</owner>
  <summary>
    Whether the browser sent a valid shared memory handle to the renderer.
  </summary>
</histogram>

<histogram name="Gamepad.Win.GameInput.GameInputCreateResult" enum="Hresult"
    expires_after="2026-11-18">
  <owner>mattreynolds@chromium.org</owner>
  <owner>gabrielbrito@microsoft.com</owner>
  <summary>
    The HRESULT returned by GameInputCreate in the Windows GameInput data
    fetcher. Recorded once when the data fetcher is added to the gamepad
    provider and attempts to create the GameInput instance.
  </summary>
</histogram>

<histogram name="Gamepad.Win.GameInput.GamepadAddedResult"
    enum="GameInputGamepadAddedResult" expires_after="2026-11-18">
  <owner>mattreynolds@chromium.org</owner>
  <owner>gabrielbrito@microsoft.com</owner>
  <summary>
    The outcome of a gamepad added event in the Windows GameInput data fetcher.
    Recorded once per gamepad connection attempt.
  </summary>
</histogram>

<histogram name="Gamepad.Win.GameInput.GetCurrentReadingError" enum="Boolean"
    expires_after="2026-11-18">
  <owner>mattreynolds@chromium.org</owner>
  <owner>gabrielbrito@microsoft.com</owner>
  <summary>
    Recorded each time GetCurrentReading fails for a connected gamepad in the
    Windows GameInput data fetcher.
  </summary>
</histogram>

<histogram name="Gamepad.Win.GameInput.GuideButtonPressed" enum="Boolean"
    expires_after="2026-11-18">
  <owner>mattreynolds@chromium.org</owner>
  <owner>gabrielbrito@microsoft.com</owner>
  <summary>
    Recorded each time the guide button is pressed on a gamepad connected via
    the Windows GameInput data fetcher.
  </summary>
</histogram>

<histogram name="Gamepad.Win.GameInput.HasTriggerRumbleSupport" enum="Boolean"
    expires_after="2026-11-18">
  <owner>mattreynolds@chromium.org</owner>
  <owner>gabrielbrito@microsoft.com</owner>
  <summary>
    Whether a newly connected gamepad supports trigger rumble in the Windows
    GameInput data fetcher. Recorded once per successful gamepad connection.
  </summary>
</histogram>

<histogram name="Gamepad.Win.GameInput.InitializationResult"
    enum="GameInputInitializationResult" expires_after="2026-11-18">
  <owner>mattreynolds@chromium.org</owner>
  <owner>gabrielbrito@microsoft.com</owner>
  <summary>
    The outcome of GameInput API initialization in the Windows GameInput data
    fetcher. Recorded once when the data fetcher is added to the gamepad
    provider.
  </summary>
</histogram>

<histogram name="Hardware.Display.Count.OnChange" units="units"
    expires_after="2027-01-17">
  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <summary>
    The number of displays present right after the user has attached or detached
    a new display. Excludes mirrored displays, but includes sleeping displays.
  </summary>
</histogram>

<histogram name="Hardware.Display.Count.OnStartup" units="units"
    expires_after="2027-01-17">
  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <summary>
    The number of displays present at start up. Excludes mirrored displays, but
    includes sleeping displays.
  </summary>
</histogram>

<histogram name="Hardware.Display.SupportsHDR" enum="BooleanSupported"
    expires_after="2027-01-17">
  <owner>cassew@google.com</owner>
  <owner>media-dev-uma@chromium.org</owner>
  <summary>
    Whether a given display device supports HDR (such that the CSS media query
    `dynamic-range: high` would resolve as true). Recorded upon browser startup
    (for every connected display), upon display device connection (for the newly
    connected display), and upon any change to the color space metric (for the
    affected display).
  </summary>
</histogram>

<histogram name="Hardware.TotalDiskSpace" units="GB" expires_after="2027-01-17">
  <owner>zmo@chromium.org</owner>
  <owner>chrome-gpu-metric-alerts@chromium.org</owner>
  <summary>
    Records a rough estimation of the system total disk space collected in the
    info collection GPU process, once per UMA ping.
  </summary>
</histogram>

<histogram name="Hwsec.Attestation.PrepareDuration" units="ms"
    expires_after="2027-02-14">
  <owner>chingkang@chromium.org</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>The duration of preparation for enrollment in attestation.</summary>
</histogram>

<histogram name="Hwsec.Attestation.Status{AttestationOps}"
    enum="HwsecAttestationOpsStatus" expires_after="2027-01-31">
  <owner>chingkang@chromium.org</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    The result of attestation-related operations on the Chrome OS side.
    {AttestationOps}
  </summary>
  <token key="AttestationOps">
    <variant name=".ActivateAttestationKey" summary=""/>
    <variant name=".DecryptDatabase" summary=""/>
    <variant name=".EncryptDatabase" summary=""/>
    <variant name=".PrepareForEnrollment" summary=""/>
  </token>
</histogram>

<histogram name="Import.ImporterType.AutoImport" enum="ImporterType"
    expires_after="2026-01-11">
  <owner>robliao@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    The importer used on first run Auto Import.

    Warning: This histogram was expired from 2018-09 to 2023-07; data may be
    missing.
  </summary>
</histogram>

<histogram name="Import.ImporterType.BookmarksAPI" enum="ImporterType"
    expires_after="2026-01-11">
  <owner>robliao@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    The importer used on import from the bookmarks file API.

    Warning: This histogram was expired from M77 to M117; data may be missing.
  </summary>
</histogram>

<histogram name="Import.ImporterType.ImportDataHandler" enum="ImporterType"
    expires_after="2026-01-11">
  <owner>robliao@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    The importer used on import from the chrome://settings/importData UI.

    Warning: This histogram was expired from 2018-09 to 2023-07; data may be
    missing.
  </summary>
</histogram>

<histogram name="ImportantFile.FileReplaceResult{ImportantFileClients}"
    enum="ImportantFileReplaceResult" expires_after="2027-02-07">
  <owner>etienneb@chromium.org</owner>
  <owner>joenotcharles@google.com</owner>
  <summary>
    The result when ImportantFileWriter moves the temporary file to its final
    location. Recorded on every write with ImportantFileWriter. If retries were
    needed, the retry count is recorded in ImportantFile.FileReplaceRetryCount2.

    {ImportantFileClients}
  </summary>
</histogram>

<histogram name="ImportantFile.FileReplaceRetryCount" units="attempt count"
    expires_after="never">
<!-- expires-never: Detects failures to write important files. -->

  <owner>etienneb@chromium.org</owner>
  <owner>grt@chromium.org</owner>
  <summary>
    The number of retries needed to successfully move the temporary file to its
    final location. Zero means that ReplaceFile worked the first time. Ten means
    that it never succeeded.
  </summary>
</histogram>

<histogram name="ImportantFile.FileReplaceRetryCount2{ImportantFileClients}"
    units="attempt count" expires_after="2027-02-07">
  <owner>etienneb@chromium.org</owner>
  <owner>joenotcharles@google.com</owner>
  <summary>
    The number of retries needed for ImportantFileWriter to move the temporary
    file to its final location, succeed or fail. The success or failure of the
    operation is recorded in ImportantFile.FileReplaceResult. Unlike
    ImportantFile.FileReplaceRetryCount, this is only logged if a retry is
    needed.

    {ImportantFileClients}
  </summary>
</histogram>

<histogram name="ImportantFile.MissingFileRestoreResult{ImportantFileClients}"
    enum="MissingFileRestoreResult" expires_after="2027-07-08">
  <owner>grt@chromium.org</owner>
  <owner>tingshao@microsoft.com</owner>
  <summary>
    The result of attempting to restore a missing important file (e.g. a
    preferences file) from a leftover temporary file previously written by
    ImportantFileWriter. Recorded only when the target file is missing at read
    time, from ImportantFileWriter::RestoreMissingFileIfNeeded(). Note that a
    &quot;restored&quot; result only means that a leftover temporary file was
    moved into place. It doesn't mean that data was recovered from that file.

    {ImportantFileClients}
  </summary>
</histogram>

<histogram name="ImportantFile.SerializationDuration{ImportantFileClients}"
    units="ms" expires_after="2027-02-07">
  <owner>battre@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time spent in the foreground thread (usually UI thread) to serialize the
    data to be written into an important file (e.g. serialize JSON string for
    preferences). For users of ImportantFileWriter that leverage background
    serialization (e.g. bookmarks), it excludes the time spent on the background
    thread, and only logs the time spent on the foreground thread.

    {ImportantFileClients}
  </summary>
</histogram>

<histogram name="ImportantFile.SerializationSize{ImportantFileClients}"
    units="bytes" expires_after="2027-02-07">
  <owner>asvitkine@chromium.org</owner>
  <owner>chrome-metrics-team@google.com</owner>
  <summary>
    Size of the serialized data to be written into an important file. Recorded
    when the file is written.

    Note: As client suffixes are added the volume of the unsufixed variant will
    decline. This needs to be taken into account when analyzing overall counts.

    {ImportantFileClients}
  </summary>
</histogram>

<histogram name="ImportantFile.WriteDuration{ImportantFileClients}" units="ms"
    expires_after="2027-02-07">
  <owner>wylieb@google.com</owner>
  <owner>chrome-collections@google.com</owner>
  <summary>
    Time spent in the background thread to write serialized data into an
    important file. Recorded when the file is written.

    Note: As client suffixes are added the volume of the unsufixed variant will
    decline. This needs to be taken into account when analyzing overall counts.

    {ImportantFileClients}
  </summary>
</histogram>

<histogram name="Incognito.ClearBrowsingDataDialog.ActionType"
    enum="IncognitoClearBrowsingDataDialogActionType"
    expires_after="2026-05-24">
  <owner>roagarwal@chromium.org</owner>
  <owner>chrome-incognito@google.com</owner>
  <summary>
    Records the action taken by the user on the Incognito clear browsing data
    dialog.
  </summary>
</histogram>

<histogram name="InstanceID.GetToken.RequestNetErrorCode" enum="NetErrorCodes"
    expires_after="2026-11-17">
  <owner>rushans@google.com</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Net error code from a GetToken request. Recorded when URL loading fails.
  </summary>
</histogram>

<histogram name="InstanceID.GetToken.RequestStatus"
    enum="GCMRegistrationRequestStatus" expires_after="2026-11-17">
  <owner>rushans@google.com</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Status code of the outcome of GetToken request. Warning: this histogram was
    expired from 2023-08-06 to 2023-09-22, and from 2024-02-20 to 2024-05-28;
    data may be missing.
  </summary>
</histogram>

<histogram name="InstanceID.GetToken.RequestStatus.SyncInvalidations"
    enum="GCMRegistrationRequestStatus" expires_after="2027-01-17">
  <owner>rushans@google.com</owner>
  <owner>peter@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    Status code of the outcome of GetToken request for Sync invalidations
    (subtype was &quot;com.google.chrome.sync.invalidations&quot;).
  </summary>
</histogram>

<histogram name="Launch.FlagsAtStartup" enum="LoginCustomFlags"
    expires_after="never">
<!-- expires-never: monitors use of all flags. -->

  <owner>asvitkine@chromium.org</owner>
  <owner>ntfschr@chromium.org</owner>
  <summary>
    Logs which Chrome flags from about:flags were active on start up. Android
    WebView supports flags differently than most platforms, see
    https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/developer-ui.md
    for details.
  </summary>
</histogram>

<histogram name="Launch.Mode2" enum="LaunchMode" expires_after="never">
<!-- expires-never: used from time to time on Windows to measure the value of the various Chrome shortcuts (davidbienvenu@) -->

  <owner>calamity@chromium.org</owner>
  <owner>davidbienvenu@chromium.org</owner>
  <owner>grt@chromium.org</owner>
  <summary>
    The different ways Chrome is launched. This replaces Launch.Modes. Emitted
    once at startup, when the user launches Chrome to browse the web or launch a
    Web App. It is not recorded if Chrome is launched in other ways: by the
    installer, after an update, after a flag change, after an OS update, to
    install/uninstall/list apps, or in background mode.
  </summary>
</histogram>

<histogram name="LoadingPredictor.IsSlowNetwork" enum="Boolean"
    expires_after="2026-12-01">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records whether the network is considered to be slow or not. Recorded on
    each call of LoadingPredictor::PrepareForPageLoad() function if
    kSuppressesLoadingPredictorOnSlowNetwork feature is enabled.
  </summary>
</histogram>

<histogram name="LoadingPredictor.LcppStatCorruptedAtLearnTime" enum="Boolean"
    expires_after="2024-05-01">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The status of SetLCPPNavigationHint. It is recorded when the
    kLCPCriticalPathPredictor feature is enabled and MaybeSetLCPPNavigationHint
    is called. It includes status on not only SetLCPPNavigation failure, but
    also success for ease of understanding the failure ratio.
  </summary>
</histogram>

<histogram name="LoadingPredictor.OptimizationHintsReceiveStatus"
    enum="LoadingPredictorOptimizationHintsReceiveStatus"
    expires_after="2026-02-22">
  <owner>sophiechang@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@chromium.org</owner>
  <component>1457018</component>
  <summary>
    The status of when the optimization hints were received by the Loading
    Predictor. This will be recorded on navigations for which predictions from
    the Optimization Guide were received.
  </summary>
</histogram>

<histogram name="LoadingPredictor.PredictorDatabaseFileSize" units="KiB"
    expires_after="2026-11-22">
  <owner>yoichio@chromium.org</owner>
  <owner>chrome-loading@chromium.org</owner>
  <component>1457018</component>
  <summary>
    The size, in kilobytes, of the database used for the loading prediction.
    Values can range from 1KiB to 1GiB. Logged at browser startup and daily.
  </summary>
</histogram>

<histogram name="LoadingPredictor.SetLcppNavigationHint.Status"
    enum="LcppHintStatus" expires_after="2025-04-30">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The status of SetLCPPNavigationHint. It is recorded when the
    kLCPCriticalPathPredictor feature is enabled and MaybeSetLCPPNavigationHint
    is called. It includes status on not only SetLCPPNavigation failure, but
    also success for ease of understanding the failure ratio.

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

<histogram name="LoadingPredictor.SetLCPPNavigationHint.Time" units="ms"
    expires_after="2027-02-07">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the elapsed time it takes to read LCPPNavigationHint and attach it
    to NavigationHandle. Recorded on DidStartNavigatinon or
    DidRedirectNavigation only when there is hint information.
  </summary>
</histogram>

<histogram name="Manifest.HasProperty{ManifestProperties}" enum="Boolean"
    expires_after="2027-02-14">
  <owner>mgiuca@chromium.org</owner>
  <summary>
    Tracks which properties of a Manifest were present when it was parsed. If a
    property can't be parsed, it will be recorded as not present. These
    histograms will only be used if the Manifest was correctly fetched and
    parsed and the parsed manifest is not empty. {ManifestProperties}
  </summary>
  <token key="ManifestProperties">
    <variant name=""/>
    <variant name=".description" summary=""/>
    <variant name=".display" summary=""/>
    <variant name=".gcm_sender_id" summary=""/>
    <variant name=".icons" summary=""/>
    <variant name=".name" summary=""/>
    <variant name=".orientation" summary=""/>
    <variant name=".protocol_handlers" summary=""/>
    <variant name=".screenshots" summary=""/>
    <variant name=".share_target" summary=""/>
    <variant name=".short_name" summary=""/>
    <variant name=".start_url" summary=""/>
  </token>
</histogram>

<histogram name="Manifest.ParseIdResult" enum="ManifestParseIdResultType"
    expires_after="2025-12-28">
  <owner>phillis@chromium.org</owner>
  <owner>pwa-team@chromium.org</owner>
  <summary>Tracks the result of parsing id field in the Manifest.</summary>
</histogram>

<histogram name="Mojo.Channel.ChannelInitPauseToFlushTime" units="ms"
    expires_after="2026-09-13">
  <owner>rakina@chromium.org</owner>
  <owner>navigation-dev@chromium.org</owner>
  <summary>
    For each RenderProcessHost, records its time spent between pausing and
    flushing its IPC channel via Pause() (triggered when the channel is
    intialized) and Flush() (after the renderer process launched notification is
    received) respectively.

    Recorded when the channel gets flushed.
  </summary>
</histogram>

<histogram name="Mojo.Channel.ChannelInitPauseToUnpauseTime" units="ms"
    expires_after="2026-09-13">
  <owner>rakina@chromium.org</owner>
  <owner>navigation-dev@chromium.org</owner>
  <summary>
    For each RenderProcessHost, records its time spent between pausing and
    flushing its IPC channel via Pause() (triggered when the channel is
    initialized) and Unpause() (after the renderer process launched notification
    is received) respectively.

    Recorded when the channel gets unpaused.
  </summary>
</histogram>

<histogram name="Mojo.Channel.ProcessLaunchPauseToFlushTime" units="ms"
    expires_after="2026-09-13">
  <owner>rakina@chromium.org</owner>
  <owner>navigation-dev@chromium.org</owner>
  <summary>
    For each RenderProcessHost, records its time spent between pausing and
    flushing its IPC channel via Pause() (triggered when renderer process launch
    is requested) and Flush() (after the renderer process launched notification
    is received) respectively.

    Recorded when the channel gets flushed.
  </summary>
</histogram>

<histogram name="Mojo.Channel.ProcessLaunchPauseToUnpauseTime" units="ms"
    expires_after="2026-09-13">
  <owner>rakina@chromium.org</owner>
  <owner>navigation-dev@chromium.org</owner>
  <summary>
    For each RenderProcessHost, records its time spent between pausing and
    flushing its IPC channel via Pause() (triggered when renderer process launch
    is requested) and Unpause() (after the renderer process launched
    notification is received) respectively.

    Recorded when the channel gets unpaused.
  </summary>
</histogram>

<histogram name="Mojo.Channel.WriteLatencyUs" units="microseconds"
    expires_after="2027-05-22">
  <owner>nafisabedin@google.com</owner>
  <owner>pasko@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time taken to write a channel message to the underlying
    transport in Mojo. The metric is downsampled to reduce its costs.

    This is only recorded on clients with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Mojo.Channel.WriteMessageSize" units="bytes"
    expires_after="2027-01-24">
  <owner>amistry@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>rockot@google.com</owner>
  <summary>The size of a message written to a channel.</summary>
</histogram>

<histogram name="Mojo.Channel.WriteQueuePendingMessages2" units="count"
    expires_after="2027-01-17">
  <owner>pasko@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <summary>
    The number queued messages waiting to be written, measured when a channel
    flush is attempted.
  </summary>
</histogram>

<histogram name="Mojo.Channel.WriteSendMessageProcessType"
    enum="ShortProcessType" expires_after="2027-01-17">
  <owner>amanvr@chromium.org</owner>
  <owner>woa-performance@google.com</owner>
  <summary>
    Records the number of sent Mojo IPCs, split per process. Emitted each time a
    mojo IPC is sent.
  </summary>
</histogram>

<histogram name="Mojo.Channel.WriteToReadLatencyUs" units="microseconds"
    expires_after="2027-02-07">
  <owner>lizeb@chromium.org</owner>
  <owner>rockot@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time taken between an IPCz message serialization until it is
    deserialized on the other side of the Channel. This metric is downsampled to
    reduce its cost.

    This is only recorded on clients with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Mojo.ChannelLinux.SharedMemoryWriteLatencyUs"
    units="microseconds" expires_after="2027-01-03">
  <owner>pasko@chromium.org</owner>
  <owner>nafisabedin@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time taken to write a channel message to the underlying shared
    memory ring buffer in ChannelLinux.

    The metric is downsampled to reduce its costs.
  </summary>
</histogram>

<histogram name="Mojo.Connector.MaxUnreadMessageQuotaUsed" units="messages"
    expires_after="2022-05-01">
  <owner>siggi@chromium.org</owner>
  <owner>rockot@chromium.org</owner>
  <summary>
    The maximal unread message quota used for the lifetime of a Connector. This
    is sampled for a configurable percentage of Connectors only when the feature
    MojoRecordUnreadMessageCount is enabled. By default 1% of Connectors are
    sampled, as there's some overhead involved in enabling the unread message
    quota on a MessagePipe. See //mojo/public/cpp/bindings/lib/connector.cc.
  </summary>
</histogram>

<histogram name="Mojo.DirectReceiver.AdoptPipeResult"
    enum="MojoAdoptPipeResult" expires_after="2027-02-07">
  <owner>joenotcharles@google.com</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Logs the result of the AdoptPipe operation whenever
    mojo::DirectReceiver&lt;T&gt;::Bind() is called. Each kSuccess result will
    be followed by an asynchronous MergePortals operation, whose result is
    logged in Mojo.DirectReceiver.MergePortalsResult. Each failure immediately
    logs kNotAttempted to Mojo.DirectReceiver.MergePortalsResult.
  </summary>
</histogram>

<histogram name="Mojo.DirectReceiver.MergePortalsResult"
    enum="MojoMergePortalsResult" expires_after="2027-02-07">
  <owner>joenotcharles@google.com</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Logs the result of the MergePortals operation whenever
    mojo::DirectReceiver&lt;T&gt;::Bind() is called. MergePortals happens after
    an AdoptPipe operation whose result is logged in
    Mojo.DirectReceiver.AdoptPipeResult. If the AdoptPipe fails, kNotAttempted
    is logged immediately. Otherwise the MergePortals result is logged when the
    Mojo message to merge the portals in the local node is processed. So, a
    difference in counts between this and AdoptPipeResult indicates merges that
    never completed.
  </summary>
</histogram>

<histogram name="Mojo.EndToEndLatencyUs.{ThreadName}" units="microseconds"
    expires_after="2027-01-03">
  <owner>lizeb@chromium.org</owner>
  <owner>rockot@google.com</owner>
  <owner>mthiesse@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time taken from the sender calling a mojo interface function to
    the receiver's implementation getting invoked.

    Sub-sampled to 1/1000 calls to reduce measurement overhead.

    Metric is split by receiving thread for some important threads. All other
    threads are grouped under 'Default'.

    This is only recorded on clients with high-resolution clocks.
  </summary>
  <token key="ThreadName">
    <variant name="BrowserIO"/>
    <variant name="BrowserMain"/>
    <variant name="ChildIOThread"/>
    <variant name="Compositor"/>
    <variant name="Default"/>
    <variant name="GpuMain"/>
    <variant name="NetworkService"/>
    <variant name="NetworkServiceOutOfProcess"/>
    <variant name="RendererMain"/>
    <variant name="VizCompositor"/>
    <variant name="VizWebView"/>
  </token>
</histogram>

<histogram name="Mojo.Ipcz.BufferPoolAllocateBlockFailureSize"
    enum="IpczBlockAllocationSize" expires_after="2027-02-01">
  <owner>pasko@chromium.org</owner>
  <owner>nafisabedin@google.com</owner>
  <summary>
    Logs the block size category of a failed shared memory block allocation
    attempt in an ipcz BufferPool. Logged on every failed block allocation
    attempt in BufferPool::AllocateBlock. Subsampled to 1/1000.
  </summary>
</histogram>

<histogram name="Mojo.Ipcz.BufferPoolAllocateBlockResult" enum="BooleanSuccess"
    expires_after="2027-02-01">
  <owner>pasko@chromium.org</owner>
  <owner>nafisabedin@google.com</owner>
  <summary>
    Logs whether an ipcz BufferPool successfully allocated a fixed-size shared
    memory block from its block allocator pools. Logged on every block
    allocation attempt in BufferPool::AllocateBlock. Subsampled to 1/1000.
  </summary>
</histogram>

<histogram name="Mojo.Ipcz.BufferPoolAllocateBlockSuccessSize"
    enum="IpczBlockAllocationSize" expires_after="2027-02-01">
  <owner>pasko@chromium.org</owner>
  <owner>nafisabedin@google.com</owner>
  <summary>
    Logs the block size category of a successful shared memory block allocation
    attempt in an ipcz BufferPool. Logged on every successful block allocation
    attempt in BufferPool::AllocateBlock. Subsampled to 1/1000.
  </summary>
</histogram>

<histogram name="Mojo.SharedMemoryVersion.SharedMemoryAllocationSucceeded"
    enum="Boolean" expires_after="2025-11-09">
  <owner>olivierli@chromium.org</owner>
  <owner>joenotcharles@google.com</owner>
  <summary>
    Logs whether mojo managed to allocate shared memory for the
    SharedMemoryVersionController..

    Logged on SharedMemoryVersionController construction.
  </summary>
</histogram>

<histogram name="MPArch.ChildProcessLauncher.{Event}" units="ms"
    expires_after="2027-02-07">
  <owner>ajgo@chromium.org</owner>
  <owner>src/sandbox/policy/win/OWNERS</owner>
  <summary>
    The amount of time spent within ChildProcessLauncher while launching a
    process. These metrics are being added to measure upcoming changes to
    sandbox process launching. See https://crbug.com/40287847.

    The Notify measurement time starts on the UI thread when the process launch
    is requested and ends when the UI thread is notified of a successful launch.
    The PreLaunchDelay variant captures the subset of time spent waiting for the
    launcher thread to be ready.
  </summary>
  <token key="Event">
    <variant name="Notify"/>
    <variant name="PreLaunchDelay"/>
  </token>
</histogram>

<histogram name="MPArch.ChildProcessLaunchFirst" units="ms"
    expires_after="2027-02-07">
  <owner>pasko@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time it takes to spawn the first child subprocess (including sandbox
    init).
  </summary>
</histogram>

<histogram name="MPArch.ChildProcessLaunchSubsequent" units="ms"
    expires_after="2027-01-03">
  <owner>pasko@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time it takes to spawn child sub processes not counting the first one.
  </summary>
</histogram>

<histogram name="NativeSmbFileShare.AuthenticationMethod"
    enum="NativeSmbFileShare_AuthMethod" expires_after="2027-02-14">
  <owner>simmonsjosh@google.com</owner>
  <owner>src/chrome/browser/ash/smb_client/OWNERS</owner>
  <summary>
    The method used to authenticate to a share. This is called on each attempted
    mount.
  </summary>
</histogram>

<histogram name="NativeSmbFileShare.GetSharesResult"
    enum="NativeSmbFileShare_MountResult" expires_after="2025-09-28">
  <owner>simmonsjosh@google.com</owner>
  <owner>src/chrome/browser/ash/smb_client/OWNERS</owner>
  <summary>
    The result of the GetShares operation for Native SMB File Share. This is
    recorded after the D-Bus call to GetShares returns.
  </summary>
</histogram>

<histogram name="NativeSmbFileShare.MountCount" units="Active Mounts"
    expires_after="2026-04-07">
  <owner>simmonsjosh@google.com</owner>
  <owner>src/chrome/browser/ash/smb_client/OWNERS</owner>
  <summary>
    The number of active mounts that a user has. This is recorded after a share
    has been successfully mounted.
  </summary>
</histogram>

<histogram name="NativeSmbFileShare.MountResult"
    enum="NativeSmbFileShare_MountResult" expires_after="2025-09-28">
  <owner>simmonsjosh@google.com</owner>
  <owner>src/chrome/browser/ash/smb_client/OWNERS</owner>
  <summary>
    The result of the mount operation for Native SMB File Share. This is
    recorded after the D-Bus call to Mount returns.
  </summary>
</histogram>

<histogram name="NQE.Duration.{MethodName}" units="ms"
    expires_after="2027-02-07">
  <owner>suzukikeita@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    The duration of NetworkQualityEstimator::{MethodName}. This is recorded
    every time when the method is invoked.
  </summary>
  <token key="MethodName">
    <variant name="NotifyBytesRead"/>
    <variant name="NotifyHeadersReceived"/>
    <variant name="NotifyRequestCompleted"/>
    <variant name="NotifyStartTransaction"/>
    <variant name="NotifyURLRequestDestroyed"/>
  </token>
</histogram>

<histogram name="NQE.IsPrivateHost.CacheHit" enum="BooleanCacheHit"
    expires_after="2027-04-01">
  <owner>hayato@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    Counts how many times the result of NetworkQualityEstimator::IsPrivateHost
    is served from the LRU cache or not. Recorded every time the method is
    called.
  </summary>
</histogram>

<histogram name="NQE.IsPrivateHost.Duration" units="ms"
    expires_after="2027-04-01">
  <owner>hayato@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    The duration of NetworkQualityEstimator::IsPrivateHost. Recorded every time
    the method is called.
  </summary>
</histogram>

<histogram name="NQE.RTT.Error.Absolute" units="ms" expires_after="2025-06-08">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Error between estimation and observation. Absolute value will be recorded
    for both case estimation is larger than observation and observation is
    larger than estimation. Recorded when HTTP RTT is going to be updated.
  </summary>
</histogram>

<histogram name="NQE.RTT.Error.IsZero" enum="Boolean"
    expires_after="2025-06-08">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    True if estimation and observation are the same. Recorded when HTTP RTT is
    going to be updated.
  </summary>
</histogram>

<histogram name="NQE.RTT.Error.Negative" units="ms" expires_after="2025-06-08">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Error between estimation and observation. Only recorded if observed value is
    smaller than estimation. Recorded when HTTP RTT is going to be updated.
  </summary>
</histogram>

<histogram name="NQE.RTT.Error.Positive" units="ms" expires_after="2025-06-08">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Error between estimation and observation. Only recorded if observed value is
    larger than estimation. Recorded when HTTP RTT is going to be updated.
  </summary>
</histogram>

<histogram name="NQE.RTT.HittingThreshold.{Category}.FallbackSuccess"
    enum="Boolean" expires_after="2025-06-08">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    True if GetRecentRTT() for {Category} returns invalid RTT under the given
    threshold but success without the threshold. Recorded when RTT is going to
    be calculated for updating the effective connection type.
  </summary>
  <token key="Category">
    <variant name="EndToEnd"
        summary="EndToEnd ObservationBuffer (lifetime of the end to end
                 category)"/>
    <variant name="HTTP"
        summary="HTTP ObservationBuffer (lifetime of the HTTP category)"/>
    <variant name="Transport"
        summary="Transport ObservationBuffer (lifetime of the transport
                 category)"/>
  </token>
</histogram>

<histogram name="NQE.RTT.ObservationBufferLifeTime2.{Category}" units="ms"
    expires_after="2025-08-10">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    NQE's estimated RTT comes from weighted medium value in an
    ObservationBuffer. This is a metrics for {Category}. This metrics tells the
    duration on how long an observation is kept in the ObservationBuffer so that
    we can understand how fast the new status will be reflected. Recorded when
    an observation is added to the buffer and an old observation gets evicted.
    (Max 1 hour, 100 buckets)
  </summary>
  <token key="Category">
    <variant name="All"
        summary="All ObservationBuffer (&quot;All&quot; represents sum of all
                 categories)"/>
    <variant name="EndToEnd"
        summary="EndToEnd ObservationBuffer (lifetime of the end to end
                 category)"/>
    <variant name="HTTP"
        summary="HTTP ObservationBuffer (lifetime of the HTTP category)"/>
    <variant name="Transport"
        summary="Transport ObservationBuffer (lifetime of the transport
                 category)"/>
  </token>
</histogram>

<histogram name="NQE.RTT.ObservationSource" enum="NQEObservationSource"
    expires_after="2025-07-13">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Number of RTT observations indexed by the source of the observation.
    Recorded by the network quality estimator every time a new observation is
    made or synthesized.

    Warning: this histogram was expired from 2022-02-20 to 2024-07-04; data may
    missing.
  </summary>
</histogram>

<histogram name="NQE.RTT.OnECTComputation" units="ms"
    expires_after="2025-07-13">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Rough estimate of the round trip time at the URLRequest layer. Recorded by
    the network quality estimator every time the effective connection type is
    computed.

    Warning: this histogram was expired from 2022-01-16 to 2024-07-04; data may
    missing.
  </summary>
</histogram>

<histogram name="NQE.TransportRTT.OnECTComputation" units="ms"
    expires_after="2025-06-08">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Rough estimate of the round trip time at the Transport layer. Recorded by
    the network quality estimator every time the effective connection type is
    computed.
  </summary>
</histogram>

<histogram name="OAuth2Login.SessionRestore" enum="GaiaSessionRestoreOutcome"
    expires_after="2026-03-22">
  <owner>emaamari@google.com</owner>
  <owner>sinhak@chromium.org</owner>
  <summary>Outcome of Chrome OS GAIA cookie session restore process.</summary>
</histogram>

<histogram name="OAuth2Login.SessionRestoreTimeToFailure" units="ms"
    expires_after="2024-11-01">
  <owner>emaamari@google.com</owner>
  <owner>sinhak@chromium.org</owner>
  <summary>How long it takes for the session restore to fail.</summary>
</histogram>

<histogram name="OAuth2Login.SessionRestoreTimeToSuccess" units="ms"
    expires_after="2025-05-11">
  <owner>emaamari@google.com</owner>
  <owner>sinhak@chromium.org</owner>
  <summary>
    How long it takes for the session restore to finish successfully.
  </summary>
</histogram>

<histogram name="OriginTrials.PersistentOriginTrial.CriticalRestart"
    enum="Boolean" expires_after="2027-04-01">
  <owner>pbirk@chromium.org</owner>
  <owner>src/components/origin_trials/OWNERS</owner>
  <summary>
    Reports whether the presence of a Critical-Origin-Trial header caused a
    network request restart due to the origin trial not being enabled.

    The Critical-Origin-Trial header is only processed for navigation requests
    (loading either a main- or sub-frame) using a safe HTTP verb (per section
    4.2.1 of RFC 7231). On those requests, this metric will be emitted if the
    Critical-Origin-Trial header is present on the response, to report the
    decision made by the CriticalOriginTrialThrottle.

    The request may still be restarted due to other throttles, even if this
    metric reported &quot;false&quot;.
  </summary>
</histogram>

<histogram name="OriginTrials.PersistentOriginTrial.LevelDbInitSuccess"
    enum="Boolean" expires_after="2027-04-01">
  <owner>pbirk@chromium.org</owner>
  <owner>src/components/origin_trials/OWNERS</owner>
  <summary>
    Reports status of LevelDB initialization for persistent origin trials. This
    is emitted on the Init callback during browser startup, and should not be
    false. A high rate of &quot;false&quot; would indicate a problem with the
    shared LevelDB database.
  </summary>
</histogram>

<histogram name="OriginTrials.PersistentOriginTrial.LevelDbLoadSize"
    units="origins" expires_after="2027-04-01">
  <owner>pbirk@chromium.org</owner>
  <owner>src/components/origin_trials/OWNERS</owner>
  <summary>
    Counts the number of origins in the LevelDb database at time of load during
    browser startup.

    This metric is for reporting only, and expected to get worse if you are in
    the process of launching a persistent origin trial.
  </summary>
</histogram>

<histogram name="OriginTrials.PersistentOriginTrial.LevelDbLoadSuccess"
    enum="Boolean" expires_after="2027-04-01">
  <owner>pbirk@chromium.org</owner>
  <owner>src/components/origin_trials/OWNERS</owner>
  <summary>
    Reports status of LevelDB load for persistent origin trials. This is emitted
    on the Load callback during browser startup, and should not be false. A high
    rate of &quot;false&quot; would indicate a problem with the shared LevelDB
    database.
  </summary>
</histogram>

<histogram name="OriginTrials.PersistentOriginTrial.LevelDbLoadTime" units="ms"
    expires_after="2027-04-01">
  <owner>pbirk@chromium.org</owner>
  <owner>src/components/origin_trials/OWNERS</owner>
  <summary>
    Measures the time to load the data from LevelDb during startup in wall clock
    time.

    This metric is for reporting only, and expected to get worse if you are in
    the process of launching a persistent origin trial.
  </summary>
</histogram>

<histogram name="OriginTrials.PersistentOriginTrial.OriginLookupsBeforeDbLoad"
    units="origins" expires_after="2027-04-01">
  <owner>pbirk@chromium.org</owner>
  <owner>src/components/origin_trials/OWNERS</owner>
  <summary>
    Counts the number of lookups for origins arriving to the
    LevelDbPersistenceProvider before the database was loaded from disk. Any
    such lookup would not have seen the persisted value.

    Since the database is loaded asynchronously, it is possible for the browser
    to start using the PersistentOriginTrial component before it is fully
    loaded. Due to this, it is expected to see this metric at 1, possibly 2.
    Large numbers can be caused by a browser restart with a lot of saved tabs
    being loaded at the same time.
  </summary>
</histogram>

<histogram name="OriginTrials.PersistentOriginTrial.OriginsAddedBeforeDbLoad"
    units="origins" expires_after="2027-04-01">
  <owner>pbirk@chromium.org</owner>
  <owner>src/components/origin_trials/OWNERS</owner>
  <summary>
    Counts the number of origins added to the LevelDbPersistenceProvider before
    the persited origins have loaded from disk. This number represents the
    number of page loads for pages enrolled in persistent origin trials where
    the trial was either not activated or the request had to restart due to the
    presence of the Persistent-Origin-Trial header.
  </summary>
</histogram>

<histogram name="OriginTrials.PersistentOriginTrial.PartitionSetSize"
    units="sites" expires_after="2027-04-01">
  <owner>pbirk@chromium.org</owner>
  <owner>src/components/origin_trials/OWNERS</owner>
  <summary>
    Reports the number of partitions a persistent origin trial token has been
    stored against. The purpose of the metric is to uncover memory footprint
    issues from storing site partitions, and to help decide if an eviction
    strategy needs to be put in place. This metric is recorded once for every
    stored origin trial token on browser startup.
  </summary>
</histogram>

<histogram
    name="OriginTrials.PersistentOriginTrial.TokenHasFirstPartyPartition"
    enum="Boolean" expires_after="2027-04-01">
  <owner>pbirk@chromium.org</owner>
  <owner>src/components/origin_trials/OWNERS</owner>
  <summary>
    Records whether a stored partition token has its own origins eTLD+1 as one
    of the partitions. This is being recorded to determine if space can be saved
    by making the first-party partition a special case. This metric is recorded
    on browser startup when the persisted tokens are loaded from the database.
  </summary>
</histogram>

<histogram name="OSX.ConfirmToQuit" enum="ConfirmToQuit" expires_after="M125">
  <owner>mark@chromium.org</owner>
  <summary>Usage statistics for the confirm to quit feature.</summary>
</histogram>

<histogram name="OSX.NSException" enum="OSXNSException" expires_after="M125">
  <owner>mark@chromium.org</owner>
  <summary>
    MacOS X NSExceptions seen, common exceptions binned, others in overflow.
  </summary>
</histogram>

<histogram name="Ozone.Drm.GbmDeviceCount" units="devices"
    expires_after="2027-07-02">
  <owner>hitawala@chromium.org</owner>
  <owner>chrome-gpu-metric-alerts@chromium.org</owner>
  <summary>
    The number of successfully created and cached Gbm Device contexts in
    GbmSurfaceFactory. Recorded once during the first format texturing support
    check (lazy initialization).
  </summary>
</histogram>

<histogram name="Ozone.NeuralStylusReport.ActivePalmTouchCount"
    units="touch event count" expires_after="2023-06-30">
  <owner>napper@chromium.org</owner>
  <owner>robsc@chromium.org</owner>
  <summary>
    When a stylus is touched to screen, the number of palms on the device at
    that time.
  </summary>
</histogram>

<histogram name="Ozone.TouchEventConverterEvdev.HoldCountAtCancel"
    units="touch event" expires_after="2023-09-03">
  <owner>robsc@chromium.org</owner>
  <summary>
    The count of the number of held events cancelled when we decide to finally
    cancel a stroke. Only reported if events have been held, and will be
    positive. Events are only held from PalmDetectionFilter.
  </summary>
</histogram>

<histogram name="Ozone.TouchEventConverterEvdev.HoldCountAtRelease"
    units="touch event" expires_after="2023-09-03">
  <owner>robsc@chromium.org</owner>
  <summary>
    The count of the number of held events released at once for a stroke when we
    decide to release. Only reported if events have been held, and will be
    positive. Events are only held from PalmDetectionFilter.
  </summary>
</histogram>

<histogram name="Ozone.TouchEventConverterEvdev.PalmTouchCount"
    enum="BooleanDetected" expires_after="2025-04-13">
  <owner>jiwan@chromium.org</owner>
  <owner>robsc@chromium.org</owner>
  <summary>
    The count of the number of detected palm touches. Reported when a new palm
    touch is detected by either the firmware or the software palm detection.
    Consecutive palm touch events will be considered as the same palm touch.
  </summary>
</histogram>

<histogram name="Ozone.TouchEventConverterEvdev.RepeatedTouchCount"
    enum="BooleanDetected" expires_after="2024-10-06">
  <owner>jiwan@chromium.org</owner>
  <owner>robsc@chromium.org</owner>
  <summary>
    Whether a repeated touch is detected soon after palm rejection. Reported
    when users repeated a touch action within 2 seconds after we rejected the
    first action as palm. This only emits true when we detect a repeated touch
    but never emits false.
  </summary>
</histogram>

<histogram name="Ozone.TouchEventConverterEvdev.StylusSessionCount"
    enum="BooleanDetected" expires_after="2024-10-06">
  <owner>jiwan@chromium.org</owner>
  <owner>robsc@chromium.org</owner>
  <summary>
    The count of the number of stylus sessions. A stylus session is a series of
    stylus events with no more than 5 seconds between them. Reported when a
    stylus session is concluded.
  </summary>
</histogram>

<histogram name="Ozone.TouchEventConverterEvdev.StylusSessionLength"
    units="duration" expires_after="2024-10-06">
  <owner>jiwan@chromium.org</owner>
  <owner>robsc@chromium.org</owner>
  <summary>
    The length of stylus sessions. A stylus session is a series of stylus events
    with no more than 5 seconds between them. Reported when a stylus session is
    concluded.
  </summary>
</histogram>

<histogram name="Ozone.TouchEventConverterEvdev.TouchGapAfterStylus"
    units="duration" expires_after="2024-06-01">
  <owner>jiwan@chromium.org</owner>
  <owner>robsc@chromium.org</owner>
  <summary>
    The time between a stylus touch and the first finger touch after it. The
    finger touch may or may not be detected as a palm. If the first touch after
    a stylus touch is another stylus touch (i.e. no finger touch between them),
    record a maximum time (10 seconds) instead. Reported when first new touch is
    reported after a stylus touch finishes.
  </summary>
</histogram>

<histogram name="Ozone.TouchEventConverterEvdev.TouchGapBeforeStylus"
    units="duration" expires_after="2024-06-01">
  <owner>jiwan@chromium.org</owner>
  <owner>robsc@chromium.org</owner>
  <summary>
    The time between a stylus touch and the last finger touch before it. The
    finger touch may or may not still be on the touchscreen, and may or may not
    be detected as a palm. Reported when a stylus touch is started on the
    touchscreen.
  </summary>
</histogram>

<histogram name="Ozone.TouchEventConverterEvdev.TouchSessionCount"
    enum="BooleanDetected" expires_after="2024-06-01">
  <owner>jiwan@chromium.org</owner>
  <owner>robsc@chromium.org</owner>
  <summary>
    The count of the number of touch sessions. A touch session is a series of
    touch events with no more than 5 seconds between them. Reported when a touch
    session is concluded.
  </summary>
</histogram>

<histogram name="Ozone.TouchEventConverterEvdev.TouchSessionLength"
    units="duration" expires_after="2024-08-04">
  <owner>jiwan@chromium.org</owner>
  <owner>robsc@chromium.org</owner>
  <summary>
    The length of touch sessions. A touch session is a series of touch events
    with no more than 5 seconds between them. Reported when a touch session is
    concluded.
  </summary>
</histogram>

<histogram name="Ozone.TouchEventConverterEvdev.TouchTypeAfterStylus"
    enum="TouchType" expires_after="2024-06-01">
  <owner>jiwan@chromium.org</owner>
  <owner>robsc@chromium.org</owner>
  <summary>
    The type of the first finger touch within 500ms before a stylus touch. It
    could be finger, palm or none (no touch within 500ms). Reported when a
    stylus touch is started on the touchscreen.
  </summary>
</histogram>

<histogram name="Ozone.TouchEventConverterEvdev.TouchTypeBeforeStylus"
    enum="TouchType" expires_after="2024-10-06">
  <owner>jiwan@chromium.org</owner>
  <owner>robsc@chromium.org</owner>
  <summary>
    The type of the last finger touch within 500ms before a stylus touch. It
    could be finger, palm or none (no touch within 500ms). Reported when first
    new touch is reported after a stylus touch finishes.
  </summary>
</histogram>

<histogram name="PageImageService.Android.SalientImageUrlFetchResult{ClientId}"
    enum="SalientImageUrlFetchResult" expires_after="2027-06-10">
  <owner>hanxi@google.com</owner>
  <owner>huangs@google.com</owner>
  <owner>wylieb@google.com</owner>
  <summary>
    Records the fetching result of a salient image. The histogram is logged when
    an salient image is fetched for the {ClientId}. Android-only.
  </summary>
  <token key="ClientId" variants="PageImageServiceClientId"/>
</histogram>

<histogram name="PageImageService.Backend.OptimizationGuide.Result{ClientId}"
    enum="PageImageServiceResult" expires_after="2027-01-03">
  <owner>sophiechang@chromium.org</owner>
  <owner>chrome-journeys@google.com</owner>
  <component>1456757</component>
  <summary>
    Records the result of requests to the Optimization Guide Salient Images
    backend.

    Recorded for each request to Optimization Guide, so the total count of this
    UMA should match that bucket count in PageImageService.Backend.
  </summary>
  <token key="ClientId" variants="PageImageServiceClientId"/>
</histogram>

<histogram name="PageImageService.Backend.Suggest.Result{ClientId}"
    enum="PageImageServiceResult" expires_after="2027-04-01">
  <owner>wylieb@google.com</owner>
  <owner>chrome-journeys@google.com</owner>
  <component>1457319</component>
  <summary>
    Records the result of requests to the Suggest backend.

    Recorded for each request to Suggest, so the total count of this UMA should
    match that bucket count in PageImageService.Backend.
  </summary>
  <token key="ClientId" variants="PageImageServiceClientId"/>
</histogram>

<histogram name="PageImageService.Backend{ClientId}"
    enum="PageImageServiceBackend" expires_after="2027-04-01">
  <owner>wylieb@google.com</owner>
  <owner>chrome-journeys@google.com</owner>
  <component>1457319</component>
  <summary>
    Records the backend chosen for the request. For requests with no valid
    backend, this is still recorded as the &quot;No Valid Backend&quot; bucket.

    Only recorded for requests that have passed the URL consent gate.
  </summary>
  <token key="ClientId" variants="PageImageServiceClientId"/>
</histogram>

<histogram name="PageImageService.ConsentStatusOnTimeout"
    enum="PageImageServiceConsentStatus" expires_after="2027-03-10">
  <owner>wylieb@google.com</owner>
  <owner>chrome-journeys@google.com</owner>
  <component>1457319</component>
  <summary>
    Records the result of the URL consent check after timeout has expired.
    Recorded for each request which was enqueued by the time when timeout
    happened.
  </summary>
</histogram>

<histogram name="PageImageService.ConsentStatusRequestCount" enum="Boolean"
    expires_after="2027-03-10">
  <owner>wylieb@google.com</owner>
  <owner>chrome-journeys@google.com</owner>
  <component>1457319</component>
  <summary>
    Recorded on each URL consent check request. This metric is used to compare
    numbers with consent check result in PageImageService.ConsentStatus.
  </summary>
</histogram>

<histogram name="PageImageService.ConsentStatus{ClientId}"
    enum="PageImageServiceConsentStatus" expires_after="2027-03-10">
  <owner>wylieb@google.com</owner>
  <owner>chrome-journeys@google.com</owner>
  <component>1457319</component>
  <summary>
    Records the result of the URL consent check for this request. The number of
    consent check requests is recorded in
    PageImageService.ConsentStatusRequestCount.

    Note that only success and failure are captured if the &quot;old&quot;
    unified consent throttle is used.
  </summary>
  <token key="ClientId" variants="PageImageServiceClientId"/>
</histogram>

<histogram name="PeriodicBackgroundSync.Event.BatchSize" units="events"
    expires_after="2022-07-31">
  <owner>nator@chromium.org</owner>
  <owner>rayankans@chromium.org</owner>
  <summary>
    Records the number of `periodicsync` events which were fired in a batch. A
    batch is defined as the set of `periodicsync` events dispatched at the same
    time by the BackgroundSyncManager. Periodic syncs usually run in a batch.
  </summary>
</histogram>

<histogram name="PeriodicBackgroundSync.Event.FromWakeupTask"
    enum="BackgroundSyncWakeupTask" expires_after="2023-04-30">
  <owner>nator@chromium.org</owner>
  <owner>rayankans@chromium.org</owner>
  <summary>
    Records whether the fired `periodicsync` events upon completion orginated
    from a background wakeup task or the foreground.
  </summary>
</histogram>

<histogram name="PeriodicBackgroundSync.Event.Time" units="ms"
    expires_after="2023-09-03">
  <owner>nator@chromium.org</owner>
  <owner>rayankans@chromium.org</owner>
  <summary>
    Time taken to execute a batch of periodicsync events. A batch is defined as
    the set of `periodicsync` events dispatched at the same time by the
    BackgroundSyncManager. Periodic syncs often run in a batch.
  </summary>
</histogram>

<histogram name="PLT.iOS.BrowserInitiatedPageLoadTime2" units="ms"
    expires_after="2027-01-31">
  <owner>michaeldo@chromium.org</owner>
  <owner>bling-fundamentals@google.com</owner>
  <summary>
    Page load time for Browser-initiated navigations.

    Browser-initiated navigations include all navigations initiated by
    interacting with Chrome's UI elements, except for back/forward navigations.
    Specifically, typing a URL into the omnibox, tapping the reload button,
    loading a bookmark, and loading a page from the reading list (including when
    offline) are all considered browser-initiated. Additionally, background
    loads for prerendering and reading-list offline sync are also
    browser-initiated, as is a reload triggered by switching to a tab whose
    WKWebView renderer process was killed by the OS.

    This is recorded for successful main-frame navigations (that is, navigations
    that don't result in the browser displaying an error page). The recorded
    value measures the time from the navigation request being sent to the
    renderer process until all frames have fired their load events. For
    background loads, the same interval is measured while the page loads and
    fires load events in the background; the metric is not recorded again if the
    background-loaed page is later displayed in the foreground.

    Page loads that require network fetches will be slower than those where all
    necessary resources are already present in WebKit's HTTP cache. Reload
    navigations where all cached resources are up-to-date are particularly fast,
    since they don't require any rendering updates either.

    It is possible for a user to interact with a page before all load events
    have been fired, so the recorded value should not be interpreted as the time
    before the page becomes interactive.

    Most things that affect user-perceived page load time on iOS are within
    WebKit, not within Chromium/Chrome code. To assess whether a change in this
    metric is caused by a WebKit change, split by OS version. WebKit changes
    always come with an OS version change. Obviously, aside from WebKit and
    Chromium changes, this metric can move due to exogenous factors such as
    changes in what type of web page people are looking at or changes in the
    implementation of popular websites.

    Any navigation that is not considered browser-initiated is considered to be
    renderer-initiated (see PLT.iOS.RendererInitiatedPageLoadTime2).
  </summary>
</histogram>

<histogram name="PLT.iOS.RendererInitiatedPageLoadTime2" units="ms"
    expires_after="2027-01-31">
  <owner>michaeldo@chromium.org</owner>
  <owner>bling-fundamentals@google.com</owner>
  <summary>
    Page load time for Renderer-initiated navigations.

    Renderer-initiated navigations are all main-frame navigations that are not
    considered to be browser-initiated (see
    PLT.iOS.BrowserInitiatedPageLoadTime). Specificially, tapping on links
    within web content, navigations triggered by JavaScript, navigations for
    restoring tabs on launch, and back/forward navigations are all considered to
    be renderer-initiated.

    This is recorded for successful main-frame navigations (that is, navigations
    that don't result in the browser displaying an error page). However, this is
    not recorded when WebKit handles a back/forward navigation using its page
    cache (that is, when the DOM representation of the destination is still
    loaded in memory from a recent visit), since we don't get the full set of
    WebKit navigation callbacks for such navigations. The recorded value
    measures the time from the browser process being notified that the
    navigation has started, to all frames having fired their load events. The
    time that the browser process is notified that the navigation has started is
    usually just after a network request is sent, but can be later for
    back/forward navigations on sites that use pushState to generate history
    entries; in the latter case, the navigation may be almost finished by the
    time the browser finds out about it. As such, depending on the cause of the
    navigation, different things are measured. Some types will be very fast
    (e.g., pushState/replaceState) and others (such as tapping on links) will be
    slower. Furthermore, navigations that require network fetches will be slower
    than those where all necessary resources are already present in WebKit's
    HTTP cache.

    It is possible for a user to interact with a page before all load events
    have been fired, so the recorded value should not be interpreted as the time
    before the page becomes interactive.

    Most things that affect user-perceived page load time on iOS are within
    WebKit, not within Chromium/Chrome code. To assess whether a change in this
    metric is caused by a WebKit change, split by OS version. WebKit changes
    always come with an OS version change. Obviously, aside from WebKit and
    Chromium changes, this metric can move due to exogenous factors such as
    changes in what type of web page people are looking at or changes in the
    implementation of popular websites.
  </summary>
</histogram>

<histogram name="PrefetchedSignedExchangeCache.Count" units="count"
    expires_after="2023-08-20">
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    The number of prefetched signed exchanges in PrefetchedSignedExchangeCache
    which is attached to a frame. This metric is recorded when the frame is
    deleted or is navigated to different document. This is not recorded when
    there is no prefetched signed exchanges.
  </summary>
</histogram>

<histogram name="Process.Sandbox.DllBlocked" enum="WinTroublesomeDllName"
    expires_after="2026-08-23">
  <owner>ajgo@chromium.org</owner>
  <owner>wfh@chromium.org</owner>
  <summary>
    HashMetricName of dll in kTroublesomeDlls. Recorded if the dll was seen in
    the browser process and added for blocking in a child process.
  </summary>
</histogram>

<histogram name="Process.Sandbox.DwriteHookStatus" enum="Boolean"
    expires_after="2026-11-13">
  <owner>ajgo@chromium.org</owner>
  <owner>wfh@chromium.org</owner>
  <summary>
    True if dwrite hooks were placed during sandbox warmup, false if hooking
    failed. Emitted once during startup in every sandboxed renderer process
    where EnableCsrssLockdown is enabled.
  </summary>
</histogram>

<histogram name="Process.Sandbox.IPC.ThreadCreateRemoteThreadErrorCode"
    enum="WinGetLastError" expires_after="2027-01-03">
  <owner>ajgo@chromium.org</owner>
  <owner>wfh@chromium.org</owner>
  <summary>
    Error returned when CreateThreadAction fails to CreateRemoteThread(). Not
    logged on success. For decoding error code please refer to
    http://goo.gl/fJJiAv.
  </summary>
</histogram>

<histogram name="Process.Sandbox.IPC.ThreadDuplicateHandleErrorCode"
    enum="WinGetLastError" expires_after="2027-01-03">
  <owner>ajgo@chromium.org</owner>
  <owner>wfh@chromium.org</owner>
  <summary>
    Error returned when CreateThreadAction fails to DuplicateHandle(). Not
    logged on success. For decoding error code please refer to
    http://goo.gl/fJJiAv.
  </summary>
</histogram>

<histogram name="Process.Sandbox.Launch.Error" enum="WinGetLastError"
    expires_after="never">
<!-- expires-never: metric needed for diagnosing sandbox issues. -->

  <owner>forshaw@chromium.org</owner>
  <owner>wfh@chromium.org</owner>
  <summary>
    Errors returned while launching sandboxed process on Windows. For decoding
    error code please refer to http://goo.gl/fJJiAv.
  </summary>
</histogram>

<histogram name="Process.Sandbox.Lowbox.Launch.Error" enum="WinGetLastError"
    expires_after="never">
<!-- expires-never: metric needed for diagnosing sandbox issues. -->

  <owner>wfh@chromium.org</owner>
  <owner>forshaw@chromium.org</owner>
  <summary>
    Errors returned while launching lowbox enabled sandboxed process on Windows.
    For decoding error code please refer to http://goo.gl/fJJiAv.

    Warning: this histogram expired in M87, and was revived in M103; data may be
    missing.
  </summary>
</histogram>

<histogram name="Process.Sandbox.StartSandboxedWin.{Event}Duration"
    units="microseconds" expires_after="2027-02-07">
  <owner>ajgo@chromium.org</owner>
  <owner>src/sandbox/policy/win/OWNERS</owner>
  <summary>
    Duration of {Event} within StartSandboxedProcess() including the time
    Windows spends starting the suspended process. Emitted on a successful
    launch of a sandboxed process on Windows. Only emitted where a
    high-resolution timer is available (see Windows.HasHighResolutionTimeTicks).
  </summary>
  <token key="Event">
    <variant name="CreatePolicy"/>
    <variant name="GeneratePolicy"/>
    <variant name="PostSpawnTarget"/>
    <variant name="SpawnTarget"/>
    <variant name="Total" summary="the total time"/>
  </token>
</histogram>

<histogram name="Process.ThreadTypeSwitcher.BatchSize" units="requests"
    expires_after="2026-12-16">
  <owner>kmg@google.com</owner>
  <owner>koilos@google.com</owner>
  <summary>
    Records the number of thread type change requests batched together in a
    single ThreadTypeSwitcher::SetThreadTypes IPC message. Emitted by the
    browser process when receiving thread priority change requests from a child
    process on Linux and ChromeOS.
  </summary>
</histogram>

<histogram name="PushMessaging.DeliveryStatus" enum="PushEventStatus"
    expires_after="2027-02-14">
  <owner>peter@chromium.org</owner>
  <owner>knollr@chromium.org</owner>
  <summary>
    When a Service Worker receives a push message, this records whether the
    overall operation was successful, or otherwise the type of error
    encountered.
  </summary>
</histogram>

<histogram name="PushMessaging.GetRegistrationStatus"
    enum="PushGetRegistrationStatus" expires_after="2024-02-04">
  <owner>peter@chromium.org</owner>
  <owner>knollr@chromium.org</owner>
  <summary>
    When a webpage asks for details about its current push messaging
    registration, this records whether the request is successful, or otherwise
    the type of error encountered.

    This histogram was expired between 2022-06-26 and 2023-08-04.
  </summary>
</histogram>

<histogram name="PushMessaging.NumUnsubscribedEntries" units="count"
    expires_after="2027-04-11">
  <owner>peter@chromium.org</owner>
  <owner>antoniosartori@chromium.org</owner>
  <summary>
    When processing a content setting change for notifications, this counts the
    number of unsubscribed entries which are currently stored (and need to be
    iterated upon).
  </summary>
</histogram>

<histogram
    name="PushMessaging.PushSubscriptionChangeForNotificationPermissionChangeFired"
    units="count" expires_after="2026-12-27">
  <owner>peter@chromium.org</owner>
  <owner>antoniosartori@chromium.org</owner>
  <summary>
    When processing a content setting change for notifications, this reports how
    many times (i.e. for how many service workers) the pushsubscriptionchange
    event is fired.
  </summary>
</histogram>

<histogram name="PushMessaging.RegistrationStatus"
    enum="PushRegistrationStatus" expires_after="2024-02-04">
  <owner>peter@chromium.org</owner>
  <owner>knollr@chromium.org</owner>
  <summary>
    When a webpage registers for push messaging, this records whether the
    request is successful, or otherwise the type of error encountered.

    This histogram was expired between 2022-06-26 and 2023-08-04.
  </summary>
</histogram>

<histogram name="PushMessaging.SilentNotification" enum="SilentPushEvent"
    expires_after="2025-01-31">
  <owner>tommasin@chromium.org</owner>
  <owner>kartoffel-core-eng@google.com</owner>
  <summary>
    When a new silent push message is received, this records wether a generic
    notification is shown or not. Additionally it records if the &quot;No silent
    pushes&quot; enforcement is skipped.
  </summary>
</histogram>

<histogram name="PushMessaging.UnregistrationReason"
    enum="PushUnregistrationReason" expires_after="2026-11-29">
  <owner>peter@chromium.org</owner>
  <owner>knollr@chromium.org</owner>
  <summary>
    When unregistering a website from push messaging, this records the reason
    why it is being unregistered.
  </summary>
</histogram>

<histogram name="PushMessaging.UnregistrationStatus"
    enum="PushUnregistrationStatus" expires_after="2026-03-01">
  <owner>peter@chromium.org</owner>
  <owner>knollr@chromium.org</owner>
  <summary>
    When unregistering a website from push messaging, this records whether the
    request is successful, or otherwise the type of error encountered.

    This histogram was expired between 2022-06-26 and 2023-08-04.
  </summary>
</histogram>

<histogram name="ReadingList.AddOrReplaceEntry" enum="ReadingListStorageState"
    expires_after="2027-01-24">
  <owner>mastiz@chromium.org</owner>
  <owner>mmrashad@google.com</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    When an entry is added or replaced in the reading list, records in which
    storage this happened.
  </summary>
</histogram>

<histogram name="ReadingList.Download.Failures" units="count"
    expires_after="2027-03-11">
  <owner>gambard@chromium.org</owner>
  <owner>bling-team@google.com</owner>
  <summary>
    Number of tries before the download of the entry is successful.
  </summary>
</histogram>

<histogram name="ReadingList.Download.Status" enum="ReadingListDownloadStatus"
    expires_after="2027-03-11">
  <owner>gambard@chromium.org</owner>
  <owner>bling-team@google.com</owner>
  <summary>Final status of the download of a reading list entry.</summary>
</histogram>

<histogram name="ReadingList.FirstReadAgeOnDeletion" units="hours"
    expires_after="2027-03-11">
  <owner>gambard@chromium.org</owner>
  <owner>bling-team@google.com</owner>
  <summary>
    Time since the first read of the reading list entry getting deleted. 0 if it
    has never been read.
  </summary>
</histogram>

<histogram name="ReadingList.OfflineVersionDisplayed" enum="Boolean"
    expires_after="2026-11-29">
  <owner>gambard@chromium.org</owner>
  <owner>bling-team@google.com</owner>
  <summary>Whether the displayed version is the offline one.</summary>
</histogram>

<histogram name="ReadingList.Read.AgeOnDeletion" units="hours"
    expires_after="2027-03-11">
  <owner>gambard@chromium.org</owner>
  <owner>bling-team@google.com</owner>
  <summary>
    Time since the creation of the read reading list entry getting deleted.
  </summary>
</histogram>

<histogram name="ReadingList.Read.Number" units="count"
    expires_after="2027-02-07">
  <owner>gambard@chromium.org</owner>
  <owner>bling-team@google.com</owner>
  <summary>Number of read entries in reading list.</summary>
</histogram>

<histogram name="ReadingList.Unread.AgeOnDeletion" units="hours"
    expires_after="2027-06-11">
  <owner>gambard@chromium.org</owner>
  <owner>bling-team@google.com</owner>
  <summary>
    Time since the creation of the unread reading list entry getting deleted.
  </summary>
</histogram>

<histogram name="ReadingList.Unread.Number" units="count"
    expires_after="2027-01-03">
  <owner>gambard@chromium.org</owner>
  <owner>bling-team@google.com</owner>
  <summary>Number of unread entries in reading list.</summary>
</histogram>

<histogram name="ReadingList.WebUI.LoadCompletedTime" units="ms"
    expires_after="2027-01-03">
  <owner>corising@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The amount of time between the RenderFrameHost StartProvisionalLoad event
    and the RenderFrameHost DocumentOnLoadCompleted event for the Read Later
    WebUI page.
  </summary>
</histogram>

<histogram name="ReadingList.WebUI.LoadDocumentTime" units="ms"
    expires_after="2025-11-02">
  <owner>corising@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The amount of time between the RenderFrameHost StartProvisionalLoad and
    DidFinishDocumentLoad events for the Read Later WebUI page.
  </summary>
</histogram>

<histogram name="ReadingList.{ReadStatus}.Count.{RecordedAt}.{StorageState}"
    units="count" expires_after="2027-02-07">
  <owner>mastiz@chromium.org</owner>
  <owner>mmrashad@google.com</owner>
  <owner>treib@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The number of {ReadStatus} items in the reading list {StorageState}.
    Recorded {RecordedAt}.
  </summary>
  <token key="ReadStatus">
    <variant name="Read" summary="read"/>
    <variant name="Unread" summary="unread"/>
  </token>
  <token key="RecordedAt">
    <variant name="OnModelLoaded"
        summary="when the reading list model is loaded"/>
    <variant name="OnUMAUpload" summary="every UMA upload"/>
  </token>
  <token key="StorageState">
    <variant name="AccountStorage" summary="in account storage"/>
    <variant name="LocalStorage" summary="in local storage"/>
    <variant name="LocalStorageSyncing"
        summary="in local storage which is being synced"/>
  </token>
</histogram>

<histogram name="ReduceAcceptLanguage.AcceptLanguageNegotiationRestart"
    enum="AcceptLanguageNegotiationRestart" expires_after="2026-07-26">
  <owner>victortan@chromium.org</owner>
  <owner>awillia@chromium.org</owner>
  <owner>miketaylr@chromium.org</owner>
  <summary>
    Count of requests restarted or the reason why not restarted when reducing
    accept-language HTTP header.
  </summary>
</histogram>

<histogram name="ReduceAcceptLanguage.AcceptLanguagePrefValueIsEmpty"
    enum="BooleanAvailable" expires_after="M145">
  <owner>victortan@chromium.org</owner>
  <owner>awillia@chromium.org</owner>
  <owner>miketaylr@chromium.org</owner>
  <summary>
    Measure how often user accept-language is empty when reading accept-language
    from prefs.
  </summary>
</histogram>

<histogram name="ReduceAcceptLanguage.ClearLatency" units="ms"
    expires_after="M145">
  <owner>victortan@chromium.org</owner>
  <owner>awillia@chromium.org</owner>
  <owner>miketaylr@chromium.org</owner>
  <summary>
    The latency (in milliseconds) to clear the reduce accept language for a
    given origin in the language negotiation cache. This histogram is recorded
    when clearing persisted value from PrefService.
  </summary>
</histogram>

<histogram name="ReduceAcceptLanguage.FetchLatencyUs" units="microseconds"
    expires_after="2026-07-26">
  <owner>victortan@chromium.org</owner>
  <owner>awillia@chromium.org</owner>
  <owner>miketaylr@chromium.org</owner>
  <summary>
    The latency (in microseconds) to fetch the reduce accept language for a
    given origin in the language negotiation cache. This histogram is recorded
    when fetching persisted value from PrefService.

    Warning: This metric may include reports from clients with low-resolution
    clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
    will cause this metric to have an abnormal distribution. When considering
    revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
    solution.
  </summary>
</histogram>

<histogram name="ReduceAcceptLanguage.StoreLatency" units="ms"
    expires_after="M145">
  <owner>victortan@chromium.org</owner>
  <owner>awillia@chromium.org</owner>
  <owner>miketaylr@chromium.org</owner>
  <summary>
    The latency (in milliseconds) to store the reduced accept language header
    value for a given origin in the language negotiation cache. This histogram
    is recorded when navigation responses are being processed.
  </summary>
</histogram>

<histogram name="ReduceAcceptLanguage.UpdateSize" units="count"
    expires_after="M145">
  <owner>victortan@chromium.org</owner>
  <owner>awillia@chromium.org</owner>
  <owner>miketaylr@chromium.org</owner>
  <summary>
    Count of reduce accept language that need to be persisted to the disk.
    Recorded by the renderer. This histogram is recorded when navigation
    responses are being processed.
  </summary>
</histogram>

<histogram name="ReportingAndNEL.ErrorInitializeDB"
    enum="SqliteLoggedResultCode" expires_after="2024-07-21">
  <owner>wfh@chromium.org</owner>
  <owner>src/net/reporting/OWNERS</owner>
  <summary>
    The exact database error encountered when initializing the Reporting and NEL
    database, if initialization fails catastrophically. This is recorded if the
    database initialization fails catastrophically when the DB initialization
    attempt is made, which typically occurs upon the first network request after
    startup. Catastrophic errors are defined in sql::IsErrorCatastrophic.
  </summary>
</histogram>

<histogram name="ReportingAndNEL.NumberOfLoadedNELPolicies"
    units="policy count" expires_after="2023-06-25">
  <owner>yhirano@chromium.org</owner>
  <owner>src/net/reporting/OWNERS</owner>
  <summary>
    The number of NEL policies loaded from the store. This is recorded when the
    NetworkErrorLoggingService requests a load from the backing store, which
    typically happens upon the first network request after startup.
  </summary>
</histogram>

<histogram name="ReportingAndNEL.NumberOfLoadedNELPolicies2"
    units="policy count" expires_after="2023-06-25">
  <owner>yhirano@chromium.org</owner>
  <owner>src/net/reporting/OWNERS</owner>
  <summary>
    The number of NEL policies loaded from the store. This is recorded when the
    NetworkErrorLoggingService requests a load from the backing store, which
    typically happens upon the first network request after startup.
  </summary>
</histogram>

<histogram name="ReportingAndNEL.NumberOfLoadedReportingEndpointGroups2"
    units="endpoint group count" expires_after="2024-09-15">
  <owner>yhirano@chromium.org</owner>
  <owner>src/net/reporting/OWNERS</owner>
  <summary>
    The number of Reporting endpoint groups loaded from the store. This is
    recorded when the ReportingCache requests a load from the backing store,
    which happens upon receipt of the first Report-To header or queued report
    after startup.
  </summary>
</histogram>

<histogram name="ReportingAndNEL.NumberOfLoadedReportingEndpoints2"
    units="endpoint count" expires_after="2024-09-15">
  <owner>yhirano@chromium.org</owner>
  <owner>src/net/reporting/OWNERS</owner>
  <summary>
    The number of Reporting endpoints loaded from the store. This is recorded
    when the ReportingCache requests a load from the backing store, which
    happens upon receipt of the first Report-To header or queued report after
    startup.
  </summary>
</histogram>

<histogram name="ReportingAndNEL.TimeInitializeDB" units="ms"
    expires_after="2023-09-10">
  <owner>yhirano@chromium.org</owner>
  <owner>src/net/reporting/OWNERS</owner>
  <summary>
    The time (ms) taken to initialize the Reporting and NEL DB. This is recorded
    when the DB is initialized, which typically occurs upon the first network
    request after startup.
  </summary>
</histogram>

<histogram name="ReportingAndNEL.UnresponsiveRenderer.CrashReportOutcome"
    enum="CrashRepHandlingOutcome" expires_after="2026-11-01">
  <owner>iclelland@chromium.org</owner>
  <owner>issackjohn@microsoft.com</owner>
  <owner>src/net/reporting/OWNERS</owner>
  <summary>
    Tracks the outcome of crash reports for unresponsive renderers. Including
    when error dialogs are suppressed (e.g., running with --noerrdialogs),
    specifically categorizing the reports as either potentially queued for
    sending or dropped. This metric helps evaluate the potential impact of
    automatically sending crash reports in the scenario where the error dialogs
    are suppressed, aiming to improve crash report send rates without
    overwhelming the system with duplicates.

    Recorded once for each visible WebContents when it is observed to be
    unresponsive.
  </summary>
</histogram>

<histogram name="ReportingAndNEL.WinGetLastErrorInitializeDB"
    enum="WinGetLastError" expires_after="2024-07-14">
  <owner>wfh@chromium.org</owner>
  <owner>src/net/reporting/OWNERS</owner>
  <summary>
    The result of calling ::GetLastError() if initializing the Reporting and NEL
    database fails catastrophically. This is recorded, on Windows only, if the
    database initialization fails when the DB initialization attempt is made,
    which typically occurs upon the first network request after startup.
    Catastrophic errors are defined in sql::IsErrorCatastrophic.
  </summary>
</histogram>

<histogram name="Sanitize.SanitizeEvent" enum="SanitizeEvent"
    expires_after="2026-09-13">
  <owner>behnoodm@chromium.org</owner>
  <owner>cryptohome-core@google.com</owner>
  <summary>
    This metric is recording users' usage of the Sanitize SWA. Different
    histograms show the interaction of the user with the SWA. This UMA records
    when the initial page is opened, when the safety reset starts, and when the
    done page is shown after the reset is completed.
  </summary>
</histogram>

<histogram name="SB2.DownloadChecks" enum="SB2DownloadChecks"
    expires_after="2026-12-22">
  <owner>xinghuilu@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records results of SafeBrowsing download url check. Warning: this histogram
    was expired from M78 to M91. Data may be missing.

    This metric is used to populate a dashboard on go/crsb-site.
  </summary>
</histogram>

<histogram name="SB2.DownloadUrlCheckDuration" units="ms"
    expires_after="2027-02-14">
  <owner>xinghuilu@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The time it takes for SafeBrowsing to check a download url. Warning: this
    histogram was expired from M78 to M91. Data may be missing.
  </summary>
</histogram>

<histogram name="SB2.RemoteCall.CanCheckUrl" enum="BooleanCanCheckUrl"
    expires_after="2026-11-22">
  <owner>vakh@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Count of how many URLs were actually checked vs skipped via
    RemoteSafeBrowsingDatabaseManager because the scheme is not supported by
    Safe Browsing. Incremented each time a resource load is initiated.
  </summary>
</histogram>

<histogram name="SB2.RemoteCall.CanCheckUrl.{CheckType}"
    enum="BooleanCanCheckUrl" expires_after="2027-01-31">
<!-- Note to owner: This histogram can be renewed 1 full year if it is still
useful for Chirp alerts (go/crca-alerts). -->

  <owner>xinghuilu@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Count of how many URLs were actually checked by {CheckType} vs skipped via
    RemoteSafeBrowsingDatabaseManager because the scheme is not supported by
    Safe Browsing. Incremented each time a resource load is initiated. Different
    check types are not directly comparable because hash real time checks have
    applied pre-filtering before this histogram is logged while hash database
    checks haven't.
  </summary>
  <token key="CheckType">
    <variant name="HashDatabase" summary="hash database check"/>
    <variant name="HashRealTime" summary="hash real time check"/>
  </token>
</histogram>

<histogram name="SB2.RemoteCall.Elapsed" units="ms" expires_after="2026-07-26">
  <owner>vakh@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Latency of URL-classification API calls from Chrome via
    RemoteSafeBrowsingDatabaseManager, logged per-request. This includes the
    time to go through JNI, check the URL, and return the result and includes
    several thread hops betwetween IO and UI threads. The resource-load will not
    necessarily be delayed this much (see SB2.Delay for that).
  </summary>
</histogram>

<histogram name="SBIRS.DiscardedIncident" enum="IncidentType"
    expires_after="never">
<!-- expires-never: This tracks health of the incident reporting feature and
should be kept until we remove incident reporting. -->

  <owner>vakh@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The type of incident discarded by the safe browsing incident reporting
    service as a result of profile or service destruction.
  </summary>
</histogram>

<histogram name="SBIRS.DroppedIncident" enum="IncidentType"
    expires_after="never">
<!-- expires-never: This tracks health of the incident reporting feature and
should be kept until we remove incident reporting. -->

  <owner>vakh@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The type of incident given to the safe browsing incident reporting service
    but dropped as a result of not participating in safe browsing.
  </summary>
</histogram>

<histogram name="SBIRS.Incident" enum="IncidentType" expires_after="never">
<!-- expires-never: This tracks health of the incident reporting feature and
should be kept until we remove incident reporting. -->

  <owner>vakh@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The type of incident included in an incident report by the safe browsing
    incident reporting service.
  </summary>
</histogram>

<histogram name="SBIRS.NoDownloadIncident" enum="IncidentType"
    expires_after="never">
<!-- expires-never: This tracks health of the incident reporting feature and
should be kept until we remove incident reporting. -->

  <owner>vakh@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The type of incident pruned by the safe browsing incident reporting service
    as a result of not having a matching binary download.
  </summary>
</histogram>

<histogram name="SBIRS.PrunedIncident" enum="IncidentType"
    expires_after="never">
<!-- expires-never: This tracks health of the incident reporting feature and
should be kept until we remove incident reporting. -->

  <owner>vakh@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The type of incident pruned from a report in the safe browsing incident
    reporting service as a result of having previously been reported.
  </summary>
</histogram>

<histogram name="SBIRS.ReceivedIncident" enum="IncidentType"
    expires_after="never">
<!-- expires-never: This tracks health of the incident reporting feature and
should be kept until we remove incident reporting. -->

  <owner>vakh@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The type of incident received by the safe browsing incident reporting
    service.
  </summary>
</histogram>

<histogram name="SBIRS.ReportPayloadSize" units="bytes" expires_after="never">
<!-- expires-never: This tracks health of the incident reporting feature and
should be kept until we remove incident reporting. -->

  <owner>vakh@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>The size, in bytes, of a safe browsing incident report.</summary>
</histogram>

<histogram name="SBIRS.UploadResult" enum="ReportProcessingResult"
    expires_after="2027-01-17">
<!-- Note to owner: This histogram can be renewed 1 full year if it is still
useful for Chirp alerts (go/crca-alerts). -->

  <owner>caitkp@google.com</owner>
  <summary>
    The result of an attempted report upload by the safe browsing incident
    reporting service.
  </summary>
</histogram>

<histogram name="ScreenLocker.AuthenticationFailure" enum="UnlockType"
    expires_after="never">
<!-- expires-never: Core metric for monitoring Chrome OS lock screen regressions.  -->

  <owner>antrim@chromium.org</owner>
  <owner>cros-oac@google.com</owner>
  <summary>
    What type of authentication was attempted when the user failed to unlock the
    lock screen.
  </summary>
</histogram>

<histogram name="ScreenLocker.AuthenticationFailureTime" units="ms"
    expires_after="never">
<!-- expires-never: Core metric for monitoring Chrome OS lock screen regressions.  -->

  <owner>antrim@chromium.org</owner>
  <owner>cros-oac@google.com</owner>
  <summary>The time spent for authentication in case of a failure.</summary>
</histogram>

<histogram name="ScreenLocker.AuthenticationSuccess" enum="UnlockType"
    expires_after="never">
<!-- expires-never: Core metric for monitoring Chrome OS lock screen regressions.  -->

  <owner>antrim@chromium.org</owner>
  <owner>cros-oac@google.com</owner>
  <summary>
    What type of authentication was attempted when the user successfully
    unlocked the lock screen.
  </summary>
</histogram>

<histogram name="ScreenLocker.AuthenticationSuccessTime" units="ms"
    expires_after="never">
<!-- expires-never: Core metric for monitoring Chrome OS lock screen regressions.  -->

  <owner>antrim@chromium.org</owner>
  <owner>cros-oac@google.com</owner>
  <summary>The time spent for authentication in case of a success.</summary>
</histogram>

<histogram name="ScreenLocker.ScreenLockTime" units="ms" expires_after="never">
<!-- expires-never: Core metric for monitoring Chrome OS lock screen regressions.  -->

  <owner>antrim@chromium.org</owner>
  <owner>cros-oac@google.com</owner>
  <summary>The time spent before the screen locker is ready.</summary>
</histogram>

<histogram name="ScreenLocker.{LockState}.Duration" units="ms"
    expires_after="2023-07-07">
  <owner>charleszhao@chromium.org</owner>
  <owner>chromeos-platform-power@google.com</owner>
  <summary>
    The duration for the screen to be in locked/unlocked state. Recorded inside
    ScreenlockMonitor, when the screen lock state changes.
  </summary>
  <token key="LockState">
    <variant name="Locked" summary="screen was locked in this duration."/>
    <variant name="Unlocked" summary="screen was unlocked in this duration."/>
  </token>
</histogram>

<histogram name="Servicification.Startup2" enum="ServicificationStartupMode"
    expires_after="2027-03-08">
  <owner>hanxi@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <owner>hnakashima@chromium.org</owner>
  <owner>mheikal@chromium.org</owner>
  <summary>
    Histogram of how Chrome is launched, either in ServiceManager only mode or
    as full browser, as well as either cold start or warm start. See
    go/servicification_startup_metrics for more details.
  </summary>
</histogram>

<histogram name="Servicification.Startup3" enum="ServicificationStartupMode"
    expires_after="2027-01-25">
  <owner>hanxi@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <owner>hnakashima@chromium.org</owner>
  <owner>mheikal@chromium.org</owner>
  <summary>
    Histogram of how Chrome is launched, either in ServiceManager only mode or
    as full browser, as well as either cold start or warm start. See
    go/servicification_startup_metrics for more details. The UMA data is cached
    in the SharedPreference compared with Servicification.Startup2, which might
    lose some data when Chrome is running in the ServiceManager only mode.
  </summary>
</histogram>

<histogram name="Shutdown.BrowserExit.Time2" units="ms"
    expires_after="2027-01-17">
  <owner>etienneb@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time duration for shutdown initiated by the browser exit menu command. The
    duration covers from the shutdown trigger to the deletion of the
    BrowserImpl. Note: Android does not have shutdown metrics.
  </summary>
</histogram>

<histogram name="Shutdown.EndSession.Time2" units="ms"
    expires_after="2027-01-17">
  <owner>etienneb@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time duration for shutdown initiated by an end session (user logs off, shuts
    down or reboots without explicitly exiting).The duration covers from the
    shutdown trigger to the deletion of the BrowserImpl. Note: Android does not
    have shutdown metrics.
  </summary>
</histogram>

<histogram name="Shutdown.NotValid.Time2" units="ms" expires_after="2023-09-03">
  <owner>etienneb@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time for shutdown for a not valid exit. This situation happen when a chrome
    process is already running and the process is terminated after the process
    singleton rendez-vous. The duration covers from the shutdown trigger to the
    deletion of the BrowserImpl. Note: Android does not have shutdown metrics.
  </summary>
</histogram>

<histogram name="Shutdown.OtherExit.Time2" units="ms"
    expires_after="2027-02-14">
  <owner>etienneb@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time duration for clean shutdown that are not catched by other not initiated
    by the users. The duration covers from the shutdown trigger to the deletion
    of the BrowserImpl. Note: Android does not have shutdown metrics.
  </summary>
</histogram>

<histogram name="Shutdown.ShutdownType2" enum="ShutdownType"
    expires_after="2027-01-17">
  <owner>etienneb@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    The action type that triggered a browser shutdown. The metric is emitted
    just after BrowserImpl deletion. Note: Android does not have shutdown
    metrics.

    In M-108, the detection of shutdown due to early exit paths changed and
    these shutdowns will be moved from the NotValid bucket to the Other bucket.
  </summary>
</histogram>

<histogram name="Shutdown.SilentExit.Time2" units="ms"
    expires_after="2024-05-12">
  <owner>etienneb@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time for shutdown for a silent exit. The duration covers from the shutdown
    trigger to the deletion of the BrowserImpl. Note: Android does not have
    shutdown metrics.
  </summary>
</histogram>

<histogram name="Shutdown.Time.BrowserCloseManager.Canceled" units="ms"
    expires_after="2027-01-17">
  <owner>aattar@google.com</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The total wall-clock time spent in the page unload process during a
    user-initiated browser shutdown, for cases where the shutdown was canceled
    by the user. This is measured from the start of the exit attempt until the
    user cancels the action, typically via a beforeunload dialog.
  </summary>
</histogram>

<histogram name="Shutdown.Time.BrowserCloseManager.Confirmed" units="ms"
    expires_after="2027-01-17">
  <owner>aattar@google.com</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The total wall-clock time spent processing beforeunload and unload handlers
    during a user-initiated browser shutdown, for cases where the shutdown was
    confirmed. This is measured from the start of the exit attempt until all
    unload-related handlers have completed.
  </summary>
</histogram>

<histogram name="Shutdown.Time.RenderProcess.Termination" units="ms"
    expires_after="2027-01-17">
  <owner>aattar@google.com</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Measures the time from when a renderer process shutdown is initiated via
    RenderProcessHost::Shutdown() until the process has actually terminated.
    High values can indicate a hung or busy renderer. Recorded per process.
  </summary>
</histogram>

<histogram name="Shutdown.WindowClose.Time2" units="ms"
    expires_after="2027-01-17">
  <owner>etienneb@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time for shutdown initiated by the last browser window being closed. The
    duration covers from the shutdown trigger to the deletion of the
    BrowserImpl. Note: Android does not have shutdown metrics.
  </summary>
</histogram>

<histogram name="SignedExchange.CertificateFetch.CacheHit"
    enum="BooleanCacheHit" expires_after="2023-03-29">
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    Records if the fetched Signed Exchange certchain was served from HTTP cache
    or not.
  </summary>
</histogram>

<histogram name="SignedExchange.CTVerificationResult" enum="CTComplianceStatus"
    expires_after="2023-03-29">
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    Reports the result of Signed Exchange CT verification, including success.
  </summary>
</histogram>

<histogram name="SignedExchange.FallbackRedirectLoop" enum="BooleanDetected"
    expires_after="2023-03-29">
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    Records true when a fallback redirect of Signed Exchange has failed with
    ERR_TO_MANY_REDIRECTS.

    Total count of SignedExchange.LoadResult2 should be used as a baseline of
    this histogram.
  </summary>
</histogram>

<histogram name="SignedExchange.LoadResult2" enum="SignedExchangeLoadResult"
    expires_after="2027-01-31">
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    Records the result of loading a resource from Signed HTTP Exchange. Emitted
    each time a response is handled as Signed Exchange.
  </summary>
</histogram>

<histogram name="SignedExchange.OCSPResponseStatus" enum="OCSPResponseStatus"
    expires_after="2023-03-29">
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    The status of OCSP response in Signed Exchange certificates. Reported each
    time Signed Exchange's OCSP check is performed.
  </summary>
</histogram>

<histogram name="SignedExchange.OCSPRevocationStatus"
    enum="OCSPRevocationStatus" expires_after="2023-03-29">
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    Reports the revocation status of OCSP response in Signed Exchange
    certificates. Emitted when Signed Exchange's OCSP check is performed, but
    only when an up-to-date OCSP response was stapled.
  </summary>
</histogram>

<histogram name="SignedExchange.Prefetch.LoadResult2"
    enum="SignedExchangeLoadResult" expires_after="2023-09-10">
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    Records if the prefetched Signed Exchange was properly formatted and passed
    verification steps. Reported for each completed SignedExchange prefetch.
  </summary>
</histogram>

<histogram name="SignedExchange.SignatureVerificationError.Expired"
    units="seconds" expires_after="2023-03-29">
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    Recorded when Signed Exchange signature was expired. Records the time delta
    between current time and signature's &quot;expires&quot; value.
  </summary>
</histogram>

<histogram name="SignedExchange.SignatureVerificationError.NotYetValid"
    units="seconds" expires_after="2023-03-29">
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    Recorded when Signed Exchange signature was not yet valid. Records the time
    delta between current time and signature's &quot;date&quot; value.
  </summary>
</histogram>

<histogram name="SignedExchange.SignatureVerificationResult"
    enum="SignedExchangeSignatureVerificationResult" expires_after="2023-03-29">
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    Reports the result of Signed Exchange signature verification, including
    success.
  </summary>
</histogram>

<histogram name="SignedExchange.Time.CertificateFetch.Failure" units="ms"
    expires_after="2023-03-29">
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    The amount of time elapsed to fetch certificate chain from certUrl, for
    which the fetch has failed.
  </summary>
</histogram>

<histogram name="SignedExchange.Time.CertificateFetch.Success" units="ms"
    expires_after="2023-03-29">
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    The amount of time elapsed to fetch certificate chain from certUrl, for
    which the fetch has succeeded.
  </summary>
</histogram>

<histogram name="SignedExchange.Time.SignatureVerify" units="ms"
    expires_after="2023-03-29">
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    The amount of time that elapsed during
    SignedExchangeSignatureVerifier::Verify.
  </summary>
</histogram>

<histogram name="SignedExchange.TimeUntilExpiration" units="seconds"
    expires_after="2023-03-29">
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    Number of seconds until the Signed Exchange's expiration time. Recorded when
    Signed Exchange signature verification is performed, and emitted only for
    Signed Exchanges within the validity period.
  </summary>
</histogram>

<histogram name="SiteIsolatedCodeCache.DataSize" units="bytes"
    expires_after="2027-01-03">
  <owner>olivierli@chromium.org</owner>
  <owner>leszeks@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The size in bytes of data being stored in the code cache. Recorded on
    receiving the cached code. Recorded only if the size in non-zero.
  </summary>
</histogram>

<histogram name="SiteIsolatedCodeCache.JS.Behaviour"
    enum="SiteIsolatedCodeCacheJSBehaviour" expires_after="2027-01-24">
  <owner>awillia@chromium.org</owner>
  <owner>loading-dev@chromium.org</owner>
  <summary>
    The behaviour of site isolated javascript code cache recorded for each cache
    transaction. It records if the request was serviced and if serviced how it
    was serviced for ex: hit, miss, update.

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

<histogram name="SiteIsolatedCodeCache.JS.FetchCodeCache" units="ms"
    expires_after="2023-10-22">
  <owner>yhirano@chromium.org</owner>
  <owner>loading-dev@chromium.org</owner>
  <summary>
    The amount of time spent to fetch a code cache. Recorded only for a JS code
    cache, and recorded only when a non-empty code cache is found.
  </summary>
</histogram>

<histogram name="SiteIsolatedCodeCache.JS.Hit" enum="Boolean"
    expires_after="2023-10-08">
  <owner>yhirano@chromium.org</owner>
  <owner>loading-dev@chromium.org</owner>
  <summary>
    Represents whether fetching from the code cache succeeded. Recorded when the
    code cache result gets available.
  </summary>
</histogram>

<histogram name="SiteIsolatedCodeCache.JS.MemoryBackedCodeCachePotentialImpact"
    units="Milliseconds" expires_after="2023-10-08">
  <owner>yhirano@chromium.org</owner>
  <owner>loading-dev@chromium.org</owner>
  <summary>
    The amount of time that could be saved if we had a memory-backed code cache.
    Recorded when the code cache result gets available.
  </summary>
</histogram>

<histogram name="SiteIsolatedCodeCache.JS.WebUI.Behaviour"
    enum="SiteIsolatedCodeCacheJSBehaviour" expires_after="2025-07-01">
  <owner>tluk@chromium.org</owner>
  <summary>
    The behaviour of site isolated WebUI JS code cache recorded for each cache
    transaction. It records if the request was serviced and if serviced how it
    was serviced for ex: hit, miss, update.
  </summary>
</histogram>

<histogram
    name="SiteIsolatedCodeCache.JS.WebUI.{WebUIHostnameForCodeCache}.Origin.Behaviour"
    enum="SiteIsolatedCodeCacheJSBehaviour" expires_after="2025-07-01">
  <owner>tluk@chromium.org</owner>
  <owner>chrome-webui-for-features@google.com</owner>
  <summary>
    The behaviour of site isolated WebUI JS code cache recorded for each cache
    transaction for the WebUI origin {WebUIHostnameForCodeCache}. It records if
    the request was serviced and if serviced how it was serviced (eg hit, miss,
    update).
  </summary>
  <token key="WebUIHostnameForCodeCache" variants="WebUIHostnameForCodeCache"/>
</histogram>

<histogram
    name="SiteIsolatedCodeCache.JS.WebUI.{WebUIHostnameForCodeCache}.Resource.Behaviour"
    enum="SiteIsolatedCodeCacheJSBehaviour" expires_after="2025-07-01">
  <owner>tluk@chromium.org</owner>
  <owner>chrome-webui-for-features@google.com</owner>
  <summary>
    The behaviour of site isolated WebUI JS code cache recorded for each cache
    transaction for a resource under the WebUI host {WebUIHostnameForCodeCache}.
    It records if the request was serviced and if serviced how it was serviced
    (eg hit, miss, update).
  </summary>
  <token key="WebUIHostnameForCodeCache" variants="WebUIHostnameForCodeCache"/>
</histogram>

<histogram name="SiteIsolatedCodeCache.WASM.Behaviour"
    enum="SiteIsolatedCodeCacheWASMBehaviour" expires_after="2026-11-22">
  <owner>awillia@chromium.org</owner>
  <owner>loading-dev@chromium.org</owner>
  <summary>
    The behaviour of site isolated web assembly code cache recorded for each
    cache transaction during WASM compilation. It records if the request was
    serviced and if serviced how it was serviced for ex: hit, miss, update.

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

<histogram name="SpellCheck.Android.Count.{UnderlineType}" enum="Boolean"
    expires_after="2027-08-01">
  <owner>hdchuong@google.com</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    Logged whenever a {UnderlineType} error underline is generated by the
    Android OS spell checker.
  </summary>
  <token key="UnderlineType">
    <variant name="Grammar" summary="grammar"/>
    <variant name="Spelling" summary="spelling"/>
  </token>
</histogram>

<histogram name="SpellCheck.Android.Request" enum="Boolean"
    expires_after="2027-08-01">
  <owner>hdchuong@google.com</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    Logged whenever a text check request is dispatched via
    SpellCheckerSessionBridge to the Android OS spell checker on Android.
  </summary>
</histogram>

<histogram name="SpellCheck.Android.UnderlineLength.{UnderlineType}"
    units="code units" expires_after="2027-08-01">
  <owner>hdchuong@google.com</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    Length (in character code units) of a {UnderlineType} error underline
    returned by the Android OS spell checker.
  </summary>
  <token key="UnderlineType">
    <variant name="Grammar" summary="grammar"/>
    <variant name="Spelling" summary="spelling"/>
  </token>
</histogram>

<histogram name="SpellCheck.api.async" units="code units"
    expires_after="2024-12-01">
  <owner>shend@chromium.org</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    The length of text checked via async checking.

    Warning: this histogram was expired from M83 to M107; data may be missing.
  </summary>
</histogram>

<histogram name="SpellCheck.api.check" units="code units"
    expires_after="2024-12-01">
  <owner>shend@chromium.org</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    The length of text checked by spellCheck. No replacement suggestions were
    requested.

    Warning: this histogram was expired from M83 to M107; data may be missing.
  </summary>
</histogram>

<histogram name="SpellCheck.api.check.suggestions" units="code units"
    expires_after="2024-12-01">
  <owner>shend@chromium.org</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    The length of text checked by spellCheck. Replacement suggestions were
    requested.

    Warning: this histogram was expired from M83 to M107; data may be missing.
  </summary>
</histogram>

<histogram name="SpellCheck.api.showUI" enum="BooleanEnabled"
    expires_after="M124">
  <owner>groby@chromium.org</owner>
  <summary>
    The number of times the platform spelling UI was enabled/disabled.
  </summary>
</histogram>

<histogram name="SpellCheck.Browser.InitForRendererTime" units="ms"
    expires_after="2027-03-01">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Logs the time taken to run SpellcheckService::InitForRenderer. This is
    recorded whenever a new renderer process is created.
  </summary>
</histogram>

<histogram name="SpellCheck.CheckedWords" units="words"
    expires_after="2027-08-01">
  <owner>shend@chromium.org</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    The number of words checked within a session.

    Warning: this histogram was expired from M83 to M107 and also from 2024-12
    to 2026-08; data may be missing.
  </summary>
</histogram>

<histogram name="SpellCheck.CheckedWordsPerHour" units="words"
    expires_after="2024-12-01">
  <owner>shend@chromium.org</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    The average number of words checked per hour. Sampled every 30 minutes.
    Warning: this histogram was expired from M83 to M107; data may be missing.
  </summary>
</histogram>

<histogram name="Spellcheck.DocumentCustomDictionary.WordCount" units="words"
    expires_after="2027-06-01">
  <owner>shend@chromium.org</owner>
  <owner>zsun@igalia.com</owner>
  <summary>
    Number of words accepted into a single RenderFrame's per-document custom
    dictionary, which is populated via the SpellCheckCustomDictionary web API.

    Recorded once per document, when the document is replaced by a new document
    (navigation) or the frame is torn down. Documents that never added a word
    through the API are not recorded.
  </summary>
</histogram>

<histogram name="SpellCheck.Enabled2" enum="BooleanEnabled"
    expires_after="2024-12-01">
  <owner>shend@chromium.org</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    The number of sessions that started with spellchecking enabled. Recorded
    only for regular profiles. (Not recorded on guest profiles for example.)
  </summary>
</histogram>

<histogram name="SpellCheck.MisspelledWords" units="words"
    expires_after="2027-08-01">
  <owner>shend@chromium.org</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    The number of misspelled words within a session.

    Warning: this histogram was expired from M83 to M107 and also from 2024-12
    to 2026-08; data may be missing.
  </summary>
</histogram>

<histogram name="SpellCheck.Renderer.InitializeTime" units="ms"
    expires_after="2027-03-01">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Logs the time taken to run SpellCheck::Initialize on the renderer main
    thread. This encompasses the construction of the custom dictionary and takes
    place during renderer initialization.
  </summary>
</histogram>

<histogram name="SpellCheck.ReplacedWords" units="words"
    expires_after="2027-08-01">
  <owner>shend@chromium.org</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    The number of misspelled-but-replaced words within a session.

    Warning: this histogram was expired from M83 to M107 and also from 2024-12
    to 2026-08; data may be missing.
  </summary>
</histogram>

<histogram name="SpellCheck.ShownSuggestions" units="suggestions"
    expires_after="2027-08-01">
  <owner>shend@chromium.org</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    The number of occurrences that shows spelling suggestion within a session.
    This is incremented and logged when a context menu with spelling suggestions
    is shown for a misspelled word.

    Warning: this histogram was expired from M83 to M107 and also from 2024-12
    to 2026-08; data may be missing.
  </summary>
</histogram>

<histogram name="SpellCheck.SpellingService.Enabled2" enum="BooleanEnabled"
    expires_after="2024-12-01">
  <owner>shend@chromium.org</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    Whether the user has opted in to asking Google for spelling suggestions.
    Recorded only for regular profiles. (Not recorded on guest profiles for
    example.) Recorded both when spelling is initialized and when the preference
    is changed.
  </summary>
</histogram>

<histogram name="SpellCheck.SpellingService.RequestHttpResponseCode"
    enum="HttpResponseCode" expires_after="2025-11-16">
  <owner>shend@chromium.org</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>The HTTP code of Spelling service responses.</summary>
</histogram>

<histogram name="SpellCheck.SpellingService.RequestResultType"
    enum="ServiceRequestResultType" expires_after="2024-12-01">
  <owner>shend@chromium.org</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    Describes the results returned by the Spelling service by assigning them to
    one of three high-level buckets: request/service error, success with no
    suggestions, and success with spelling suggestions.
  </summary>
</histogram>

<histogram name="SpellCheck.SuggestionHitRatio" units="%"
    expires_after="2027-08-01">
  <owner>shend@chromium.org</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    The percentage of replacement executions within suggestion occurrences.

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

<histogram
    name="Spellcheck.Windows.ChromeLocalesSupport2{Spellcheck_Windows_LocaleSupportType}"
    units="locales" expires_after="2025-02-02">
  <owner>shend@chromium.org</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    Counts how many languages are added to Chrome by the user but are not
    supported for spell check (today Chrome only supports a hard-coded list of
    locales for spell check). Recorded only for regular profiles. (Not recorded
    on guest profiles for example.)

    This is a measure of the potential impact of adding support for non-Hunspell
    locales in the spell check settings. This also helps answer the following
    question: should the Chrome spell check settings raise awareness of Windows
    language packs and / or link to documentation describing how to install a
    Windows language pack?

    This is recorded once during spell check initialization, and then once each
    time the user changes their Chrome languages.
    {Spellcheck_Windows_LocaleSupportType}
  </summary>
</histogram>

<histogram
    name="Spellcheck.Windows.SpellcheckLocalesSupport2{Spellcheck_Windows_LocaleSupportType}"
    units="locales" expires_after="2025-02-02">
  <owner>shend@chromium.org</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    Of all the currently enabled spell check languages, counts how many are
    supported by the different spell checkers (Hunspell and the Windows OS).
    Recorded only for regular profiles. (Not recorded on guest profiles for
    example.)

    This helps measure the impact and reach of the native spell checker
    integration.

    This is recorded once during spell check initialization, and then once each
    time the user changes their enabled spell check languages.
    {Spellcheck_Windows_LocaleSupportType}
  </summary>
</histogram>

<histogram
    name="Spellcheck.Windows.SpellcheckRequestDuration{Spellcheck_Windows_SpellcheckType}"
    units="ms" expires_after="2024-12-01">
  <owner>shend@chromium.org</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    Measures the time it takes to perform one spell check end to end. The start
    time is taken just before invoking Hunspell or the native spell checker (via
    Mojo), and the end time is taken just before invoking the Blink spell check
    callback.

    This is recorded every time a spell check is performed.
    {Spellcheck_Windows_SpellcheckType}
  </summary>
</histogram>

<histogram
    name="Spellcheck.Windows.SuggestionGatheringDuration{Spellcheck_Windows_SpellcheckType}"
    units="ms" expires_after="2024-12-01">
  <owner>shend@chromium.org</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    Measures the time it takes to generate spelling suggestions when a user
    right clicks a misspelled word. The start time is taken just before invoking
    Hunspell for the suggestions, and the end time is taken just after the final
    suggestion list is constructed.

    This is recorded every time the user opens the context menu on a misspelled
    word, but only if the suggestions hadn't been pre-generated (which happens
    when all spell check locales are supported by the OS spell checker).
    {Spellcheck_Windows_SpellcheckType}
  </summary>
</histogram>

<histogram name="SSORecallPromo.AccountsAvailable" units="units"
    expires_after="2027-04-01">
  <owner>jlebel@chromium.org</owner>
  <owner>chrome-signin-team@google.com</owner>
  <summary>
    Number of accounts available for Single Sign On with the current device,
    recorded at the time the SSO Promo is shown.
  </summary>
</histogram>

<histogram name="SSORecallPromo.PromoAction" enum="SSOPromoUserAction"
    expires_after="2026-08-02">
  <owner>jlebel@chromium.org</owner>
  <owner>chrome-signin-team@google.com</owner>
  <summary>
    Action the user takes when the Single Sign On promotion is shown.
  </summary>
</histogram>

<histogram name="SSORecallPromo.PromoSeenCount" units="units"
    expires_after="2026-08-02">
  <owner>jlebel@chromium.org</owner>
  <owner>chrome-signin-team@google.com</owner>
  <summary>
    Number of times the promotion has been seen on the current device.
  </summary>
</histogram>

<histogram name="Style.InvalidationTime" units="microseconds"
    expires_after="2027-03-01">
  <owner>futhark@chromium.org</owner>
  <summary>
    Microseconds spent in StyleEngine::InvalidateStyle. Only samples from high
    resolution timers are recorded.
  </summary>
</histogram>

<histogram name="Style.RebuildLayoutTreeTime" units="microseconds"
    expires_after="2027-03-01">
  <owner>futhark@chromium.org</owner>
  <summary>
    Microseconds spent in RebuildLayoutTree called from Document::UpdateStyle.
  </summary>
</histogram>

<histogram name="Style.RecalcTime" units="microseconds"
    expires_after="2027-03-01">
  <owner>futhark@chromium.org</owner>
  <summary>
    Microseconds spent in RecalcStyle called from Document::UpdateStyle.
  </summary>
</histogram>

<histogram name="SubresourceWebBundles.BundleFetchErrorCode"
    enum="NetErrorCodes" expires_after="2027-09-01">
  <owner>hayato@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    The net error code recorded when request for a subresource web bundle was
    failed.
  </summary>
</histogram>

<histogram name="SubresourceWebBundles.ContentLength" units="bytes"
    expires_after="2027-09-01">
  <owner>hayato@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    The value of content length header of a subresource web bundle, or zero if
    the content-length header is missing.
  </summary>
</histogram>

<histogram name="SubresourceWebBundles.LoadResult"
    enum="SubresourceWebBundleLoadResult" expires_after="2027-09-01">
  <owner>hayato@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>The result of loading subresource web bundles.</summary>
</histogram>

<histogram name="SubresourceWebBundles.MaxMemoryUsagePerProcess" units="bytes"
    expires_after="2027-09-01">
  <owner>hayato@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    The max memory usage per renderer process for subresource web bundles which
    are kept in the network process's memory. Recorded when all the subresource
    web bundles for the renderer process are released.
  </summary>
</histogram>

<histogram name="SubresourceWebBundles.OriginType"
    enum="SubresourceWebBundleOriginType" expires_after="2027-09-01">
  <owner>hayato@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    The counts of Web Bundles origin types requested by Subresource Loading with
    Web Bundles. Recorded when a script element whose type is webbundle is
    inserted into a document.
  </summary>
</histogram>

<histogram name="SubresourceWebBundles.ReceivedSize" units="bytes"
    expires_after="2027-09-01">
  <owner>hayato@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    The received data size of a subresource web bundle. Recorded when received
    all the body of the subresource web bundle.
  </summary>
</histogram>

<histogram name="SubresourceWebBundles.ResourceCount" units="resources"
    expires_after="2027-09-01">
  <owner>hayato@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    The number of resources contained in a web bundle. Recorded when bundle
    metadata is received and parsed successfully.
  </summary>
</histogram>

<histogram name="SubscriptionEligibility.AiSubscriptionTierStatus"
    enum="SubscriptionEligibilityAiSubscriptionTierStatus"
    expires_after="2027-01-17">
  <owner>sophiechang@chromium.org</owner>
  <owner>chrome-intelligence-core@google.com</owner>
  <summary>
    Records AI subscription tier status for profiles available on this install.
    Emitted in every UMA record from the current session (at the time the record
    is finalized).
  </summary>
</histogram>

<histogram name="Tablet.CountOfVolumeAdjustType" units="numbers"
    expires_after="2023-02-12">
  <owner>minch@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>
    The number of each volume adjust type in tablet mode. Logged when starts
    volume adjust while in tablet mode.
  </summary>
</histogram>

<histogram name="TimeZone.TimeZoneRequest.Event" enum="TimeZoneRequestEvent"
    expires_after="never">
<!-- expires-never: This reports external time zone provider health status and
should be kept until we use this API.  -->

  <owner>alemate@chromium.org</owner>
  <owner>michaelpg@chromium.org</owner>
  <summary>Events in TimeZoneRequest.</summary>
</histogram>

<histogram name="TimeZone.TimeZoneRequest.ResponseCode" enum="HttpResponseCode"
    expires_after="never">
<!-- expires-never: This reports external time zone provider health status and
should be kept until we use this API.  -->

  <owner>alemate@chromium.org</owner>
  <owner>michaelpg@chromium.org</owner>
  <summary>Http response codes in TimeZoneRequest.</summary>
</histogram>

<histogram name="TimeZone.TimeZoneRequest.ResponseFailureTime" units="ms"
    expires_after="never">
<!-- expires-never: This reports external time zone provider health status and
should be kept until we use this API.  -->

  <owner>alemate@chromium.org</owner>
  <owner>michaelpg@chromium.org</owner>
  <summary>
    The time elapsed between the sending of the first API request and the time
    the final (failed) response was recorded. Includes all retries.
  </summary>
</histogram>

<histogram name="TimeZone.TimeZoneRequest.ResponseSuccessTime" units="ms"
    expires_after="never">
<!-- expires-never: This reports external time zone provider health status and
should be kept until we use this API.  -->

  <owner>alemate@chromium.org</owner>
  <owner>michaelpg@chromium.org</owner>
  <summary>
    The time elapsed between the sending of the first API request and the time
    the final (successfull) response was recorded. Includes all retries.
  </summary>
</histogram>

<histogram name="TimeZone.TimeZoneRequest.Result" enum="TimeZoneRequestResult"
    expires_after="never">
<!-- expires-never: This reports external time zone provider health status and
should be kept until we use this API.  -->

  <owner>alemate@chromium.org</owner>
  <owner>michaelpg@chromium.org</owner>
  <summary>Result of TimeZoneRequest.</summary>
</histogram>

<histogram name="TimeZone.TimeZoneRequest.Retries" units="units"
    expires_after="never">
<!-- expires-never: This reports external time zone provider health status and
should be kept until we use this API.  -->

  <owner>alemate@chromium.org</owner>
  <owner>michaelpg@chromium.org</owner>
  <summary>Number of retries until the final response was recorded.</summary>
</histogram>

<histogram name="TouchScreen.MissedTOUCHEVENTF_UP" enum="BooleanHit"
    expires_after="2024-10-03">
  <owner>girard@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    Recorded when a touch event excludes an active touch (a touch-id/dwId that
    previously generated a TOUCHEVENTF_DOWN, and has not since generated a
    TOUCHEVENTF_UP). Chromium generates a simulated event to maintain
    consistency/correctness. Only recorded on Windows.

    Warning: This histogram was expired after M95, and resurrected in M108.

    This workaround will be removed once usage drops off. See
    https://crbug.com/811273 for details.
  </summary>
</histogram>

<histogram name="Tracing.Background.FinalizationDisallowedReason"
    enum="TracingFinalizationDisallowedReason" expires_after="2027-04-12">
  <owner>ssid@chromium.org</owner>
  <summary>
    Reason why background tracing finalization was not allowed. Also see
    &quot;Tracing.Background.ScenarioState&quot; metric, which records the total
    number of times finalization was allowed and not allowed.
  </summary>
</histogram>

<histogram name="Tracing.Background.Perfetto.Trigger"
    enum="BackgroundTracingTriggerNameHash" expires_after="2027-04-12">
  <owner>etiennep@chromium.org</owner>
  <owner>chrometto-team@google.com</owner>
  <summary>
    Records Perfetto Tracing Trigger name hash when they occur. Tracing Triggers
    defined in a proto scenario config from
    third_party/perfetto/protos/perfetto/config/chrome/scenario_config.proto and
    are usually based on named events or histograms.
  </summary>
</histogram>

<histogram name="Tracing.Background.ReadTraceDuration" units="ms"
    expires_after="2026-08-23">
  <owner>etiennep@chromium.org</owner>
  <owner>chrometto-team@google.com</owner>
  <summary>
    Records the elapsed time from TracingSession::ReadTrace initial call until
    all data is received in the browser process.
  </summary>
</histogram>

<histogram name="Tracing.Background.Scenario.Trigger.{Type}"
    enum="BackgroundTracingTriggerNameHash" expires_after="2027-04-12">
  <owner>etiennep@chromium.org</owner>
  <owner>chrometto-team@google.com</owner>
  <summary>
    Records Background Tracing {Type} Trigger name hash when they occur. Tracing
    Triggers defined in a proto scenario config from
    third_party/perfetto/protos/perfetto/config/chrome/scenario_config.proto and
    are usually based on named events or histograms.
  </summary>
  <token key="Type">
    <variant name="Start"/>
    <variant name="Stop"/>
    <variant name="Upload"/>
  </token>
</histogram>

<histogram name="Tracing.Background.Scenario.{Event}"
    enum="BackgroundTracingScenarioNameHash" expires_after="2027-04-12">
  <owner>etiennep@chromium.org</owner>
  <owner>chrometto-team@google.com</owner>
  <summary>
    Records Background Tracing scenario name hash when event {Event} occurs.
  </summary>
  <token key="Event">
    <variant name="Active"/>
    <variant name="Clone"/>
    <variant name="Error"/>
    <variant name="Idle"/>
    <variant name="Invalid"/>
    <variant name="Recording"/>
    <variant name="SaveTrace"/>
    <variant name="Upload"/>
  </token>
</histogram>

<histogram name="Tracing.Background.ScenarioState"
    enum="BackgroundTracingState" expires_after="2027-04-12">
  <owner>oysteine@chromium.org</owner>
  <summary>
    Records state of the Background Tracing system, from when scenarios are
    attempted to be activated until they're completed (successfully or failed)
  </summary>
</histogram>

<histogram name="Tracing.ElevatedTracingService.LaunchResult.{Stage}"
    enum="Hresult" expires_after="2026-12-16">
  <owner>etiennep@chromium.org</owner>
  <owner>grt@chromium.org</owner>
  <summary>
    The HRESULT from the {Stage} stage while launching the elevated tracing
    service on Windows. A value is recorded for each stage while processing a
    launch of the service until either a failure is reached, or the final stage
    succeeds. Typically, the service is started at most once per browser
    process.
  </summary>
  <token key="Stage">
    <variant name="AcceptInvitation"/>
    <variant name="CoCreateInstance"/>
    <variant name="CoSetProxyBlanket"/>
  </token>
</histogram>

<histogram name="Tracing.Init.InitTracing" units="ms"
    expires_after="2027-04-01">
  <owner>pbirk@chromium.org</owner>
  <owner>webview-team@google.com</owner>
  <owner>chrometto-team@google.com</owner>
  <summary>
    Records the total time spent by tracing::InitTracing.

    This histogram is added to investigate the impact of Tracing initialization
    on WebView startup performance.
  </summary>
</histogram>

<histogram name="Tracing.Init.Perfetto.Initialize" units="ms"
    expires_after="2027-04-01">
  <owner>pbirk@chromium.org</owner>
  <owner>webview-team@google.com</owner>
  <owner>chrometto-team@google.com</owner>
  <summary>
    Records the time spent by perfetto::Tracing::Initialize during
    PerfettoTracedProcess::SetupClientLibrary.

    This histogram is added to investigate the impact of Tracing initialization
    on WebView startup performance.
  </summary>
</histogram>

<histogram name="Tracing.SharedBufferIsValid" enum="BooleanSuccess"
    expires_after="2024-07-28">
  <owner>eseckler@chromium.org</owner>
  <owner>tracing@chromium.org</owner>
  <summary>
    Records success or failure of creating the shared buffer in
    ProducerClient::InitSharedMemoryIfNeeded()
  </summary>
</histogram>

<histogram name="UnifiedConsent.MakeSearchesAndBrowsingBetter.OnProfileLoad"
    enum="BooleanEnabled" expires_after="never">
<!-- expires-never: Core metric for monitoring user settings for making searches and browsing better. -->

  <owner>msarda@chromium.org</owner>
  <owner>droger@chromium.org</owner>
  <summary>
    State of the user settings for making searches and browsing better, recorded
    each time a regular profile is loaded (this histogram is not recoded for
    system profiles, guest profiles, off-the-record profiles or irregular
    ChromeOS profiles).
  </summary>
</histogram>

<histogram
    name="UnifiedConsent.SyncAndGoogleServicesSettings.AfterAdvancedOptIn.SyncDataTypesOff"
    enum="UnifiedConsentSyncDataTypesOffAfterAdvancedOptIn"
    expires_after="never">
<!-- expires-never: Core metric for monitoring sync data types. -->

  <owner>droger@chromium.org</owner>
  <owner>msarda@chromium.org</owner>
  <summary>
    All *off* sync data types are recorded when the user confirmed the sync
    setup after going through the advanced opt-in flow.
  </summary>
</histogram>

<histogram name="UpdateClient.CupValidationResult" enum="BooleanSuccess"
    expires_after="2027-07-21">
  <owner>deckerjames@google.com</owner>
  <owner>sorin@chromium.org</owner>
  <summary>
    Records the result of Client Update Protocol (CUP) signature validation of a
    server response. Recorded once per validation attempt, i.e. each time
    update_client receives an HTTP-successful response for a request sent with
    CUP signing enabled (update checks and pings). A failed validation may be
    retried against a fallback URL, recording an additional sample. Not recorded
    for requests that fail at the network level.
  </summary>
</histogram>

<histogram name="UpdateClient.CupValidationTime" units="ms"
    expires_after="2027-07-21">
  <owner>deckerjames@google.com</owner>
  <owner>sorin@chromium.org</owner>
  <summary>
    Measures the time taken to validate the Client Update Protocol (CUP)
    signature of a server response. Recorded on the same occasions as
    UpdateClient.CupValidationResult, for both successful and failed
    validations. Granularity is 1 ms, so sub-millisecond validations all record
    in the minimum bucket.
  </summary>
</histogram>

<histogram name="UpdateClient.DownloadTime2{AppID}" units="ms"
    expires_after="2027-02-14">
  <owner>noahrose@google.com</owner>
  <owner>sorin@chromium.org</owner>
  <summary>
    Measures the time it takes to complete a download for {AppID}. Counted only
    for successful downloads.
  </summary>
  <token key="AppID">
    <variant name="" summary="any app"/>
    <variant name=".fklghjjljmnfjoepjmlobpekiapffcja"
        summary="Optimization Guide On Device Model"/>
  </token>
</histogram>

<histogram name="UpdateClient.UnzipTime{AppID}" units="ms"
    expires_after="2027-02-07">
  <owner>noahrose@google.com</owner>
  <owner>sorin@chromium.org</owner>
  <summary>
    Measures the time it takes to unzip a component for {AppID}. Counted only
    for successful unzips.
  </summary>
  <token key="AppID">
    <variant name="" summary="any app"/>
    <variant name=".fklghjjljmnfjoepjmlobpekiapffcja"
        summary="Optimization Guide On Device Model"/>
  </token>
</histogram>

<histogram name="UpgradeDetector.DaysBeforeUpgrade" units="days"
    expires_after="2027-01-24">
  <owner>emshack@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Measures the days elapsed from an update being visible to the browser and
    the browser being restarted or quit.

    Warning: this histogram expired after M87, and was re-added in M92; data may
    be missing.
  </summary>
</histogram>

<histogram name="UpgradeDetector.HoursBeforeUpgrade" units="hours"
    expires_after="2027-01-24">
  <owner>emshack@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Measures the hours elapsed from an update being visible to the browser and
    the browser being restarted or quit.
  </summary>
</histogram>

<histogram name="UpgradeDetector.RollbackReason"
    enum="UpgradeDetectorRollbackReason" expires_after="2024-06-01">
  <owner>mpolzer@google.com</owner>
  <owner>crisguerrero@chromium.org</owner>
  <owner>chromeos-commercial-remote-management@google.com</owner>
  <summary>
    Tracks what is the reason we're doing a rollback instead of an update (going
    to a more stable channel or admin-initiated enterprise rollback). We're
    showing different notifications depending on the reason.

    Sent when the device finished installing the rollback image, shows the
    notification and is waiting for reboot.

    This metric is specific to ChromeOS.
  </summary>
</histogram>

<histogram name="Uptime.ChromeExecToLoginPromptVisibleAfterLogout" units="ms"
    expires_after="2026-11-15">
  <owner>hidehiko@chromium.org</owner>
  <owner>junis@google.com</owner>
  <owner>cros-oac@google.com</owner>
  <summary>
    Measures the time elapsed on Chrome OS between when Chrome is started, and
    when the login prompt is again visible after a logout. This statistic is
    only collected when preceeded by a logout.

    Warning: this histogram was expired from M77 to M96 some data may be
    missing.
  </summary>
</histogram>

<histogram name="Uptime.DBusCrash" units="ms" expires_after="2024-12-15">
  <owner>satorux@chromium.org</owner>
  <owner>hashimoto@chromium.org</owner>
  <summary>
    The system uptime on Chrome OS when the dbus-daemon process crashes,
    resulting in a reboot.

    Warning: this histogram was expired from M85 to M118 some data may be
    missing.
  </summary>
</histogram>

<histogram name="Uptime.LoginPromptSetupTimeAfterLogout" units="ms"
    expires_after="2022-09-13">
  <owner>hidehiko@chromium.org</owner>
  <owner>junis@google.com</owner>
  <owner>cros-oac@google.com</owner>
  <summary>
    Measures the time elapsed on Chrome OS for setting up for a login after a
    logout. More specifically, it is the time between when the Cryptohome is
    unmounted (the last step in the logout process) and when the login prompt is
    again visible after a logout.

    Warning: this histogram was expired from M85 to M96 some data may be
    missing.
  </summary>
</histogram>

<histogram name="Uptime.Logout" units="ms" expires_after="2026-11-29">
  <owner>hidehiko@chromium.org</owner>
  <owner>junis@google.com</owner>
  <owner>cros-oac@google.com</owner>
  <summary>
    Measures the time elapsed on Chrome OS when performing a logout. More
    specifically, it is the time between when a logout is initiated and when the
    Cryptohome is unmounted, signaling the last step in the logout process. This
    statistic is not collected when the logout is part of a restart or shutdown.

    Warning: this histogram was expired from 09/2020 to M96 some data may be
    missing.
  </summary>
</histogram>

<histogram name="Uptime.LogoutToLoginPromptVisible" units="ms"
    expires_after="2022-11-13">
  <owner>hidehiko@chromium.org</owner>
  <owner>junis@google.com</owner>
  <owner>cros-oac@google.com</owner>
  <summary>
    Measures the time elapsed on Chrome OS between initiating a logout and the
    next time the login prompt is visible again. This statistic is not collected
    if the machine is shutdown between the logout initiation and the prompt
    becoming visible.

    Warning: this histogram was expired from M77 to M96 some data may be
    missing.
  </summary>
</histogram>

<histogram name="Uptime.LogoutToUIStopAfterLogout" units="ms"
    expires_after="2022-09-13">
  <owner>hidehiko@chromium.org</owner>
  <owner>junis@google.com</owner>
  <owner>cros-oac@google.com</owner>
  <summary>
    Measures the time elapsed on Chrome OS between when a logout is initiated
    and the UI has stopped (and Chrome has exited) during the logout process.
    This statistic is not collected if the logout is part of a restart or
    shutdown.

    Warning: this histogram was expired from M77 to M96 some data may be
    missing.
  </summary>
</histogram>

<histogram name="Uptime.OtherProcessesTerminatedToChromeExecAfterLogout"
    units="ms" expires_after="2022-09-13">
  <owner>hidehiko@chromium.org</owner>
  <owner>junis@google.com</owner>
  <owner>cros-oac@google.com</owner>
  <summary>
    Measures the time elapsed on Chrome OS between when all user-associated
    processes have been terminated during the logout process and when Chrome is
    started again to show the login screen.

    Warning: this histogram was expired from M77 to M96 some data may be
    missing.
  </summary>
</histogram>

<histogram name="Uptime.UIStopToProcessesTerminatedAfterLogout" units="ms"
    expires_after="2022-09-13">
  <owner>hidehiko@chromium.org</owner>
  <owner>junis@google.com</owner>
  <owner>cros-oac@google.com</owner>
  <summary>
    Measures the time elapsed on Chrome OS between when the UI has stopped
    (Chrome has exited), and when all other associated processes have been
    terminated during the logout process. This statistic is not collected if the
    logout is part of a restart or shutdown.

    Warning: this histogram was expired from M77 to M96 some data may be
    missing.
  </summary>
</histogram>

<histogram name="UsageStats.Events" enum="UsageStatsEvents"
    expires_after="2026-09-06">
  <owner>pnoland@chromium.org</owner>
  <owner>fgorski@chromium.org</owner>
  <summary>
    Android: count of Usage Stats events. Recorded as these events occur; e.g.
    when a domain is associated with a token, or a site is suspended.
  </summary>
</histogram>

<histogram name="UserImage.Changed2" enum="ChromeOSUserImageId2"
    expires_after="2024-03-24">
  <owner>jasontt@chromium.org</owner>
  <owner>assistive-eng@google.com</owner>
  <summary>
    Distribution of the device images that users changed (Chrome OS). The
    statistic is recorded each time the user changes their device image to a
    different one in Settings.

    This metric expired in March 2022 and was revived in M105. Data between
    these times is incomplete.

    This metric supersedes `UserImage.Changed` due to a change in enum values.
  </summary>
</histogram>

<histogram name="UserImage.LoggedIn3" enum="ChromeOSUserImageId2"
    expires_after="never">
<!-- expires-never: Core metric for monitoring user image selections. -->

  <owner>achuith@chromium.org</owner>
  <owner>jasontt@chromium.org</owner>
  <owner>assistive-eng@google.com</owner>
  <owner>cros-oac@google.com</owner>
  <summary>
    Distribution of the default images that existing users log in with (Chrome
    OS). One sample is taken each time the user logs in.

    This metric supersedes UserImage.LoggedIn2 due to a change in enum values.
    Special value 0 (Camera image) of ChromeOSUserImageId2 is never recorded in
    this histogram.

    Warning: this histogram was expired from 2022-03-30 to 2022-08-01; data may
    be missing.
  </summary>
</histogram>

<histogram name="UserManager.LoginUserType" enum="UserType"
    expires_after="2026-07-26">
  <owner>achuith@chromium.org</owner>
  <owner>antrim@chromium.org</owner>
  <owner>cros-lurs@google.com</owner>
  <summary>
    The number of users of different types that log in to the system (Chrome
    OS).
  </summary>
</histogram>

<histogram name="UserManager.LogoutToLoginDelay" units="seconds"
    expires_after="never">
<!-- expires-never: Core metric for monitoring Chrome OS logout/login
regressions. -->

  <owner>alemate@chromium.org</owner>
  <owner>antrim@chromium.org</owner>
  <owner>cros-lurs@google.com</owner>
  <summary>
    The time between one regular user logging out and a different regular user
    logging in (Chrome OS). Delays above thirty minutes or which span system
    reboots or non-regular-user logins are not reported.
  </summary>
</histogram>

<histogram name="UserManager.UserTypeChanged" enum="UserTypeChanged"
    expires_after="never">
<!-- expires-never: Core metric for monitoring User type change regressions. -->

  <owner>hidehiko@chromium.org</owner>
  <owner>junis@google.com</owner>
  <owner>cros-oac@google.com</owner>
  <summary>
    This is logged when new user type reported by Gaia is different from the old
    one (for existing user).
  </summary>
</histogram>

<histogram name="VoiceInteraction.DismissedEventSource"
    enum="VoiceInteractionEventSource" expires_after="2026-06-08">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Android: The source of a dismissed voice search, such as omnibox or NTP.
    This is recorded after the dismissed intent returns to Chrome.
  </summary>
</histogram>

<histogram name="VoiceInteraction.FailureEventSource"
    enum="VoiceInteractionEventSource" expires_after="2026-06-28">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Android: The source of a failed voice search, such as omnibox or NTP. This
    is recorded after any intent failure, which could occur before an intent is
    sent (if the send fails) or after the intent returns unsuccessfully. It will
    only be recorded once.
  </summary>
</histogram>

<histogram name="VoiceInteraction.FinishEventSource"
    enum="VoiceInteractionEventSource" expires_after="2027-01-17">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Android: The source of a successful voice search, such as omnibox or NTP.
    This is recorded immediately after the successful intent returns to Chrome.
  </summary>
</histogram>

<histogram name="VoiceInteraction.StartEventSource"
    enum="VoiceInteractionEventSource" expires_after="2027-02-07">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Android: The source of a voice search start event, such as omnibox or NTP.
    This is recorded immediately before the voice transcription intent is sent.
  </summary>
</histogram>

<histogram name="VoiceInteraction.VoiceResultConfidenceValue" units="%"
    expires_after="2027-01-17">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Android: Records the confidence value of a successful voice search as a
    percentage. This is recorded when the voice intent returns successfully.

    Warning: this histogram was expired from 2024-04-28 to 2024-08-19; data may
    be missing.
  </summary>
</histogram>

<histogram name="VoiceInteraction.VoiceSearchResult" enum="BooleanSuccess"
    expires_after="2027-02-07">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Android: Records whether the voice search produced results. This is recorded
    when the voice intent returns successfully.
  </summary>
</histogram>

<histogram name="WebContentsObserver.{Method}{FrameType}" units="ms"
    expires_after="2027-02-07">
  <owner>cduvall@chromium.org</owner>
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Measures the time it takes to call all observers of the WebContents observer
    method {Method} in {FrameType}. Logged every time the method is called.

    WARNING: This method may have been expired from 2023-07-28 to 2024-06-02.
  </summary>
  <token key="Method" variants="WebContentsObserverMethods"/>
  <token key="FrameType">
    <variant name="" summary="all frames"/>
    <variant name=".MainFrame" summary="main frame"/>
    <variant name=".Subframe" summary="subframe"/>
  </token>
</histogram>

<histogram name="WebController.CertVerificationErrorsCacheHit"
    enum="BooleanCacheHit" expires_after="2027-06-21">
  <owner>gambard@chromium.org</owner>
  <owner>bling-fundamentals@google.com</owner>
  <summary>
    [iOS] Report cache hit/miss for WKWebView cert verification.
    CRWWKNavigationHandler has a cache of pending cert verification results to
    avoid extra verifications when presenting SSL interstitial. This metric
    helps to understand how often this cache miss happens.
  </summary>
</histogram>

<histogram name="WebFont.BlankTextShownTime" units="ms"
    expires_after="2027-01-31">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    A histogram tracking the time we spent showing blank text because a web font
    wasn't available by the time we needed it. Measured once per @font-face that
    ended up showing blank text.
  </summary>
</histogram>

<histogram name="WebFont.CacheHit" enum="WebFontCacheHit"
    expires_after="2027-02-14">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Recorded upon web fonts load. Counts the number of times web font is loaded
    from cache (disk cache or memory cache), fetched over network, or served
    from data URL.
  </summary>
</histogram>

<histogram name="WebFont.Clients.RenderBlockingFonts.ExpiredFonts"
    units="fonts" expires_after="2024-04-28">
  <owner>xiaochengh@chromium.org</owner>
  <owner>chrome-rendering-core@google.com</owner>
  <summary>
    Recorded when render-blocking web font preloads have reached the maximum
    blocking time, and therefore, turned into non-render-blocking. Records the
    number of web font preloads that are still pending. This is a diagnostic
    metric for feature RenderBlockingFonts.
  </summary>
</histogram>

<histogram name="WebFont.DownloadTime.LoadError" units="ms"
    expires_after="2027-01-31">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time taken for a webfont download that failed. Includes aborted
    requests.
  </summary>
</histogram>

<histogram name="WebFont.HadBlankText" enum="BooleanHadBlankText"
    expires_after="2027-01-31">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    This metrics is logged when a page that use web fonts is loaded. The value
    is whether we had to wait on at least one web font and ended up showing
    blank text, or not.
  </summary>
</histogram>

<histogram name="WebFont.LocalFontUsed" enum="BooleanUsage"
    expires_after="2025-09-14">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Whether a locallly installed font is actually used when @font-face had local
    sources.
  </summary>
</histogram>

<histogram name="WebShare.ApiCount" enum="WebShareMethod"
    expires_after="2025-11-30">
  <owner>mgiuca@chromium.org</owner>
  <summary>
    Counts the number of calls to navigator.share. Includes both successful and
    failed shares.
  </summary>
</histogram>

<histogram name="WebShare.SafeBrowsingCheck.Result"
    enum="WebShareSafeBrowsingCheckResult" expires_after="2027-02-07">
  <owner>thefrog@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records the result of the Safe Browsing download check when sharing a file
    via the WebShare API. Logged each time a check completes (safe, unsafe, or
    timeout).
  </summary>
</histogram>

<histogram name="WebShare.ShareOutcome" enum="WebShareOutcome"
    expires_after="2024-12-01">
  <owner>mgiuca@chromium.org</owner>
  <summary>
    Records the outcome of calls to navigator.share. This will not count any
    calls that never complete (e.g., if the page closes while the picker is
    open). Therefore, DO NOT look at the raw percentages of this histogram;
    instead, compare these numbers with the WebShare.ApiCount.Share total.

    NOTE: At the moment, if the user cancels the picker, its recording will be
    delayed, and possibly never recorded (https://crbug.com/636274), so that
    will account for a discrepancy between ShareOutcome and ApiCount.Share.
  </summary>
</histogram>

<histogram name="WebUsb.ChooserClosed" enum="WebUsbChooserClosed"
    expires_after="never">
<!-- expires-never: Used to monitor user interaction with the WebUSB API. -->

  <owner>reillyg@chromium.org</owner>
  <summary>
    Records the reason why the WebUSB device chooser was closed.
  </summary>
</histogram>

<histogram name="WebUsb.ControlTransferBlocked.{Direction}.{Type}"
    enum="UsbInterfaceClass" expires_after="2027-03-20">
  <owner>alvinji@google.com</owner>
  <owner>robpitkin@google.com</owner>
  <owner>reillyg@chromium.org</owner>
  <summary>
    Records the interface class code of a protected interface when a {Direction}
    {Type} control transfer is blocked by DeviceImpl. This helps identify which
    device classes are being targeted by specific control request types.
  </summary>
  <token key="Direction">
    <variant name="Inbound" summary="inbound (device-to-host)"/>
    <variant name="Outbound" summary="outbound (host-to-device)"/>
  </token>
  <token key="Type">
    <variant name="Class" summary="Class"/>
    <variant name="Standard" summary="Standard"/>
    <variant name="Vendor" summary="Vendor"/>
  </token>
</histogram>

<histogram name="WebUsb.ControlTransferPermissionOutcome"
    enum="WebUsbControlTransferPermissionOutcome" expires_after="2027-03-19">
  <owner>alvinji@google.com</owner>
  <owner>robpitkin@google.com</owner>
  <owner>reillyg@chromium.org</owner>
  <summary>
    Records the outcome of the control transfer permission check. This is used
    to measure the impact of the fix for bypassing protected USB class
    restrictions.
  </summary>
</histogram>

<histogram name="WebUsb.DetachKernelDriverOutcome"
    enum="DetachKernelDriverOutcome" expires_after="2026-12-20">
  <owner>ovn@google.com</owner>
  <owner>lt-web-apps-team@google.com</owner>
  <summary>
    Records the outcome of detaching a kernel driver during ClaimInterface (for
    Android and Linux only).
  </summary>
</histogram>

<histogram name="WebUsb.EndpointNotReadyReason"
    enum="WebUsbEndpointNotReadyReason" expires_after="2027-08-01">
  <owner>alvinji@chromium.org</owner>
  <owner>deviceapi-team@google.com</owner>
  <summary>
    Records why an endpoint operation in DeviceImpl failed the endpoint ready
    check (IsEndpointReadyForTransfer).
  </summary>
</histogram>

<histogram name="WebUsb.NotificationClosed" enum="WebUsbNotificationClosed"
    expires_after="never">
<!-- expires-never: Used to monitor user interaction with the WebUSB API. -->

  <owner>reillyg@chromium.org</owner>
  <summary>
    Records the reason why the &quot;WebUSB device detected&quot; notification
    was dismissed.
  </summary>
</histogram>

<histogram name="WebUsb.PermissionRevoked" enum="WebUsbPermissionRevoked"
    expires_after="never">
<!-- expires-never: Used to monitor user interaction with the WebUSB API. -->

  <owner>reillyg@chromium.org</owner>
  <summary>
    Records when the user revokes permission for an origin to connect to a USB
    device using the WebUSB API.
  </summary>
</histogram>

<histogram name="WebUsb.StateChangeBlocked.Context"
    enum="WebUsbStateChangeBlockedContext" expires_after="2027-08-01">
  <owner>alvinji@chromium.org</owner>
  <owner>deviceapi-team@google.com</owner>
  <summary>
    Records the connection context when a WebUSB operation in DeviceImpl is
    blocked because a device or interface state change is in progress.
    Differentiates between state changes initiated by the same device connection
    vs another device connection.
  </summary>
</histogram>

<histogram name="WebUsb.StateChangeBlocked.Method"
    enum="WebUsbStateChangeBlockedMethod" expires_after="2027-08-01">
  <owner>alvinji@chromium.org</owner>
  <owner>deviceapi-team@google.com</owner>
  <summary>
    Records which WebUSB Mojo method was blocked in DeviceImpl because a device
    or interface state change was in progress.
  </summary>
</histogram>

</histograms>

</histogram-configuration>
