<!--
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="AvailabilityProberClient">
  <variant name="IsolatedPrerenderCanaryCheck"
      summary="(M85 only) Canary check for Isolated Prerenders probing">
    <obsolete>
      Removed in M98.
    </obsolete>
  </variant>
  <variant name="IsolatedPrerenderDNSCanaryCheck"
      summary="DNS canary check for Isolated Prerenders probing">
    <obsolete>
      Removed in M98.
    </obsolete>
  </variant>
  <variant name="IsolatedPrerenderOriginCheck"
      summary="Origin check for Isolated Prerenders">
    <obsolete>
      Removed in M98.
    </obsolete>
  </variant>
  <variant name="IsolatedPrerenderTLSCanaryCheck"
      summary="TLS canary check for Isolated Prerenders probing">
    <obsolete>
      Removed in M98.
    </obsolete>
  </variant>
  <variant name="Litepages" summary="Lite page HTTPS Server Previews">
    <obsolete>
      Removed in M84.
    </obsolete>
  </variant>
  <variant name="LitepagesOriginCheck"
      summary="Origin check for Litepage previews">
    <obsolete>
      Removed in M84.
    </obsolete>
  </variant>
</variants>

<variants name="ContextMenuAndroidTypes">
  <variant name="" summary=""/>
  <variant name=".Image"
      summary="The context menu was shown for a (non-link) image."/>
  <variant name=".ImageLink"
      summary="The context menu was shown for an image which is also a link."/>
  <variant name=".Link"
      summary="The context menu was shown for a (non-image) link"/>
  <variant name=".SharedHighlightingInteraction"
      summary="The context menu was shown from tap on highlighted text."/>
  <variant name=".Video" summary="The context menu was shown for a video"/>
</variants>

<variants name="GridTabSwitcherMessageTypes">
  <variant name="PriceAlertsMessageCard"
      summary="the promo message for price notifications"/>
  <variant name="PriceWelcomeMessageCard"
      summary="the message introducing price chips"/>
</variants>

<variants name="HighlightsDetailsPageName">
  <variant name="AdobePage" summary="Highlights app Adobe detail page"/>
  <variant name="BatteryPage" summary="Highlights app Battery detail page"/>
  <variant name="ComparisonPage"
      summary="Highlights app Comparison detail page"/>
  <variant name="DisplayEntertainmentPage"
      summary="Highlights app Display (Entertainment) detail page"/>
  <variant name="DisplayPerformancePage"
      summary="Highlights app Display (Performance) detail page"/>
  <variant name="EntertainmentAppsPage"
      summary="Highlights app Entertainment Apps detail page"/>
  <variant name="GoogleAppsPage"
      summary="Highlights app Google Apps detail page"/>
  <variant name="LumaFusionPage"
      summary="Highlights app LumaFusion detail page"/>
  <variant name="MessagingPage" summary="Highlights app Messaging detail page"/>
  <variant name="MobileGamingPage"
      summary="Highlights app Mobile Gaming detail page"/>
  <variant name="MS365AppsPage"
      summary="Highlights app MS365 Apps detail page"/>
  <variant name="MSOfficePage" summary="Highlights app MSOffice detail page"/>
  <variant name="NearbySharePage"
      summary="Highlights app Nearby Share detail page"/>
  <variant name="OfflineModePage"
      summary="Highlights app Offline Mode detail page"/>
  <variant name="PCConsoleGamingPage"
      summary="Highlights app PC/Console Gaming detail page"/>
  <variant name="PhotosPage" summary="Highlights app Photos detail page"/>
  <variant name="ProcessorPage" summary="Highlights app Processor detail page"/>
  <variant name="StoragePage" summary="Highlights app Storage detail page"/>
  <variant name="SwitchingPage" summary="Highlights app Switching detail page"/>
  <variant name="VideoCallPage"
      summary="Highlights app Video Call detail page"/>
</variants>

<variants name="HighlightsPageName">
  <variant name="AppsPage" summary="Highlights app Apps page"/>
  <variant name="ChromeOSPage" summary="Highlights app ChromeOS page"/>
  <variant name="DisplayPage" summary="Highlights app Display page"/>
  <variant name="EasyPage" summary="Highlights app Easy page"/>
  <variant name="FastPage" summary="Highlights app Fast page"/>
  <variant name="GamePage" summary="Highlights app Game page"/>
  <variant name="GraphicsPage" summary="Highlights app Graphics page"/>
  <variant name="HomePage" summary="Highlights app Home page"/>
  <variant name="KeyboardPage" summary="Highlights app Keyboard page"/>
  <variant name="PerformancePage" summary="Highlights app Performance page"/>
  <variant name="PeripheralsPage" summary="Highlights app Peripherals page"/>
  <variant name="PowerfulPage" summary="Highlights app Powerful page"/>
  <variant name="SecurePage" summary="Highlights app Secure page"/>
</variants>

<variants name="ImportantFileClients">
  <variant name="" summary="Unknown file"/>
  <variant name=".BookmarkStorage" summary="Bookmarks file"/>
  <variant name=".FeedbackReport" summary="Feedback Report file"/>
  <variant name=".Local_State" summary="Local State file"/>
  <variant name=".Preferences" summary="Preferences file"/>
  <variant name=".Secure_Preferences" summary="Secure Preferences file"/>
  <variant name=".StructuredMetricsPersistentProto"
      summary="Structured metrics persistent proto"/>
</variants>

<variants name="InterestGroupRequestType">
  <variant name="BiddingScriptJS" summary="buyer JavaScript bidding script"/>
  <variant name="BiddingScriptWasm" summary="buyer WebAssembly bidding script"/>
  <variant name="DebugLossReport"
      summary="post-auction forDebuggingOnly.reportAdAuctionLoss() report"/>
  <variant name="DebugWinReport"
      summary="post-auction forDebuggingOnly.reportAdAuctionWin() report"/>
  <variant name="DirectFromSellerSignals"
      summary="auction directFromSellerSignals"/>
  <variant name="ScoringScriptJS" summary="seller JavaScript scoring script"/>
  <variant name="SendReportToReport"
      summary="post-auction sendReportTo() report (from either the winning
               bidder or the seller)"/>
  <variant name="TrustedBidding" summary="trusted bidding signals"/>
  <variant name="TrustedScoring" summary="trusted scoring signals"/>
  <variant name="Update" summary="interest group update"/>
</variants>

<variants name="PageImageServiceClientId">
  <variant name="" summary="all requests"/>
  <variant name=".Bookmarks" summary="from Bookmarks"/>
  <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"/>
</variants>

<variants name="VoiceIntentTargetVariant">
  <variant name="Assistant" summary="Assistant voice transcription."/>
  <variant name="System" summary="System voice transcription."/>
</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="DocumentAvailableInMainFrame"/>
  <variant name="DOMContentLoaded"/>
  <variant name="LoadProgressChanged"/>
  <variant name="NavigationEntryChanged"/>
  <variant name="NavigationEntryCommitted"/>
  <variant name="NavigationEntryDeleted"/>
  <variant name="OnVisibilityChanged"/>
  <variant name="PrimaryMainDocumentElementAvailable"/>
  <variant name="RenderFrameCreated"/>
  <variant name="RenderFrameDeleted"/>
  <variant name="RenderViewReady"/>
  <variant name="TitleWasSet"/>
</variants>

<histogram name="AccessCodeCast.Discovery.AddSinkResult.New"
    enum="AccessCodeCastAddSinkResult" expires_after="2024-01-28">
  <owner>bzielinski@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The result of adding a cast sink to the media router sink list via the
    AccessCodeCastSinkService when discovering it using an access code. Recorded
    after the cast sink is added. Logged only on desktop platforms.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Discovery.AddSinkResult.Remembered"
    enum="AccessCodeCastAddSinkResult" expires_after="2023-12-17">
  <owner>bzielinski@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The result of adding a cast sink to the media router sink list via the
    AccessCodeCastSinkService when the device was remembered due to device
    policy. Recorded after the cast sink is added. Logged only on desktop
    platforms.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Discovery.CastModeOnSuccess"
    enum="AccessCodeCastCastMode" expires_after="2023-11-12">
  <owner>bzielinski@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The selected cast mode when a cast session is successfully started
    (ResultCode::OK) after a user enters an access code. Logged only on desktop
    platforms.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Discovery.DeviceDurationOnRoute"
    units="seconds" expires_after="2024-01-28">
  <owner>bzielinski@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The duration in seconds an access code device will stay in the list of cast
    devices. Recorded on successful creation of a cast session to an access code
    device. Logged only on desktop platforms.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Discovery.RememberedDevicesCount"
    units="cast devices" expires_after="2024-03-17">
  <owner>bzielinski@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The count of cast devices which have been successfully remembered via the
    access code cast sink service. Recorded when the browser starts, and any
    time the network changes. Logged only on desktop platforms.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Session.FreezeCount" units="instances"
    expires_after="2024-02-04">
  <owner>bzielinski@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The count of times that a local cast mirroring session is frozen, or paused,
    during its duration. Recorded at the end of a cast mirroring session. Logged
    only on desktop platforms.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Session.FreezeDuration" units="ms"
    expires_after="2024-03-03">
  <owner>bzielinski@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The amount of time in milliseconds that a local cast mirroring session is
    frozen, or paused, until it is resumed or ended. Recorded when the session
    is resumed, or when the session ends. Logged only on desktop platforms.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Session.NewDeviceRouteCreationDuration"
    units="ms" expires_after="2024-03-03">
  <owner>bzielinski@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The amount of time in milliseconds that it takes to connect to a new device.
    It is the combination of connecting to our server, validating the access
    code, constructing a cast device, opening a channel to that device, and then
    waiting for success. It is only recorded if the request was successful; not
    recorded for non-local routes. Logged only on desktop platforms.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Session.RouteDiscoveryTypeAndSource"
    enum="AccessCodeCastDiscoveryTypeAndSource" expires_after="2024-01-28">
  <owner>bzielinski@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The discovery type of the associated sink and the cast media source for an
    access code route. Recorded when at the start of a local access code route.
    Logged only on desktop platforms.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Session.RouteDuration" units="ms"
    expires_after="2024-01-28">
  <owner>bzielinski@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The amount of time in milliseconds that a route to an access code device
    lasts. Recorded at the end of a local access code route; not recorded for
    non-local routes. Logged only on desktop platforms.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Session.SavedDeviceRouteCreationDuration"
    units="ms" expires_after="2024-03-17">
  <owner>bzielinski@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The amount of time in milliseconds that it takes to connect to a saved
    device. It is a combination of the time to request a mirroring route +
    waiting for a success. It is only recorded if the request was successful;
    not recorded for non-local routes. Logged only on desktop platforms.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Ui.AccessCodeInputTime" units="ms"
    expires_after="2023-11-12">
  <owner>bzielinski@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The amount of time in milliseconds for the user to input an access code
    after the UI is enabled for a cast attempt. Recorded when the user presses
    enter or the submit button after typing an access code. Logged only on
    desktop platforms.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Ui.AccessCodeNotFoundCount" units="instances"
    expires_after="2024-03-17">
  <owner>bzielinski@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The count of ACCESS_CODE_NOT_FOUND errors received while the
    AccessCodeCastDialog is open, correlating to the number of times a user
    typed an incorrect access code. Recorded after the dialog is closed. Logged
    only on desktop platforms.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Ui.CastAttemptLength" units="ms"
    expires_after="2024-01-28">
  <owner>bzielinski@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The amount of time in milliseconds that the dialog is loading while
    attempting to cast to a new device via access code. Recorded after a cast
    attempt completes, and does not depend on whether the attempt was successful
    or ended in error. Logged only on desktop platforms.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Ui.DialogCloseReason"
    enum="AccessCodeCastDialogCloseReason" expires_after="2024-01-28">
  <owner>bzielinski@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The reason why the Access Code Cast dialog closed. Recorded when the Access
    Code Cast dialog closes. Logged only on desktop platforms.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Ui.DialogLoadTime" units="ms"
    expires_after="2024-01-28">
  <owner>bzielinski@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The length of time for the AccessCodeCast dialog to finish loading after
    instantiation. Recorded after the UI creates a page handler object. Logged
    only on desktop platforms.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Ui.DialogOpenLocation"
    enum="AccessCodeCastDialogOpenLocation" expires_after="2024-01-28">
  <owner>bzielinski@google.com</owner>
  <owner>cros-edu-eng@google.com</owner>
  <summary>
    The location from which the AccessCodeCast dialog is opened. Recorded after
    the dialog opens. Only logged on desktop platforms.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Ui.TabSwitcherUsageType"
    enum="AccessCodeCastUiTabSwitcherUsage" expires_after="2024-02-25">
  <owner>ahmedmoussa@google.com</owner>
  <owner>takumif@chromium.org</owner>
  <owner>openscreen-eng@google.com</owner>
  <summary>
    This metric is recorded once per AccessCodeCast tab mirroring session. It
    records the number of times the tab switcher UI was shown and not used,
    compared to the number of times it was shown and actually used to switch
    tabs. This would make it possible to compute the % of users who cast a tab
    who then switch which tab is being cast. Recorded once at the end of a tab
    mirroring casting session.
  </summary>
</histogram>

<histogram name="AccessCodeCast.Ui.TabSwitchingCount" units="count"
    expires_after="2024-02-25">
  <owner>ahmedmoussa@google.com</owner>
  <owner>takumif@chromium.org</owner>
  <owner>openscreen-eng@google.com</owner>
  <summary>
    This metric is recorded once per AccessCodeCast tab mirroring session. It
    records the number of times the tab switcher UI was used to switch the
    source tab.
  </summary>
</histogram>

<histogram name="ActivityTracker.Collect.InitStatus"
    enum="ActivityTrackerCollectInitStatus" expires_after="M90">
  <owner>siggi@chromium.org</owner>
  <summary>
    Status of the initialization to collect stability debug files. Logged once,
    during the initialization of the stability debug file collection.
  </summary>
</histogram>

<histogram name="ActivityTracker.Collect.StabilityFileCount" units="count"
    expires_after="M90">
  <owner>siggi@chromium.org</owner>
  <summary>
    Number of files found during stability file collection. Logged each time the
    stability file collection proceeds (at most once per launch).
  </summary>
</histogram>

<histogram name="ActivityTracker.Collect.Status"
    enum="ActivityTrackerCollectStatus" expires_after="M90">
  <owner>siggi@chromium.org</owner>
  <summary>
    Status for the collection of a stability debug file. Logged each time a
    debug file collection attempt is made.
  </summary>
</histogram>

<histogram name="ActivityTracker.Collect.SystemSessionAnalysisStatus"
    enum="ActivityTrackerSystemSessionAnalysisStatus" expires_after="M90">
  <owner>siggi@chromium.org</owner>
  <summary>
    Status for the analysis of the system session state. Logged each time a
    debug file is collected.
  </summary>
</histogram>

<histogram name="ActivityTracker.Collect.TotalTime" units="ms"
    expires_after="M90">
  <owner>siggi@chromium.org</owner>
  <summary>
    Time spent collecting stability debug information. Logged each time a
    collection is performed.
  </summary>
</histogram>

<histogram name="ActivityTracker.Collect.WriteDumpStatus"
    enum="ActivityTrackerWriteDumpStatus" expires_after="M90">
  <owner>siggi@chromium.org</owner>
  <summary>
    Status of the minidump writing. Logged each time a writing a minidump is
    attempted.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.BidFiltered" enum="Boolean"
    expires_after="2024-06-20">
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    True if the trusted bidding signals specified a per-interest-group
    priorityVector whose sparse dot product with the browser generated
    prioritySignals was negative, indicating the generateBid() should not be
    invoked.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.ContextReused" enum="Boolean"
    expires_after="2024-06-20">
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    True if the browser can reuse an existing context when calling generateBid()
    whose corresponding interest group has the executionMode set to
    group-by-origin.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.DirectFromSellerSignals.RequestType"
    enum="DirectFromSellerSignalsRequestType" expires_after="2024-06-20">
  <owner>caraitto@chromium.org</owner>
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    For each request made for a DirectFromSellerSignals bundle subresource,
    records whether the request was made to the network service, or whether the
    request was elided due to either loading from the
    DirectFromSellerSignalsRequester cache, or coalescing with an exiting
    request for the same subresource URL.

    Reported at each DirectFromSellerSignalsRequester request.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.FinalReporterState"
    enum="InterestGroupAuctionReporterState" expires_after="2024-06-20">
  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <summary>
    The final state of the InterestGroupAuctionReporter when it's destroyed.
    Currently the lifetime of an InterestGroupAuctionReporter is scoped to the
    frame that runs an auction, so when that frame is destroyed, any work the
    Reporter has yet to do is aborted. This histogram serves to indicate how far
    along a destroyed Reporter is, to help understand the priority of extending
    an InterestGroupAuctionReporter's lifetime beyond that of the source frame.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.First6AuctionsBitsPerPage"
    units="bitfield" expires_after="2024-06-20">
  <owner>caraitto@chromium.org</owner>
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    The outcome of the first 6 auctions reported as bits, tracked per-page,
    reported at page unload (if at least 1 auction completed). A 1 indicates
    auction success, 0 indicates auction failure. The most significant bit
    corresponds to the least recent auction. An extra leading 1 is prepended --
    this allows reporting metrics when fewer than 6 auctions occurred during the
    page's lifetime. Therefore, the max value is 0b1111111 (7 bits, represents 6
    successful auctions), and the min value is 0b10 (represents a page that had
    1 failed auction), and every value in between is valid. Not updated for
    auctions skipped due to enforcing the auction limit, see
    NumAuctionsSkippedDueToAuctionLimit. Also, not updated if runAdAuction()
    fails before the auction worklets run.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.GenerateBidTime" units="ms"
    expires_after="2024-06-20">
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    The length of time it took to initialize the context and arguments, and
    evaluate generateBid() once.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.GroupFreshness.{Type}"
    units="minutes" expires_after="2024-06-20">
  <owner>caraitto@chromium.org</owner>
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    For every interest group that participates in an auction, the time duration
    since the last join or update of that interest group.

    This metric only measures {Type}.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
  <token key="Type">
    <variant name="NoDailyUpdates"
        summary="interest groups that don't specify a dailyUpdateUrl"/>
    <variant name="WithDailyUpdates"
        summary="interest groups that specify a dailyUpdateUrl"/>
  </token>
</histogram>

<histogram name="Ads.InterestGroup.Auction.LoadGroupsTime" units="ms"
    expires_after="2024-06-20">
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    The length of time it took to start a FLEDGE auction and complete loading
    the interest groups that should participate in the auction; only recorded
    when at least one interest group was loaded.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.LoadNoGroupsTime" units="ms"
    expires_after="2024-06-20">
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    The length of time it took to start a FLEDGE auction and complete loading
    the interest groups that should participate in the auction; only recorded
    when no interest groups were loaded.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.NumAuctionsPerPage" units="auctions"
    expires_after="2024-06-20">
  <owner>caraitto@chromium.org</owner>
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    The number of auctions (runAdAuction() calls) per-page, from page load to
    unload, reported at unload (if at least 1 auction completed). Not updated
    for auctions skipped due to enforcing the auction limit, see
    NumAuctionsSkippedDueToAuctionLimit. Also, not updated if runAdAuction()
    fails before the auction worklets run.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.NumAuctionsSkippedDueToAuctionLimit"
    units="auctions" expires_after="2024-06-20">
  <owner>caraitto@chromium.org</owner>
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    The number of auctions (runAdAuction() calls) per-page, from page load to
    unload, reported at unload (if at least 1 auction completed) that were
    skipped due to hitting the auction limit.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.NumInterestGroups" units="groups"
    expires_after="2024-06-20">
  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <summary>
    The number of a user's interest groups taking part in a FLEDGE auction. This
    is the number of interest groups matching the auction configuration, not the
    number whose scripts are successfully loaded or that make bids. Recorded
    after all matching interest groups have been retrieved from storage at the
    start of an auction.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.NumOwnersWithInterestGroups"
    units="owners" expires_after="2024-06-20">
  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <summary>
    The number of owner origins with interest groups taking part in a FLEDGE
    auction. This is not the number of owners listed by the auction's
    configuration, but rather only the subset of them that have interest groups
    the user currently belongs to. Recorded after all interest groups
    participating in an auction have been retrieved from storage at the start of
    an auction.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.NumSellersWithBidders"
    units="sellers" expires_after="2024-06-20">
  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <summary>
    The number of sellers participating in a FLEDGE auction with a non-zero
    number of bidders, including both the top-level seller and sellers in
    component auctions. A bidder is defined as an interest group owned by one of
    the owners participating in an auction, or, for the top-level auction, a
    component auction with such interest groups. Double-counts sellers that
    participate in multiple component auctions. Only recorded if an auction has
    at least one interest group participating (could be in the top-level
    auction, or in any component auction).

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.ParseBaServerResponseDuration"
    units="ms" expires_after="2024-03-10">
  <owner>behamilton@google.com</owner>
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    The length of time it took to decrypt, decompress, and parse a the Response
    from a FLEDGE server-based auction (using the Bidding and Auction API). Only
    the times for responses that are successful decoded are recorded.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.PercentAuctionsSuccessfulPerPage"
    units="%" expires_after="2024-06-20">
  <owner>caraitto@chromium.org</owner>
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    The percentage of auctions (runAdAuction() calls) per-page that succeed,
    from page load to unload, reported at unload (if at least 1 auction
    completed), rounded down to the nearest percent. Not updated for auctions
    skipped due to enforcing the auction limit, see
    NumAuctionsSkippedDueToAuctionLimit. Also, not updated if runAdAuction()
    fails before the auction worklets run.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.ProcessLaunchTime" units="ms"
    expires_after="2024-06-20">
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    The length of time it took to launch a process to execute FLEDGE worklets.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.ScoreAdTime" units="ms"
    expires_after="2024-06-20">
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    The length of time it took to initialize the context and arguments, and
    evaluate scoreAd() once.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.Auction.TimeSinceLastAuctionPerPage"
    units="ms" expires_after="2024-06-20">
  <owner>caraitto@chromium.org</owner>
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    The duration between runAdAuction() calls, collected on a per-page basis,
    reported on each auction. Not updated for auctions skipped due to enforcing
    the auction limit, see NumAuctionsSkippedDueToAuctionLimit. Also, not
    updated if runAdAuction() fails before the auction worklets run.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.BaDataConstructionTime" units="ms"
    expires_after="2024-03-03">
  <owner>behamilton@google.com</owner>
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    The amount of time spent constructing the Bidding and Auction data blob
    produced in response to the getInterestGroupAdAuctionData() call to the
    Bidding and Auction API. This time includes loading interest groups from the
    database, fetching the Bidding and Auction server key (if not cached),
    serializing and compressing the interest group data and encryting the
    message.

    Only the times for blobs that are constructed successfully are recorded.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.BaDataSize" units="bytes"
    expires_after="2024-03-03">
  <owner>behamilton@google.com</owner>
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    The unencrypted size of Bidding and Auction data blob produced in response
    to the getInterestGroupAdAuctionData() call to the Bidding and Auction API.

    Only the sizes of blobs that are constructed successfully are recorded.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.EnumNaming.{When}.{Type}"
    enum="BooleanDeprecatedJSEnumName" expires_after="2024-06-20">
  <owner>caraitto@chromium.org</owner>
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    For each time a JavaScript enum of {Type} is provided during {When}, records
    whether or not the enum was in the deprecated &quot;camelCase&quot; form.
    (The correct form is the &quot;words-separated-by-dashes&quot; form).
    Unknown enum values are ignored and not reported.

    Reported at each enum usage during {When}.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
  <token key="When">
    <variant name="Renderer" summary="a FLEDGE API call in the renderer"/>
    <variant name="Update" summary="an interest group update"/>
  </token>
  <token key="Type">
    <variant name="SellerCapabilities" summary="SellerCapabilities"/>
    <variant name="WorkletExecutionMode" summary="WorkletExecutionMode"/>
  </token>
</histogram>

<histogram name="Ads.InterestGroup.Net.DownloadTime.{Type}" units="ms"
    expires_after="2024-06-20">
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    Time required to download {Type} requests, reported upon receving a
    response.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
  <token key="Type" variants="InterestGroupRequestType"/>
</histogram>

<histogram name="Ads.InterestGroup.Net.RequestUrlSizeBytes.{Type}"
    units="bytes" expires_after="2024-06-20">
  <owner>caraitto@chromium.org</owner>
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    The number of bytes sent for {Type} requests, reported upon each request.
    This is just the size of the request URL; it doesn't include the size of the
    HTTP headers or the word &quot;GET&quot;.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
  <token key="Type" variants="InterestGroupRequestType"/>
</histogram>

<histogram name="Ads.InterestGroup.Net.ResponseSizeBytes.{Type}" units="bytes"
    expires_after="2024-06-20">
  <owner>caraitto@chromium.org</owner>
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    The number of bytes received for {Type} requests, reported upon receving a
    response.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
  <token key="Type" variants="InterestGroupRequestType"/>
</histogram>

<histogram
    name="Ads.InterestGroup.NetHeaderResponse.HeaderDirectFromSellerSignals.ParseAndFindMatchTime"
    units="ms" expires_after="2024-06-20">
  <owner>caraitto@chromium.org</owner>
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    Time required to find a matching directFromSignalsSignalsHeaderAdSlot,
    reported upon completion of the search.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.ReceivedDeprecatedBiddingSignalsFormat"
    enum="Boolean" expires_after="2024-06-20">
  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    True if the trustedBiddingSignals fetched for use in a FLEDGE auction was
    received in the deprecated format. Recorded whenever there's a network fetch
    for trustedBiddingSignals, and they're successfully decoded.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.ServerAuction.EndToEndTime" units="ms"
    expires_after="M121">
  <owner>behamilton@google.com</owner>
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    The length of time it took to run a Bidding and Auction Services auction.
    This includes all of the time from the call to
    `navigator.getInterestGroupAdAuctionData()` to the completion of the
    `navigator.runAdAuction()` call. This metric is only recorded if there was a
    winning bid.

    See
    https://github.com/WICG/turtledove/blob/main/FLEDGE_browser_bidding_and_auction_API.md
    for the latest version of the Protected Audience Bidding &amp; Auction
    Services explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.ServerAuction.EndToEndTimeNoWinner"
    units="ms" expires_after="M121">
  <owner>behamilton@google.com</owner>
  <owner>pauljensen@chromium.org</owner>
  <owner>privacy-sandbox-dev@chromium.org</owner>
  <summary>
    The length of time it took to run a Bidding and Auction Services auction.
    This includes all of the time from the call to
    `navigator.getInterestGroupAdAuctionData()` to the completion of the
    `navigator.runAdAuction()` call. This metric is only recorded if there was
    *no* winning bid.

    See
    https://github.com/WICG/turtledove/blob/main/FLEDGE_browser_bidding_and_auction_API.md
    for the latest version of the Protected Audience Bidding &amp; Auction
    Services explainer.
  </summary>
</histogram>

<histogram name="Ads.InterestGroup.{AuctionType}.AbortTime" units="ms"
    expires_after="2024-06-20">
  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <summary>
    The length of time it took to run a {AuctionType} auction that was aborted.
    This only happens on frame destruction. Recorded when the frame is
    destroyed.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
  <token key="AuctionType">
    <variant name="Auction" summary="FLEDGE"/>
    <variant name="ServerAuction" summary="Bidding and Auction Services">
      <owner>behamilton@google.com</owner>
      <owner>pauljensen@chromium.org</owner>
      <owner>privacy-sandbox-dev@chromium.org</owner>
    </variant>
  </token>
</histogram>

<histogram name="Ads.InterestGroup.{AuctionType}.AuctionWithWinnerTime"
    units="ms" expires_after="2024-06-20">
  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <summary>
    The length of time it took to run a {AuctionType} auction that had a winning
    bid. Recorded on auction complete.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
  <token key="AuctionType">
    <variant name="Auction" summary="FLEDGE"/>
    <variant name="ServerAuction" summary="Bidding and Auction Services">
      <owner>behamilton@google.com</owner>
      <owner>pauljensen@chromium.org</owner>
      <owner>privacy-sandbox-dev@chromium.org</owner>
    </variant>
  </token>
</histogram>

<histogram name="Ads.InterestGroup.{AuctionType}.CompletedWithoutWinnerTime"
    units="ms" expires_after="2024-06-20">
  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <summary>
    The length of time it took to run a {AuctionType} auction that completed
    successfully without a winner either due to no bidders making a bid, or the
    seller script rejecting all bidders. Not recoded when there are no bidders,
    or when an auction fails due to the seller worklet failing to load. Recorded
    on auction complete.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
  <token key="AuctionType">
    <variant name="Auction" summary="FLEDGE"/>
    <variant name="ServerAuction" summary="Bidding and Auction Services">
      <owner>behamilton@google.com</owner>
      <owner>pauljensen@chromium.org</owner>
      <owner>privacy-sandbox-dev@chromium.org</owner>
    </variant>
  </token>
</histogram>

<histogram name="Ads.InterestGroup.{AuctionType}.NonKAnonWinnerIsKAnon"
    enum="Boolean" expires_after="2024-06-20">
  <owner>behamilton@google.com</owner>
  <owner>morlovich@chromium.org</owner>
  <summary>
    Recorded at the end of a {AuctionType} auction when there is a
    non-k-anonymous winner. True when the non-k-anonymous winner is k-anonymous.
  </summary>
  <token key="AuctionType">
    <variant name="Auction" summary="FLEDGE"/>
    <variant name="ServerAuction" summary="Bidding and Auction Services">
      <owner>behamilton@google.com</owner>
      <owner>pauljensen@chromium.org</owner>
      <owner>privacy-sandbox-dev@chromium.org</owner>
    </variant>
  </token>
</histogram>

<histogram name="Ads.InterestGroup.{AuctionType}.Result" enum="AuctionResult"
    expires_after="2024-06-20">
  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <summary>
    The final result type of running a {AuctionType} auction. Recorded on
    auction completion/cancellation.

    See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest
    version of the FLEDGE explainer.
  </summary>
  <token key="AuctionType">
    <variant name="Auction" summary="FLEDGE"/>
    <variant name="ServerAuction" summary="Bidding and Auction Services">
      <owner>behamilton@google.com</owner>
      <owner>pauljensen@chromium.org</owner>
      <owner>privacy-sandbox-dev@chromium.org</owner>
    </variant>
  </token>
</histogram>

<histogram name="Ads.Media.Duration" units="ms" expires_after="2022-10-30">
  <obsolete>
    Expired and removed 10/2022.
  </obsolete>
  <owner>johnidel@chromium.org</owner>
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Duration in milliseconds of HTML5 media (when known). Only recorded for
    media within ad subframes. This is recorded every time the duration changes
    for a video, and can be recorded multiple times for a single video (the
    overall duration may not be known when loading starts). Because the duration
    will generally increase as more video gets buffered, this histogram may skew
    low.
  </summary>
</histogram>

<histogram name="Ads.Media.LoadType" enum="MediaLoadType"
    expires_after="2021-08-09">
  <owner>johnidel@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Load type of HTML5 media in ad subframes such as URL, MediaSource and
    MediaStream.
  </summary>
</histogram>

<histogram base="true" name="Ads.ResourceUsage.Size.Cache2" units="KB"
    expires_after="2020-10-02">
  <obsolete>
    Removed 11/2020.
  </obsolete>
  <owner>johnidel@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    For a given resource fetched from the disk cache or blink memory cache, logs
    the encoded body length of the resource, even if the resource request was
    canceled or incomplete. Recorded when the resource request is complete, or
    when the page is destroyed/navigated for incomplete resources. The sum of
    samples across a page load may differ substatially from the true sum due to
    per-sample rounding. These are not intended to be compared to page level
    histograms.
  </summary>
</histogram>

<histogram name="AnchorElementMetrics.Clicked.OnDSE.SameHost"
    enum="BooleanAnchorElementSameHost" expires_after="2021-08-09">
  <obsolete>
    Removed 04/2020.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <summary>
    True if the target link of the anchor element has the same host as the root
    document. Recorded only on default search engine pages.
  </summary>
</histogram>

<histogram name="AnchorElementMetrics.Clicked.OnNonDSE.SameHost"
    enum="BooleanAnchorElementSameHost" expires_after="2021-08-22">
  <obsolete>
    Removed 04/2020.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <owner>src/chrome/browser/navigation_predictor/OWNERS</owner>
  <summary>
    True if the target link of the anchor element has the same host as the root
    document. Recorded only on pages whose URL do not match the default search
    engine.
  </summary>
</histogram>

<histogram base="true" name="AnchorElementMetrics.IsSameHost" enum="Boolean"
    expires_after="2021-05-21">
  <obsolete>
    Removed 04/2020.
  </obsolete>
  <owner>chelu@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    True if the target link of the anchor element has the same host as the root
    document.
  </summary>
</histogram>

<histogram name="AnchorElementMetrics.Visible.NumberOfAnchorElementsAfterMerge"
    units="count" expires_after="2021-04-26">
  <obsolete>
    Removed 04/2020.
  </obsolete>
  <owner>chelu@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    The number of anchor element metrics sent to the browser process on a page
    load. Anchor elements having the same href are merged and counted as 1. This
    histogram is recorded when the webpage is loaded.
  </summary>
</histogram>

<histogram name="AnimatedImage.NumOfFramesSkipped" units="count"
    expires_after="2023-04-24">
  <owner>khushalsagar@chromium.org</owner>
  <owner>graphics-dev@chromium.org</owner>
  <summary>
    If the frame rate for the image animation can not be reached, frames in the
    animation are skipped to catch up to the desired frame. This metric tracks
    the number of frames skipped during catch up, and can be used to assess the
    smoothness of these animations. It records the number of frames skipped each
    time the animation is ticked forward to draw the next frame. In the ideal
    case, where the animation can be drawn at the desired rate, 0 frames should
    be skipped. Note that skipping of frames can also be triggered if the
    animation was intentionally paused (on becoming off-screen, or the tab being
    hidden).

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

<histogram
    name="Animation.AnimationWorklet.Dispatcher.AsynchronousMutateDuration"
    units="microseconds" expires_after="2021-01-01">
  <owner>majidvp@chromium.org</owner>
  <owner>animations-dev@chromium.org</owner>
  <summary>
    The time it takes the WorkletMutatorDispatcher to complete an asynchronous
    mutation request of animation worklet. The measured time is the total
    elapsed time from when a request is queued until the results are received.

    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="Animation.AnimationWorklet.Dispatcher.SynchronousMutateDuration"
    units="microseconds" expires_after="2021-01-01">
  <owner>majidvp@chromium.org</owner>
  <owner>animations-dev@chromium.org</owner>
  <summary>
    The time it takes the WorkletMutatorDispatcher to dispatch to and mutate all
    animation worklet mutators synchronously. This includes the time that it
    takes each AnimationWorkletGlobalScope to produce its output (which includes
    V8 script execution) and also any queuing cost associated with posting
    mutation tasks and receiving responses.

    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="AsyncDNS.ConfigChange" enum="BooleanSuccess"
    expires_after="M77">
  <obsolete>
    Removed 2021-01.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <owner>mef@chromium.org</owner>
  <summary>
    Whether DnsConfigService::OnConfigChange actually corresponded to a change
    in DnsConfig.
  </summary>
</histogram>

<histogram name="AsyncDNS.ConfigNotifyInterval" units="ms" expires_after="M77">
  <obsolete>
    Removed 2021-01.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <owner>mef@chromium.org</owner>
  <summary>
    Duration of time between calls to DnsConfigService::InvalidateConfig.
  </summary>
</histogram>

<histogram name="AsyncDNS.ConfigParseDuration" units="ms" expires_after="M81">
  <obsolete>
    Removed 2021-01.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <owner>mef@chromium.org</owner>
  <summary>Duration of time spent parsing DnsConfig.</summary>
</histogram>

<histogram name="AsyncDNS.ConfigParsePosix" enum="AsyncDNSConfigParsePosix"
    expires_after="M77">
  <obsolete>
    Removed 2021-01.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <owner>mef@chromium.org</owner>
  <summary>
    Counts of results of parsing DnsConfig in DnsConfigServicePosix.
  </summary>
</histogram>

<histogram name="AsyncDNS.ConfigParseWin" enum="AsyncDNSConfigParseWin"
    expires_after="M77">
  <obsolete>
    Removed 2021-01.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <owner>mef@chromium.org</owner>
  <summary>
    Counts of results of parsing DnsConfig in DnsConfigServiceWin.
  </summary>
</histogram>

<histogram name="AsyncDNS.HostParseResult" enum="BooleanSuccess"
    expires_after="M77">
  <obsolete>
    Removed 2021-01.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <owner>mef@chromium.org</owner>
  <summary>Whether DnsHosts were parsed successfully.</summary>
</histogram>

<histogram name="AsyncDNS.HostsChange" enum="BooleanSuccess"
    expires_after="M77">
  <obsolete>
    Removed 2021-01.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <owner>mef@chromium.org</owner>
  <summary>
    Whether DnsConfigService::OnHostsChange actually corresponded to a change in
    DnsHosts.
  </summary>
</histogram>

<histogram name="AsyncDNS.HostsNotifyInterval" units="ms" expires_after="M77">
  <obsolete>
    Removed 2021-01.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <owner>mef@chromium.org</owner>
  <summary>
    Duration of time between calls to DnsConfigService::InvalidateHosts.
  </summary>
</histogram>

<histogram name="AsyncDNS.HostsParseDuration" units="ms" expires_after="M77">
  <obsolete>
    Removed 2021-01.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <owner>mef@chromium.org</owner>
  <summary>Duration of time spent parsing DnsHosts.</summary>
</histogram>

<histogram name="AsyncDNS.HostsParseWin" enum="AsyncDNSHostsParseWin"
    expires_after="M77">
  <obsolete>
    Removed 2021-01.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <owner>mef@chromium.org</owner>
  <summary>
    Counts of results of parsing DnsHosts in DnsConfigServiceWin.
  </summary>
</histogram>

<histogram name="AsyncDNS.ServerCount" units="units" expires_after="2021-03-21">
  <obsolete>
    Removed 2021-01.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <owner>mef@chromium.org</owner>
  <summary>
    Count of servers in DnsConfig. Recorded on every new DnsSession, which is
    created on DNS change.
  </summary>
</histogram>

<histogram name="AsyncDNS.UnchangedConfigInterval" units="ms"
    expires_after="M77">
  <obsolete>
    Removed 2021-01.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <owner>mef@chromium.org</owner>
  <summary>
    Duration of time since the last empty config result to the time a non-change
    OnConfigChange is received.
  </summary>
</histogram>

<histogram name="AsyncDNS.UnchangedHostsInterval" units="ms"
    expires_after="2021-01-31">
  <obsolete>
    Removed 2021-01.
  </obsolete>
  <owner>ericorth@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    Duration of time since the last empty config result to the time a non-change
    OnHostsChange is received.
  </summary>
</histogram>

<histogram name="AsyncDNS.WatchStatus" enum="AsyncDNSWatchStatus"
    expires_after="2021-01-31">
  <obsolete>
    Removed 2021-01.
  </obsolete>
  <owner>ericorth@chromium.org</owner>
  <owner>src/net/OWNERS</owner>
  <summary>
    The result of DnsConfigService watch. Counts STARTED on every initialization
    and FAILED_* on any failure.
  </summary>
</histogram>

<histogram name="Aura.CreatedGpuBrowserCompositor" enum="CompositorType"
    expires_after="2020-04-05">
  <owner>jbauman@chromium.org</owner>
  <summary>
    Whether the browser compositor uses GPU or the software renderer.
  </summary>
</histogram>

<histogram name="AutocompleteActionPredictor.AccurateCount" units="units"
    expires_after="M85">
  <obsolete>
    Removed in M97 as it was expired and it was not not updated on omnibox
    reverts, which led to incorrect counts.
    AutocompleteActionPredictor.NoStatePrefetchStatus is the new alternative.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Every time we calculate the confidence for a URL to determine if it should
    be prerendered, we track the URL and confidence calculated. When an Omnibox
    navigation happens, if we calculated a confidence for that URL, a count is
    incremented for the confidence that was calculated. This histogram is then a
    histogram of counts that relates the number of correctly predicted URLs to a
    confidence value. By comparing that number to the
    AutocompleteActionPredictor.NavigationCount and
    Prerender.OmniboxNavigationsUsedPrerenderCount histograms, it's possible to
    determine the effect of changing the confidence threshold on the accuracy of
    prerendering prediction.
  </summary>
</histogram>

<histogram name="AutocompleteActionPredictor.DatabaseAction"
    enum="AutocompleteActionPredictorDatabaseAction" expires_after="2022-11-13">
  <owner>tbansal@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Trackes the number of times something is added, removed, or deleted from the
    AutocompleteActionPredictor backing database.
  </summary>
</histogram>

<histogram name="AutocompleteActionPredictor.MatchIsInDb" units="units"
    expires_after="2022-11-13">
  <owner>tbansal@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    A boolean that indicates if the autocomplete suggestion under consideration
    by the AutocompleteActionPredictor was found in the database. This gives an
    upper bound on the fraction of suggestions it is possible to calculate a
    confidence for, and thus an upper bound on the fraction of suggestions that
    can be prerendered.
  </summary>
</histogram>

<histogram name="AutocompleteActionPredictor.NavigationCount" units="units"
    expires_after="M85">
  <owner>tbansal@chromium.org</owner>
  <summary>
    The number of navigations triggered by the Omnibox and seen by the
    AutocompleteActionPredictor. This triggers when the Omnibox is showing
    Autocomplete results to the user and they select one with the mouse or by
    pressing enter.
  </summary>
</histogram>

<histogram name="AutocompleteActionPredictor.NoStatePrefetchStatus"
    enum="AutocompleteActionPredictorPredictionStatus"
    expires_after="2024-02-25">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <summary>
    Records the status of no state prefetches started by the omnibox action
    predictor. In particular, this records whether they were used or not.
  </summary>
</histogram>

<histogram name="AutocompleteActionPredictor.PrerenderStatus"
    enum="AutocompleteActionPredictorPredictionStatus"
    expires_after="2022-08-07">
  <obsolete>
    Removed in M101. Use Prerender.Experimental.PredictionStatus.DirectUrlInput
    instead.
  </obsolete>
  <owner>asamidoi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Records the status of prerender started by the omnibox action predictor. In
    particular, this records whether they were used or not.
  </summary>
</histogram>

<histogram base="true"
    name="Availability.Prober.CacheEntryAge.{AvailabilityProberClient}"
    units="hours" expires_after="M95">
  <obsolete>
    Removed in M98. The corresponding histogram for canary checks is
    PrefetchProxy.CanaryChecker.CacheEntryAge.
  </obsolete>
  <owner>robertogden@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    How old a cached probe result was when it was used, in hours.
  </summary>
  <token key="AvailabilityProberClient" variants="AvailabilityProberClient"/>
</histogram>

<histogram base="true"
    name="Availability.Prober.DidSucceed.AfterReportedFailure.{AvailabilityProberClient}"
    enum="BooleanSuccess" expires_after="M95">
  <obsolete>
    Removed in M98.
  </obsolete>
  <owner>robertogden@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the completion status of a probe retry after an externally reported
    failure.
  </summary>
  <token key="AvailabilityProberClient" variants="AvailabilityProberClient"/>
</histogram>

<histogram base="true"
    name="Availability.Prober.DidSucceed.{AvailabilityProberClient}"
    enum="BooleanSuccess" expires_after="M95">
  <obsolete>
    Removed in M98.
  </obsolete>
  <owner>robertogden@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the completion status of a probe when it completes each attempt.
  </summary>
  <token key="AvailabilityProberClient" variants="AvailabilityProberClient"/>
</histogram>

<histogram base="true"
    name="Availability.Prober.FinalState.{AvailabilityProberClient}"
    enum="BooleanSuccess" expires_after="M95">
  <obsolete>
    Removed in M98. The corresponding histogram for canary checks is
    PrefetchProxy.CanaryChecker.FinalState.
  </obsolete>
  <owner>robertogden@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the end state of a probe just before it goes inactive. This happens
    when the prober succeeds, fails and has no more retries, or the delegate
    stops probing.
  </summary>
  <token key="AvailabilityProberClient" variants="AvailabilityProberClient"/>
</histogram>

<histogram base="true"
    name="Availability.Prober.GenerateCacheKey.{AvailabilityProberClient}"
    units="ms" expires_after="M99">
  <obsolete>
    Removed in M98. The corresponding histogram for canary checks is
    PrefetchProxy.CanaryChecker.GenerateCacheKey.
  </obsolete>
  <owner>spelchat@chromium.org</owner>
  <owner>curranmax@chromium.org</owner>
  <summary>
    Records the amount of time spent generating a cache key for the availability
    prober. In particular, this tracks how much getNetworkOperator calls might
    be slowing down this method. See crbug.com/1266018 for more details.
  </summary>
  <token key="AvailabilityProberClient" variants="AvailabilityProberClient"/>
</histogram>

<histogram base="true"
    name="Availability.Prober.NetError.{AvailabilityProberClient}"
    enum="NetErrorCodes" expires_after="M95">
  <obsolete>
    Removed in M98. The corresponding histogram for canary checks is
    PrefetchProxy.CanaryChecker.NetError.
  </obsolete>
  <owner>robertogden@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the net error of a completed or timed out probe. Note that if a HTTP
    response does not occur within the probe's TTL, when a sample will also be
    added to the ERR_TIMED_OUT bucket.
  </summary>
  <token key="AvailabilityProberClient" variants="AvailabilityProberClient"/>
</histogram>

<histogram base="true"
    name="Availability.Prober.NumAttemptsBeforeSuccess.{AvailabilityProberClient}"
    units="count" expires_after="M95">
  <obsolete>
    Removed in M98. The corresponding histogram for canary checks is
    PrefetchProxy.CanaryChecker.NumAttemptsBeforeSuccess.
  </obsolete>
  <owner>robertogden@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the number of attempts that are made to achieve a successful probe
    result. Only recorded on success. This metric is 1-based so if a probe
    succeeds the first time, a sample of 1 will be recorded.
  </summary>
  <token key="AvailabilityProberClient" variants="AvailabilityProberClient"/>
</histogram>

<histogram base="true"
    name="Availability.Prober.ResponseCode.{AvailabilityProberClient}"
    enum="HttpResponseCode" expires_after="M95">
  <obsolete>
    Removed in M98.
  </obsolete>
  <owner>robertogden@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the HTTP response code of a completed probe, when a HTTP response is
    received.
  </summary>
  <token key="AvailabilityProberClient" variants="AvailabilityProberClient"/>
</histogram>

<histogram base="true"
    name="Availability.Prober.TimeUntilFailure2.{AvailabilityProberClient}"
    units="ms" expires_after="M95">
  <obsolete>
    Removed in M98. The corresponding histogram for canary checks is
    PrefetchProxy.CanaryChecker.TimeUntilFailure.
  </obsolete>
  <owner>robertogden@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the amount of time spent working on a single probe attempt to get to
    a failed state. Recorded every time a probe fails.
  </summary>
  <token key="AvailabilityProberClient" variants="AvailabilityProberClient"/>
</histogram>

<histogram base="true"
    name="Availability.Prober.TimeUntilSuccess2.{AvailabilityProberClient}"
    units="ms" expires_after="M95">
  <obsolete>
    Removed in M98. The corresponding histogram for canary checks is
    PrefetchProxy.CanaryChecker.TimeUntilSuccess.
  </obsolete>
  <owner>robertogden@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the amount of time spent working on a single probe attempt to get to
    a successful state. Recorded every time a probe succeeds.
  </summary>
  <token key="AvailabilityProberClient" variants="AvailabilityProberClient"/>
</histogram>

<histogram name="Badging.AppBadgeUpdate.Mac.Result"
    enum="UpdateAppBadgeMacResult" expires_after="M88">
  <obsolete>
    Removed in M88 as it's no longer needed.
  </obsolete>
  <owner>phillis@chromium.org</owner>
  <owner>cmumford@chromium.org</owner>
  <summary>The result from updating the app badge on macOS.</summary>
</histogram>

<histogram name="BatteryStatus.NumberBatteriesLinux"
    enum="BatteryStatusNumberBatteries" expires_after="2021-02-18">
  <obsolete>
    Removed 2021-08-11. https://crbug.com/1165237
  </obsolete>
  <owner>timvolodine@chromium.org</owner>
  <owner>device-dev@chromium.org</owner>
  <summary>
    Number of batteries reported by the UPower service on Linux at the start of
    the Battery Status API.
  </summary>
</histogram>

<histogram name="BatteryStatus.NumberBatteriesMac"
    enum="BatteryStatusNumberBatteries" expires_after="2021-02-18">
  <obsolete>
    Removed 2021-08-11. https://crbug.com/1165237
  </obsolete>
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Number of internal batteries reported by MacOS at the start of the Battery
    Status API.
  </summary>
</histogram>

<histogram name="BatteryStatus.NumberBatteriesWin"
    enum="BatteryStatusNumberBatteriesWin" expires_after="2021-02-18">
  <obsolete>
    Removed 2021-08-11. https://crbug.com/1165237
  </obsolete>
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Number of batteries reported by Windows at the start of the Battery Status
    API.
  </summary>
</histogram>

<histogram name="BatteryStatus.StartAndroid" enum="BooleanSuccess"
    expires_after="M92">
  <obsolete>
    Removed 2021-09-02 due to being unused in the codebase.
  </obsolete>
  <owner>timvolodine@chromium.org</owner>
  <owner>src/services/device/OWNERS</owner>
  <summary>
    Whether the Battery Status API was successfully started up on Android.
  </summary>
</histogram>

<histogram name="Blimp.Compositor.CommitSizeKb" units="KB" expires_after="M85">
  <owner>shaktisahu@chromium.org</owner>
  <summary>
    Records the size of the uncompressed commit messages received by Blimp
    compositor.
  </summary>
</histogram>

<histogram name="Blimp.Connected" enum="BooleanConnected" expires_after="M85">
  <owner>shaktisahu@chromium.org</owner>
  <summary>
    Records whether connection attempt to the Blimp engine was successful.
  </summary>
</histogram>

<histogram name="Blimp.Supported" enum="BooleanSupported" expires_after="M85">
  <owner>shaktisahu@chromium.org</owner>
  <summary>Records whether Blimp is supported.</summary>
</histogram>

<histogram name="Blimp.Tab.Visible" enum="BooleanVisible" expires_after="M85">
  <owner>shaktisahu@chromium.org</owner>
  <summary>Records whenever a Blimp tab toggles visibility.</summary>
</histogram>

<histogram name="BlueZ.AdapterLost" units="seconds" expires_after="2024-02-20">
  <owner>mcchou@chromium.org</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    This is specific to Chrome OS. Records a duration of a Bluetooth adapter
    being lost. This helps us better understand the Bluetooth controller drop
    issue in the field.
  </summary>
</histogram>

<histogram name="BlueZ.AdvertisementMonitor.NumOfMonitors" units="count"
    expires_after="2023-12-11">
  <owner>apusaka@chromium.org</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    This is specific to Chrome OS. Records the number of active advertisement
    monitors every couple of minutes. This helps us to gauge the additional
    power requirement for the advertisement monitor feature.
  </summary>
</histogram>

<histogram name="BlueZ.AdvertisementMonitor.{Filter}.FilterPatternsPerMinute"
    units="count" expires_after="2023-12-11">
  <owner>apusaka@chromium.org</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    This is specific to Chrome OS. Records the number of advertisement packet
    received in the user space while the advertisement monitor is done using
    {Filter} filtering. This helps us to gauge the additional power requirement
    for the advertisement monitor feature.
  </summary>
  <token key="Filter">
    <variant name="MSFT"/>
    <variant name="SW"/>
  </token>
</histogram>

<histogram name="BlueZ.AdvertisementMonitor.{Filter}.{Operation}.Result"
    enum="BlueZResultOfAdvertisementMonitor" expires_after="2023-12-11">
  <owner>apusaka@chromium.org</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    This is specific to Chrome OS. Records the outcome of {Operation} operation
    of advertisement monitor when {Filter} filtering is used. This helps us to
    verify the correctness of this feature as well as to point out possible
    regression.
  </summary>
  <token key="Filter">
    <variant name="MSFT"/>
    <variant name="SW"/>
  </token>
  <token key="Operation">
    <variant name="Add"/>
    <variant name="Remove"/>
  </token>
</histogram>

<histogram name="BlueZ.ChipLost2" units="seconds" expires_after="2024-02-20">
  <owner>sonnysasaka@chromium.org</owner>
  <owner>chromeos-bt-platform-sw-core@google.com</owner>
  <summary>
    This is specific to Chrome OS. Records a duration of a Bluetooth adapter
    being lost caused by hardware disconnection. This helps us better understand
    the Bluetooth controller drop issue in the field.
  </summary>
</histogram>

<histogram name="BlueZ.NumberOfExistingAdvertisements" units="advertisements"
    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 number of existing advertisements
    when registering for a new advertisement. This helps us better understand
    the common amount of advertisments used and the registration failures due to
    the limited number of advertisement slots.
  </summary>
</histogram>

<histogram name="BlueZ.PerProfile.ConnectionResult"
    enum="BlueZResultOfPerProfileConnection" expires_after="2023-06-11">
<!-- Name completed by histogram_suffixes name="BlueZPerProfileResult" -->

  <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.
  </summary>
</histogram>

<histogram name="BlueZ.PerProfile.ProbingResult"
    enum="BlueZResultOfPerProfileProbing" expires_after="2023-06-11">
<!-- Name completed by histogram_suffixes name="BlueZPerProfileResult" -->

  <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.
  </summary>
</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-02-20">
  <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-02-20">
  <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.Chrome" units="ms" expires_after="never">
<!-- expires-never: This is a primary metric for the ChromeOS total boot time. -->

  <owner>alemate@chromium.org</owner>
  <owner>briannorris@chromium.org</owner>
  <owner>rsorokin@chromium.org</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.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.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.Login2" units="ms" expires_after="never">
<!-- expires-never: This is a primary metric for the ChromeOS login. -->

  <owner>rsorokin@chromium.org</owner>
  <owner>antrim@chromium.org</owner>
  <owner>alemate@chromium.org</owner>
  <owner>cros-oac@chromium.org</owner>
  <summary>
    Time from the moment sign in authentication is started until the first user
    session UI elements become ready to use. (Chrome OS).
  </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.Total2" units="ms" expires_after="never">
<!-- expires-never: This is a primary metric for the ChromeOS total boot time. -->

  <owner>alemate@chromium.org</owner>
  <owner>briannorris@chromium.org</owner>
  <owner>rsorokin@chromium.org</owner>
  <owner>cros-oac@google.com</owner>
  <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.
  </summary>
</histogram>

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

<histogram name="BrotliFilter.ErrorCode" enum="BrotliFilterErrorCode"
    expires_after="M115">
  <owner>eustas@chromium.org</owner>
  <summary>
    Error code observed after failing to decode a Brotli-compressed response
    stream from the network. Recorded for each layer of Brotli compression, as
    indicated using Content-Encoding header values, part of an HTTP response
    where a decoding error occurs.

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

<histogram name="BrotliFilter.Status" enum="BrotliFilterDecodingStatus"
    expires_after="2024-02-25">
  <owner>eustas@chromium.org</owner>
  <summary>
    The final state of the BrotliFilter. Recorded during the decoding process as
    bytes are consumed from a Brotli-compressed response stream.

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

<histogram name="BrotliFilter.UsedMemoryKB" units="KiB"
    expires_after="2024-02-25">
  <owner>eustas@chromium.org</owner>
  <summary>
    Maximum amount of memory allocated to decode a Brotli-compressed response
    stream from the network. Recorded during the process of allocating memory to
    decode a Brotli-compressed response stream.

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

<histogram name="Canvas.TextMetrics.SetFont" units="microseconds"
    expires_after="2021-07-14">
  <obsolete>
    Retired in M93, replaced by Canvas.TextMetrics.SetFont2 which has a wider
    range.
  </obsolete>
  <owner>yiyix@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>
    Time spent in microseconds to perform calls to SetFont in Canvas for
    Canvas2d. It's measured each time SetFont is called.

    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="Canvas.TextMetrics.SetFont2" units="microseconds"
    expires_after="M93">
  <obsolete>
    Retired in M94.
  </obsolete>
  <owner>yiyix@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>
    Time spent in microseconds to perform calls to SetFont in Canvas for
    Canvas2d. It's measured each time SetFont is called.

    This differs from Canvas.TextMetrics.SetFont in that it uses buckets up to
    ten seconds rather than ten milliseconds (due to a change in the underlying
    histogramming function called).

    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="Cast.Channel.Certificate" enum="CastCertificateStatus"
    expires_after="never">
<!-- expires-never: Used for Cast device health monitoring. -->

  <owner>ryanchung@google.com</owner>
  <summary>
    Records the result of the Cast certificate verification on the Cast sender.
  </summary>
</histogram>

<histogram name="Cast.Channel.LaunchSession.Flags" enum="CastChannelFlag"
    expires_after="2024-02-03">
  <owner>mfoltz@chromium.org</owner>
  <owner>media-dev-uma@chromium.org</owner>
  <summary>
    Records any flags observed on the Cast channel used to launch a Cast
    session. A single channel may have multiple flags, and each flag is logged
    as a separate count.
  </summary>
</histogram>

<histogram name="Cast.Channel.Nonce" enum="CastNonceStatus"
    expires_after="never">
<!-- expires-never: Used for Cast device health monitoring. -->

  <owner>ryanchung@google.com</owner>
  <summary>
    Records whether the correct nonce challenge was in the Cast receiver's
    response.
  </summary>
</histogram>

<histogram name="Cast.Channel.Signature" enum="CastSignatureStatus"
    expires_after="never">
<!-- expires-never: Used for Cast device health monitoring. -->

  <owner>ryanchung@google.com</owner>
  <summary>
    Records whether the signature returned by the Cast receiver is verifiable
    with the challenge and device certificate.
  </summary>
</histogram>

<histogram name="Cast.Sender.CastMediaType" enum="MediaContainers"
    expires_after="2022-02-01">
  <obsolete>
    No longer collected as of 2022-01.
  </obsolete>
  <owner>takumif@chromium.org</owner>
  <owner>mfoltz@chromium.org</owner>
  <owner>openscreen-eng@google.com</owner>
  <summary>Records the media type of every video being cast.</summary>
</histogram>

<histogram name="Cast.Sender.CastPlayerResult" enum="CastPlayBackState"
    expires_after="M85">
  <obsolete>
    Removed September 2020 as it's no longer being collected.
  </obsolete>
  <owner>maybelle@chromium.org</owner>
  <owner>miguelg@chromium.org</owner>
  <summary>
    Records the result of a request to play remotely on a per player app basis
    within Chrome for Android.
  </summary>
</histogram>

<histogram name="Cast.Sender.DeviceType" enum="RemotePlaybackDeviceType"
    expires_after="2021-06-01">
  <obsolete>
    Deprecated as of 2021/02 as it's not been collected for a while due to
    refactoring.
  </obsolete>
  <owner>tguilbert@google.com</owner>
  <owner>media-dev-uma@chromium.org</owner>
  <summary>
    Records the type of the remote playback device selected by the user. This
    will be recorded when the user has chosen the device from the media route
    chooser dialog.
  </summary>
</histogram>

<histogram name="Cast.Sender.FullscreenControlsActionWithMediaElement"
    enum="MediaCommand" expires_after="2021-06-01">
  <obsolete>
    Deprecated as of 2021/02 as it's not been collected for a while due to
    refactoring.
  </obsolete>
  <owner>tguilbert@google.com</owner>
  <owner>media-dev-uma@chromium.org</owner>
  <summary>
    Record each interaction with the fullscreen remote playback controls in
    cases when the corresponding media element on the page was present.
  </summary>
</histogram>

<histogram name="Cast.Sender.FullscreenControlsActionWithoutMediaElement"
    enum="MediaCommand" expires_after="2021-06-01">
  <obsolete>
    Deprecated as of 2021/02 as it's not been collected for a while due to
    refactoring.
  </obsolete>
  <owner>tguilbert@google.com</owner>
  <owner>media-dev-uma@chromium.org</owner>
  <summary>
    Record each interaction with the fullscreen remote playback controls in
    cases when the corresponding media element on the page was not present.
  </summary>
</histogram>

<histogram name="Cast.Sender.MediaElementPresentWhenShowFullscreenControls"
    enum="BooleanPresent" expires_after="2021-06-01">
  <obsolete>
    Deprecated as of 2021/02 as it's not been collected for a while due to
    refactoring.
  </obsolete>
  <owner>tguilbert@google.com</owner>
  <owner>media-dev-uma@chromium.org</owner>
  <summary>
    Indicates whether the corresponding media element on the page was present
    when the fullscreen remote playback controls were shown.
  </summary>
</histogram>

<histogram name="Cast.Sender.RemotePlayback.InitiationLocation"
    enum="RemotePlaybackInitiationLocation" expires_after="2024-03-24">
  <owner>muyaoxu@google.com</owner>
  <owner>openscreen-eng@google.com</owner>
  <summary>
    Records the location when users interact with the RemotePlayback API on
    Clank. Please note, this metric does not show whether a session is started
    or stopped and does not include RemotePlayback sessions initiated through
    the Cast SDK.
  </summary>
</histogram>

<histogram name="Cast.Sender.SessionTimeWithoutMediaElementPercentage"
    units="%" expires_after="2021-06-01">
  <obsolete>
    Deprecated as of 2021/02 as it's not been collected for a while due to
    refactoring. A new metrics,
    &quot;Cast.Sender.Clank.SessionTimeWithoutMediaElementPercentage&quot; now
    collects the same data but at a different location.
  </obsolete>
  <owner>tguilbert@google.com</owner>
  <owner>media-dev-uma@chromium.org</owner>
  <summary>
    Records the ratio of the time the media element was detached from the remote
    playback session to the total duration of the session (as from when the
    element has been attached till when the session stopped or disconnected), in
    percents.
  </summary>
</histogram>

<histogram name="Cast.Sender.UrlResolveResult"
    enum="RemotePlaybackUrlResolveResult" expires_after="2021-06-01">
  <obsolete>
    Deprecated as of 2021/02 as it's not been collected for a while due to
    refactoring.
  </obsolete>
  <owner>tguilbert@google.com</owner>
  <owner>media-dev-uma@chromium.org</owner>
  <summary>
    Records the result of resolving the video URL for cast, including checking
    its CORS header.
  </summary>
</histogram>

<histogram name="Cast.Sender.VideoEncodeAcceleratorInitializeSuccess"
    enum="BooleanSuccess" expires_after="2023-12-15">
  <owner>fiorito@google.com</owner>
  <owner>mfoltz@chromium.org</owner>
  <owner>openscreen-eng@google.com</owner>
  <summary>
    Indicates whether initialization of a video encode accelerator for Cast
    sender was successful.

    Warning: this histogram was expired from 2021-10-17 to 2022-12-15; data may
    be missing.
  </summary>
</histogram>

<histogram name="CastV2.Transport.Connect.Latency.Unknown" units="ms"
    expires_after="M85">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <owner>cast-analytics@google.com</owner>
  <summary>
    The latency between when a Cast V2 connection is established and the first
    message is received on that connection. &quot;Unknown&quot; is the peer
    type, which is not known at this point in the CastV2 connection
    establishment. Naming conforms to the CastV2 sender-side histogram naming
    convention &quot;CastV2.[action].[name].[peer_type]&quot;.
  </summary>
</histogram>

<histogram name="CastV2.Transport.SslHandshake.Error.Unknown"
    enum="NetErrorCodes" expires_after="M85">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <owner>cast-analytics@google.com</owner>
  <summary>
    On accepting a Cast V2 transport socket connection, if an error is
    encountered, the error code is logged here. &quot;Unknown&quot; is the peer
    type, which is not known at this point in the CastV2 connection
    establishment. &quot;SslHandshake.Error&quot; is the name of the action.
    Naming conforms to the CastV2 sender-side histogram naming convention
    &quot;CastV2.[action].[name].[peer_type]&quot;.
  </summary>
</histogram>

<histogram name="CastV2.Transport.SslHandshake.Unknown" units="ms"
    expires_after="M85">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <owner>cast-analytics@google.com</owner>
  <summary>
    The time taken to do the handshake during Cast V2 transport socket creation.
    &quot;Unknown&quot; is the peer type, which is not known at this point in
    the CastV2 connection establishment. Naming conforms to the CastV2
    sender-side histogram naming convention
    &quot;CastV2.[action].[name].[peer_type]&quot;.
  </summary>
</histogram>

<histogram name="CertificateType2" units="units" expires_after="never">
<!-- expires-never: histograms are used to assess policy -->

<!-- https://crbug.com/732640#c5 -->

  <owner>rsleevi@chromium.org</owner>
  <summary>
    Information about the certificate algorithms and sizes in use on the web, to
    examine compliance with the CA/Browser Forum requirements and security best
    practice. This histogram considers the notBefore as the issuance date, for
    purposes of what requirements apply.
  </summary>
</histogram>

<histogram name="ChildProcess.Crashed.UtilityProcessExitCode"
    enum="WindowsExitCode" expires_after="never">
<!-- expires-never: Critical stability metrics. go/chrome-stability-metrics -->

  <owner>wfh@chromium.org</owner>
  <owner>chrome-stability-core@google.com</owner>
  <summary>
    Recorded when a crash occurs in a Utility process. On crash, the exit code
    will indicate the exception code of the crash.
  </summary>
</histogram>

<histogram name="ChildProcess.Crashed.UtilityProcessHash"
    enum="UtilityProcessNameHash" expires_after="never">
<!-- expires-never: Critical stability metrics. go/chrome-stability-metrics -->

  <owner>wfh@chromium.org</owner>
  <owner>chrome-stability-core@google.com</owner>
  <summary>
    Count of child utility process crashes, bucketed by the hash of their
    process name. The process name is typically the service name of the mojo
    service. Recorded when a Utility process crashes.
  </summary>
</histogram>

<histogram name="ChildProcess.Crashed2" enum="ProcessType2"
    expires_after="never">
<!-- expires-never: Critical stability metrics. go/chrome-stability-metrics -->

  <owner>wfh@chromium.org</owner>
  <owner>chrome-stability-core@google.com</owner>
  <summary>Count of child process crashes grouped by process type.</summary>
</histogram>

<histogram name="ChildProcess.DisconnectedAlive2" enum="ProcessType2"
    expires_after="never">
<!-- expires-never: For monitoring stability regressions. -->

  <owner>wfh@chromium.org</owner>
  <summary>
    Count of child process abnormal channel disconnects that are not classified
    and reported because we took the exit code too early. Grouped by process
    type.
  </summary>
</histogram>

<histogram name="ChildProcess.Killed2" enum="ProcessType2"
    expires_after="never">
<!-- expires-never: Critical stability metrics. go/chrome-stability-metrics -->

  <owner>wfh@chromium.org</owner>
  <owner>chrome-stability-core@google.com</owner>
  <summary>Count of child process kills grouped by process type.</summary>
</histogram>

<histogram name="ChildProcess.Launched.UtilityProcessHash"
    enum="UtilityProcessNameHash" expires_after="2024-03-17">
  <owner>wfh@chromium.org</owner>
  <summary>
    Count of child utility process launches, bucketed by the hash of their
    process name. The process name is typically the service name of the mojo
    service.
  </summary>
</histogram>

<histogram name="ChildProcess.LaunchFailed.UtilityProcessErrorCode"
    enum="LaunchErrorCodes" expires_after="never">
<!-- expires-never: Critical stability metrics. go/chrome-stability-metrics -->

  <owner>wfh@chromium.org</owner>
  <owner>chrome-stability-core@google.com</owner>
  <summary>
    A platform-specific error code returned from the attempt to launch a Utility
    process. Recorded when a Utility process fails to launch.
  </summary>
</histogram>

<histogram name="ChildProcess.LaunchFailed.UtilityProcessHash"
    enum="UtilityProcessNameHash" expires_after="never">
<!-- expires-never: Critical stability metrics. go/chrome-stability-metrics -->

  <owner>wfh@chromium.org</owner>
  <owner>chrome-stability-core@google.com</owner>
  <summary>
    Count of child utility process launch failures, bucketed by the hash of
    their process name. The process name is typically the service name of the
    mojo service. Recorded when a Utility process fails to launch.
  </summary>
</histogram>

<histogram name="ChildProcess.LaunchFailed.WinLastError" enum="WinGetLastError"
    expires_after="never">
<!-- expires-never: Critical stability metrics. go/chrome-stability-metrics -->

  <owner>wfh@chromium.org</owner>
  <owner>chrome-stability-core@google.com</owner>
  <summary>
    An extended Windows error code returned from GetLastError when failing to
    launch a utility process. Recorded when a Utility process fails to launch on
    Windows.
  </summary>
</histogram>

<histogram name="ChildProcess.ProcessLifetime.Utility" units="ms"
    expires_after="2024-02-25">
  <owner>olivierli@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    The time elapsed between the creation and destruction of a utility process.
    Recorded when the process is recorded as destroyed in PerformanceManager.
  </summary>
</histogram>

<histogram name="ChromiumAndroidLinker.BrowserLoadTime" units="ms"
    expires_after="2022-10-01">
  <obsolete>
    Replaced by ChromiumAndroidLinker.BrowserLoadTime2 in 2021-07.
  </obsolete>
  <owner>rsesek@chromium.org</owner>
  <summary>
    The amount of time it took to load the native libraries in the browser
    process.
  </summary>
</histogram>

<histogram name="ChromiumAndroidLinker.ModernLinkerDetailedLoadTime.{LoadKind}"
    units="ms" expires_after="2022-10-01">
  <owner>pasko@chromium.org</owner>
  <owner>agrieve@chromium.org</owner>
  <summary>
    The ModernLinker loads the native library twice: once with
    android_dlopen_ext, and if the first one does not fail, also invokes
    System.loadLibrary(). This histogram reflects the time to load the native
    library when {LoadKind}.

    Failed load does not record a sample. Failing the first load would also
    avoid recording the histogram for the second load.

    See a description of RELRO sharing here:
    https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/android_native_libraries.md#RELRO-Sharing
  </summary>
  <token key="LoadKind">
    <variant name="Consume"
        summary="consuming an external RELRO is expected later, with
                 android_dlopen_ext"/>
    <variant name="NoSharing"
        summary="RELRO sharing cooperation is not requested (fallback, in
                 testing)"/>
    <variant name="Produce"
        summary="producing RELRO is requested, with android_dlopen_ext"/>
    <variant name="Second"
        summary="the first load succeeded and the System.loadLibrary() time
                 is measured"/>
  </token>
</histogram>

<histogram
    name="ChromiumAndroidLinker.ModernLinkerDetailedLoadTimeByBlkioCgroup.{LoadKind}.{BackgroundState}"
    units="ms" expires_after="2022-10-01">
  <owner>pasko@chromium.org</owner>
  <owner>agrieve@chromium.org</owner>
  <summary>
    Same as ModernLinkerDetailedLoadTime.*, but additionally split by process
    background state as known to cgroups.

    Reflects load time when the app {BackgroundState}. When {LoadKind}.
  </summary>
  <token key="LoadKind">
    <variant name="Consume"
        summary="consuming an external RELRO is expected later, with
                 android_dlopen_ext"/>
    <variant name="NoSharing"
        summary="RELRO sharing cooperation is not requested (fallback, in
                 testing)"/>
    <variant name="Produce"
        summary="producing RELRO is requested, with android_dlopen_ext"/>
    <variant name="Second"
        summary="the first load succeeded and the System.loadLibrary() time
                 is measured"/>
  </token>
  <token key="BackgroundState">
    <variant name="Background" summary="has been in background (=Background)"/>
    <variant name="Foreground" summary="has been in foreground (=Foreground)"/>
    <variant name="Mixed"
        summary="observed background state changing (=Mixed)"/>
    <variant name="Unknown"
        summary="has been in unknown state because it failed to parse cgroups
                 (=Unknown)"/>
  </token>
</histogram>

<histogram name="ChromiumAndroidLinker.RelroAvailableImmediately"
    enum="BooleanRelroAvailableImmediately" expires_after="2023-12-29">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Recorded when RELRO is replaced with a shared memory region, in all
    processes consuming RELRO. Indicates whether the shared RELRO was available
    synchronously right after the native library was loaded. ModernLinker only.
  </summary>
</histogram>

<histogram name="ChromiumAndroidLinker.RelroProvidedSuccessfully"
    enum="BooleanSuccess" expires_after="2024-03-03">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Recorded when the native library is loaded by the Chromium linker, and an
    attempt to spawn a shared RELRO region is made. Indicates whether the
    attempt was a success. If the number of samples from
    &quot;ChromiumAndroidLinker.RelroAvailableImmediately&quot; where the
    availability was not immediate is large compared to the counts of successful
    RELRO spawns, it would indicate potential startup performance improvements
    when starting child process(es) during early browser startup phases.
    ModernLinker only.
  </summary>
</histogram>

<histogram name="ChromiumAndroidLinker.RelroSharingStatus"
    enum="RelroSharingStatus" expires_after="2022-10-01">
  <obsolete>
    Upgraded to ChromiumAndroidLinker.RelroSharingStatus2 around 2021-10.
  </obsolete>
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Recorded when RELRO is replaced with a shared memory region, in all
    processes consuming RELRO. Indicates whether the replacement was a success.
    ModernLinker only.
  </summary>
</histogram>

<histogram name="ChromiumAndroidLinker.RelroSharingStatus2"
    enum="RelroSharingStatus" expires_after="2024-03-10">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Recorded when RELRO is replaced with a shared memory region, in all
    processes consuming RELRO. Indicates whether the replacement was a success.
    ModernLinker only.

    See a description of RELRO sharing here:
    https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/android_native_libraries.md#RELRO-Sharing

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

<histogram name="ChromiumAndroidLinker.RendererLoadTime" units="ms"
    expires_after="2022-10-01">
  <obsolete>
    Replaced by ChromiumAndroidLinker.ChildLoadTime2 in 2021-07.
  </obsolete>
  <owner>rsesek@chromium.org</owner>
  <summary>
    The amount of time it took to load the native libraries in the renderer
    process.
  </summary>
</histogram>

<histogram
    name="ChromiumAndroidLinker.TimeToFindWebViewReservation.{SearchStatus}.{ProcessType}"
    units="ms" expires_after="2022-10-01">
  <obsolete>
    Removed in June 2023.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The amount of time to find the memory address reservation intended for
    WebView. This search is sometimes initiated as an early stage of loading the
    native library. A sample is discarded if the attempt to load the native
    library fails.

    Measured when running in {ProcessType} process. Only for {SearchStatus}
    searches.

    For a more detailed description of each suffix process type suffix (Browser,
    Child, Zygote) see description of the ChromiumAndroidLinker.*LoadTime2.
  </summary>
  <token key="ProcessType">
    <variant name="Browser" summary="a browser"/>
    <variant name="Child" summary="a child"/>
    <variant name="Zygote" summary="an app zygote"/>
  </token>
  <token key="SearchStatus">
    <variant name="Found" summary="successful"/>
    <variant name="NotFound" summary="unsuccessful"/>
  </token>
</histogram>

<histogram name="ChromiumAndroidLinker.{ProcessType}LoadTime2" units="ms"
    expires_after="2022-10-01">
  <owner>pasko@chromium.org</owner>
  <owner>rsesek@chromium.org</owner>
  <summary>
    The amount of time it took to load the native libraries in {ProcessType}.

    In order to explain the nature of the uploaded samples for this histogram it
    is necessary to define a few core properties of the running processes.

    On Android 10 (=Q) a new feature was introduced and became used in Chrome:
    App Zygotes. An App Zygote (AZ) is a process pre-created by the system to
    allow faster initialization of isolated processes (IP) for a specific app.
    When AZ is created it runs the app-specific &quot;preload&quot; function
    once, and becomes idle, after that no work can be performed in the AZ other
    than getting forked. Whenever an app requests the Android Framework (AF) to
    provide an isolated process, the AF notifies the AZ to fork itself into a
    new process, which later will be provided to the app. An AZ created for one
    app (package) cannot be used for another app.

    The purpose of the AZ in Chrome is to load the native library - it avoids
    loading the same library in each isolated process separately.

    Capabilities of the AZ are very restricted. It runs in the same sandbox
    constraints as an isolated process, while also not having the ability to
    communicate with any other process on the system. Only after forking from
    the AZ the inherited process becomes able to communicate to the rest of
    Chrome.

    Beyond isolated processes, Chrome can request processes with more
    privileges: privileged processes (PP). In this case those processes will be
    forked from another zygote. There are several types of those zygotes, we
    will refer to them as Other Zygote (OZ) for simplicity. The decisions
    whether to start an isolated process through an AZ, and when to start a new
    AZ are made dynamically and depends on a few factors.

    The suffixes of this histogram, as described below, correspond to distinct
    execution scenarios:

    Suffix &quot;Browser&quot;: the native library is loaded in the main app
    process

    Suffix &quot;Zygote&quot;: OZ forks into AZ, AZ loads the native library, AZ
    forks into IP

    Suffix &quot;Child&quot;: OZ forks into PP, PP loads the native library

    Suffix &quot;Child&quot;: OZ forks into IP, IP loads the native library

    Suffix &quot;Child&quot;: OZ forks into AZ, AZ fails to load the native
    library, AZ forks into IP, IP loads the native library (this scenario should
    happen rarely).

    After library loading happens in the AZ, the recorded histogram value (for
    simplicity) gets copied to each child process forked from this AZ process
    and uploaded &quot;as if&quot; it is a unique sample from this child
    process. This leads to a discrepancy in sample counts.

    In early 2021-10 it had about 7% extra uploaded samples in
    &quot;ChromiumAndroidLinker.ZygoteLoadTime2&quot;.
  </summary>
  <token key="ProcessType">
    <variant name="Browser" summary="the browser process"/>
    <variant name="Child" summary="a child process"/>
    <variant name="Zygote" summary="the App Zygote"/>
  </token>
</histogram>

<histogram name="ChromiumAndroidLinker.{ProcessType}ThreadLoadTime" units="ms"
    expires_after="2022-10-01">
  <owner>pasko@chromium.org</owner>
  <owner>agrieve@chromium.org</owner>
  <summary>
    The amount of CPU time (thread time) it took to load the native libraries in
    {ProcessType}.

    For a more detailed description of each suffix process type suffix (Browser,
    Child, Zygote) see description of the ChromiumAndroidLinker.*LoadTime2.
  </summary>
  <token key="ProcessType">
    <variant name="Browser" summary="the browser process"/>
    <variant name="Child" summary="a child process"/>
    <variant name="Zygote" summary="the App Zygote"/>
  </token>
</histogram>

<histogram name="Chromoting.Connections" enum="State"
    expires_after="2018-08-30">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>jamiewalch@chromium.org</owner>
  <summary>
    Recorded every time a Chromoting connection enters a new state.
  </summary>
</histogram>

<histogram name="Chromoting.Connections.Durations.Closed" units="minutes"
    expires_after="2018-08-30">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>jamiewalch@chromium.org</owner>
  <summary>
    The duration of sessions that were closed, normally by a user-initiated
    action.
  </summary>
</histogram>

<histogram name="Chromoting.Connections.Durations.Failed" units="minutes"
    expires_after="2018-08-30">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>jamiewalch@chromium.org</owner>
  <summary>The duration of sessions that failed to connect.</summary>
</histogram>

<histogram name="Chromoting.Connections.Times.ToAuthenticate" units="ms"
    expires_after="2018-08-30">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>jamiewalch@chromium.org</owner>
  <summary>
    The time taken to authenticate as part of a Chromoting connection request.
  </summary>
</histogram>

<histogram name="Chromoting.Connections.Times.ToConnect" units="ms"
    expires_after="2018-08-30">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>jamiewalch@chromium.org</owner>
  <summary>
    The time taken to connect to a remote-host, after a request has been
    authenticated.
  </summary>
</histogram>

<histogram name="Chromoting.Input.EventLatency" units="microseconds"
    expires_after="M81">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>joedow@chromium.org</owner>
  <owner>lambroslambrou@chromium.org</owner>
  <summary>
    Input event delivery latency from the browser to the plugin.

    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="Chromoting.Video.Bandwidth" units="Bytes/second"
    expires_after="2018-08-30">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>jamiewalch@chromium.org</owner>
  <summary>
    The bandwidth of non-empty packets in Chromoting remote sessions, updated
    every time a video packet is processed and logged every 1s.
  </summary>
</histogram>

<histogram name="Chromoting.Video.CaptureLatency" units="ms"
    expires_after="2018-08-30">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>jamiewalch@chromium.org</owner>
  <summary>
    The time to capture a video frame on the host, returned as part of a video
    packet.
  </summary>
</histogram>

<histogram name="Chromoting.Video.CaptureOverhead" units="ms"
    expires_after="2018-08-30">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>jamiewalch@chromium.org</owner>
  <summary>
    Amount of time wasted on IPC and threading overhead when capturing a video
    frame.
  </summary>
</histogram>

<histogram name="Chromoting.Video.CapturePendingLatency" units="ms"
    expires_after="M85">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>joedow@chromium.org</owner>
  <owner>lambroslambrou@chromium.org</owner>
  <summary>
    The time from when an input event is received to when the next frame is
    captured.
  </summary>
</histogram>

<histogram name="Chromoting.Video.DecodeLatency" units="ms"
    expires_after="2018-08-30">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>jamiewalch@chromium.org</owner>
  <summary>The time to decode a video packet on the client.</summary>
</histogram>

<histogram name="Chromoting.Video.EncodeLatency" units="ms" expires_after="M85">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>joedow@chromium.org</owner>
  <owner>lambroslambrou@chromium.org</owner>
  <summary>
    The time to encode a video packet on the host, returned as part of a video
    packet.
  </summary>
</histogram>

<histogram name="Chromoting.Video.EncodePendingLatency" units="ms"
    expires_after="2018-08-30">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>jamiewalch@chromium.org</owner>
  <summary>
    Delay before a newly captured frame is passed to the encoder.
  </summary>
</histogram>

<histogram name="Chromoting.Video.FrameRate" units="fps" expires_after="M81">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>joedow@chromium.org</owner>
  <owner>lambroslambrou@chromium.org</owner>
  <summary>
    The frame-rate of non-empty packets in Chromoting remote sessions, updated
    every time a video packet is processed and logged every 1s.
  </summary>
</histogram>

<histogram name="Chromoting.Video.NetworkLatency" units="ms"
    expires_after="2018-08-30">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>jamiewalch@chromium.org</owner>
  <summary>
    Estimated network roundtrip latency calculated by subtracting total
    processing time on host and client from the total roundtrip time.
  </summary>
</histogram>

<histogram name="Chromoting.Video.PacketRate" units="packets/second"
    expires_after="2018-08-30">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>jamiewalch@chromium.org</owner>
  <summary>
    The packets/sec, including empty packets, in Chromoting remote sessions,
    updated every time a video packet is processed and logged every 1s.
  </summary>
</histogram>

<histogram name="Chromoting.Video.PaintLatency" units="ms"
    expires_after="2018-08-30">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>jamiewalch@chromium.org</owner>
  <summary>The time to paint a decoded video packet on the client.</summary>
</histogram>

<histogram name="Chromoting.Video.RoundTripLatency" units="ms"
    expires_after="2018-08-30">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>jamiewalch@chromium.org</owner>
  <summary>
    The time from an input being sent from the client to a response being
    received by the client after it is processed by the host.
  </summary>
</histogram>

<histogram name="Chromoting.Video.SendPendingLatency" units="ms"
    expires_after="2018-08-30">
  <obsolete>
    Removed in M98, metrics haven't been collected since ~mid 2019.
  </obsolete>
  <owner>jamiewalch@chromium.org</owner>
  <summary>
    Delay before an encoded video packet is written to the send buffer.
  </summary>
</histogram>

<histogram name="ClientHints.AcceptCHFrame" enum="AcceptCHFrameRestart"
    expires_after="2024-03-03">
  <owner>victortan@chromium.org</owner>
  <owner>miketaylr@chromium.org</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="2024-03-03">
  <owner>victortan@chromium.org</owner>
  <owner>miketaylr@chromium.org</owner>
  <summary>
    Count of requests restarted because of the Critical-CH response header.
  </summary>
</histogram>

<histogram name="ClientHints.FetchLatency{OperationType}" units="microseconds"
    expires_after="2024-02-20">
  <owner>miketaylr@chromium.org</owner>
  <owner>potassium-katabolism@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.PersistDuration" units="ms"
    expires_after="2022-10-25">
  <obsolete>
    Removed December 2021 as accept-ch-lifetime was retired.
  </obsolete>
  <owner>yoavweiss@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <owner>mkwst@chromium.org</owner>
  <owner>aarontag@chromium.org</owner>
  <summary>
    Duration for which the origin requested the client hints to be persisted.
    Collected on the renderer side. Collected while navigation responses are
    being processed.
  </summary>
</histogram>

<histogram name="ClientHints.StoreLatency" units="ms"
    expires_after="2024-03-03">
  <owner>miketaylr@chromium.org</owner>
  <owner>potassium-katabolism@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="2023-10-31">
  <owner>victortan@chromium.org</owner>
  <owner>potassium-katabolism@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="2024-03-03">
  <owner>victortan@chromium.org</owner>
  <owner>potassium-katabolism@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="ClientHints.Viewport.IsDeviceScaleFactorOne" enum="Boolean"
    expires_after="2024-02-20">
  <owner>curranmax@chromium.org</owner>
  <summary>
    This records whether or not the device scale factor was exactly 1.0 or not
    when sending either of the viewport height or viewport width client hint.
    There was a bug (see crbug.com/1394231) where the device scale factor was
    being applied twice to the viewport values. This histogram can be used to
    estimate the impact of that bug.
  </summary>
</histogram>

<histogram
    name="ComponentUpdater.AndroidComponentLoader.LoadStatus.{Component}"
    units="BooleanSuccess" expires_after="2023-12-15">
  <owner>hazems@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="ClientSidePhishing" summary="ClientSidePhishing"/>
    <variant name="OriginTrials" summary="OriginTrials"/>
    <variant name="TrustTokenKeyCommitments"
        summary="TrustTokenKeyCommitments"/>
    <variant name="WebViewAppsPackageNamesAllowlist"
        summary="WebViewAppsPackageNamesAllowlist"/>
    <variant name="WebViewEmptyComponent" summary="WebViewEmptyComponent"/>
  </token>
</histogram>

<histogram name="ComponentUpdater.Calls" enum="ComponentUpdaterCalls"
    expires_after="2022-12-20">
  <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.
  </summary>
</histogram>

<histogram name="ComponentUpdater.UpdateCompleteError"
    enum="UpdateClientErrors" expires_after="2024-03-17">
  <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="2024-03-17">
  <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="2022-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.
  </summary>
</histogram>

<histogram name="Conflicts.ConfirmedBadModules" units="modules"
    expires_after="2018-08-30">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The number of confirmed bad modules found during module enumeration.
  </summary>
</histogram>

<histogram name="Conflicts.EnumerateLoadedModules" units="ms"
    expires_after="2018-08-30">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The length of time it takes to enumerate the loaded modules in the browser
    process.
  </summary>
</histogram>

<histogram name="Conflicts.EnumerateShellExtensions" units="ms"
    expires_after="2018-08-30">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The length of time it takes to enumerate the shell extensions.
  </summary>
</histogram>

<histogram name="Conflicts.EnumerateWinsockModules" units="ms"
    expires_after="2018-08-30">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The length of time it takes to enumerate the Winsock LSP modules.
  </summary>
</histogram>

<histogram name="Conflicts.EnumerationInspectionTime" units="ms"
    expires_after="2018-08-30">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The cumulative length of time it takes to inspect all modules on disk,
    extracting their certificates and version information. This work is actually
    spread out over a much longer period of time so as not to impact the user.
  </summary>
</histogram>

<histogram name="Conflicts.EnumerationTotalTime" units="ms"
    expires_after="2018-08-30">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The cumulative length of time it takes to enumerate and inspect all modules.
    This work is actually spread out over a much longer period of time so as not
    to impact the user.
  </summary>
</histogram>

<histogram name="Conflicts.SuspectedBadModules" units="modules"
    expires_after="2018-08-30">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The number of suspected bad modules found during module enumeration.
  </summary>
</histogram>

<histogram name="ConnectivityDiagnostics.ChromeOsSignalStrength" units="%"
    expires_after="2020-06-28">
  <owner>ebeach@google.com</owner>
  <summary>
    Connectivity Diagnostics App: WiFi signal strength recorded during
    NIC_SIGNAL_STRENGTH test.

    The &quot;Strength&quot; property of a WiFi signal is a partially-reversible
    function that linearly maps the RSSI range -120dBm to -20dBm to Strength
    values from 0 to 100.
  </summary>
</histogram>

<histogram name="ConnectivityDiagnostics.RESOLVER_LATENCY" units="ms"
    expires_after="M83">
  <owner>ebeach@google.com</owner>
  <summary>
    Resolution latency seen by the Connectivity Diagnostics.

    Resolver latency is computed by using the chrome.dns API to query three
    randomly generated Google hostnames (*-ccd-testing-v4.metric.gstatic.com).
    The random hostnames guarantees that there will be no caching of DNS
    hostnames. The time taken from issuing the DNS request to receiving a
    response is clocked in JavaScript and the arithmetic mean of the three times
    is used as the resolver latency.
  </summary>
</histogram>

<histogram name="ContextMenu.CancelSystemTouches" enum="BooleanHit"
    expires_after="M98">
  <obsolete>
    Removed in M98 as the Context menu implementation changed.
  </obsolete>
  <owner>michaeldo@chromium.org</owner>
  <owner>src/ios/web/OWNERS</owner>
  <summary>
    Logs true when the system touches are cancelled in order to show the Context
    Menu instead of performing a default system action. Only logged on iOS.
  </summary>
</histogram>

<histogram name="ContextMenu.DelayedElementDetails"
    enum="ContextMenuDelayedElementDetails" expires_after="M98">
  <obsolete>
    Removed in M98 as the context menu implementation changed.
  </obsolete>
  <owner>michaeldo@chromium.org</owner>
  <owner>src/ios/web/OWNERS</owner>
  <summary>
    Logged when DOM element details are not yet available when the user
    completes a long press. Also logs if the context menu was shown once the
    element details became available or if the display was cancelled. This
    ensures that all context menu gestures are eventually processed. Only logged
    on iOS.
  </summary>
</histogram>

<histogram name="ContextMenu.DOMElementFrame" enum="ContextMenuDOMElementFrame"
    expires_after="M98">
  <obsolete>
    Removed in M98 as the ContextMenu implementation changed.
  </obsolete>
  <owner>michaeldo@chromium.org</owner>
  <owner>src/ios/web/OWNERS</owner>
  <summary>
    Logged when the Context Menu will be displayed. Also logs if the element for
    the last touch was found in the main frame or a iframe. Only logged on iOS.
  </summary>
</histogram>

<histogram name="ContextMenu.iOS.CopyImage" enum="ContextMenuIOSCopyImage"
    expires_after="M108">
  <obsolete>
    Replaced by Mobile.ContextMenu.CopyImage
  </obsolete>
  <owner>mrsuyi@chromium.org</owner>
  <owner>gambard@chromium.org</owner>
  <summary>
    Logged when the copying image from context menu is invoked and relevant
    events happen during the copying image procedure.
  </summary>
</histogram>

<histogram name="ContextMenu.iOS.GetImageDataByJsResult"
    enum="ContextMenuIOSGetImageDataByJsResult" expires_after="M108">
  <obsolete>
    Replaced by Mobile.ContextMenu.GetImageDataByJsResult
  </obsolete>
  <owner>mrsuyi@chromium.org</owner>
  <owner>gambard@chromium.org</owner>
  <summary>
    Result of getting image data by JavaScript for CopyImage, SaveImage and
    SearchByImage from iOS context menu. Recorded when the JavaScript returns,
    or fails for timeout.
  </summary>
</histogram>

<histogram name="ContextMenu.iOS.LensSupportStatus" enum="IOSLensSupportStatus"
    expires_after="M108">
  <obsolete>
    Replaced by Mobile.ContextMenu.LensSupportStatus
  </obsolete>
  <owner>hujasonx@google.com</owner>
  <owner>lens-in-bling-team@google.com</owner>
  <summary>
    Whether or not Lens is supported, and if not, the reason why. Recorded only
    if the feature is enabled when the long-press context menu is shown for an
    image.
  </summary>
</histogram>

<histogram name="ContextMenu.iOS.LensWebUploadStatus"
    enum="IOSLensWebUploadStatus" expires_after="M108">
  <obsolete>
    Replaced by Mobile.ContextMenu.LensWebUploadStatus
  </obsolete>
  <owner>hujasonx@google.com</owner>
  <owner>lens-in-bling-team@google.com</owner>
  <summary>
    The status of the upload of image data to Lens. Recorded only when the Lens
    feature is triggered via the context menu entry from an image long-press.
  </summary>
</histogram>

<histogram name="ContextMenu.iOS.LensWebUploadTime" units="ms"
    expires_after="M108">
  <obsolete>
    Replaced by Mobile.ContextMenu.LensWebUploadTime
  </obsolete>
  <owner>hujasonx@google.com</owner>
  <owner>lens-in-bling-team@google.com</owner>
  <summary>
    Logs the time it takes to upload image data to the Lens Web servers.
    Recorded only when the Lens feature is triggered via the context menu entry
    from an image long-press.
  </summary>
</histogram>

<histogram name="ContextMenu.LensSupportStatus" enum="LensSupportStatus"
    expires_after="2024-02-20">
  <owner>benwgold@google.com</owner>
  <owner>lens-chrome@google.com</owner>
  <summary>
    Whether the user supports the Lens intent and if not, the reason why.
    Recorded only if the feature is enabled when the long-press context menu is
    shown for an image.
  </summary>
</histogram>

<histogram name="ContextMenu.SaveLinkType" enum="ContextMenuSaveLinkType"
    expires_after="M77">
  <obsolete>
    Removed in M103
  </obsolete>
  <owner>qinmin@chromium.org</owner>
  <summary>
    Type of the url when user saves the content through the save link context
    menu.
  </summary>
</histogram>

<histogram name="ContextMenu.SelectedOptionAndroid{Type}"
    enum="ContextMenuOptionAndroid" expires_after="never">
<!-- expires-never: part of top-line metric (internal: go/chrome-browser-nsm) -->

  <owner>avi@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <summary>
    {Type}

    The option that the user selected from a context menu on Android. This is
    logged on Android only; check out ContextMenu.SelectedOptionIOS for iOS, and
    ContextMenu.SelectedOptionDesktop for desktop. Note that if a menu is
    invoked on mixed content, only one of the submetrics receives the log; read
    the code to determine which one.

    This histogram is of special interest to the chrome-analysis-team@. Do not
    change its semantics or retire it without talking to them first.
  </summary>
  <token key="Type" variants="ContextMenuAndroidTypes"/>
</histogram>

<histogram base="true" name="ContextMenu.SelectedOptionDesktop"
    enum="ContextMenuOptionDesktop" expires_after="2024-02-25">
  <owner>avi@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    The option that the user selected from a context menu on desktop. This is
    logged on desktop only; check out ContextMenu.SelectedOptionIOS for iOS, and
    ContextMenu.SelectedOptionAndroid for Android. Note that if a menu is
    invoked on mixed content, only one of the submetrics receives the log; read
    the code to determine which one.
  </summary>
</histogram>

<histogram base="true" name="ContextMenu.SelectedOptionIOS"
    enum="ContextMenuOptionIOS" expires_after="M98">
  <obsolete>
    Replaced by Mobile.ContextMenu.WebImage.Actions,
    Mobile.ContextMenu.WebImageLink.Actions and
    Mobile.ContextMenu.WebLink.Actions in M98
  </obsolete>
  <owner>avi@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <summary>
    The option that the user selected from a context menu on iOS. This is logged
    on iOS only; check out ContextMenu.SelectedOptionAndroid for Android, and
    ContextMenu.SelectedOptionDesktop for desktop. Note that if a menu is
    invoked on mixed content, only one of the submetrics receives the log; read
    the code to determine which one.

    This histogram is of special interest to the chrome-analysis-team@. Do not
    change its semantics or retire it without talking to them first.
  </summary>
</histogram>

<histogram name="ContextMenu.Shown{Type}" enum="BooleanPresent"
    expires_after="2024-05-27">
  <owner>mpearson@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    {Type}

    Recorded when a context menu is shown, sliced by whether a web contents was
    present. (It generally should be; indeed, this code path should not be
    followed when it is absent. For instance, invoking a context menu from the
    new tab page or from the sad tab page will not cause an emission to this
    histogram.) Note that this refers to link context menus, not the
    cut-copy-paste context menus that can appear during long presses on text on
    a web page or long presses in the omnibox. This is an Android-only metric;
    compare with RenderViewContextMenu.Shown and RenderViewContextMenu.Used on
    desktop.
  </summary>
  <token key="Type" variants="ContextMenuAndroidTypes"/>
</histogram>

<histogram name="ContextMenu.ThumbnailFetched" enum="BooleanSuccess"
    expires_after="2020-06-30">
  <obsolete>
    Removed in M88.
  </obsolete>
  <owner>twellington@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Logged when the callback to fetch the thumbnail returns a result: Success
    (bitmap data received) or Failure (null bitmap). Android only.
  </summary>
</histogram>

<histogram name="ContextMenu.TimeToSelectShare" units="ms"
    expires_after="2023-02-19">
  <owner>jeffreycohen@chromium.org</owner>
  <owner>chrome-shared-highlighting@google.com</owner>
  <summary>
    Records how long it takes to press on &quot;Share&quot; from the time
    context menu is shown. Android only.
  </summary>
</histogram>

<histogram name="ContextMenu.TimeToTakeAction.Abandoned" units="ms"
    expires_after="2024-02-20">
  <owner>twellington@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    The time it takes for the user to abandon the context menu after it's shown
    by pressing back or touching outside the menu. This is only logged if the
    menu is abandoned. See ContextMenu.TimeToTakeAction.SelectedItem for the
    cases where it is closed as a result of user interaction with the menu.
    Android only.
  </summary>
</histogram>

<histogram name="ContextMenu.TimeToTakeAction.SelectedItem" units="ms"
    expires_after="2024-03-10">
  <owner>twellington@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    The time it takes for the user to select an item. This is only logged if the
    menu is closed as a result of the user clicking a menu item or a DirectShare
    button. See ContextMenu.TimeToTakeAction.Abandoned for the cases where it is
    abandoned by the user. Android only.
  </summary>
</histogram>

<histogram name="ContextMenu.ViewsTextServices.Emoji" enum="Boolean"
    expires_after="2023-10-08">
  <owner>yyushkina@chromium.org</owner>
  <summary>
    Number of times the emoji item in the views text services context menu is
    used.
  </summary>
</histogram>

<histogram name="ContextMenu.WaitingForElementDetails" enum="BooleanHit"
    expires_after="M98">
  <obsolete>
    Removed in M98 as the context menu implementation changed.
  </obsolete>
  <owner>michaeldo@chromium.org</owner>
  <owner>src/ios/web/OWNERS</owner>
  <summary>
    Logs true when the context menu gesture recognizer fully recognizes a long
    press, but is still waiting on the DOM element details before the context
    menu can be shown. Only logged on iOS.
  </summary>
</histogram>

<histogram name="Conversions.AggregatableKeysPerSource" units="keys"
    expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures the number of aggregation keys provided in attribution source
    registration headers. Recorded once for each source registration header when
    parsed from the attributionsrc response.
  </summary>
</histogram>

<histogram name="Conversions.AggregatableReport.AssembleReportStatus"
    enum="ConversionAssembleAggregatableReportStatus"
    expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures how often aggregatable reports are assembled successfully or failed
    and why. Recorded once for each aggregatable report processed by the
    aggregation service on each send attempt.
  </summary>
</histogram>

<histogram name="Conversions.AggregatableReport.CreateReportStatus4"
    enum="ConversionCreateAggregatableReportStatus" expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures how often aggregatable reports are stored successfully or rejected
    and why. Recorded once for each trigger event processed by the attribution
    storage layer. `kNotRegistered` will be logged if the source or trigger
    doesn't declare aggregatable data.
  </summary>
</histogram>

<histogram name="Conversions.AggregatableReport.DroppedKeysPercentage"
    units="%" expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures the percentage of aggregation keys dropped per trigger. Recorded
    when creating the aggregatable histogram. Not recorded if no aggregation
    keys were declared.
  </summary>
</histogram>

<histogram name="Conversions.AggregatableReport.ExtraReportDelay" units="ms"
    expires_after="M121">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the &quot;extra&quot; non-scheduled time it took to send a
    particular aggregatable attribution report. This is primarily due to a
    report's scheduled report time taking place while the browser is closed or
    there is network issue. Recorded when an aggregatable report is to be
    assembled.
  </summary>
</histogram>

<histogram
    name="Conversions.AggregatableReport.ExtraReportDelayForSuccessfulSend"
    units="ms" expires_after="2024-03-10">
  <owner>tquintanilla@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the &quot;extra&quot; non-scheduled time it took to confirm the
    aggregatable attribution report was sent. This is primarily due to a
    report's scheduled report time taking place while the browser is closed or
    there is network issue. Recorded when an aggregatable report is successfully
    sent.
  </summary>
</histogram>

<histogram name="Conversions.AggregatableReport.FilteredTriggerDataPercentage"
    units="%" expires_after="M121">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures the percentage of aggregatable trigger data filtered per trigger.
    Recorded when creating the aggregatable histogram. Not recorded if no
    trigger data was declared. This is effectively how many trigger side
    dimensions the reporter declared, but were not used for histogram
    generation.
  </summary>
</histogram>

<histogram name="Conversions.AggregatableReport.NumContributionsPerReport2"
    units="contribution" expires_after="M121">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures the number of aggregatable histogram contributions per report.
    Recorded when creating the aggregatable histogram.
  </summary>
</histogram>

<histogram
    name="Conversions.AggregatableReport.PendingAndBrowserWentOffline.{TimeSpan}"
    units="ms" expires_after="2024-03-10">
  <owner>anthonygarant@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Upon storing an Aggregatable Report at `creation_time`, it is scheduled with
    a `reporting_delay` to send at time `report_time` and is pending until then.

    If the browser closes or the device goes offline, and until it re-opens or
    re-connects, we are unable to send reports. On such events, for each pending
    reports, we record two {TimeSpan}s: [1] TimeSinceCreation: The time elapsed
    since the report was created (creation_time - now). [2] TimeUntilReportTime:
    The time remaining for the report to be sent (report_time - now).

    The metrics will enable us to quantify the extent to which reducing
    `reporting_delay` would increase the number of reports sent before an
    unavailability event.

    [Limitation] To limit memory usage, a maximum of 50 pending reports timings
    are handled. Past this number, reports are dropped (until reports get sent
    or an unavailability event occurs). Given that the most recent reports can
    be dropped, we can expect the `TimeSinceCreation` to be biased down slightly
    and `TimeUntilReportTime` to be biased up slightly. We expect this situation
    to be infrequent given the 10-60 minutes reporting window.
  </summary>
  <token key="TimeSpan">
    <variant name="TimeSinceCreation"/>
    <variant name="TimeUntilReportTime"/>
  </token>
</histogram>

<histogram name="Conversions.AggregatableReport.ReportSendOutcome2"
    enum="ConversionReportSendOutcome" expires_after="M121">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the high level request status of an aggregatable report. Recorded
    once per aggregatable report. For aggregatable report that has been retried,
    only the last retry will be counted.
  </summary>
</histogram>

<histogram name="Conversions.AggregatableReport.SchedulerReportDelay"
    units="ms" expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the time difference from when the report was intended to be sent,
    and the actual report time. This is different from
    Conversions.AggregatableReport.ExtraReportDelay because it uses the send
    attempt report time, rather than initial report time assigned by the API.
    Accounts for any delays in Chrome scheduling the report. Recorded when an
    aggregatabl report is to be assembled.
  </summary>
</histogram>

<histogram
    name="Conversions.AggregatableReport.TimeFromTriggerToReportAssembly2"
    units="ms" expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the time between a trigger and its assembly. This is emitted
    whenever an aggregatable report is to be assembled by the aggregation
    service.
  </summary>
</histogram>

<histogram
    name="Conversions.AggregatableReport.TimeFromTriggerToReportSentSuccessfully"
    units="ms" expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the time between a trigger and its reporting. This is emitted only
    when an aggregatable report is sent succeessfully to the reporting endpoint,
    and not emitted for debug reports.
  </summary>
</histogram>

<histogram name="Conversions.AndroidRegistrationResult.{Type}2"
    enum="ConversionAndroidRegistrationResult" expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures how often attribution OS registrations were successfully registered
    with Android or failed and why. Only recorded on Android when the
    AttributionReportingCrossAppWeb feature is enabled. Recorded for each OS
    registration processed by the Java attribution OS-level manager.
  </summary>
  <token key="Type">
    <variant name="Source"/>
    <variant name="Trigger"/>
  </token>
</histogram>

<histogram name="Conversions.AttributionSrcRequestStatus"
    enum="ConversionAttributionSrcRequestStatus" expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the status of the attributionsrc requests. Recorded when the request
    started and finished.
  </summary>
</histogram>

<histogram name="Conversions.AttributionSupport"
    enum="ConversionAttributionSupport" expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records whether web or OS-level attribution is supported on the device. Only
    recorded on Android when the AttributionReportingCrossAppWeb feature is
    enabled. Recorded once per browser session when the browser starts up.
  </summary>
</histogram>

<histogram name="Conversions.ClearDataTime" units="ms" expires_after="M121">
  <owner>johnidel@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Records the time it takes to clear conversion data. Logged any time site
    data is cleared in Chrome.
  </summary>
</histogram>

<histogram name="Conversions.CreateReportStatus8"
    enum="ConversionStorageCreateReportStatus" expires_after="2024-03-10">
  <owner>tquintanilla@chromium.org</owner>
  <owner>apaseltiner@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures how often event-level triggers are stored successfully or rejected
    and why. Recorded once for each conversion event processed by the
    attribution storage layer.
  </summary>
</histogram>

<histogram
    name="Conversions.DebugReport.HttpResponseOrNetErrorCodeAggregatable"
    enum="CombinedHttpResponseAndNetErrorCode" expires_after="M121">
  <owner>anthonygarant@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Error info for sending a debug attribution report, recorded for each sent
    aggregatable report. The HTTP response code is recorded if there is no net
    error code for the request, or the net error code indicates there was a
    response code failure.
  </summary>
</histogram>

<histogram name="Conversions.DebugReport.HttpResponseOrNetErrorCodeEventLevel"
    enum="CombinedHttpResponseAndNetErrorCode" expires_after="M121">
  <owner>anthonygarant@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Error info for sending a debug attribution report, recorded for each sent
    event-level report. The HTTP response code is recorded if there is no net
    error code for the request, or the net error code indicates there was a
    response code failure.
  </summary>
</histogram>

<histogram name="Conversions.DebugReport.ReportRetrySucceedAggregatable"
    enum="BooleanSuccess" expires_after="M121">
  <owner>anthonygarant@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records whether a particular aggregatable debug attribution report was
    successful. Emitted for all aggregatable debug attribution reports that
    retry.
  </summary>
</histogram>

<histogram name="Conversions.DebugReport.ReportRetrySucceedEventLevel"
    enum="BooleanSuccess" expires_after="M121">
  <owner>anthonygarant@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records whether a particular event-level debug attribution report was
    successful. Emitted for all event-level debug attribution reports that
    retry.
  </summary>
</histogram>

<histogram name="Conversions.DebugReport.ReportStatusAggregatable"
    enum="ConversionReportStatus" expires_after="M121">
  <owner>anthonygarant@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the high-level request status of an aggregatable debug attribution
    report. Recorded for every debug aggregatable attribution report sent.
  </summary>
</histogram>

<histogram name="Conversions.DebugReport.ReportStatusEventLevel"
    enum="ConversionReportStatus" expires_after="M121">
  <owner>anthonygarant@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the high-level request status of an event-level debug attribution
    report. Recorded for every debug event-level attribution report sent.
  </summary>
</histogram>

<histogram name="Conversions.DeferredDataHostProcessedAfterTimeout"
    enum="Boolean" expires_after="2024-03-10">
  <owner>anthonygarant@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    When registering an attribution data host, its registration will be deferred
    if it can register triggers and there are pending navigation-source
    registrations from the page that navigated to that page. Receivers are
    deferred until the pending navigation-source registrations complete or a
    timeout is reached.

    When processing a deferred attribution data host registration, this metric
    records if it's due to a timeout.
  </summary>
</histogram>

<histogram name="Conversions.DestinationRateLimitResult"
    enum="AttributionDestinationRateLimitResult" expires_after="2024-02-25">
  <owner>csharrison@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    For every successfully parsed attribution source that is also allowed by
    browser policy, records the result of the time-based destination limit,
    which governs whether a source can proceed to the storage layer.
  </summary>
</histogram>

<histogram name="Conversions.EnqueueEventAllowed" enum="BooleanAllowed"
    expires_after="2024-03-10">
  <owner>apaseltiner@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures how often sources and triggers are allowed to be enqueued for
    processing in the attribution manager. If the queue reaches a maximum size,
    additional sources and triggers are dropped. Events are enqueued while
    waiting for a previous debug-cookie check to complete.
  </summary>
</histogram>

<histogram name="Conversions.EnqueueOsEventAllowed" enum="BooleanAllowed"
    expires_after="2024-03-10">
  <owner>apaseltiner@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures how often OS sources and triggers are allowed to be enqueued for
    processing in the attribution manager. If the queue reaches a maximum size,
    additional OS sources and triggers are dropped. Events are enqueued while
    waiting for a previous debug-cookie check to complete. Only recorded on
    Android.
  </summary>
</histogram>

<histogram name="Conversions.ExtraReportDelay2" units="ms"
    expires_after="2024-03-10">
  <owner>apaseltiner@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Records the &quot;extra&quot; non-scheduled time it took to send a
    particular conversion report. This is primarily due to a report's scheduled
    report time taking place while the browser is closed. Recorded when a
    conversion report is to be sent.
  </summary>
</histogram>

<histogram name="Conversions.ExtraReportDelayForSuccessfulSend" units="ms"
    expires_after="2024-03-10">
  <owner>tquintanilla@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the &quot;extra&quot; non-scheduled time it took to confirm the
    particular attribution report was sent. This is primarily due to a report's
    scheduled report time taking place while the browser is closed. Recorded
    when an attribution report is successfully sent.
  </summary>
</histogram>

<histogram name="Conversions.FiltersPerFilterData" units="filters"
    expires_after="M121">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures filter sizes in source and trigger registrations. This includes
    filter data in source, top-level trigger, event-level and aggregatable
    trigger data. Recorded once for each filter data when parsed from the
    attributionsrc response.
  </summary>
</histogram>

<histogram name="Conversions.GetMeasurementStatusTime" units="ms"
    expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the time it took to go througth JNI to invoke Android API to get
    measurement status. Only recorded on Android when the
    AttributionReportingCrossAppWeb feature is enabled. Recorded once per
    browser session when the browser starts up. Only recorded if
    base::ThreadTicks is suppported.
  </summary>
</histogram>

<histogram name="Conversions.HttpResponseOrNetErrorCodeAggregatable"
    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2024-03-10">
  <owner>anthonygarant@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Error info for sending an attribution report, recorded for each sent
    aggregatable report. The HTTP response code is recorded if there is no net
    error code for the request, or the net error code indicates there was a
    response code failure.
  </summary>
</histogram>

<histogram name="Conversions.HttpResponseOrNetErrorCodeEventLevel"
    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2024-03-10">
  <owner>anthonygarant@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Error info for sending an attribution report, recorded for each sent
    event-level report. The HTTP response code is recorded if there is no net
    error code for the request, or the net error code indicates there was a
    response code failure.
  </summary>
</histogram>

<histogram name="Conversions.ImpressionNavigationHasDeadInitiator"
    enum="Boolean" expires_after="2024-03-10">
  <owner>johnidel@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures how often impressions are ignored because the initiator frame is
    dead by the time the navigation reaches the browser.
  </summary>
</histogram>

<histogram name="Conversions.ImpressionsDeletedInDataClearOperation"
    units="impressions" expires_after="2024-03-10">
  <owner>johnidel@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <owner>linnan@chromium.org</owner>
  <summary>
    Records the number of impressions deleted per clearing operation.
  </summary>
</histogram>

<histogram name="Conversions.IncrementalTaintingFailures"
    units="failed registrations" expires_after="2024-03-10">
  <owner>csharrison@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures the number of failures via the proposed insecure tainting
    mechanism, where a redirect chain will be considered &quot;tainted&quot;
    when it encounters its first insecure redirect, causing any subsequent
    registrations to fail even if they are secure. This metric attempts to
    measure the breakage. It is emitted on the completion of any main frame
    navigation which had at least one secure response register ARA headers. It
    counts how many failed registrations that navigation would have observed
    with tainting enabled.
  </summary>
</histogram>

<histogram name="Conversions.NavigationDataHostStatus3"
    enum="ConversionNavigationDataHostStatus" expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records status for navigation data hosts. A single navigation data host may
    emit two status, one when the navigation started and the data host was
    registered, and one when the navigation finished or failed.
  </summary>
</histogram>

<histogram name="Conversions.OsRegistrationResult.{Type}"
    enum="ConversionOsRegistrationResult" expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures how often attribution OS registrations were successfully registered
    with Android or failed and why. Only recorded on Android when the
    AttributionReportingCrossAppWeb feature is enabled. Recorded for each OS
    registration processed by the attribution manager layer.
  </summary>
  <token key="Type">
    <variant name="Source"/>
    <variant name="Trigger"/>
  </token>
</histogram>

<histogram name="Conversions.ProcessRegisterDataHostDelay" units="ms"
    expires_after="2024-03-10">
  <owner>anthonygarant@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the delay between a data host registration being deferred by the
    AttributionDataHostManagerImpl and it being processed. Only recorded for
    data host that are deferred rather than processed immediately or dropped.
  </summary>
</histogram>

<histogram name="Conversions.RegisterDataHostOutcome"
    enum="ConversionRegisterDataHostOutcome" expires_after="2024-03-10">
  <owner>anthonygarant@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the status of a data host registraton. Its status is influenced by
    trigger buffering.
  </summary>
</histogram>

<histogram name="Conversions.RegistrationsPerRedirectChain"
    units="registrations" expires_after="M121">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures the number of sources or triggers registered per redirect chain.
    Recorded when the corresponding resource client finishes.
  </summary>
</histogram>

<histogram name="Conversions.ReportRetrySucceedAggregatable"
    enum="BooleanSuccess" expires_after="M121">
  <owner>anthonygarant@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records whether a particular aggregatable attribution report was successful.
    Emitted for all conversion aggregatable reports which retry.
  </summary>
</histogram>

<histogram name="Conversions.ReportRetrySucceedEventLevel"
    enum="BooleanSuccess" expires_after="2024-03-10">
  <owner>anthonygarant@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records whether a particular event-level attribution report was successful.
    Emitted for all attribution event-level reports which retry.
  </summary>
</histogram>

<histogram name="Conversions.ReportsDeletedInDataClearOperation.Aggregatable"
    units="conversions" expires_after="2024-03-10">
  <owner>johnidel@chromium.org</owner>
  <owner>tquintanilla@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the number of aggregatable attribution reports deleted per clearing
    operation.
  </summary>
</histogram>

<histogram name="Conversions.ReportsDeletedInDataClearOperation.Event"
    units="conversions" expires_after="2024-03-10">
  <owner>johnidel@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <owner>linnan@chromium.org</owner>
  <summary>
    Records the number of event-level attribution reports deleted per clearing
    operation.
  </summary>
</histogram>

<histogram name="Conversions.ReportSendOutcome3"
    enum="ConversionReportSendOutcome" expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the high level request status of a conversion report. Recorded once
    per conversion report. For conversion report that has been retried, only the
    last retry will be counted.
  </summary>
</histogram>

<histogram name="Conversions.ReportStatusAggregatable"
    enum="ConversionReportStatus" expires_after="2024-03-10">
  <owner>anthonygarant@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the high level request status of an attribution report. Recorded for
    every aggregatable attribution report sent. For attribution report that has
    been retried, every retry will be counted.
  </summary>
</histogram>

<histogram name="Conversions.ReportStatusEventLevel"
    enum="ConversionReportStatus" expires_after="2024-03-10">
  <owner>anthonygarant@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the high level request status of an attribution report. Recorded for
    every event-level attribution report sent. For attribution report that has
    been retried, every retry will be counted.
  </summary>
</histogram>

<histogram name="Conversions.ReportVerification.DestinationOriginStatus"
    enum="ConversionsTriggerVerificationDestinationOriginStatus"
    expires_after="M121">
  <owner>anthonygarant@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the top_frame origin status when an attempting to complete a trigger
    verification. In the attribution context, the origin represents the
    destination origin which is required to complete the verification operation.
  </summary>
</histogram>

<histogram name="Conversions.ReportVerification.Duration.{TimeSpan}.{Outcome}"
    units="ms" expires_after="M121">
  <owner>anthonygarant@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Time taken to execute various parts of a Trigger Verification operation: [1]
    GetKeyCommitment = time taken to retrieve the issuer's key commitment. [2]
    InitializeCryptographer = time taken to initialize the BoringSSL
    cryptographer with the issuer's keys. [3] BlindMessage = time taken by the
    cryptographer to blind the message. [4] Issuer = time from the end of the
    outbound BlindMessage half to the beginning of the inbound UnblindSignature
    half. [5] UnblindSignature = time taken to unblind the blind signature
    received from the issuer. [6] Total = GetKeyCommitment +
    InitializeCryptographer + BlindMessage + UnblindSignature (only recorded for
    operations that see issuer's responses)

    Each part of the operation can be a Failure or a Success. e.g. if we are
    unable to retrieve key commitment for an issuer, it is a failure. The
    metrics are recorded when the verification operation finish.
  </summary>
  <token key="TimeSpan">
    <variant name="BlindMessage"/>
    <variant name="GetKeyCommitment"/>
    <variant name="InitializeCryptographer"/>
    <variant name="SignBlindMessage"/>
    <variant name="Total"/>
    <variant name="UnblindSignature"/>
  </token>
  <token key="Outcome">
    <variant name="Failure"/>
    <variant name="Success"/>
  </token>
</histogram>

<histogram name="Conversions.ReportVerification.GetHeadersStatus"
    enum="ConversionTriggerVerificationGetHeadersStatus" expires_after="M121">
  <owner>anthonygarant@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the status of the initial part of a verification operation which
    attempts to retrieve verification headers to be added to a trigger
    registration request.
  </summary>
</histogram>

<histogram name="Conversions.ReportVerification.ProcessVerificationStatus"
    enum="ConversionTriggerVerificationProcessVerificationStatus"
    expires_after="M121">
  <owner>anthonygarant@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the status of the second part of a verification operation which
    processes the private state issuer's signature to generate a verification
    token.
  </summary>
</histogram>

<histogram name="Conversions.ReportVerification.ReportHasVerification"
    enum="Boolean" expires_after="M121">
  <obsolete>
    Metric no longer relevant/needed considering null reports generation.
  </obsolete>
  <owner>anthonygarant@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records whether an aggregatable report is sent with a verification token or
    not. Only recorded for reports if the Report Verification feature is
    enabled.
  </summary>
</histogram>

<histogram name="Conversions.SchedulerReportDelay" units="ms"
    expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the time difference from when the report was intended to be sent,
    and the actual report time. This is different from
    Conversions.ExtraReportDelay2 because it uses the send attempt report time,
    rather than initial report time assigned by the API. Accounts for any delays
    in Chrome scheduling the report. Recorded when an event-level report is to
    be sent.
  </summary>
</histogram>

<histogram name="Conversions.SentVerboseDebugReportType3"
    enum="ConversionVerboseDebugReportType" expires_after="2024-02-20">
  <owner>tquintanilla@chromium.org</owner>
  <owner>linnan@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures how often verbose debug reports are sent and the corresponding
    report type. Recorded when the verbose debug report is created. As there may
    be more than one report type per report, multiple entries may be logged for
    a report.
  </summary>
</histogram>

<histogram name="Conversions.SourceRegistrationError5"
    enum="ConversionSourceRegistrationError" expires_after="2024-03-24">
  <owner>tquintanilla@chromium.org</owner>
  <owner>linnan@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures how often source registration parsing failed and why. Recorded only
    when parsing failed; not recorded when parsing succeeded.
  </summary>
</histogram>

<histogram name="Conversions.SourcesPerSourceOrigin.{Position}" units="sources"
    expires_after="M121">
  <owner>anthonygarant@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    When the storage database is initialized upon the API's first use, count and
    sort in descending order the number of sources per source origin. The metric
    records the count at the {Position} position. Only recorded if
    initialization is successful.
  </summary>
  <token key="Position">
    <variant name="1st"/>
    <variant name="3rd"/>
    <variant name="7th"/>
    <variant name="20th"/>
  </token>
</histogram>

<histogram name="Conversions.SourceStoredStatus6"
    enum="ConversionStorageSourceStatus" expires_after="2024-03-10">
  <owner>tquintanilla@chromium.org</owner>
  <owner>anthonygarant@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures how often sources are stored successfully or rejected and why.
    Recorded once for each source event processed by the attribution storage
    layer.
  </summary>
</histogram>

<histogram name="Conversions.Storage.ClearDataWithFilterDuration" units="ms"
    expires_after="M121">
  <owner>johnidel@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Records the time it took to do perform a clear operation on the database
    when supplied an origin filter. Recorded when the conversion database
    finishes performing a clear operation. Note that filters may vary in size
    and computation complexity, skewing this metric aribtrarily.
  </summary>
</histogram>

<histogram name="Conversions.Storage.CreationTime" units="ms"
    expires_after="2024-03-10">
  <owner>johnidel@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Records the time it took to initialize a new conversions database from
    scratch. Recorded when the conversion database finishes initialization. Only
    recorded on platforms with base::ThreadTicks support.
  </summary>
</histogram>

<histogram name="Conversions.Storage.MigrationTime" units="ms"
    expires_after="2024-03-10">
  <owner>johnidel@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Records the time it took to migrate a preexisting conversions database to
    the latest schema. Recorded when the conversion database finishes
    initialization. Only recorded on platforms with base::ThreadTicks support.
  </summary>
</histogram>

<histogram name="Conversions.Storage.Sql.FileSize" units="KB"
    expires_after="2024-03-24">
  <owner>tquintanilla@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    When the storage database is initialized upon the API's first use, records
    the file size of the database in KB. Only recorded if initialization is
    successful.
  </summary>
</histogram>

<histogram name="Conversions.Storage.Sql.FileSize.PerSource" units="bytes"
    expires_after="M121">
  <owner>anthonygarant@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    When the storage database is initialized upon the API's first use, records
    the file size of the database in bytes divided by the number of sources in
    storage. Only recorded if initialization is successful.
  </summary>
</histogram>

<histogram name="Conversions.Storage.Sql.FileSizeSourcesPerOriginLimitReached"
    units="KB" expires_after="M121">
  <owner>tquintanilla@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the file size of the storage database in KB when the max sources per
    origin limit is reached. Emitted whenever a source fails to be stored due to
    this limit.
  </summary>
</histogram>

<histogram
    name="Conversions.Storage.Sql.FileSizeSourcesPerOriginLimitReached.PerSource"
    units="bytes" expires_after="M121">
  <owner>anthonygarant@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the file size of the storage database in bytes divided by the number
    of sources in storage. Reported when the max sources per origin limit is
    reached. Emitted whenever a source fails to be stored due to this limit.
  </summary>
</histogram>

<histogram name="Conversions.Storage.Sql.InitStatus2"
    enum="ConversionStorageSqlInitStatus" expires_after="M121">
  <owner>johnidel@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Records initialisation statuses of ConversionStorageSql. Note: currently
    ConversionStorageSql is initialised lazily.
  </summary>
</histogram>

<histogram name="Conversions.TimeFromConversionToReportSend" units="hours"
    expires_after="2024-03-10">
  <owner>johnidel@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Records the time between a conversion and its reporting. This is emitted
    whenever a conversion report is sent.
  </summary>
</histogram>

<histogram name="Conversions.TimeFromTriggerToReportSentSuccessfully"
    units="hours" expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the time between a trigger and its reporting. This is emitted only
    when an event-level report is sent successfully to the reporting endpoint,
    and not emitted for debug reports.
  </summary>
</histogram>

<histogram name="Conversions.TriggerRegistrationError7"
    enum="ConversionTriggerRegistrationError" expires_after="M121">
  <owner>tquintanilla@chromium.org</owner>
  <owner>linnan@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures how often trigger registration parsing failed and why. Recorded
    only when parsing failed; not recorded when parsing succeeded.
  </summary>
</histogram>

<histogram name="Conversions.ValuesPerFilter" units="values"
    expires_after="M121">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Measures the number of values in a filter. This includes filter data in
    source, top-level trigger, event-level and aggregatable trigger data.
    Recorded once for each filter in the filter data when parsed from the
    attributionsrc response.
  </summary>
</histogram>

<histogram name="Conversions.VerboseDebugReport.HttpResponseOrNetErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Error info for sending a verbose debug report, recorded for each sent
    verbose debug report. The net error code is recorded if the HTTP response
    code is unavailable.
  </summary>
</histogram>

<histogram name="Conversions.{RegistrationType}.UsesReservedKeys"
    enum="Boolean" expires_after="M121">
  <owner>anthonygarant@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Per the spec, {RegistrationType} filtering keys prefixed with &quot;_&quot;
    should only be used for specified features, e.g., lookback window.

    Before enforcing this, we use this metric to measure the number of
    {RegistrationType}s that would be affected by the change. Recorded for
    {RegistrationType} registrations which can otherwise be parsed successfully.
  </summary>
  <token key="RegistrationType">
    <variant name="Source" summary="source"/>
    <variant name="Trigger" summary="trigger"/>
  </token>
</histogram>

<histogram name="Conversions.{ReportType}.NetworkConnectionTypeOnFailure"
    enum="NetworkConnectionType" expires_after="2024-03-10">
  <owner>linnan@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the network connection type in the event that the report failed to
    be sent due to network issues. Recorded for each report sending attempt that
    failed.
  </summary>
  <token key="ReportType">
    <variant name="AggregatableReport"/>
    <variant name="EventLevelReport"/>
  </token>
</histogram>

<histogram name="Conversions.{ReportType}.ReportRetriesTillSuccessOrFailure"
    enum="ConversionReportSendRetryCount" expires_after="M121">
  <owner>tquintanilla@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    Records the number of retries before a report is successfully sent or
    records 'Failed' if report delivery fails after reaching the max number of
    retries (2).
  </summary>
  <token key="ReportType">
    <variant name="AggregatableReport"/>
    <variant name="EventLevelReport"/>
  </token>
</histogram>

<histogram name="CopylessPaste.CacheHit" enum="CopylessCacheHit"
    expires_after="2020-03-01">
  <owner>wychen@chromium.org</owner>
  <summary>
    The cache hit status of metadata extraction for AppIndexing.
  </summary>
</histogram>

<histogram name="CrashExitCodes.Extension" enum="CrashExitCodes"
    expires_after="never">
<!-- expires-never: Critical stability metrics. go/chrome-stability-metrics -->

  <owner>wfh@chromium.org</owner>
  <owner>chrome-stability-core@google.com</owner>
  <summary>
    The exit codes for crashed extension processes. Note: Due to
    https://crbug.com/805754, the enum labels are off by 1 for M56 and earlier.
  </summary>
</histogram>

<histogram name="CrashExitCodes.Renderer" enum="CrashExitCodes"
    expires_after="never">
<!-- expires-never: Critical stability metrics. go/chrome-stability-metrics -->

  <owner>wfh@chromium.org</owner>
  <owner>chrome-stability-core@google.com</owner>
  <summary>
    The exit codes for crashed renderer processes. Note: Due to
    https://crbug.com/805754, the enum labels are off by 1 for M56 and earlier.
  </summary>
</histogram>

<histogram name="Crashpad.AnrUpload.Skipped" enum="AnrSkippedReason"
    expires_after="2024-02-20">
  <owner>smaier@chromium.org</owner>
  <owner>crashpad-dev@chromium.org</owner>
  <summary>The reason that an ANR upload was skipped.</summary>
</histogram>

<histogram name="Crashpad.CrashReportPending" enum="CrashpadReportPending"
    expires_after="never">
<!-- expires-never: Crashpad metrics are continually needed to diagnose issues found in the field. -->

  <owner>jperaza@chromium.org</owner>
  <owner>crashpad-dev@chromium.org</owner>
  <summary>
    The reason that a crash report entered the upload pending state.
  </summary>
</histogram>

<histogram name="Crashpad.CrashReportSize" units="bytes" expires_after="never">
<!-- expires-never: Crashpad metrics are continually needed to diagnose issues found in the field. -->

  <owner>jperaza@chromium.org</owner>
  <owner>crashpad-dev@chromium.org</owner>
  <summary>The size of a crash report minidump on disk when captured.</summary>
</histogram>

<histogram name="Crashpad.CrashUpload.AttemptSuccessful"
    enum="CrashpadUploadAttemptStatus" expires_after="never">
<!-- expires-never: Crashpad metrics are continually needed to diagnose issues found in the field. -->

  <owner>jperaza@chromium.org</owner>
  <owner>crashpad-dev@chromium.org</owner>
  <summary>Logs whether a crash uploaded succeeded or failed.</summary>
</histogram>

<histogram name="Crashpad.CrashUpload.Skipped"
    enum="CrashpadUploadSkippedReason" expires_after="never">
<!-- expires-never: Crashpad metrics are continually needed to diagnose issues found in the field. -->

  <owner>jperaza@chromium.org</owner>
  <owner>crashpad-dev@chromium.org</owner>
  <summary>The reason that a crash report upload was skipped.</summary>
</histogram>

<histogram name="Crashpad.ExceptionCaptureResult"
    enum="CrashpadExceptionCaptureResult" expires_after="never">
<!-- expires-never: Crashpad metrics are continually needed to diagnose issues found in the field. -->

  <owner>jperaza@chromium.org</owner>
  <owner>crashpad-dev@chromium.org</owner>
  <summary>The outcome of execution of the Crashpad exception handler.</summary>
</histogram>

<histogram name="Crashpad.ExceptionCode.Mac" enum="CrashpadMacExceptionCodes"
    expires_after="never">
<!-- expires-never: Crashpad metrics are continually needed to diagnose issues found in the field. -->

  <owner>mark@chromium.org</owner>
  <owner>crashpad-dev@chromium.org</owner>
  <summary>The exception code encountered in a crash on Mac OS X.</summary>
</histogram>

<histogram name="Crashpad.ExceptionCode.Win" enum="CrashpadWinExceptionCodes"
    expires_after="never">
<!-- expires-never: Crashpad metrics are continually needed to diagnose issues found in the field. -->

  <owner>jperaza@chromium.org</owner>
  <owner>crashpad-dev@chromium.org</owner>
  <summary>The exception code encountered in a crash on Windows.</summary>
</histogram>

<histogram name="Crashpad.ExceptionEncountered"
    enum="CrashpadExceptionProcessingState" expires_after="never">
<!-- expires-never: Crashpad metrics are continually needed to diagnose issues found in the field. -->

  <owner>jperaza@chromium.org</owner>
  <owner>crashpad-dev@chromium.org</owner>
  <summary>
    A count of the number of exceptions handled by Crashpad with two buckets for
    starting and finishing.
  </summary>
</histogram>

<histogram name="Crashpad.HandlerCrash.ExceptionCode.Mac"
    enum="CrashpadMacExceptionCodes" expires_after="never">
<!-- expires-never: Crashpad metrics are continually needed to diagnose issues found in the field. -->

  <owner>mark@chromium.org</owner>
  <owner>crashpad-dev@chromium.org</owner>
  <summary>
    The exception code encountered for a crash of the crash handler process on
    Mac OS X.
  </summary>
</histogram>

<histogram name="Crashpad.HandlerCrash.ExceptionCode.Win"
    enum="CrashpadWinExceptionCodes" expires_after="never">
<!-- expires-never: Crashpad metrics are continually needed to diagnose issues found in the field. -->

  <owner>jperaza@chromium.org</owner>
  <owner>crashpad-dev@chromium.org</owner>
  <summary>
    The exception code encountered for a crash of the crash handler process on
    Windows.
  </summary>
</histogram>

<histogram name="Crashpad.HandlerLifetimeMilestone"
    enum="CrashpadLifetimeMilestone" expires_after="M90">
  <expired_intentionally>
    Kept as a diagnostic metric.
  </expired_intentionally>
  <owner>jperaza@chromium.org</owner>
  <owner>crashpad-dev@chromium.org</owner>
  <summary>Handler start/crash/exit events.</summary>
</histogram>

<histogram name="Crashpad.IntermediateDump.Reader.InvalidKeySize"
    enum="CrashpadIntermediateDumpKey" expires_after="2024-02-20">
  <owner>justincohen@chromium.org</owner>
  <owner>crashpad-dev@chromium.org</owner>
  <summary>
    Records key id when id has an invalid sizein an intermediate dump.
  </summary>
</histogram>

<histogram name="Crashpad.IntermediateDump.Reader.MissingKey"
    enum="CrashpadIntermediateDumpKey" expires_after="2024-02-20">
  <owner>justincohen@chromium.org</owner>
  <owner>crashpad-dev@chromium.org</owner>
  <summary>Records key id when id is missing in an intermediate dump.</summary>
</histogram>

<histogram name="CrashReport.BreakpadIOSUploadOutcome"
    enum="FoundationPopularErrorCode" expires_after="2022-12-25">
  <obsolete>
    Removed 11/2022.
  </obsolete>
  <owner>justincohen@chromium.org</owner>
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    Reports the Foundation error code of an attempt to upload a breakpad crash
    report. &quot;NSNoError&quot; if the upload was successful.
  </summary>
</histogram>

<histogram name="CrashReport.Sender.ActiveRuntime" units="ms"
    expires_after="2021-05-23">
  <obsolete>
    As of 2020-12, we've decided on a timeout and no longer need this metric.
  </obsolete>
  <owner>mutexlox@chromium.org</owner>
  <owner>iby@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    The amount of time crash_sender takes to run when invoked directly on Chrome
    OS, without counting time spent sleeping (e.g. for hold_off_time). Used to
    make an informed decision about a timeout.
  </summary>
</histogram>

<histogram name="CrashReport.Sender.Runtime" units="ms"
    expires_after="2021-01-15">
  <obsolete>
    As of 2020-12, we've decided on a timeout and no longer need this metric.
  </obsolete>
  <owner>mutexlox@chromium.org</owner>
  <owner>iby@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    The amount of time crash_sender takes to run when invoked directly on Chrome
    OS. Used to make an informed decision about a timeout.
  </summary>
</histogram>

<histogram name="DataSaver.BlockingReadOSSettingCall" units="ms"
    expires_after="2022-05-19">
  <obsolete>
    Removed 05/2022.
  </obsolete>
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@chromium.org</owner>
  <summary>
    Time that the UI thread is blocked on loading the Android Data Saver setting
    from the OS.
  </summary>
</histogram>

<histogram name="DefaultBrowser.ActivateSettings.ErrorHresult" enum="Hresult"
    expires_after="M85">
  <owner>pmonette@chromium.org</owner>
  <owner>grt@chromium.org</owner>
  <summary>
    The HRESULT from ActivateApplication when opening the Win10+ settings page
    fails.
  </summary>
</histogram>

<histogram name="DefaultBrowser.InfoBar.UserInteraction"
    enum="DefaultBrowserInfoBarUserInteraction" expires_after="2024-02-11">
  <owner>pmonette@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Possible user interactions with the default browser info bar.
  </summary>
</histogram>

<histogram name="DefaultBrowser.InteractionResult"
    enum="MakeChromeDefaultResult" expires_after="M85">
  <obsolete>
    Removed in Chrome 78.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Results of interaction with set-as-default dialog in Win8+ first run flow.
  </summary>
</histogram>

<histogram name="DefaultBrowser.SetDefaultResult2" enum="DefaultWebClientState"
    expires_after="M85">
  <owner>pmonette@chromium.org</owner>
  <summary>
    The outcome of an attempt to set Chrome as the user's default browser.
  </summary>
</histogram>

<histogram name="DefaultBrowser.State" enum="DefaultBrowserState"
    expires_after="never">
<!-- expires-never: Used to keep track of desktop browser ecosystem. -->

  <owner>gab@chromium.org</owner>
  <owner>pmonette@chromium.org</owner>
  <summary>
    Whether Chrome was the default browser when it started up.

    Only logged correctly on Windows and Mac. Logged incorrectly on other
    platforms. On Linux, this histogram is no longer logged as of 2021/10/18 due
    to browser test hangs. See crbug.com/1216328.

    For ChromeOS, no histogram is necessary because Chrome is always the default
    browser.

    For Android, see Mobile.DefaultBrowser.State.

    For iOS, in the future Chrome will be allowed to be the default browser. How
    that will be logged is to be decided at the time of writing this
    description.
  </summary>
</histogram>

<histogram name="DefaultBrowser.Win10ChooserInvoked" enum="BooleanSuccess"
    expires_after="M85">
  <owner>pmonette@chromium.org</owner>
  <summary>
    When changing the default browser on Windows 10, records whether the browser
    chooser is successfully invoked when opening the settings page. This
    histogram is only recorded when the Win10AcceleratedDefaultBrowserFlow
    experiment is enabled.
  </summary>
</histogram>

<histogram name="DefaultProtocolClient.SetDefaultResult2"
    enum="DefaultWebClientState" expires_after="M77">
  <owner>pmonette@chromium.org</owner>
  <summary>
    The outcome of an attempt to set Chrome as the user's default client for a
    protocol.
  </summary>
</histogram>

<histogram name="DemoMode.ActiveApp" enum="DemoModeApp"
    expires_after="2024-02-11">
  <owner>llin@chromium.org</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    The currently active app or window. Sampled during demo sessions and
    reported while the user remains active.
  </summary>
</histogram>

<histogram name="DemoMode.AppLaunched" enum="DemoModeApp"
    expires_after="2024-02-11">
  <owner>llin@chromium.org</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    Records apps that have been launched by a user using the device during Demo
    mode. The sample is recorded when each app is launched. For any given app
    id, the metric is recorded only once per Demo Session.
  </summary>
</histogram>

<histogram name="DemoMode.AppLaunchSource" enum="DemoModeAppLaunchSource"
    expires_after="2023-08-27">
  <owner>llin@chromium.org</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    The source of app launches in demo mode, either the shelf, the app list, or
    the highlights app.
  </summary>
</histogram>

<histogram name="DemoMode.AttractLoop.Timestamp" units="ms"
    expires_after="2024-05-24">
  <owner>llin@google.com</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    The timestamp (i.e. milliseconds from the beginning of the Attract Loop
    video) at which the user broke the Demo Mode Attract Loop.
  </summary>
</histogram>

<histogram name="DemoMode.DwellTime" units="seconds" expires_after="2024-02-11">
  <owner>llin@chromium.org</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    The duration the user spent interacting with the demo session, measured from
    the first user activity to the last user activity. This metric rounds the
    duration to the nearest second and uses exponential bucketing capped at 1
    hour.
  </summary>
</histogram>

<histogram name="DemoMode.GMSCoreDialogShown" enum="Boolean"
    expires_after="2024-05-01">
  <owner>llin@chromium.org</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    Records whether a window associated with GMSCore has been created during the
    demo session.
  </summary>
</histogram>

<!-- Note: DemoMode.Highlights.* metrics are recorded via runtime-downloaded
  content that is not checked into Chromium. Please do not delete this code,
  even if it looks like there's no production references in Chromium, without
  first consulting the Demo Mode team. -->

<histogram
    name="DemoMode.Highlights.DetailsPageStayDuration.{HighlightsDetailsPageName}"
    units="ms" expires_after="2024-05-24">
  <owner>llin@google.com</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    The duration a user spent on a given details page of the Highlights App.
    Only is recorded for Highlights App versions with the UI concept of a
    &quot;details&quot; page.
  </summary>
  <token key="HighlightsDetailsPageName" variants="HighlightsDetailsPageName"/>
</histogram>

<histogram name="DemoMode.Highlights.FirstInteraction"
    enum="DemoModeHighlightsAction" expires_after="2024-05-24">
  <owner>llin@chromium.org</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    The first interaction (button clicks) after entering the Highlights app. The
    metric will be emitted once the user clicks on a button in Hightlights app,
    e.g. pillar page button or the home button on the home page.
  </summary>
</histogram>

<histogram name="DemoMode.Highlights.PageStayDuration.{HighlightsPageName}"
    units="seconds" expires_after="2024-05-24">
  <owner>llin@chromium.org</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    The time duration a user stays in each page of the Highlights app, e.g. the
    home page, each pillar page. The metric will be emitted when the user enters
    another page or exits the Highlights app.
  </summary>
  <token key="HighlightsPageName" variants="HighlightsPageName"/>
</histogram>

<histogram name="DemoMode.IdleLogoutWarningEvent"
    enum="DemoModeIdleLogoutWarningEvent" expires_after="2024-05-24">
  <owner>llin@chromium.org</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    Tracks whether the idle logout warning was canceled or proceeded to logout.
    Note: the count of &quot;shown&quot; includes both cases, so the count of
    &quot;shown and proceeded&quot; is equal to &quot;shown&quot; minus
    &quot;canceled&quot;.
  </summary>
</histogram>

<histogram name="DemoMode.ResourcesRemoval.Reason"
    enum="DemoModeResourcesRemovalReason" expires_after="2024-05-24">
  <owner>llin@chromium.org</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    Tracks the reason for removal of pre-install demo resources. To support
    offline demo mode, factory Chrome OS devices will have a set of offline
    enabled demo mode apps pre-installed. These resources are removed once they
    are not needed anymore.
  </summary>
</histogram>

<histogram name="DemoMode.ResourcesRemoval.Result"
    enum="DemoModeResourcesRemovalResult" expires_after="2024-05-24">
  <owner>llin@chromium.org</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    Tracks the result of requests to remove pre-installed demo resources. To
    support offline demo mode, factory Chrome OS devices will have a set of
    offline enabled demo mode apps pre-installed. These resources are removed
    once they are not needed anymore. This will record only requests that
    attempted deleting pre-installed resources from disk. Requests that fail
    early will be ignored. For example, a request will fail early if the device
    is in demo mode, or the resources have already been removed.
  </summary>
</histogram>

<histogram name="DemoMode.SessionLength" units="minutes"
    expires_after="2024-02-11">
  <owner>llin@chromium.org</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    A demo session starts when a user signs in using the policy-configured
    public account. It stops when the user signs out, either manually or after
    an idle timeout. Session length is the duration between the start and stop
    events. It is recorded during signing out and reported on the next chrome
    run. This metric tracks the recorded session length rounded down to the
    nearest minute and is capped at 2 hours.
  </summary>
</histogram>

<histogram name="DemoMode.Setup.DownloadDuration" units="minutes"
    expires_after="2024-02-04">
  <owner>llin@chromium.org</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    This records the time taken to download the demo mode resources when demo
    mode is setup for the first time.
  </summary>
</histogram>

<histogram name="DemoMode.Setup.EnrollDuration" units="minutes"
    expires_after="M121">
  <owner>llin@chromium.org</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    This records the time taken to enterprise-enroll the device when demo mode
    is setup for the first time.
  </summary>
</histogram>

<histogram name="DemoMode.Setup.LoadingDuration" units="minutes"
    expires_after="2024-02-04">
  <owner>llin@chromium.org</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    When demo mode is setup for the first time, it must download the demo mode
    resources and enterprise-enroll the device. This records the time taken for
    these two steps to complete. (See DemoMode.Setup.DownloadDuration and
    DemoMode.Setup.EnrollDuration)
  </summary>
</histogram>

<histogram name="DemoMode.Setup.NumRetries" units="units"
    expires_after="2024-03-10">
  <owner>llin@chromium.org</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    Records the number of times an operator has encountered an error during the
    loading screen and been required to retry setup. This is only recorded after
    setup completes successfully.
  </summary>
</histogram>

<histogram name="DemoMode.UniqueAppsLaunched" units="units"
    expires_after="2024-02-11">
  <owner>llin@chromium.org</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    Records how many unique apps have been launched by a user using the device
    during Demo mode. The sample is recorded when the DemoMode session closes.
  </summary>
</histogram>

<histogram name="DemoMode.UserClicksAndPresses" units="clicks"
    expires_after="2024-01-28">
  <owner>llin@chromium.org</owner>
  <owner>xiqiruan@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-demo-mode-eng@google.com</owner>
  <summary>
    Records how many times the user clicks mouse and presses screen in the demo
    session. During one demo session, if a mouse click or screen press happens,
    increment this metric by one.
  </summary>
</histogram>

<histogram name="DirectSockets.PermissionDeniedFailures"
    enum="DirectSocketPermissionFailureType" expires_after="2024-09-13">
  <owner>glenrob@chromium.org</owner>
  <owner>greengrape@google.com</owner>
  <summary>
    Record how often each permission check (e.g. permissions policy, transient
    activation, user dialog, hostname resolving to non-public address, rate
    limiting, CORS, enterprise policy) cause Permission Denied failures.
    Recorded when the permission is denied.
  </summary>
</histogram>

<histogram name="DirectSockets.TCPNetworkFailures" enum="NetErrorCodes"
    expires_after="2024-09-13">
  <owner>bartfab@chromium.org</owner>
  <owner>greengrape@google.com</owner>
  <summary>
    How often tcp socket opening finishes with a network failure.
  </summary>
</histogram>

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

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

<histogram name="DisplayManager.InternalDisplayZoomPercentage" units="%"
    expires_after="2024-02-25">
  <owner>zentaro@chromium.org</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    The zoom percentage that the user has set on the internal display and is
    actively using. This is emitted when the zoom factor has been updated in
    display manager and has not been changed for a while.
  </summary>
</histogram>

<histogram name="DisplayManager.MirroringImplementation"
    enum="DisplayMirroringImplementation" expires_after="2024-02-25">
  <owner>jshargo@chromium.org</owner>
  <owner>oshima@chromium.org</owner>
  <owner>chromeos-gfx-compositor@google.com</owner>
  <summary>
    The way in which mirroring is implemented, either in hardware or software.
    This is emitted once when mirroring is enabled through API call, or the
    display configuration changes ( e.g. adding or removing a display) when
    mirror mode is on.
  </summary>
</histogram>

<histogram name="DisplayManager.MirrorModeTypes" enum="DisplayMirrorModeTypes"
    expires_after="2023-04-23">
  <owner>zentaro@chromium.org</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    The types of mirror mode in which the displays connected to the device are
    in. This is emitted once when the normal or mixed mirror mode is enabled
    through API call, or the display configuration changes ( e.g. adding or
    removing a display) when mirror mode is on.
  </summary>
</histogram>

<histogram name="DisplayManager.MultiDisplayMode" enum="MultiDisplayModes"
    expires_after="2024-02-25">
  <owner>zentaro@chromium.org</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    The mode in which the connected displays to the device are in. This is
    emitted once when displays are added or removed, or when the user changes
    the mode by e.g. enabling mirror or unified modes.
  </summary>
</histogram>

<histogram name="DisplayManager.UnifiedDesktopDisplayCountRange"
    enum="MultiDisplayModeDisplayCountRanges" expires_after="2024-06-17">
  <owner>zentaro@chromium.org</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    The number of displays connected to the device when Unified Desktop mode is
    on. This is emitted when Unified Desktop mode is turned on, or the displays
    are added or removed while in Unified Mode.
  </summary>
</histogram>

<histogram name="DisplayManager.UpdateDisplayConfigurationTask.Success"
    enum="BooleanSuccess" expires_after="2024-06-11">
  <owner>zentaro@chromium.org</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    Records whether or not the display configuration was successfully updated.
    Emitted when the update-display-configuration task finishes, successfully or
    not.

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

<histogram name="DNS.PrefetchResolution" units="ms" expires_after="M85">
  <owner>mgersh@chromium.org</owner>
  <summary>
    The duration of time used by the DNS pre-resolving threads to resolve a host
    name via the network. Any resolutions that are faster than 15ms are
    considered to be local cache hits, not requiring network access, and are not
    included in this histogram. This histogram is most useful for estimating the
    typical cost of a name resolution, but it also estimates the total number of
    network-based resolutions induced by this feature. Not all these resolutions
    prove helpful (i.e., the user does not always actually visit the resolved
    hostnames).
  </summary>
</histogram>

<histogram name="Document.BeforeUnloadDialog" enum="BeforeUnloadDialogResult"
    expires_after="2024-02-04">
  <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="Document.OutliveTimeAfterShutdown.DestroyedBeforeProcessDies"
    units="units" expires_after="M77">
  <obsolete>
    Removed in M90.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>keishi@chromium.org</owner>
  <summary>
    Records the GC count between the time when the document is shut down and and
    the time when the document is actually destroyed. This only counts documents
    that are destroyed before the process dies.
  </summary>
</histogram>

<histogram name="Document.OutliveTimeAfterShutdown.GCCount" enum="GCCount"
    expires_after="M77">
  <obsolete>
    Removed in M90.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>keishi@chromium.org</owner>
  <summary>
    Records documents that survives some GCs after the document is shut down.
  </summary>
</histogram>

<histogram name="DocumentEventTiming.BeforeUnloadDialogDuration.ByNavigation"
    units="ms" expires_after="2023-10-01">
  <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; data may be
    missing.
  </summary>
</histogram>

<histogram name="DocumentScan.ScanFailed" enum="DocumentScanSaneBackend"
    expires_after="2024-03-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 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="2024-03-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="2024-03-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.CacheDirMove.FailureCount" units="count"
    expires_after="2020-12-31">
  <obsolete>
    Removed in M89.
  </obsolete>
  <owner>grt@chromium.org</owner>
  <summary>
    The number of items within the Cache directory that could not be moved aside
    following a downgrade. 0 indicates that the target directory could not be
    created.
  </summary>
</histogram>

<histogram name="Downgrade.CacheDirMove.Result" enum="BooleanSuccess"
    expires_after="2020-12-31">
  <obsolete>
    Removed in M89.
  </obsolete>
  <owner>grt@chromium.org</owner>
  <summary>
    Indicates whether or not moving a user's cache dir following a downgrade
    succeeded or failed.
  </summary>
</histogram>

<histogram name="Downgrade.InvalidSnapshotMove.FailureCount" units="count"
    expires_after="2020-12-31">
  <obsolete>
    Removed in M89.
  </obsolete>
  <owner>grt@chromium.org</owner>
  <owner>ydago@chromium.org</owner>
  <summary>
    The number of items within from an invalid snapshot directory that could not
    be moved. 0 indicates that the target directory could not be created.
  </summary>
</histogram>

<histogram name="Downgrade.InvalidSnapshotMove.Result" enum="BooleanSuccess"
    expires_after="2020-12-31">
  <obsolete>
    Removed in M89.
  </obsolete>
  <owner>grt@chromium.org</owner>
  <owner>ydago@chromium.org</owner>
  <summary>
    Indicates whether or not moving an invalid snapshot directory succeeded or
    failed.
  </summary>
</histogram>

<histogram name="Downgrade.RestoreSnapshot.CleanupAfterFailure.Result"
    enum="BooleanSuccess" expires_after="2020-12-31">
  <obsolete>
    Removed in M89.
  </obsolete>
  <owner>grt@chromium.org</owner>
  <owner>ydago@chromium.org</owner>
  <summary>
    Indicates whether or not cleaning up after a snapshot restoration failure
    succeeded or failed.
  </summary>
</histogram>

<histogram name="Downgrade.RestoreSnapshot.FailureCount" units="count"
    expires_after="2020-12-31">
  <obsolete>
    Removed in M89.
  </obsolete>
  <owner>grt@chromium.org</owner>
  <owner>ydago@chromium.org</owner>
  <summary>
    The number of items within from a snapshot directory that could not be
    restored following a downgrade.
  </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="Downgrade.TakeSnapshot.FailureCount" units="count"
    expires_after="2021-12-12">
  <obsolete>
    Removed in M100.
  </obsolete>
  <owner>grt@chromium.org</owner>
  <owner>ydago@chromium.org</owner>
  <summary>
    The number of items within the user data directory that could not be
    snapshotted following an upgrade.
  </summary>
</histogram>

<histogram name="Downgrade.TakeSnapshot.ItemFailure" enum="SnapshotItemId"
    expires_after="2024-02-20">
  <owner>grt@chromium.org</owner>
  <owner>ydago@chromium.org</owner>
  <summary>
    Indicates the id of an item that failed to be copied when taking a user data
    snapshot. The metrics does not cover the data from 12/12/2021 to 03/29/2022.
  </summary>
</histogram>

<histogram name="Downgrade.TakeSnapshot.MoveExistingSnapshot.FailureCount"
    units="count" expires_after="2020-12-31">
  <obsolete>
    Removed in M89.
  </obsolete>
  <owner>grt@chromium.org</owner>
  <owner>ydago@chromium.org</owner>
  <summary>
    The number of items within an existing snapshot directory that could not be
    moved aside before replacing it with a newer snapshot.
  </summary>
</histogram>

<histogram name="Downgrade.TakeSnapshot.MoveExistingSnapshot.Result"
    enum="BooleanSuccess" expires_after="2020-12-31">
  <obsolete>
    Removed in M89.
  </obsolete>
  <owner>grt@chromium.org</owner>
  <owner>ydago@chromium.org</owner>
  <summary>
    Indicates whether or not moving a user data snapshot dir before replacing it
    with a newer snapshot succeeded or failed.
  </summary>
</histogram>

<histogram name="Downgrade.TakeSnapshot.ProfileDirectoryCreation.Result"
    enum="BooleanSuccess" expires_after="2020-12-31">
  <obsolete>
    Removed in M89.
  </obsolete>
  <owner>grt@chromium.org</owner>
  <owner>ydago@chromium.org</owner>
  <summary>
    Indicates whether or not creating a profile directory while creating a user
    data snapshot succeeded or failed.
  </summary>
</histogram>

<histogram name="Downgrade.TakeSnapshot.Result" enum="SnapshotOperationResult"
    expires_after="2021-12-05">
  <obsolete>
    Removed in M100.
  </obsolete>
  <owner>grt@chromium.org</owner>
  <owner>ydago@chromium.org</owner>
  <summary>
    Indicates whether or not creating a snapshot of the user data dir succeeded
    or failed.
  </summary>
</histogram>

<histogram name="Downgrade.UserDataDirMove.FailureCount" units="count"
    expires_after="2020-12-31">
  <obsolete>
    Deprecated as of M96
  </obsolete>
  <owner>grt@chromium.org</owner>
  <owner>ydago@chromium.org</owner>
  <summary>
    The number of items within User Data that could not be moved aside following
    a downgrade.
  </summary>
</histogram>

<histogram name="Downgrade.UserDataDirMove.Result" enum="UserDataMoveResult"
    expires_after="2020-12-31">
  <obsolete>
    Deprecated as of M96
  </obsolete>
  <owner>grt@chromium.org</owner>
  <owner>ydago@chromium.org</owner>
  <summary>
    Indicates whether or not moving a user's User Data dir following a downgrade
    succeeded or failed.
  </summary>
</histogram>

<histogram name="Drive.PushNotificationInitiallyEnabled" enum="BooleanEnabled"
    expires_after="2024-07-05">
  <owner>simmonsjosh@google.com</owner>
  <owner>src/ui/file_manager/OWNERS</owner>
  <summary>
    Tracks whether the push notification is initially enabled for Drive.
    Recorded when the first notification is processed. Notification is emulated
    by polling if the push notication is disabled.
  </summary>
</histogram>

<histogram name="Drive.PushNotificationRegistered" enum="BooleanRegistered"
    expires_after="2024-03-17">
  <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="DriveOffline.CrosAutoEnableOutcome"
    enum="CrosEnableDriveOfflineOutcome" expires_after="2022-02-05">
  <obsolete>
    Removed 2022-02 as this feature never launched.
  </obsolete>
  <owner>simmonsjosh@google.com</owner>
  <owner>src/ui/file_manager/OWNERS</owner>
  <summary>
    Outcome of enabling Google Drive offline mode automatically when a user
    first logs into a Chrome OS device. This process involves opening a hidden
    web page in the context of the Google Drive hosted app to perform the
    initialization of offline mode.
  </summary>
</histogram>

<histogram name="DrmUtil.CreateDisplaySnapshot.BitsPerChannel" units="bits"
    expires_after="2024-05-16">
  <owner>mcasas@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.
  </summary>
</histogram>

<histogram name="DrmUtil.CreateDisplaySnapshot.HasEdidBlob" enum="Boolean"
    expires_after="2024-05-16">
  <owner>mcasas@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.
  </summary>
</histogram>

<histogram name="DrmUtil.CreateDisplaySnapshot.IsHDR" enum="Boolean"
    expires_after="2024-05-16">
  <owner>mcasas@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="2024-06-26">
  <owner>andrescj@chromium.org</owner>
  <owner>mcasas@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="2024-07-10">
  <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="2024-07-10">
  <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="2024-07-10">
  <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="2024-07-10">
  <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="2024-07-10">
  <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="2024-07-10">
  <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="2024-07-10">
  <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="2024-07-10">
  <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="2024-07-10">
  <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.NotificationClicked" enum="EcheNotificationInteraction"
    expires_after="2024-07-10">
  <obsolete>
    Deprecated as of 11/2022. Replaced with Eche.AppStream.LaunchAttempt
  </obsolete>
  <owner>crisrael@google.com</owner>
  <owner>exo-core-eng@google.com</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <summary>
    Events logged after the user interacts with a PhoneHub notification by
    clicking it to launch app streaming window.
  </summary>
</histogram>

<histogram name="Eche.Onboarding.UserAction" enum="OnboardingUserActionMetric"
    expires_after="2024-07-10">
  <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="2024-07-10">
  <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="2024-07-10">
  <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="2024-07-10">
  <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="2024-07-10">
  <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="2024-07-10">
  <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="2024-07-10">
  <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="2024-07-10">
  <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="2024-07-10">
  <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="2024-07-10">
  <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="EphemeralTab.BottomSheet.CloseReason"
    enum="BottomSheet.StateChangeReason" expires_after="M92">
  <obsolete>
    Deprecated as of 05/2021
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>jinsukkim@chromium.org</owner>
  <summary>
    Records the reason that the BottomSheet-based Ephemeral Tab panel was
    closed. Recorded when the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="EphemeralTab.CloseReason"
    enum="OverlayPanel.StateChangeReason" expires_after="M92">
  <obsolete>
    Deprecated as of 05/2021
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>jinsukkim@chromium.org</owner>
  <summary>
    Records the reason that the Ephemeral Tab panel was closed. Recorded when
    the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="EphemeralTab.Ctr" enum="BooleanOpened"
    expires_after="2021-12-12">
  <obsolete>
    Deprecated as of 12/2021
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>jinsukkim@chromium.org</owner>
  <summary>
    Records whether the user fully opened the Ephemeral Tab panel when it was
    shown. Recorded when the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="EphemeralTab.CtrPeek" enum="BooleanOpened"
    expires_after="2021-12-12">
  <obsolete>
    Deprecated as of 12/2021
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>jinsukkim@chromium.org</owner>
  <summary>
    Records whether the user opened the Ephemeral Tab panel beyond peeking
    state. Recorded when the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="EphemeralTab.DurationOpened" units="ms"
    expires_after="2021-12-12">
  <obsolete>
    Deprecated as of 12/2021
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>jinsukkim@chromium.org</owner>
  <summary>
    Records the duration in milliseconds that the Ephemeral Tab was left open.
    Recorded when the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="EphemeralTab.DurationPeeked" units="ms"
    expires_after="2021-10-10">
  <obsolete>
    Deprecated as of 12/2021
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>jinsukkim@chromium.org</owner>
  <summary>
    Records the duration in milliseconds that the Ephemeral Tab was peeking.
    Recorded when the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="ExploreSites.CategoryClick" enum="ExploreSitesCategories"
    expires_after="never">
<!-- expires-never: part of top-line metric (internal: go/chrome-browser-nsm) -->

  <owner>dewittj@chromium.org</owner>
  <owner>petewil@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <summary>
    The number of times the user clicked on a site in a category with the
    selected type on the Explore Sites page.

    This histogram is of special interest to the chrome-analysis-team@. Do not
    change its semantics or retire it without talking to them first.
  </summary>
</histogram>

<histogram name="ExploreSites.ClickedNTPCategoryIndex"
    enum="MostVisitedTileIndex" expires_after="2020-04-05">
  <owner>dimich@chromium.org</owner>
  <summary>
    0-based index of a category tile on NTP which was clicked by the user.
    Indices are assigned by counting category tiles left-to-right, top-to-bottom
    as they appear on NTP. Recorded on click.
  </summary>
</histogram>

<histogram name="ExploreSites.ExploreSitesStore.StoreEvent"
    enum="ExploreSitesStoreEvent" expires_after="M81">
  <owner>dewittj@chromium.org</owner>
  <summary>Counts when the explore sites store is opened or closed.</summary>
</histogram>

<histogram name="ExploreSites.ImageDecoded" enum="Boolean"
    expires_after="2020-06-30">
  <owner>freedjm@chromium.org</owner>
  <owner>chrome-explore-team@google.com</owner>
  <summary>Tracks the result of image decoding for the favicons.</summary>
</histogram>

<histogram name="ExploreSites.MonthlyHostCount" units="hosts"
    expires_after="2023-11-12">
  <owner>dimich@chromium.org</owner>
  <summary>
    Number of unique hosts visited by the user during the last 30 days. Reported
    at most once a week for all users on Android only, with a 5 second delay
    after startup. This is different from History.MonthlyHostCount which is
    reported for a percentage of startups, to avoid bias toward more active
    users.
  </summary>
</histogram>

<histogram name="ExploreSites.NavBackTime" units="ms" expires_after="M85">
  <owner>chili@chromium.org</owner>
  <owner>dewittj@chromium.org</owner>
  <summary>
    Recorded every time a user navigates out of the explore sites page and comes
    back to it within 30 seconds on the same tab. This is used to measure
    accidental clicks, where we expect users who navigate to the wrong page will
    navigate back to the ExploreSites page immediately afterward.
  </summary>
</histogram>

<histogram name="ExploreSites.RequestStatus" enum="ExploreSitesRequestStatus"
    expires_after="2022-12-04">
  <owner>dimich@chromium.org</owner>
  <owner>freedjm@chromium.org</owner>
  <summary>
    Reported each time from the result callback of the ExploreSitesFetcher.
    Values include Success and several failure codes.
  </summary>
</histogram>

<histogram name="FactoryPingEmbargo.EndDateValidity"
    enum="FactoryPingEmbargoEndDateValidity" expires_after="M77">
  <owner>pmarko@chromium.org</owner>
  <owner>rogerta@chromium.org</owner>
  <summary>
    Record the validity of |rlz_embargo_end_date| in RW_VPD. This is recorded
    when the VPD value is accessed, which may be multiple times in the same
    chrome invocation. This is not recorded when the VPD value is missing.
  </summary>
</histogram>

<histogram name="Favicon.OnDemandIconExistsInDb" units="units"
    expires_after="2021-06-08">
  <obsolete>
    Removed in 06/2021.
  </obsolete>
  <owner>victorvianna@google.com</owner>
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Records whether an icon already existed in the thumbnail DB when downloading
    an on-demand one. On-demand icons are the ones added to local cache without
    the user visiting the corresponding page.
  </summary>
</histogram>

<histogram name="Favicons.LargeIconService.BlacklistedURLMismatch"
    enum="BooleanError" expires_after="M77">
  <obsolete>
    Removed in M88.
  </obsolete>
  <owner>mastiz@chromium.org</owner>
  <summary>
    Records the number of large icons that were fetched from the local cache
    (e.g. during NTP impression), where the URL (of the page or the icon)
    matches a hardcoded blacklist. Suspicious mismatches are reported as errors.
  </summary>
</histogram>

<histogram name="Favicons.LargeIconService.DownloadedSize" units="pixels"
    expires_after="never">
<!-- expires-never: This metric is needed for informing future UX decisions on
    mobile (how to display favicons / scrabble tiles). -->

  <owner>jkrcal@chromium.org</owner>
  <owner>mastiz@chromium.org</owner>
  <summary>
    Records the size (concretely the width) in pixel of the favicon downloaded
    from Google favicon server (size 0 denotes that download has failed).
  </summary>
</histogram>

<histogram name="Favicons.LargeIconService.FallbackSize" units="pixels"
    expires_after="never">
<!-- expires-never: This metric is needed for informing future UX decisions on
    mobile (how to display favicons / scrabble tiles). -->

  <owner>jkrcal@chromium.org</owner>
  <owner>mastiz@chromium.org</owner>
  <summary>
    Records the size (concretely the width) in pixel of the favicon that is used
    to generate a fallback style in the case when large enough favicon is not
    available (size 0 denotes that no favicon is available at all).
  </summary>
</histogram>

<histogram name="Feedback.ChromeOSApp.CanContactUser"
    enum="FeedbackAppContactUserConsentType" expires_after="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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="2024-08-30">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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="2024-08-30">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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="2024-08-30">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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="2024-08-30">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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"
    units="boolean" expires_after="2024-08-30">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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="2024-03-03">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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" units="boolean"
    expires_after="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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" units="boolean"
    expires_after="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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" units="boolean"
    expires_after="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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" units="boolean"
    expires_after="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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" units="boolean"
    expires_after="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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" units="boolean"
    expires_after="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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" units="boolean"
    expires_after="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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" units="boolean"
    expires_after="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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" units="boolean"
    expires_after="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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" units="boolean"
    expires_after="2024-08-30">
  <owner>longbowei@google.com</owner>
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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="2024-08-30">
  <owner>xiangdongkong@google.com</owner>
  <owner>fernandex@google.com</owner>
  <owner>cros-feedback-app@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="2024-08-30">
  <owner>xiangdongkong@google.com</owner>
  <owner>fernandex@google.com</owner>
  <owner>cros-feedback-app@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-feedback-app@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="2024-08-30">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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.BubbleUsage"
    enum="HappinessTrackingSurveyDesktopBubbleUsage" expires_after="M82">
  <owner>weili@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Records how user interacts with Happiness Tracking Surveys (HaTS) bubble
    prompt which is shown for a subset of users. Each time when the bubble is
    shown, there should be one and only one enum type is recorded.
  </summary>
</histogram>

<histogram name="Feedback.HappinessTrackingSurvey.ShouldShowSurveyReason"
    enum="HappinessTrackingSurveyShouldShowSurveyReasons"
    expires_after="2024-02-04">
  <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.RedactionTool" enum="PIIType"
    expires_after="2024-03-03">
  <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.CreditCardMatch"
    enum="CreditCardDetection" expires_after="2024-02-04">
  <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="2024-03-03">
  <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="2024-03-03">
  <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" units="boolean"
    expires_after="2024-03-17">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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="2024-03-17">
  <owner>xiangdongkong@google.com</owner>
  <owner>cros-feedback-app@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="2024-02-25">
  <owner>afakhry@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>Records the source that requested showing the feedback app.</summary>
</histogram>

<histogram name="Feedback.TrustSafetySentiment.CallTriggerOccurred"
    enum="TrustSafetySentimentFeatureArea" expires_after="2023-10-14">
  <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-03-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="2024-03-17">
  <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.Browser.Metrics"
    enum="FetchKeepAliveBrowserMetricType" expires_after="2024-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded once every time a Fetch keepalive request is either aborted, failed
    to load, or succeed to load in browser.
  </summary>
</histogram>

<histogram name="FetchKeepAlive.Browser.Total" enum="Boolean"
    expires_after="2024-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded true every time a new Fetch keepalive request is created by a
    browser. It does NOT equal to the total number of JavaScript Fetch keepalive
    call, as the latter can be immediately rejected with various JavaScript
    exceptions.

    This number should be compared with `FetchKeepAlive.Renderer.Total`.
  </summary>
</histogram>

<histogram name="FetchKeepAlive.Browser.Total.Finished" enum="Boolean"
    expires_after="2024-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded once every time a FetchLater request loading is finished in
    browser. A finished loading can be either suceeded or failed.

    This number may be &lt;= `FetchKeepAlive.Browser.Total.Started`, as a
    request may be dropped for other undocumented reasons like browser killed or
    crashes. Also, this number is ~= `kLoadingSuceeded` + `kLoadingFailed` in
    `FetchKeepAlive.Browser.Metrics`.
  </summary>
</histogram>

<histogram name="FetchKeepAlive.Browser.Total.ReceivedResponse" enum="Boolean"
    expires_after="2024-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded once every time a Fetch keepalive request loader in browser has
    received a response.

    This number should be compared with
    `FetchKeepAlive.Renderer.Total.ReceivedResponse`.
  </summary>
</histogram>

<histogram name="FetchKeepAlive.Browser.Total.Redirected" enum="Boolean"
    expires_after="2024-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded once every time a Fetch keepalive request loader in browser has
    received a redirect.

    This number should be compared with
    `FetchKeepAlive.Renderer.Total.Redirected`.
  </summary>
</histogram>

<histogram name="FetchKeepAlive.Browser.Total.Started" enum="Boolean"
    expires_after="2024-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded once every time a created Fetch keepalive request is started in the
    browser. This number should be the same as `FetchKeepAlive.Browser.Total`,
    but logging to figure out if any differneces exist.
  </summary>
</histogram>

<histogram name="FetchKeepAlive.Renderer.Metrics"
    enum="FetchKeepAliveRendererMetricType" expires_after="2024-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded once every time a Fetch keepalive request is either aborted or
    dropped in renderer.
  </summary>
</histogram>

<histogram name="FetchKeepAlive.Renderer.Total" enum="Boolean"
    expires_after="2024-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded true every time a new FetchLater request is created 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
    `FetchKeepAlive.Browser.Total`.
  </summary>
</histogram>

<histogram name="FetchKeepAlive.Renderer.Total.Finished" enum="Boolean"
    expires_after="2024-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded once every time a Fetch keepalive request loading is finished in a
    renderer process. A finished loading can be either suceeded or failed.

    This number may be &lt;= `FetchKeepAlive.Renderer.Total.Started`, as a
    request may be dropped for other undocumented reasons like browser killed or
    crashes. Also, this number is &lt;= `FetchKeepAlive.Browser.Total.Finished`.
  </summary>
</histogram>

<histogram name="FetchKeepAlive.Renderer.Total.ReceivedResponse" enum="Boolean"
    expires_after="2024-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded once every time a Fetch keepalive request loader in a renderer has
    received a response.

    This number should be compared with
    `FetchKeepAlive.Renderer.Total.ReceivedResponse`.
  </summary>
</histogram>

<histogram name="FetchKeepAlive.Renderer.Total.Redirected" enum="Boolean"
    expires_after="2024-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded once every time a Fetch keepalive request loader in a renderer has
    received a redirect.

    This number should be compared with
    `FetchKeepAlive.Browser.Total.Redirected`.
  </summary>
</histogram>

<histogram name="FetchKeepAlive.Renderer.Total.Started" enum="Boolean"
    expires_after="2024-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Recorded once every time a created Fetch keepalive request is started in a
    renderer process.

    This number may be &lt;= `FetchKeepAlive.Renderer.Total`, as a created
    request may not be started at all.
  </summary>
</histogram>

<histogram name="FetchLater.Browser.Metrics" enum="FetchLaterBrowserMetricType"
    expires_after="2024-01-10">
  <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" enum="Boolean"
    expires_after="2024-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Records true every time 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.
  </summary>
</histogram>

<histogram name="FetchLater.Browser.Total.Started" enum="Boolean"
    expires_after="2024-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-bfcache@google.com</owner>
  <summary>
    Records once every time a scheduled FetchLater request is started in
    browser.

    This number should be the sum of enum values &quot;kStarted*&quot; in
    `FetchLater.Browser.Metrics`.
  </summary>
</histogram>

<histogram name="FetchLater.Renderer.Metrics"
    enum="FetchLaterRendererMetricType" expires_after="2024-01-10">
  <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="2024-01-10">
  <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="FirstPartySets.Database.InitStatus"
    enum="FirstPartySetsDatabaseInitStatus" expires_after="M124">
  <owner>shuuran@google.com</owner>
  <owner>kaustubhag@google.com</owner>
  <summary>
    Records initialization status of First-Party Sets database. Recorded when
    the database is lazily initialised when the first operation is encountered.
  </summary>
</histogram>

<histogram name="FirstPartySets.Initialization.ClearSiteDataOutcome"
    enum="BooleanSuccess" expires_after="M124">
  <owner>shuuran@google.com</owner>
  <owner>kaustubhag@google.com</owner>
  <summary>
    Measures the outcome of site data clearing. Recorded when First-Party Sets
    initialization triggers site data clearing for a given browser context.
  </summary>
</histogram>

<histogram name="FirstPartySets.NavigationThrottle.ResumeDelta" units="ms"
    expires_after="M124">
  <owner>shuuran@google.com</owner>
  <owner>kaustubhag@google.com</owner>
  <summary>
    Measures the length of time between when a navigation was deferred and then
    resumed due to timeout or First-Party Sets is ready. Recorded when a
    deferred navigation is resumed.
  </summary>
</histogram>

<histogram name="FirstPartySets.NavigationThrottle.ResumeOnTimeout"
    enum="BooleanTimedOut" expires_after="M124">
  <owner>shuuran@google.com</owner>
  <owner>kaustubhag@google.com</owner>
  <summary>
    Measures the deferred navigations that are resumed due to timeout. Recorded
    when a deferred navigation is resumed.
  </summary>
</histogram>

<histogram name="FirstRun.IOSFirebaseConfigured" enum="FirebaseConfiguredState"
    expires_after="M89">
  <owner>ghendel@chromium.org</owner>
  <owner>pkl@chromium.org</owner>
  <summary>Track whether Firebase is enabled or not at app startup.</summary>
</histogram>

<histogram name="FirstRun.LaunchSource" enum="FirstRunLaunchSource"
    expires_after="2024-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="2024-03-24">
  <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.GoogleAppsSelection"
    enum="NuxGoogleAppsSelections" expires_after="2024-02-11">
  <owner>johntlee@chromium.org</owner>
  <owner>dpapad@chromium.org</owner>
  <summary>
    Records what Google apps were selected as part of the Google Apps New User
    Experience. Histogram is only recorded when a user accepts the prompt to add
    Google Apps.

    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="2024-03-17">
  <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.NtpBackgroundLoadTime" units="ms"
    expires_after="M80">
  <owner>johntlee@chromium.org</owner>
  <owner>dpapad@chromium.org</owner>
  <summary>
    Records the time taken to load a NTP background image for preview. This is
    recorded when a user clicks on a background to preview and the full-size
    version of the background finishes loading.
  </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.NewUserExperience.SignInInterstitialInteraction"
    enum="NuxSignInInterstitialInteractions" expires_after="2024-03-24">
  <owner>johntlee@chromium.org</owner>
  <owner>dpapad@chromium.org</owner>
  <summary>
    Records when a user interacted with the sign in interstitial of the
    onboarding process. We record that the page was seen and what action the
    user took.

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

<histogram name="FirstRun.Sentinel.Created" enum="FirstRunSentinelResult"
    expires_after="2024-04-01">
  <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="2024-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="2024-01-28">
  <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" units="minutes"
    expires_after="2024-09-12">
<!-- Name completed by histogram_suffixes name="FirstUserActionType" and name="FirstUserActionTypeDevice" -->

  <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
  </summary>
</histogram>

<histogram name="FirstUserAction.HandsetUserActionType"
    enum="FirstUserActionType" expires_after="2024-09-12">
  <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="2024-09-12">
  <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="FontFallback.GetLinkedFonts.CacheMissTiming" units="ms"
    expires_after="2021-01-01">
  <owner>drott@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    Time to retrieve the fallback fonts on the system when not found in cache.
  </summary>
</histogram>

<histogram name="FontFallback.GetLinkedFonts.FontCount" units="count"
    expires_after="2021-01-01">
  <owner>drott@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>The amount of font returned for a given font family.</summary>
</histogram>

<histogram name="FontFallback.GetLinkedFonts.Timing" units="ms"
    expires_after="2021-01-01">
  <owner>drott@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>Time to retrieve the fallback fonts on the system.</summary>
</histogram>

<histogram name="Fonts.AccessAPI.EnumerationCache.DuplicateFontCount"
    units="count" expires_after="M90">
  <obsolete>
    Removed in M95
  </obsolete>
  <owner>oyiptong@chromium.org</owner>
  <owner>storage-dev@chromium.org</owner>
  <summary>
    The number of duplicate fonts returned by system APIs. This is recorded when
    fonts are enumerated to be returned to script as a result of a call to the
    Font Access API.
  </summary>
</histogram>

<histogram name="Fonts.AccessAPI.EnumerationCache.Dwrite.FamilyCount"
    units="families" expires_after="M90">
  <obsolete>
    Removed in M95
  </obsolete>
  <owner>oyiptong@chromium.org</owner>
  <owner>storage-dev@chromium.org</owner>
  <summary>
    Records the number of font families observed by the font enumeration cache
    as part of the Font Access API.
  </summary>
</histogram>

<histogram
    name="Fonts.AccessAPI.EnumerationCache.Dwrite.GetSystemFontCollectionResult"
    enum="Hresult" expires_after="M90">
  <obsolete>
    Removed in M95
  </obsolete>
  <owner>oyiptong@chromium.org</owner>
  <owner>storage-dev@chromium.org</owner>
  <summary>
    Records errors returned when obtaining the list of system fonts from
    DirectWrite's GetSystemFontCollection.
  </summary>
</histogram>

<histogram
    name="Fonts.AccessAPI.EnumerationCache.Dwrite.MostFrequentEnumerationFailure"
    enum="Hresult" expires_after="M90">
  <obsolete>
    Removed in M95
  </obsolete>
  <owner>oyiptong@chromium.org</owner>
  <owner>storage-dev@chromium.org</owner>
  <summary>
    Records the most frequent failure to obtain metadata for a font family when
    enumerating fonts as part of the Font Access API. Recorded in
    FontEnumerationCacheWin when all fonts have been enumerated. Values are
    Windows HRESULT error codes, and also includes custom values specific to
    this implementation.
  </summary>
</histogram>

<histogram
    name="Fonts.AccessAPI.EnumerationCache.Fontconfig.DuplicateFontCount"
    units="count" expires_after="M90">
  <obsolete>
    Removed in M86 in favor of
    Fonts.AccessAPI.EnumerationCache.DuplicateFontCount.
  </obsolete>
  <owner>oyiptong@chromium.org</owner>
  <owner>storage-dev@chromium.org</owner>
  <summary>The number of duplicate fonts returned by fontconfig.</summary>
</histogram>

<histogram name="Fonts.AccessAPI.EnumerationCache.Fontconfig.FontCount"
    units="count" expires_after="M90">
  <obsolete>
    Removed in M95
  </obsolete>
  <owner>oyiptong@chromium.org</owner>
  <owner>storage-dev@chromium.org</owner>
  <summary>The number of fonts returned by fontconfig.</summary>
</histogram>

<histogram
    name="Fonts.AccessAPI.EnumerationCache.Fontconfig.IncompleteFontCount"
    units="count" expires_after="M90">
  <obsolete>
    Removed in M95
  </obsolete>
  <owner>oyiptong@chromium.org</owner>
  <owner>storage-dev@chromium.org</owner>
  <summary>
    The number of fonts whose name table entries could not be read.
  </summary>
</histogram>

<histogram name="Fonts.AccessAPI.EnumerationTime" units="ms"
    expires_after="2021-06-20">
  <obsolete>
    Removed in M95
  </obsolete>
  <owner>oyiptong@chromium.org</owner>
  <owner>storage-dev@chromium.org</owner>
  <summary>Time spent enumerating fonts.</summary>
</histogram>

<histogram name="ForceDiceMigration.RevokeTokenAction" enum="RevokeTokenAction"
    expires_after="2020-10-04">
  <obsolete>
    Removed in M88.
  </obsolete>
  <owner>msalama@chromium.org</owner>
  <owner>msarda@chromium.org</owner>
  <summary>
    Tracks revoke actions taken by the account reconcilior to force Dice
    migration. To enforce consistency, the reconcilior may invalidate the
    primary account or revoke one or more secondary account tokens, if no
    equivalent valid gaia cookie exist for those accounts.
  </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.KnownGamepadConnectedWithId"
    enum="GamepadVendorProduct" expires_after="2024-01-14">
  <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.UnknownGamepadConnected" enum="GamepadSource"
    expires_after="2024-01-21">
  <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="GData.AuthSuccess" enum="GDataAuthResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Result of the authentication for Drive.</summary>
</histogram>

<histogram name="GestureNavigation.Type" enum="GestureNavigationType"
    expires_after="2022-08-21">
  <owner>jinsukkim@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Gesture navigation type. It can be either Chrome's own gesture UI that
    supports back and forward navigation or OS-provided default system gesture
    navigation that supports only back action on both left and right edge. This
    is recorded on Chrome startup at the feature component initialization.
  </summary>
</histogram>

<histogram base="true" name="GridTabSwitcher.FramePerSecond" units="frame/sec"
    expires_after="2024-02-11">
  <owner>ckitagawa@chromium.org</owner>
  <owner>meiliang@chromium.org</owner>
  <summary>
    This histogram records the frame rate of the transition animation between
    Tab and Grid Tab Switcher.
  </summary>
</histogram>

<histogram base="true" name="GridTabSwitcher.MaxFrameInterval" units="ms"
    expires_after="2024-02-25">
  <owner>ckitagawa@chromium.org</owner>
  <owner>meiliang@chromium.org</owner>
  <summary>
    This histogram records the maximum interval between rendered frames during
    the transition animation between Tab and Grid Tab Switcher.
  </summary>
</histogram>

<histogram name="GridTabSwitcher.ThumbnailFetchingResult"
    enum="GridTabSwitcherThumbnailFetchingResult" expires_after="2021-02-14">
  <obsolete>
    Expired 2021-02-14 replaced superceded by
    Android.GridTabSwitcher.ThumbnailFetchingResult.
  </obsolete>
  <owner>yusufo@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <summary>
    This histogram records the result of thumbnail fetching in the Grid Tab
    Switcher.
  </summary>
</histogram>

<histogram name="GridTabSwitcher.{MessageType}.DisableReason"
    enum="GridTabSwitcherMessageDisableReason" expires_after="2022-10-01">
  <owner>zhiyuancai@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <owner>ayman@chromium.org</owner>
  <summary>
    Records why the {MessageType} is disabled in GridTabSwitcher and will no
    longer be shown to users. Recorded when the message is disabled. Implemented
    for Android.
  </summary>
  <token key="MessageType" variants="GridTabSwitcherMessageTypes"/>
</histogram>

<histogram name="Hardware.Concurrency" units="CPU cores"
    expires_after="2021-12-12">
  <owner>zmo@chromium.org</owner>
  <owner>graphics-dev@chromium.org</owner>
  <summary>
    Records the system hardware concurrency collected in the info collection GPU
    process, once per UMA ping. For most systems, it is equivalent to the number
    of CPU cores.
  </summary>
</histogram>

<histogram name="Hardware.Display.Count.OnChange" units="units"
    expires_after="2024-03-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="2024-03-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="2024-03-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="2024-03-17">
  <owner>zmo@chromium.org</owner>
  <owner>graphics-dev@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="HIDDetection.OOBEDevicesDetectedOnContinuePressed"
    enum="HIDContinueScenarioType" expires_after="M94">
  <obsolete>
    Removed in M96.
  </obsolete>
  <owner>rsorokin@chromium.org</owner>
  <owner>cros-oac@google.com</owner>
  <summary>
    Which HID were detected when user pressed Continue on OOBE dialog. This
    metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="HIDDetection.OOBEDialogShown" units="units"
    expires_after="M94">
  <obsolete>
    Removed in M96.
  </obsolete>
  <owner>rsorokin@chromium.org</owner>
  <owner>cros-oac@google.com</owner>
  <summary>
    Whether HID detection dialog was shown on OOBE. Logged on screen show or on
    screen skip respectively. This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="HIDDetection.TimesDialogShownPerOOBECompleted" units="units"
    expires_after="M97">
  <obsolete>
    Removed in M97.
  </obsolete>
  <owner>rsorokin@chromium.org</owner>
  <owner>alemate@chromium.org</owner>
  <owner>cros-oac@google.com</owner>
  <summary>
    Records number of times the dialog was shown by the time OOBE is completed.
    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="HostedAppFrame.ContentSettings.ImagePressed"
    enum="ContentSettingImageType" expires_after="2021-02-01">
  <obsolete>
    Removed in Nov 2022.
  </obsolete>
  <owner>alancutter@chromium.org</owner>
  <owner>src/chrome/browser/ui/page_action/OWNERS</owner>
  <summary>
    Counts which content setting buttons in the hosted app frame are pressed by
    the user.
  </summary>
</histogram>

<histogram name="Hwsec.Attestation.PrepareDuration" units="ms"
    expires_after="2024-03-10">
  <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 base="true" name="Hwsec.Attestation.Status"
    enum="HwsecAttestationOpsStatus" expires_after="2024-02-04">
<!-- Name completed by histogram_suffixes name="AttestationOps" -->

  <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.
  </summary>
</histogram>

<histogram name="Hyphenation.Open" units="ms" expires_after="2024-02-20">
  <owner>kojii@chromium.org</owner>
  <owner>layout-dev@chromium.org</owner>
  <summary>The time it takes to open a hyphenation dictionary.</summary>
</histogram>

<histogram name="Hyphenation.Open.File" units="ms" expires_after="2024-02-20">
  <owner>kojii@chromium.org</owner>
  <owner>layout-dev@chromium.org</owner>
  <summary>The time it takes to open a hyphenation dictionary file.</summary>
</histogram>

<histogram name="Import.ImportedHistorySize.AutoImportFromIE" units="urls"
    expires_after="M77">
  <owner>gcomanici@chromium.org</owner>
  <summary>
    The size of the history on Auto Import from IE. This measure is only logged
    on a succesfull Auto Import.
  </summary>
</histogram>

<histogram name="Import.ImporterType.AutoImport" enum="ImporterType"
    expires_after="2024-08-30">
  <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="2024-08-30">
  <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="2024-08-30">
  <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.FileReplaceRetryCount" units="attempt count"
    expires_after="2023-12-12">
  <owner>brucedawson@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.SerializationDuration{ImportantFileClients}"
    units="ms" expires_after="2024-02-20">
  <owner>battre@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    CPU time used 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.
  </summary>
  <token key="ImportantFileClients" variants="ImportantFileClients"/>
</histogram>

<histogram name="ImportantFile.WriteDuration{ImportantFileClients}" units="ms"
    expires_after="2024-02-20">
  <owner>wylieb@chromium.org</owner>
  <owner>chrome-collections@google.com</owner>
  <summary>
    CPU time used in the background thread to write serialized data into an
    important file. Recorded when the file is written.
  </summary>
  <token key="ImportantFileClients" variants="ImportantFileClients"/>
</histogram>

<histogram name="Incognito.ClearBrowsingDataDialog.ActionType"
    enum="IncognitoClearBrowsingDataDialogActionType"
    expires_after="2024-02-20">
  <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="IncognitoModePrefs.WindowsParentalControlsInitThread"
    enum="ThreadType" expires_after="M77">
  <obsolete>
    Removed in http://crrev.com/747875.
  </obsolete>
  <owner>robliao@chromium.org</owner>
  <summary>
    The thread used to initialize the Windows parental controls.
  </summary>
</histogram>

<histogram name="IncognitoModePrefs.WindowsParentalControlsInitTime" units="ms"
    expires_after="M77">
  <obsolete>
    Removed in http://crrev.com/747875.
  </obsolete>
  <owner>robliao@chromium.org</owner>
  <summary>
    The amount of time that elapsed during a run of
    PlatformParentalControlsValue::IsParentalControlActivityLoggingOnImpl on
    Windows 7 and above.
  </summary>
</histogram>

<histogram name="IncompatibleApplicationsPage.AddedPostCrash"
    enum="BooleanShown" expires_after="M85">
  <owner>pmonette@chromium.org</owner>
  <summary>
    Records whether the user was automatically shown the
    chrome://settings/incompatibleApplications page following a Chrome crash.
  </summary>
</histogram>

<histogram name="IncompatibleApplicationsPage.NumApplications"
    units="applications" expires_after="M85">
  <owner>pmonette@chromium.org</owner>
  <summary>
    The number of incompatible applications detected by Chrome at the time the
    chrome://settings/incompatibleApplications page was opened.
  </summary>
</histogram>

<histogram name="InertialSensor.AccelerometerAndroidAvailable"
    enum="BooleanAvailable" expires_after="M95">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the Sensor.TYPE_LINEAR_ACCELERATION was available at the start of
    Device Motion.
  </summary>
</histogram>

<histogram name="InertialSensor.AccelerometerIncGravityAndroidAvailable"
    enum="BooleanAvailable" expires_after="M95">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the Sensor.TYPE_ACCELEROMETER was available at the start of Device
    Motion.
  </summary>
</histogram>

<histogram name="InertialSensor.AccelerometerWindowsAvailable"
    enum="BooleanAvailable" expires_after="M95">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the SENSOR_TYPE_ACCELEROMETER_3D was available at the start of
    Device Motion on the Windows platform.
  </summary>
</histogram>

<histogram name="InertialSensor.DeviceOrientationSensorAndroid"
    enum="DeviceOrientationSensorTypeAndroid" expires_after="M95">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Provides a histogram of the base sensors (if any) that are used at the start
    of the Device Orientation API. Currently Sensor.TYPE_GAME_ROTATION_VECTOR is
    the default sensor for orientation, if it's not available fall-back options
    are provided by using either Sensor.TYPE_ROTATION_VECTOR or a combination of
    Sensor.TYPE_ACCELEROMETER and Sensor.TYPE_MAGNETIC_FIELD.
  </summary>
</histogram>

<histogram name="InertialSensor.GyrometerWindowsAvailable"
    enum="BooleanAvailable" expires_after="M95">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the SENSOR_TYPE_GYROMETER_3D was available at the start of Device
    Motion on the Windows platform.
  </summary>
</histogram>

<histogram name="InertialSensor.GyroscopeAndroidAvailable"
    enum="BooleanAvailable" expires_after="M95">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the Sensor.TYPE_GYROSCOPE was available at the start of Device
    Motion.
  </summary>
</histogram>

<histogram name="InertialSensor.InclinometerWindowsAvailable"
    enum="BooleanAvailable" expires_after="M95">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the SENSOR_TYPE_INCLINOMETER_3D was available at the start of Device
    Orientation on the Windows platform.
  </summary>
</histogram>

<histogram name="InertialSensor.MotionDefaultAvailable" enum="BooleanAvailable"
    expires_after="M95">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    This histogram counts the number of Device Motion API invocations in the
    default implementation (Linux and CrOS). The default implementation does not
    provide any sensors so the result is always false.
  </summary>
</histogram>

<histogram name="InertialSensor.MotionMacAvailable" enum="BooleanAvailable"
    expires_after="M95">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the sudden motion sensor was available at the start of Device Motion
    on the MacOS platform.
  </summary>
</histogram>

<histogram name="InertialSensor.OrientationDefaultAvailable"
    enum="BooleanAvailable" expires_after="M95">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    This histogram counts the number of Device Orientation API invocations in
    the default implementation (Linux and CrOS). The default implementation does
    not provide any sensors so the result is always false.
  </summary>
</histogram>

<histogram name="InertialSensor.OrientationMacAvailable"
    enum="BooleanAvailable" expires_after="M95">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the sudden motion sensor was available at the start of Device
    Orientation on the MacOS platform.
  </summary>
</histogram>

<histogram name="InstanceID.DeleteToken.RequestStatus"
    enum="GCMUnregistrationRequestStatus" expires_after="M77">
  <owner>peter@chromium.org</owner>
  <summary>Status code of the outcome of DeleteToken request.</summary>
</histogram>

<histogram name="InstanceID.GetToken.CompleteTime" units="ms"
    expires_after="2018-08-30">
  <owner>jianli@chromium.org</owner>
  <summary>
    Length of time taken to complete the GetToken request successfully. If the
    request is retried multiple times, the length of time is counted for the
    last successful retry.
  </summary>
</histogram>

<histogram name="InstanceID.GetToken.NetErrorCode" enum="NetErrorCodes"
    expires_after="M94">
  <owner>peter@chromium.org</owner>
  <owner>platform-capabilities@chromium.org</owner>
  <summary>
    Net error code from an Instance ID GetToken attempt. Recorded when URL
    loading completes.
  </summary>
</histogram>

<histogram name="InstanceID.GetToken.OptionsCount" units="options"
    expires_after="M89">
  <obsolete>
    Deprecated as of 11/2020
  </obsolete>
  <owner>peter@chromium.org</owner>
  <owner>knollr@chromium.org</owner>
  <summary>
    The number of options provided to the GetToken request. Recorded when the
    request has been received by the InstanceID instance.
  </summary>
</histogram>

<histogram name="InstanceID.GetToken.RequestStatus"
    enum="GCMRegistrationRequestStatus" expires_after="2024-02-20">
  <owner>peter@chromium.org</owner>
  <owner>rushans@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; data may be missing.
  </summary>
</histogram>

<histogram name="InstanceID.GetToken.RequestStatus.FcmInvalidations"
    enum="GCMRegistrationRequestStatus" expires_after="2024-02-20">
  <owner>peter@chromium.org</owner>
  <owner>rushans@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    Status code of the outcome of GetToken request for FCM invalidations
    (subtype was &quot;com.google.chrome.fcm.invalidations&quot;).
  </summary>
</histogram>

<histogram name="InstanceID.GetToken.RequestStatus.SyncInvalidations"
    enum="GCMRegistrationRequestStatus" expires_after="2024-03-10">
  <owner>peter@chromium.org</owner>
  <owner>rushans@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="IPC.AttachmentBrokerPrivileged.BrokerAttachmentError"
    enum="IPCAttachmentBrokerPrivilegedBrokerAttachmentError"
    expires_after="M85">
  <owner>erikchen@chromium.org</owner>
  <summary>
    Errors that the privileged attachment broker encounters while trying to
    broker attachments.
  </summary>
</histogram>

<histogram name="IPC.AttachmentBrokerUnprivileged.BrokerAttachmentError"
    enum="IPCAttachmentBrokerUnprivilegedBrokerAttachmentError"
    expires_after="M85">
  <owner>erikchen@chromium.org</owner>
  <summary>
    Errors that an unprivileged attachment broker encounters while trying to
    broker attachments.
  </summary>
</histogram>

<histogram name="JSDialogs.OnBeforeUnloadStayVsLeave" enum="StayVsLeave"
    expires_after="M77">
  <obsolete>
    Removed 2020 November.
  </obsolete>
  <owner>avi@chromium.org</owner>
  <summary>
    For onbeforeunload dialogs, the user's choice between staying on the page
    and leaving it.
  </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="Launch.Modes" enum="OldLaunchMode" expires_after="never">
<!-- expires-never: used from time to time on Windows to measure the value of the various Chrome shortcuts (grt@) -->

  <owner>calamity@chromium.org</owner>
  <owner>grt@chromium.org</owner>
  <summary>
    The different ways Chrome is launched.

    This metric is gradually being replaced with an improved version. See
    tracking bug http://crbug.com/1366137

    Warnings about this version of this metric.

    1. If user starts Chrome while Chrome is already running, this reports
    incorrect data. See http://crbug.com/1067205

    2. On ChromeOS, if a user session-restores multiple profiles, each profile
    records this metric. See http://crbug.com/1356222

    3. When the profile picker is shown on startup (which can only happen on
    Windows, Mac, and Linux), this metric is not recorded. See
    http://crbug.com/1380458
  </summary>
</histogram>

<histogram name="Layout.MicroSecondsPerComplexText" units="microseconds"
    expires_after="M85">
  <obsolete>
    Removed in M86.
  </obsolete>
  <owner>benjhayden@chromium.org</owner>
  <summary>
    For layouts that considered at least 100 nodes, at least half of which were
    complex text fragments, the average number of microseconds spent laying out
    each node.

    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="Layout.MicroSecondsPerFloat" units="microseconds"
    expires_after="M85">
  <obsolete>
    Removed in M86.
  </obsolete>
  <owner>benjhayden@chromium.org</owner>
  <summary>
    For layouts that considered at least 100 nodes, at least half of which were
    floats, the average number of microseconds spent laying out each node.

    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="Layout.MicroSecondsPerNode" units="microseconds"
    expires_after="M85">
  <obsolete>
    Removed in M86.
  </obsolete>
  <owner>benjhayden@chromium.org</owner>
  <summary>
    For layouts that considered at least 100 nodes, the average number of
    microseconds spent laying out each node.

    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="Layout.MicroSecondsPerPositioned" units="microseconds"
    expires_after="M85">
  <obsolete>
    Removed in M86.
  </obsolete>
  <owner>benjhayden@chromium.org</owner>
  <summary>
    For layouts that considered at least 100 nodes, at least half of which were
    fixed or absolute positioned, the average number of microseconds spent
    laying out each node.

    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="Layout.MicroSecondsPerSimpleText" units="microseconds"
    expires_after="M85">
  <obsolete>
    Removed in M86.
  </obsolete>
  <owner>benjhayden@chromium.org</owner>
  <summary>
    For layouts that considered at least 100 nodes, at least half of which were
    simple text fragments, the average number of microseconds spent laying out
    each node.

    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="Layout.MicroSecondsPerTD" units="microseconds"
    expires_after="M85">
  <obsolete>
    Removed in M86.
  </obsolete>
  <owner>benjhayden@chromium.org</owner>
  <summary>
    For layouts that considered at least 100 nodes, at least half of which were
    table cells, the average number of microseconds spent laying out each node.

    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="Layout.ScrollAnchor.AdjustedScrollOffset" enum="BooleanHit"
    expires_after="M77">
  <obsolete>
    Removed in M89.
  </obsolete>
  <owner>skobes@chromium.org</owner>
  <summary>
    Records the number of times ScrollAnchor adjusts the scroll offset.
  </summary>
</histogram>

<histogram name="Layout.ScrollAnchor.RestorationStatus"
    enum="ScrollAnchorRestorationStatus" expires_after="M77">
  <obsolete>
    Removed in M89.
  </obsolete>
  <owner>pnoland@chromium.org</owner>
  <summary>
    Records the status of attempts to restore a serialized scroll anchor.
  </summary>
</histogram>

<histogram name="Layout.ScrollAnchor.SerializedAnchorSelectorLength"
    units="characters" expires_after="M77">
  <owner>pnoland@chromium.org</owner>
  <summary>
    The number of characters in the selector computed for a serialized scroll
    anchor. Recorded when a scroll anchor is serialized.
  </summary>
</histogram>

<histogram name="Layout.ScrollAnchor.SuppressedBySanaclap" enum="BooleanHit"
    expires_after="M81">
  <obsolete>
    Removed in M89.
  </obsolete>
  <owner>ymalik@chromium.org</owner>
  <summary>
    Records the number of times scroll anchoring is suppressed because of the
    SANACLAP bit being set on an ancestor (see bit.ly/sanaclap).
  </summary>
</histogram>

<histogram name="Layout.ScrollAnchor.TimeToComputeAnchorNodeSelector"
    units="microseconds" expires_after="M85">
  <owner>pnoland@chromium.org</owner>
  <summary>
    The time it took to compute the selector of a serialized anchor element.

    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="Layout.ScrollAnchor.TimeToFindAnchor" units="microseconds"
    expires_after="M82">
  <obsolete>
    Removed in M93.
  </obsolete>
  <owner>ymalik@chromium.org</owner>
  <summary>
    The time it took to find a suitable anchor element.

    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="Layout.ScrollAnchor.TimeToRestoreAnchor" units="microseconds"
    expires_after="2020-03-08">
  <owner>pnoland@chromium.org</owner>
  <summary>
    The time it took to restore the scroll anchor using the serialized anchor
    element.

    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="Lens.ImageClassification.ClassificationTime" units="ms"
    expires_after="M90">
  <obsolete>
    Replaced with
    Lens.ImageClassification.ClassificationTime.SuccessOnQueryResultMs as of
    12/2020.
  </obsolete>
  <owner>yusuyoutube@google.com</owner>
  <owner>benwgold@google.com</owner>
  <summary>
    Logged the end to end latency of the Lens image classifcation call when the
    user completes a long press on an image. Only logged on Android.
  </summary>
</histogram>

<histogram name="Lens.ImageClassification.ClassificationTime.EarlyTerminatedMs"
    units="ms" expires_after="2022-07-31">
  <owner>yusuyoutube@google.com</owner>
  <owner>benwgold@google.com</owner>
  <summary>
    Logged the time between the start of the Lens image classifcation call to
    the early termination before the call completes. Only logged on Android.
  </summary>
</histogram>

<histogram
    name="Lens.ImageClassification.ClassificationTime.SuccessOnQueryResultMs"
    units="ms" expires_after="2022-11-13">
  <owner>yusuyoutube@google.com</owner>
  <owner>benwgold@google.com</owner>
  <summary>
    Logged the end to end latency of the Lens image classifcation call when the
    user completes a long press on an image. Only logged on Android.
  </summary>
</histogram>

<histogram name="Lens.ImageClassification.ResultState"
    enum="LensClassifyResultState" expires_after="2022-10-09">
  <owner>yusuyoutube@google.com</owner>
  <owner>benwgold@google.com</owner>
  <summary>
    Logged the result state of the Lens image classifcation call when the user
    completes a long press on an image. Only logged on Android.
  </summary>
</histogram>

<histogram name="Lens.ImageClassification.SdkError" enum="LensSdkError"
    expires_after="2022-08-07">
  <owner>yusuyoutube@google.com</owner>
  <owner>benwgold@google.com</owner>
  <summary>
    Logged the error code when there is a Lens SDK error occurred within the
    classification session. The error code is an integer constant defined by the
    SDK. Only logged on Android. See http://b/170422682 for more details.
  </summary>
</histogram>

<histogram name="Lens.Omnibox.LensSupportStatus" enum="LensSupportStatus"
    expires_after="2024-02-25">
  <owner>yusuyoutube@google.com</owner>
  <owner>benwgold@google.com</owner>
  <owner>fgorski@chromium.org</owner>
  <owner>wylieb@chromium.org</owner>
  <owner>lens-chrome@google.com</owner>
  <summary>
    Whether the user supports the camera assisted search with Google Lens and if
    not, the reason why. Recorded only if the feature is enabled when the
    omnibox or the new tab page is loaded.
  </summary>
</histogram>

<histogram name="Lens.QuickActionSearchWidget.LensSupportStatus"
    enum="LensSupportStatus" expires_after="2023-12-24">
  <owner>benwgold@chromium.org</owner>
  <owner>yusuyoutube@google.com</owner>
  <owner>lens-chrome@google.com</owner>
  <summary>
    Whether the user supports the camera assisted search with Google Lens and if
    not, the reason why. Recorded only when the Lens button is tapped on the
    Quick Action Search Widget.

    Note: Gap between 04/22 - 08/23.
  </summary>
</histogram>

<histogram name="LibraryLoader.LoadNativeLibraryWindows"
    enum="LoadLibraryResultCategory" expires_after="M82">
  <owner>chengx@chromium.org</owner>
  <summary>
    This metric records the LoadLibraryExW and LoadLibraryW Windows API call
    results, which are used in native_library_win.cc.
  </summary>
</histogram>

<histogram base="true"
    name="LibraryLoader.PercentageOfResidentCodeBeforePrefetch" units="%"
    expires_after="M81">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Percentage of the native library code pages resident in memory. Recorded
    immediately before the library prefetching kicks in, only on Android.
  </summary>
</histogram>

<histogram name="Linux.Distro.Debian" enum="LinuxDistroDebianVersion"
    expires_after="never">
<!-- expires-never: Needed to measure Linux ecosystem. -->

  <owner>thestig@chromium.org</owner>
  <owner>thomasanderson@chromium.org</owner>
  <summary>
    The Debian version number (eg. 8: Jessie, 9: Stretch). Logged once on
    startup if Linux.Distro3 is Debian.
  </summary>
</histogram>

<histogram name="Linux.Distro.Fedora" enum="LinuxDistroFedoraVersion"
    expires_after="never">
<!-- expires-never: Needed to measure Linux ecosystem. -->

  <owner>thestig@chromium.org</owner>
  <owner>thomasanderson@chromium.org</owner>
  <summary>
    The Fedora version number (eg. 27, 28) Logged once on startup if
    Linux.Distro3 is Fedora.
  </summary>
</histogram>

<histogram name="Linux.Distro.Mint" enum="LinuxDistroMintVersion"
    expires_after="never">
<!-- expires-never: Needed to measure Linux ecosystem. -->

  <owner>thestig@chromium.org</owner>
  <owner>thomasanderson@chromium.org</owner>
  <summary>
    The Linux Mint version number (eg. 20, 20.1) Logged once on startup if
    Linux.Distro3 is Mint.
  </summary>
</histogram>

<histogram name="Linux.Distro.OpenSuseLeap"
    enum="LinuxDistroOpenSuseLeapVersion" expires_after="never">
<!-- expires-never: Needed to measure Linux ecosystem. -->

  <owner>thestig@chromium.org</owner>
  <owner>thomasanderson@chromium.org</owner>
  <summary>
    The openSUSE Leap version number, logged as 1000*major + minor (eg. 15001 =
    15.1). Logged once on startup if Linux.Distro3 is openSUSE Leap.
  </summary>
</histogram>

<histogram name="Linux.Distro.Ubuntu" enum="LinuxDistroUbuntuVersion"
    expires_after="never">
<!-- expires-never: Needed to measure Linux ecosystem. -->

  <owner>thestig@chromium.org</owner>
  <owner>thomasanderson@chromium.org</owner>
  <summary>
    The Ubuntu version number, logged as 1000*year + month (eg. 16004 = 16.04
    Xenial). Logged once on startup if Linux.Distro3 is Ubuntu.
  </summary>
</histogram>

<histogram name="Linux.Distro3" enum="LinuxDistro3" expires_after="never">
<!-- expires-never: Needed to measure Linux ecosystem. -->

  <owner>thestig@chromium.org</owner>
  <owner>thomasanderson@chromium.org</owner>
  <summary>The Linux distro used. Logged on each start up.</summary>
</histogram>

<histogram name="Linux.GlibcVersion" enum="LinuxGlibcVersion"
    expires_after="never">
<!-- expires-never: Needed to measure Linux ecosystem. -->

  <owner>thestig@chromium.org</owner>
  <owner>thomasanderson@chromium.org</owner>
  <summary>
    The version of glibc used. (Linux only) Logged on each start up.
  </summary>
</histogram>

<histogram name="Linux.ProxyLocaltimeCallToBrowserUs" units="microseconds"
    expires_after="2021-09-01">
  <owner>kylechar@chromium.org</owner>
  <owner>mpdenton@chromium.org</owner>
  <summary>
    The time taken for localtime_r() call to proxied from a sandboxed process to
    the browser and a response returned back in microseconds. This histogram is
    only recorded on Linux, where all users have high-resolution clocks.
  </summary>
</histogram>

<histogram name="Linux.SandboxStatus" enum="LinuxSandboxStatus"
    expires_after="2024-02-11">
  <owner>mpdenton@google.com</owner>
  <owner>src/sandbox/linux/OWNERS</owner>
  <summary>
    The Linux sandbox status. This describes what sandboxing features are
    enabled (such as the suid/namespace sandboxes, various namespaces, seccomp
    bpf, ...). Emitted once at startup.
  </summary>
</histogram>

<histogram name="Linux.SystemTheme.Default" enum="Ui.SystemTheme"
    expires_after="2024-03-03">
  <owner>thomasanderson@chromium.org</owner>
  <owner>thestig@chromium.org</owner>
  <summary>The default system theme. Logged once on startup.</summary>
</histogram>

<histogram name="Linux.SystemTheme.Profile" enum="Ui.SystemTheme"
    expires_after="2024-03-03">
  <owner>thomasanderson@chromium.org</owner>
  <owner>thestig@chromium.org</owner>
  <summary>
    The per-profile system theme. Logged once for each profile on startup, and
    whenever the system theme changes.
  </summary>
</histogram>

<histogram name="Linux.Wayland.BaseShellUsed" enum="LinuxWaylandShellName"
    expires_after="never">
<!-- expires-never: Needed to measure Linux ecosystem. -->

  <owner>fangzhoug@chromium.org</owner>
  <owner>adunaev@igalia.com</owner>
  <owner>graphics-dev@chromium.org</owner>
  <summary>
    The Linux Wayland base shell protocol used actually. Logged in each session
    when the browser creates the first shell surface.
  </summary>
</histogram>

<histogram name="Linux.Wayland.Shell" enum="LinuxWaylandShellName"
    expires_after="never">
<!-- expires-never: Needed to measure Linux ecosystem. -->

  <owner>fangzhoug@chromium.org</owner>
  <owner>adunaev@igalia.com</owner>
  <owner>graphics-dev@chromium.org</owner>
  <summary>
    The Linux Wayland shell protocol(s) available. Logged in each session when
    the compositor announces a Wayland protocol extension that provides the
    desktop shell functionality (i.e., turns abstract surfaces into windows that
    can be positioned, moved, resized, etc., depending on the particular shell).
  </summary>
</histogram>

<histogram name="Linux.WindowManager" enum="LinuxWindowManagerName"
    expires_after="never">
<!-- expires-never: Needed to measure Linux ecosystem. -->

  <owner>pkotwicz@chromium.org</owner>
  <owner>thomasanderson@chromium.org</owner>
  <summary>
    The window manager used. (Linux only) Logged on each start up.
  </summary>
</histogram>

<histogram name="LoadingPredictor.OptimizationHintsReceiveStatus"
    enum="LoadingPredictorOptimizationHintsReceiveStatus"
    expires_after="2024-03-03">
  <owner>sophiechang@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@chromium.org</owner>
  <component>Internals&gt;Preload</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.PreconnectCount" units="origins"
    expires_after="2023-08-27">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@chromium.org</owner>
  <component>Internals&gt;Preload</component>
  <summary>
    The number of origins that were preconnected for a page load. It includes
    preconnect attempts that don't result in new opened connection. Logged after
    the preconnect manager completes all jobs attached to the page load.
  </summary>
</histogram>

<histogram name="LoadingPredictor.PreconnectHitsPercentage" units="%"
    expires_after="2023-09-17">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@chromium.org</owner>
  <component>Internals&gt;Preload</component>
  <summary>
    The percentage of origins that were preconnected and requested by a page
    load to the total number of origins that were preconnected for a page load.
    Logged after the preconnect manager completes all jobs attached to the page
    load.
  </summary>
</histogram>

<histogram base="true" name="LoadingPredictor.PreconnectLearningCount"
    units="origins" expires_after="2023-07-16">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@chromium.org</owner>
  <component>Internals&gt;Preload</component>
  <summary>
    When the loading predictor has origins in the local database for a given
    navigation to preconnect and preresolve, the count of predicted origins.
  </summary>
</histogram>

<histogram base="true" name="LoadingPredictor.PreconnectLearningPrecision"
    units="%" expires_after="2023-12-12">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@chromium.org</owner>
  <component>Internals&gt;Preload</component>
  <summary>
    When the loading predictor has origins in the local database for a given
    navigation to preconnect and preresolve, the precision of the predictions in
    percentage. This is computed as 100 \times \frac{correct
    predictions}{predictions}.
  </summary>
</histogram>

<histogram base="true" name="LoadingPredictor.PreconnectLearningRecall"
    units="%" expires_after="2023-09-17">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@chromium.org</owner>
  <component>Internals&gt;Preload</component>
  <summary>
    When the loading predictor has origins in the local database for a given
    navigation to preconnect and preresolve, the recall of the predictions, in
    percentage. This is computed as 100 \times \frac{correct predictions}{all
    prefetchable subresources}.
  </summary>
</histogram>

<histogram base="true" name="LoadingPredictor.PreconnectLearningRedirectStatus"
    enum="ResourcePrefetchPredictorRedirectStatus" expires_after="2023-06-25">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@chromium.org</owner>
  <component>Internals&gt;Preload</component>
  <summary>
    When the prefetch predictor has origins in the local database for a given
    navigation to preconnect and preresolve, records stats about whether
    redirect was predicted correctly or incorrectly.
  </summary>
</histogram>

<histogram name="LoadingPredictor.PreresolveCount" units="hosts"
    expires_after="2023-12-12">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@chromium.org</owner>
  <component>Internals&gt;Preload</component>
  <summary>
    The number of hosts that were preresolved for a page load. It includes only
    successful DNS lookups. Logged after the preconnect manager completes all
    jobs attached to the page load.
  </summary>
</histogram>

<histogram name="LoadingPredictor.PreresolveHitsPercentage" units="%"
    expires_after="2023-12-12">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@chromium.org</owner>
  <component>Internals&gt;Preload</component>
  <summary>
    The percentage of hosts that were preresolved and requested by a page load
    to the total number of hosts that were preresolved for a page load. Logged
    after the preconnect manager completes all jobs attached to the page load.
  </summary>
</histogram>

<histogram name="LowPriorityIframes.IframeRequestPriority"
    enum="WebURLRequestPriority" expires_after="M77">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Original Blink priority of the request that belongs to an iframe. Recorded
    for every request fetched via Blink, but only when the experiment to lower
    the priority of iframes is enabled.
  </summary>
</histogram>

<histogram name="LowPriorityIframes.MainFrameRequestPriority"
    enum="WebURLRequestPriority" expires_after="M85">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Original Blink priority of the request that belongs to the main frame.
    Recorded for every request fetched via Blink, but only when the experiment
    to lower the priority of iframes is enabled.
  </summary>
</histogram>

<histogram name="Mac.FileMenuNativeShare" enum="BooleanSuccess"
    expires_after="2023-07-16">
  <owner>nasims@google.com</owner>
  <owner>dimich@chromium.org</owner>
  <summary>
    Whether the user successfully shared via a native sharing extension after
    selecting it from the File &gt; Share menu. False can indicate failure or
    user-initiated cancellation.
  </summary>
</histogram>

<histogram name="Mac.LaunchApplicationResult" enum="MacLaunchApplicationResult"
    expires_after="2024-03-03">
  <owner>mek@chromium.org</owner>
  <owner>src/base/mac/OWNERS</owner>
  <summary>
    The result of calls to base::mac::LaunchApplication, logged once for every
    invocation of that method.
  </summary>
</histogram>

<histogram name="Mac.UniversalLink.APIDuration" units="ms"
    expires_after="2022-07-01">
  <obsolete>
    Removed 2021 November.
  </obsolete>
  <owner>avi@chromium.org</owner>
  <owner>mark@chromium.org</owner>
  <summary>
    Native macOS apps can claim regions of the URL space for themselves, and so
    on every navigation, Chromium calls the SFUniversalLink API to determine if
    the URL being navigated to requires special handling. The SFUniversalLink
    API is usually instantaneous, but for some machines it's very slow. This
    metric logs the amount of time that it the SFUniversalLink API took to run,
    if over 100ms. This metric is logged once per run of Chrome, because if that
    API call ever takes longer than 100ms, it is disabled and never used again
    in that run of Chrome.
  </summary>
</histogram>

<histogram name="Manifest.HasProperty" enum="Boolean"
    expires_after="2024-02-25">
  <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.
  </summary>
</histogram>

<histogram name="Manifest.ParseIdResult" enum="ManifestParseIdResultType"
    expires_after="2024-02-04">
  <owner>phillis@chromium.org</owner>
  <owner>desktop-pwas-team@chromium.org</owner>
  <summary>Tracks the result of parsing id field in the Manifest.</summary>
</histogram>

<histogram name="Mist.SwitchResult" enum="MistSwitchResult" expires_after="M77">
  <owner>akhouderchah@chromium.org</owner>
  <owner>benchan@chromium.org</owner>
  <summary>
    The result (e.g. success or the type of failure) of a modem interface switch
    operation performed by mist on Chrome OS.
  </summary>
</histogram>

<histogram name="MixedAutoupgrade.ResourceRequest.ErrorOrResponseCode"
    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2023-08-13">
  <owner>carlosil@chromium.org</owner>
  <summary>
    The net error or HTTP response code of a mixed content resource request that
    was autoupgraded to HTTPS. This histogram was expired from M80 to M108.
  </summary>
</histogram>

<histogram name="MixedAutoupgrade.ResourceRequest.Failure.IsAd" enum="Boolean"
    expires_after="M112">
  <owner>carlosil@chromium.org</owner>
  <summary>
    Whether or not an autoupgrade mixed content request was for a resource we
    know to be an ad. This histogram was expired from M80 to M108.
  </summary>
</histogram>

<histogram name="MixedAutoupgrade.ResourceRequest.Failure.Type"
    enum="ResourceType" expires_after="M112">
  <owner>carlosil@chromium.org</owner>
  <owner>estark@chromium.org</owner>
  <summary>
    Logs the type of each resource request that is autoupgraded to HTTPS and
    fails to load. This histogram was expired from M80 to M108.

    Warning: an unexpected reorder happened in Apr 2021
    (https://crrev.com/c/2798954). Please do not trust older reports.
  </summary>
</histogram>

<histogram name="MixedAutoupgrade.ResourceRequest.Response.Type"
    enum="ResourceType" expires_after="M112">
  <owner>carlosil@chromium.org</owner>
  <owner>estark@chromium.org</owner>
  <summary>
    Logs the type of each resource request that was autoupgraded to HTTPS and
    resulted in a response. This histogram was expired from M80 to M108.

    Warning: an unexpected reorder happened in Apr 2021
    (https://crrev.com/c/2798954). Please do not trust older reports.
  </summary>
</histogram>

<histogram name="MixedAutoupgrade.ResourceRequest.Start.Type"
    enum="ResourceType" expires_after="M112">
  <owner>carlosil@chromium.org</owner>
  <owner>estark@chromium.org</owner>
  <summary>
    Logs the type of each resource request that is autoupgraded to HTTPS. This
    is logged when the request is started. This histogram was expired from M80
    to M108.

    Warning: an unexpected reorder happened in Apr 2021
    (https://crrev.com/c/2798954). Please do not trust older reports.
  </summary>
</histogram>

<histogram name="MixedAutoupgrade.ResourceRequest.Status"
    enum="MixedContentAutoupgradeStatus" expires_after="2023-08-08">
  <owner>carlosil@chromium.org</owner>
  <summary>
    The status of a mixed content resource request that was autoupgraded to
    HTTPS. This histogram was expired from M80 to M108.
  </summary>
</histogram>

<histogram name="ModuleIntegrityVerification.RelocationsUnordered"
    enum="ModuleIndex" expires_after="M85">
  <obsolete>
    Removed in M87.
  </obsolete>
  <owner>grt@chromium.org</owner>
  <summary>
    Logged when the relocations in a module are not ordered causing the module
    verification to abort.
  </summary>
</histogram>

<histogram name="Mojo.Channel.WriteMessageLatency" units="ms"
    expires_after="2024-02-11">
  <owner>amistry@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>rockot@google.com</owner>
  <summary>
    Measures the time taken to fully write a channel message to the underlying
    channel.
  </summary>
</histogram>

<histogram name="Mojo.Channel.WriteMessageSize" units="bytes"
    expires_after="2024-03-17">
  <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.WriteQueued" enum="Boolean"
    expires_after="2021-07-01">
  <owner>amistry@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>rockot@google.com</owner>
  <summary>
    Tracks whether or not a message is written directly to a channel or queued.
  </summary>
</histogram>

<histogram name="Mojo.Channel.WriteQueuePendingMessages" units="count"
    expires_after="2023-11-19">
  <owner>amistry@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>rockot@google.com</owner>
  <summary>
    The number queued messages waiting to be written, measured when a channel
    flush is attempted.
  </summary>
</histogram>

<histogram name="Mojo.Channel.WriteReceiveMessageProcessType"
    enum="ShortProcessType" expires_after="2024-02-04">
  <owner>amanvr@chromium.org</owner>
  <owner>carlscab@chromium.org</owner>
  <owner>woa-performance@google.com</owner>
  <summary>
    Records the number of received Mojo IPCs, split per process. Emitted each
    time a mojo IPC is received.
  </summary>
</histogram>

<histogram name="Mojo.Channel.WriteSendMessageProcessType"
    enum="ShortProcessType" expires_after="2024-02-05">
  <owner>amanvr@chromium.org</owner>
  <owner>carlscab@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.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.InvalidUTF8String" enum="BooleanValid"
    expires_after="2023-10-08">
  <owner>rsesek@chromium.org</owner>
  <owner>chrome-mojo@google.com</owner>
  <summary>
    Emitted any time a Mojo string is deserialized and is not valid UTF-8.
  </summary>
</histogram>

<histogram name="Mouse.PointerSensitivity.Changed" enum="PointerSensitivity"
    expires_after="2024-02-25">
  <owner>zentaro@chromium.org</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    Tracks mouse sensitivity setting changes by the user. This replaces the old
    Mouse.Sensitivity.Changed metric. Only reported on Chrome OS.
  </summary>
</histogram>

<histogram name="Mouse.PointerSensitivity.Started" enum="PointerSensitivity"
    expires_after="2024-02-11">
  <owner>dpad@google.com</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    Tracks mouse sensitivity setting on startup. This replaces the old
    Mouse.Sensitivity.Started metric. Only reported on Chrome OS.

    Expired from 2022-12-04 to M113. May be missing some data.
  </summary>
</histogram>

<histogram base="true" name="Mouse.ScrollAcceleration" enum="BooleanEnabled"
    expires_after="2022-06-15">
<!-- Name completed by histogram_suffixes name="PreferenceChangeType" -->

  <owner>khorimoto@chromium.org</owner>
  <owner>zentaro@chromium.org</owner>
  <summary>
    Whether mouse scroll acceleration is enabled. Only reported on Chrome OS.
  </summary>
</histogram>

<histogram base="true" name="Mouse.ScrollSensitivity" enum="PointerSensitivity"
    expires_after="2024-02-04">
<!-- Name completed by histogram_suffixes name="PreferenceChangeType" -->

  <owner>zentaro@chromium.org</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    Mouse scroll sensitivity value. Only reported on Chrome OS.

    Warning: this histogram was expired from 2020-12-01 to M105; data may be
    missing.
  </summary>
</histogram>

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

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

<histogram name="MPArch.ForkTime" units="ms" expires_after="2020-02-23">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Time to call fork() or clone(), in ms. Recorded at each fork excluding from
    the zygote, only on posix platforms.
  </summary>
</histogram>

<histogram name="MPArch.RWH_RepaintDelta" units="units"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>TBD</summary>
</histogram>

<histogram name="MPArch.RWH_TabSwitchPaintDuration" units="ms"
    expires_after="M85">
  <obsolete>
    Removed in M98. Replaced by Browser.Tabs.TotalSwitchDuration.*
  </obsolete>
  <owner>jbauman@chromium.org</owner>
  <summary>
    Time from tab switch requested to tab appearing on screen (Aura and Mac
    only).
  </summary>
</histogram>

<histogram name="MultiProfile.SwitchActiveUserUIPath"
    enum="MultiProfileSwitchActiveUserAction" expires_after="2020-05-10">
  <owner>skuhne@chromium.org</owner>
  <summary>
    Count the number of times each UI path is taken for switching the active
    account in a Chrome OS multiprofile session. UI paths include the system
    tray and the keyboard shortcut.
  </summary>
</histogram>

<histogram name="MultiProfile.UsersPerSessionIncremental" units="units"
    expires_after="2024-02-04">
  <owner>skuhne@chromium.org</owner>
  <owner>antrim@chromium.org</owner>
  <summary>
    The number of users simultaneously signed into a multiprofile session on
    Chrome OS. This is recorded whenever a user gets added to the session. To
    get the correct count, all following counts must be subtracted. Example: If
    100 single user, 20 two user and 5 three user sessions, there were
    100-20-5=75 single user sessions, 100-80=20 dual user sessions and so on.
    Warning: this histogram was expired from 2022-04-10 till 2023-07-10.
  </summary>
</histogram>

<histogram name="NativeSmbFileShare.AuthenticationMethod"
    enum="NativeSmbFileShare_AuthMethod" expires_after="2024-02-04">
  <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="2023-12-01">
  <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="2023-12-01">
  <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="2023-12-01">
  <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="NativeSmbFileShare.ReadDirectoryCount" units="units"
    expires_after="M85">
  <obsolete>
    Removed in M87. No longer used with smbfs.
  </obsolete>
  <owner>zentaro@chromium.org</owner>
  <summary>
    The number of entries read when calling ReadDirectory. This is recorded
    after the D-Bus call to ReadDirectory returns.
  </summary>
</histogram>

<histogram name="NativeSmbFileShare.ReadDirectoryDuration" units="ms"
    expires_after="M85">
  <obsolete>
    Removed in M87. No longer used with smbfs.
  </obsolete>
  <owner>zentaro@chromium.org</owner>
  <summary>
    The duration of ReadDirectory call to SmbProvider in milliseconds. This is
    recorded after the D-Bus call returns.
  </summary>
</histogram>

<histogram name="NativeSmbFileShare.RemountResult"
    enum="NativeSmbFileShare_MountResult" expires_after="M94">
  <obsolete>
    Removed in M94.
  </obsolete>
  <owner>simmonsjosh@google.com</owner>
  <owner>src/chrome/browser/ash/smb_client/OWNERS</owner>
  <summary>
    The result of the Remount operation during startup. This is recorded after
    the D-Bus call to Remount returns.
  </summary>
</histogram>

<histogram name="NCN.NetworkOperatorMCCMNC" units="units"
    expires_after="2021-10-27">
  <obsolete>
    Deprecated in 10/2021 because the location permission protected API is
    required to get this information and this isn't a must-have histogram.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@google.com</owner>
  <summary>
    The MCC (mobile country code) and MNC (mobile network code) of the network
    operator when a new metrics log is created or when the network connection is
    changed. A value of zero means a non-mobile network or the operator code is
    unknown.
  </summary>
</histogram>

<histogram name="NQE.Prefs.ReadCount" units="count" expires_after="2021-10-10">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Number of times the network quality prefs were read by the network quality
    estimator.
  </summary>
</histogram>

<histogram name="NQE.Prefs.ReadSize" units="count" expires_after="2021-10-10">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Count of the number of network IDs in the prefs read by the network quality
    estimator.
  </summary>
</histogram>

<histogram name="NQE.Prefs.WriteCount" units="count" expires_after="2021-10-10">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Number of times the network quality prefs were written by the network
    quality estimator.
  </summary>
</histogram>

<histogram name="NQE.RTT.ObservationSource" enum="NQEObservationSource"
    expires_after="2022-02-20">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</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.
  </summary>
</histogram>

<histogram name="NQE.RTT.OnECTComputation" units="ms"
    expires_after="2022-01-16">
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</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.
  </summary>
</histogram>

<histogram name="OAuth2Login.SessionRestore" enum="GaiaSessionRestoreOutcome"
    expires_after="2024-03-03">
  <owner>anastasiian@chromium.org</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-03-03">
  <owner>anastasiian@chromium.org</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="2024-03-03">
  <owner>anastasiian@chromium.org</owner>
  <owner>sinhak@chromium.org</owner>
  <summary>
    How long it takes for the session restore to finish successfully.
  </summary>
</histogram>

<histogram name="OccludedWindowMouseEvents" units="events"
    expires_after="2021-12-12">
  <obsolete>
    Retired in M99.
  </obsolete>
  <owner>davidbienvenu@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    Incremented each time a mouse event is handled by a window that is marked as
    occluded. This number should be 0 or very close to 0. It should be much less
    than the number of times a window is mark occluded -
    WindowOcclusionChanged.Occluded.
  </summary>
</histogram>

<histogram name="OffscreenCanvas.TextMetrics.SetFont" units="microseconds"
    expires_after="2021-07-14">
  <obsolete>
    Retired in M93, replaced by OffscreenCanvas.TextMetrics.SetFont2 which has a
    wider range.
  </obsolete>
  <owner>yiyix@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>
    Time spent in microseconds to perform call SetFont in canvas for
    OffscreenCanvas. It's measured each time SetFont is called.

    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="OffscreenCanvas.TextMetrics.SetFont2" units="microseconds"
    expires_after="M93">
  <obsolete>
    Retired in M94.
  </obsolete>
  <owner>yiyix@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>
    Time spent in microseconds to perform call SetFont in canvas for
    OffscreenCanvas. It's measured each time SetFont is called.

    This differs from OffscreenCanvas.TextMetrics.SetFont in that it uses
    buckets up to ten seconds rather than ten milliseconds (due to a change in
    the underlying histogramming function called).

    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="OriginTrials.PersistentOriginTrial.CriticalRestart"
    enum="Boolean" expires_after="2024-02-11">
  <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="2024-02-04">
  <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="2024-02-04">
  <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="2024-02-04">
  <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="2024-02-04">
  <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="2024-02-04">
  <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="2024-02-04">
  <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="2024-02-04">
  <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="2024-02-04">
  <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="OriginTrials.ValidationResult" enum="OriginTrialTokenStatus"
    expires_after="2021-10-10">
  <owner>chasej@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>feature-control@chromium.org</owner>
  <summary>
    Counts the results of token validation checks to enable experimental
    features. The result for each token validation check is counted once per
    token per execution context (e.g. page, worker).
  </summary>
</histogram>

<histogram name="OSCrypt.AppBoundEncryption.Decrypt.ResultCode" enum="Hresult"
    expires_after="2024-01-28">
  <owner>wfh@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    The result code of the application-bound Decrypt operation. This is logged
    once during browser startup on a background thread for system-level installs
    on Windows only.
  </summary>
</histogram>

<histogram name="OSCrypt.AppBoundEncryption.Decrypt.ResultLastError"
    enum="WinGetLastError" expires_after="2024-01-28">
  <owner>wfh@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    The GetLastError code for a failed application-bound Decrypt operation. This
    is logged once during browser startup on a background thread for
    system-level installs on Windows only, if the call to Decrypt failed.
  </summary>
</histogram>

<histogram name="OSCrypt.AppBoundEncryption.Decrypt.Time" units="ms"
    expires_after="2024-01-28">
  <owner>wfh@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    The amount of time, in ms, that it takes to perform an application-bound
    Decrypt call. This is logged once during browser startup on a background
    thread for system-level installs on Windows only.
  </summary>
</histogram>

<histogram name="OSCrypt.AppBoundEncryption.Encrypt.ResultCode" enum="Hresult"
    expires_after="2024-01-28">
  <owner>wfh@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    The result code of the application-bound Encrypt operation. This is logged
    once during browser startup on a background thread for system-level installs
    on Windows only, for a client that is initializing a new local state or a
    previously failing client.
  </summary>
</histogram>

<histogram name="OSCrypt.AppBoundEncryption.Encrypt.ResultLastError"
    enum="WinGetLastError" expires_after="2024-01-28">
  <owner>wfh@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    The GetLastError code for a failed application-bound Encrypt operation. This
    is logged once during browser startup on a background thread for
    system-level installs on Windows only, if the call to Encrypt failed, for a
    client that is initializing a new local state or a previously failing
    client.
  </summary>
</histogram>

<histogram name="OSCrypt.AppBoundEncryption.Encrypt.Time" units="ms"
    expires_after="2024-01-28">
  <owner>wfh@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    The amount of time, in ms, that it takes to perform an application-bound
    Encrypt call. This is logged once during browser startup on a background
    thread for system-level installs on Windows only, for a client that is
    initializing a new local state or a previously failing client.
  </summary>
</histogram>

<histogram name="OSCrypt.BackendUsage" enum="LinuxPasswordStoreUsage"
    expires_after="2023-11-19">
  <owner>cfroussios@chromium.org</owner>
  <owner>mamir@chromium.org</owner>
  <summary>
    The backend selected for this user and whether it was initialised
    successfully.
  </summary>
</histogram>

<histogram name="OSCrypt.Linux.DecryptedWithEmptyKey" enum="Boolean"
    expires_after="2024-03-17">
  <owner>cfroussios@chromium.org</owner>
  <owner>thestig@chromium.org</owner>
  <summary>
    True, iff the data was not decryptable with the stored encryption key, but
    was decryptable with a key generated from an empty string. This is emitted
    every time OSCrypt attempts to decrypt a value.
  </summary>
</histogram>

<histogram name="OSCrypt.Win.Decrypt.Result" enum="BooleanSuccess"
    expires_after="2024-03-17">
  <owner>wfh@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    Whether or not the DPAPI Decrypt call to decrypt the OSCrypt key succeeeded.
    This is logged once during browser startup on Windows.
  </summary>
</histogram>

<histogram name="OSCrypt.Win.Decrypt.Time" units="ms"
    expires_after="2023-11-12">
  <owner>wfh@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    The amount of time, in ms, that it takes to perform a DPAPI Decrypt call.
    This is logged once during browser startup on Windows.
  </summary>
</histogram>

<histogram name="OSCrypt.Win.Encrypt.Result" enum="BooleanSuccess"
    expires_after="2024-03-17">
  <owner>wfh@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    Whether or not the DPAPI Encrypt call to encrypt the OSCrypt key succeeeded.
    This is logged once during browser startup on Windows, if there is no stored
    key and a new one has to be generated. This data will therefore be biased
    towards newer clients. See OSCrypt.Win.Decrypt.Result which contains
    unbiased data.
  </summary>
</histogram>

<histogram name="OSCrypt.Win.Encrypt.Time" units="ms"
    expires_after="2023-11-12">
  <owner>wfh@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    The amount of time, in ms, that it takes to perform a DPAPI Encrypt call.
    This is logged once during browser startup on Windows, if there is no stored
    key and a new one has to be generated. This data will therefore be biased
    towards newer clients. See OSCrypt.Win.Decrypt.Time which contains unbiased
    data.
  </summary>
</histogram>

<histogram name="OSCrypt.Win.KeyDecryptionError" enum="WinGetLastError"
    expires_after="2021-08-01">
  <owner>wfh@chromium.org</owner>
  <owner>forshaw@chromium.org</owner>
  <summary>
    The Windows GetLastError after a failure from calling into DPAPI to decrypt
    the master key for the os_crypt library on Windows. This is recorded during
    the OSCrypt::Init each time the decryption fails.
  </summary>
</histogram>

<histogram name="OSX.ExceptionHandlerEvents" enum="OSXExceptionHandlerEvents"
    expires_after="M85">
  <owner>mark@chromium.org</owner>
  <summary>Events seen by the OSX NSException swizzle.</summary>
</histogram>

<histogram name="OSX.Fullscreen.Enter.Source" enum="OSXFullscreenSource"
    expires_after="M85">
  <owner>spqchan@chromium.org</owner>
  <summary>
    This event is recorded each time a user triggers fullscreen for a browser
    window. It indicates if the fullscreen is triggered for the browser or the
    tab content.
  </summary>
</histogram>

<histogram name="OSX.Fullscreen.Enter.Style" enum="OSXFullscreenStyle"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    This event is recorded each time a user triggers fullscreen for a browser
    window. It indicates the mechanism (immersive vs. AppKit) and the type of
    AppKit Fullscreen (Presentation Mode vs. Canonical Fullscreen).
  </summary>
</histogram>

<histogram name="OSX.Fullscreen.Enter.WindowLocation"
    enum="OSXFullscreenWindowLocation" expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    This event is recorded each time a user triggers fullscreen for a browser
    window. It indicates the screen in which the window was fullscreened, and
    the number of screens available.
  </summary>
</histogram>

<histogram name="OSX.Handoff.Origin" enum="OSXHandoffOrigin"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    This event is recorded each time a Handoff is received by Chrome on OSX. The
    enumeration indicates the source of the Handoff.
  </summary>
</histogram>

<histogram name="OSX.Installation.OtherChromeInstances"
    enum="OSXOtherChromeInstancesResult" expires_after="2020-12-12">
  <obsolete>
    Removed 11/2020.
  </obsolete>
  <owner>avi@chromium.org</owner>
  <owner>mark@chromium.org</owner>
  <summary>
    The instances of other copies of Google Chrome on the user's Mac. Logged
    once on startup, and only for Chrome Beta and Chrome Dev. Will be used to
    determine if/how home directory migration will be done for side-by-side.
  </summary>
</histogram>

<histogram name="OSX.NativeShare" enum="BooleanSuccess"
    expires_after="2021-09-05">
  <obsolete>
    Removed July 2021, superceded by Mac.FileMenuNativeShare.
  </obsolete>
  <owner>lgrey@chromium.org</owner>
  <summary>
    Whether the user successfully shared via a native sharing extension after
    selecting it from the File &gt; Share menu. False can indicate failure or
    user-initiated cancellation. This is obsolete; the same data is currently
    being collected as Mac.FileMenuNativeShare.
  </summary>
</histogram>

<histogram name="OSX.Settings.ScreensHaveSeparateSpaces"
    enum="OSXScreensHaveSeparateSpaces" expires_after="M85">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The configuration of the setting &quot;Screens Have Separate Spaces&quot;
    available in OSX 10.9+.
  </summary>
</histogram>

<histogram name="OSX.SystemHotkeyMap.LoadSuccess" enum="BooleanSuccess"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    Whether an attempt to load the system hotkeys on a Mac was successful.
  </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="2024-06-01">
  <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"
    units="BooleanDetected" expires_after="2024-06-01">
  <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"
    units="BooleanDetected" expires_after="2024-06-01">
  <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-06-01">
  <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"
    units="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-06-01">
  <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-06-01">
  <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="P2P.Server.ClientCount" units="count"
    expires_after="2021-12-29">
  <owner>ahassani@chromium.org</owner>
  <owner>chromeos-core-services@google.com</owner>
  <summary>
    The number of currently connected HTTP clients. This is reported every time
    a HTTP client connects.
  </summary>
</histogram>

<histogram name="P2P.Server.ContentServedInterruptedMB" units="MB"
    expires_after="2021-12-29">
  <owner>ahassani@chromium.org</owner>
  <owner>chromeos-core-services@google.com</owner>
  <summary>
    Number of megabytes (1,000,000 bytes) served from the device (via HTTP)
    where the client disconnects prematurely. This is reported every time a file
    is served and the client disconnects before receiving all data.
  </summary>
</histogram>

<histogram name="P2P.Server.FileCount" units="count" expires_after="2021-12-29">
  <owner>ahassani@chromium.org</owner>
  <owner>chromeos-core-services@google.com</owner>
  <summary>
    The number of files available via p2p. This is reported every time a file is
    added or removed to the /var/cache/p2p directory.
  </summary>
</histogram>

<histogram name="PageImageService.Backend.OptimizationGuide.Result{ClientId}"
    enum="PageImageServiceResult" expires_after="2024-02-20">
  <owner>sophiechang@chromium.org</owner>
  <owner>chrome-journeys@google.com</owner>
  <component>Internals&gt;OptimizationGuide</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="2024-02-20">
  <owner>tommycli@chromium.org</owner>
  <owner>chrome-journeys@google.com</owner>
  <component>UI&gt;Browser&gt;Journeys</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="2024-02-20">
  <owner>tommycli@chromium.org</owner>
  <owner>chrome-journeys@google.com</owner>
  <component>UI&gt;Browser&gt;Journeys</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="2024-02-20">
  <owner>tommycli@chromium.org</owner>
  <owner>chrome-journeys@google.com</owner>
  <component>UI&gt;Browser&gt;Journeys</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="2024-02-20">
  <owner>tommycli@chromium.org</owner>
  <owner>chrome-journeys@google.com</owner>
  <component>UI&gt;Browser&gt;Journeys</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="2024-02-20">
  <owner>tommycli@chromium.org</owner>
  <owner>chrome-journeys@google.com</owner>
  <component>UI&gt;Browser&gt;Journeys</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="PaintHolding.CommitTrigger2" enum="PaintHoldingCommitTrigger2"
    expires_after="2023-08-08">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Records the reason that a commit was triggered, to enable research into
    which event (non-same-origin, FCP, timeout, etc) led to the first commit.
  </summary>
</histogram>

<histogram name="PaintHolding.InputTiming4" enum="PaintHoldingInputTiming"
    expires_after="2024-03-01">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Records whether or not input arrived before the first paint.
  </summary>
</histogram>

<histogram name="PartnerBookmark.LoadingTime" units="ms"
    expires_after="2021-07-10">
  <owner>bttk@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <summary>
    The time spent on loading partner bookmarks, from kickOffReading() to
    bookmarkModelLoaded() callback.
  </summary>
</histogram>

<histogram name="PendingBeaconHost.Action" enum="PendingBeaconHostAction"
    expires_after="M115">
  <owner>mych@chromium.org</owner>
  <owner>pending-beacon-experiment@chromium.org</owner>
  <summary>
    Warning: this histogram was expired from M113 to M115; data may be missing.

    The type of PendingBeacon-related action that the browser has performed.

    This is only recorded when the PendingBeacon API is called to create, send,
    or cancel a beacon. See
    https://chromium.googlesource.com/chromium/src/+/main/docs/experiments/pending-beacon.md
    and https://crrev.com/c/4028260 for more details.
  </summary>
</histogram>

<histogram name="PendingBeaconHost.BatchAction"
    enum="PendingBeaconHostBatchAction" expires_after="M115">
  <owner>mych@chromium.org</owner>
  <owner>pending-beacon-experiment@chromium.org</owner>
  <summary>
    Warning: this histogram was expired from M113 to M115; data may be missing.

    The type of batch PendingBeacon-related action that the browser has
    performed. A batch action means the browser is about to batch process all
    queued pending beacon requests at once.

    See
    https://chromium.googlesource.com/chromium/src/+/main/docs/experiments/pending-beacon.md
    and https://crrev.com/c/4028260 for more details.
  </summary>
</histogram>

<histogram name="Pepper.Graphics3DHasShareGroup" enum="BooleanShareGroup"
    expires_after="M77">
  <owner>jbauman@chromium.org</owner>
  <summary>
    True if a non-flash Pepper Graphics3D context has a share group.
  </summary>
</histogram>

<histogram name="Pepper.InterfaceUsed" enum="PepperInterface"
    expires_after="2024-01-15">
  <owner>fabiansommer@chromium.org</owner>
  <owner>dschuff@chromium.org</owner>
  <summary>
    The number of out-of-process plugin processes that have loaded a particular
    PPB interface version.
  </summary>
</histogram>

<histogram name="Pepper.PluginContextSecurity.TCPConnect" enum="BooleanSecure"
    expires_after="M77">
  <owner>raymes@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    Whether a Pepper TCP connect attempt comes from a plugin in a secure or an
    insecure origin.
  </summary>
</histogram>

<histogram name="Pepper.PluginContextSecurity.UDPBind" enum="BooleanSecure"
    expires_after="M77">
  <owner>raymes@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    Whether a Pepper UDP bind attempt comes from a plugin in a secure or an
    insecure origin.
  </summary>
</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="PictureInPictureWindow.ButtonPressed"
    enum="OverlayWindowControl" expires_after="M85">
  <owner>fbeaufort@chromium.org</owner>
  <owner>media-dev-uma@chromium.org</owner>
  <summary>
    Records Picture-in-Picture window control buttons pressed by user (basically
    everything except user tap gestures).
  </summary>
</histogram>

<histogram name="PictureInPictureWindow.TapGesture" enum="OverlayWindowControl"
    expires_after="M85">
  <owner>fbeaufort@chromium.org</owner>
  <owner>media-dev-uma@chromium.org</owner>
  <summary>
    Records Picture-in-Picture window control user tap gestures.
  </summary>
</histogram>

<histogram name="PLT.iOS.BrowserInitiatedPageLoadTime" units="ms"
    expires_after="M92">
  <obsolete>
    Replaced by PLT.iOS.BrowserInitiatedPageLoadTime2 as of M92, in order to use
    more granular buckets above 10 seconds.
  </obsolete>
  <owner>djean@chromium.org</owner>
  <owner>ajuma@chromium.org</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.RendererInitiatedPageLoadTime).
  </summary>
</histogram>

<histogram name="PLT.iOS.BrowserInitiatedPageLoadTime2" units="ms"
    expires_after="2024-02-04">
  <owner>djean@chromium.org</owner>
  <owner>ajuma@chromium.org</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.RendererInitiatedPageLoadTime" units="ms"
    expires_after="M92">
  <obsolete>
    Replaced by PLT.iOS.RendererInitiatedPageLoadTime2 as of M92, in order to
    use more granular buckets above 10 seconds.
  </obsolete>
  <owner>djean@chromium.org</owner>
  <owner>ajuma@chromium.org</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="PLT.iOS.RendererInitiatedPageLoadTime2" units="ms"
    expires_after="2024-02-04">
  <owner>djean@chromium.org</owner>
  <owner>ajuma@chromium.org</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="PLT.PT_RequestToStart" units="ms" expires_after="M85">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    This time is based on the NavigationTiming spec and is a more accurate
    version of PLT.RequestToStart. Start: requestStart. Request:
    navigationStart.
  </summary>
</histogram>

<histogram name="PLT.PT_StartToCommit" units="ms" expires_after="M85">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    This time is based on the NavigationTiming spec and is a more accurate
    version of PLT.StartToCommit. Start: requestStart. Commit: responseStart.
  </summary>
</histogram>

<histogram name="PLT.PT_StartToFinish" units="ms" expires_after="M85">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    This time is based on the NavigationTiming spec and is a more accurate
    version of PLT.StartToFinish. Start: requestStart. Finish: loadEventEnd.
  </summary>
</histogram>

<histogram name="PLT.RequestToStart" units="ms" expires_after="M85">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from &quot;request&quot; to &quot;start.&quot; &quot;Request&quot;==
    time when user requested document. &quot;Start&quot;== time when renderer
    requested load of document, after any unload of last document.
  </summary>
</histogram>

<histogram base="true" name="PointingStick.Acceleration" enum="BooleanEnabled"
    expires_after="2024-06-11">
  <owner>dpad@google.com</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    Acceleration setting for pointing sticks (typically TrackPoints, the
    miniature red joysticks found in some laptop keyboards). Only reported on
    Chrome OS.

    Expired from 2021-04-01 to M113. May be missing some data.
  </summary>
</histogram>

<histogram base="true" name="PointingStick.PointerSensitivity"
    enum="PointerSensitivity" expires_after="2024-06-11">
  <owner>dpad@google.com</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    Sensitivity value for pointing sticks (typically TrackPoints, the miniature
    red joysticks found in some laptop keyboards). Only reported on Chrome OS.

    Expired from 2021-04-01 to M113. May be missing some data.
  </summary>
</histogram>

<histogram base="true" name="PointingStick.PrimaryButtonRight"
    enum="PointerPrimaryButton" expires_after="2024-06-11">
  <owner>dpad@google.com</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    Setting for the primary button of pointing sticks (typically TrackPoints,
    the miniature red joysticks found in some laptop keyboards). Only reported
    on Chrome OS.

    Expired from 2021-04-01 to M113. May be missing some data.
  </summary>
</histogram>

<histogram name="PrefetchedSignedExchangeCache.BodySize" units="bytes"
    expires_after="2022-09-29">
  <obsolete>
    Removed 2022-09.
  </obsolete>
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    The body size of each prefetched signed exchanges in
    PrefetchedSignedExchangeCache which is attached to a frame. Recorded when
    the frame is deleted or is navigated to different document.
  </summary>
</histogram>

<histogram name="PrefetchedSignedExchangeCache.BodySizeTotal" units="bytes"
    expires_after="2022-09-29">
  <obsolete>
    Removed 2022-09.
  </obsolete>
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    The total body size 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="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="PrefetchedSignedExchangeCache.HeadersSizeTotal" units="bytes"
    expires_after="2022-09-29">
  <obsolete>
    Removed 2022-09.
  </obsolete>
  <owner>ksakamotoro@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    The total headers size of prefetched signed exchanges including outer
    response headers and inner response headers 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="PrefService.ReadError" enum="PrefServiceReadError"
    expires_after="M81">
  <owner>csharp@chromium.org</owner>
  <summary>
    Enumeration of errors that happened when reading Preferences files.
  </summary>
</histogram>

<histogram name="Previews.CacheControlNoTransform.BlockedPreview"
    enum="PreviewsType" expires_after="2021-08-09">
  <obsolete>
    Obsoleted 02/2021.
  </obsolete>
  <owner>sophiechang@chromium.org</owner>
  <owner>mcrouse@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Blocked previews due to Cache-Control:no-transform directive.
  </summary>
</histogram>

<histogram name="Previews.ContentLength" units="KB" expires_after="M85">
  <obsolete>
    Not even logged by code. Obsolete in 09/2020.
  </obsolete>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The actual data used for a page load using a preview optimization.
  </summary>
</histogram>

<histogram name="Previews.DataInflation" units="KB" expires_after="M85">
  <obsolete>
    Not even logged by code. Obsolete in 09/2020.
  </obsolete>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The estimated amount that the content was inflated for a page load using a
    previews optimization. Recorded when a page load using a previews
    optimization inflates the data used.
  </summary>
</histogram>

<histogram name="Previews.DataInflationPercent" units="%" expires_after="M85">
  <obsolete>
    Not even logged by code. Obsolete in 09/2020.
  </obsolete>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The estimated percent of data used that a page load would have otherwise
    cost for a page load using a previews optimization. Recorded when a page
    load using a previews optimization inflates the data used.
  </summary>
</histogram>

<histogram name="Previews.DataSavings" units="KB" expires_after="M85">
  <obsolete>
    Obsolete as of 09/2020.
  </obsolete>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The estimated data savings for a page load using a previews optimization.
    Recorded when a page load using a previews optimization reduces the data
    used.
  </summary>
</histogram>

<histogram name="Previews.DataSavingsPercent" units="%" expires_after="M85">
  <obsolete>
    Obsolete as of 09/2020.
  </obsolete>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The estimated percent of data savings for a page load using a previews
    optimization. Recorded when a page load using a previews optimization
    reduces the data used.
  </summary>
</histogram>

<histogram name="Previews.DeferAllScript.DenyListMatch" enum="BooleanDetected"
    expires_after="2020-10-18">
  <obsolete>
    Obsoleted 02/2021.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Records true when a URL matches the regex of denylist. Recorded at the time
    of navigation commit.
  </summary>
</histogram>

<histogram name="Previews.DeferAllScript.RedirectLoopDetectedUsingCache"
    enum="BooleanDetected" expires_after="2020-09-27">
  <obsolete>
    Obsoleted 02/2021.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Records true when a redirect loop is detected when defer all script is in
    use. Recorded at the time of navigation commit.
  </summary>
</histogram>

<histogram name="Previews.EligibilityReason" enum="PreviewsEligibilityReason"
    expires_after="2021-07-11">
  <obsolete>
    Obsoleted 02/2021.
  </obsolete>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    When evaluating whether to show a user a preview, the preview might be
    disallowed for various reasons. If the preview is disallowed, then this
    reports the reason for disallowing it. If the preview is allowed, then this
    generally reports &quot;Previews Allowed&quot;. It may instead report
    &quot;Previews Allowed without server rule check&quot; for a preview that
    expects to check server rules but they are not enabled. Recorded throughout
    navigation at the beginning of each navigation, after each redirect, and
    during commit.
  </summary>
</histogram>

<histogram name="Previews.LitePageNotificationInfoBar"
    enum="PreviewsLitePageInfoBarAction" expires_after="2022-04-20">
  <obsolete>
    Obsoleted 02/2021.
  </obsolete>
  <owner>robertogden@chromium.org</owner>
  <owner>src/chrome/browser/data_saver/OWNERS</owner>
  <summary>
    User interactions with the HTTPS Server Previews notification InfoBar.
  </summary>
</histogram>

<histogram name="Previews.OmniboxAction" enum="PreviewsUserOmniboxAction"
    expires_after="2021-08-09">
  <obsolete>
    Obsoleted 02/2021.
  </obsolete>
  <owner>robertogden@chromium.org</owner>
  <summary>User interactions with the Previews Android Omnibox UI.</summary>
</histogram>

<histogram name="Previews.OptOut.UserOptedOut" enum="PreviewsUserOptedOut"
    expires_after="2021-03-31">
  <obsolete>
    Obsoleted 02/2021.
  </obsolete>
  <owner>sophiechang@chromium.org</owner>
  <owner>mcrouse@chromium.org</owner>
  <summary>
    Whether the user chose to reload the original page when shown a preview.
  </summary>
</histogram>

<histogram name="Previews.OriginalContentLength" units="KB" expires_after="M85">
  <obsolete>
    Not even logged by code. Obsolete in 09/2020.
  </obsolete>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The estimated content length of a page load using a preview optimization.
  </summary>
</histogram>

<histogram name="Previews.PageEndReason" enum="PageEndReason"
    expires_after="2021-08-09">
  <obsolete>
    Obsoleted 02/2021.
  </obsolete>
  <owner>robertogden@chromium.org</owner>
  <summary>Records why the page load ended on a given preview type.</summary>
</histogram>

<histogram name="Previews.Triggered.EffectiveConnectionType2"
    enum="NQEEffectiveConnectionType" expires_after="2020-12-12">
  <obsolete>
    Obsolete as of 11/2020.
  </obsolete>
  <owner>dougarnett@chromium.org</owner>
  <owner>mcrouse@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the effective connection type of a navigation that triggers a
    preview. This is captured at commit time but uses the effective connection
    type from the beginning of the navigation.
  </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.TotalDuration"
    units="microseconds" expires_after="2024-02-14">
  <owner>ajgo@chromium.org</owner>
  <owner>src/sandbox/policy/win/OWNERS</owner>
  <summary>
    Duration of 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>
</histogram>

<histogram name="ProxyOverriddenBubble.UserSelection"
    enum="ExtensionBubbleAction" expires_after="2020-12-31">
  <obsolete>
    Code removed 2021/06.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The action taken by the user when the &quot;proxy overridden&quot; extension
    warning bubble is shown. Logged immediately after the action is taken.
  </summary>
</histogram>

<histogram name="PushMessaging.DeliveryStatus" enum="PushEventStatus"
    expires_after="2024-03-10">
  <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.PushSubscriptionChangeStatus"
    enum="PushEventStatus" expires_after="M98">
  <owner>peter@chromium.org</owner>
  <owner>rayankans@chromium.org</owner>
  <owner>knollr@chromium.org</owner>
  <summary>
    When a Service Worker receives a pushsubscriptionchange event, this records
    whether the overall operation was successful, or otherwise the type of error
    encountered.
  </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.TimeToReadPersistedMessages" units="ms"
    expires_after="M98">
  <owner>peter@chromium.org</owner>
  <owner>knollr@chromium.org</owner>
  <summary>
    When a message arrives for a lazy subscription and Chrome isn't in the
    foreground, it is persisted on disk until next time Chrome is in the
    foreground. This histogram measures the time spent in reading and replaying
    persisted messages when Chrome goes to the foreground.
  </summary>
</histogram>

<histogram name="PushMessaging.UnregistrationReason"
    enum="PushUnregistrationReason" expires_after="2024-02-25">
  <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="2024-02-04">
  <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="2024-06-15">
  <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.BookmarkBarState.On{Frequency}AddToReadingList"
    enum="BookmarkBarState" expires_after="2022-11-20">
  <owner>corising@chromium.org</owner>
  <owner>chrome-desktop-ui-sea@google.com</owner>
  <summary>
    The state of the bookmark bar recorded {Frequency} a user adds to the
    reading list. (Desktop only).
  </summary>
  <token key="Frequency">
    <variant name="Every" summary="every time"/>
    <variant name="First" summary="the first time"/>
  </token>
</histogram>

<histogram name="ReadingList.ContextMenu" enum="ReadingListContextMenuActions"
    expires_after="2024-03-15">
  <owner>gambard@chromium.org</owner>
  <owner>bling-team@google.com</owner>
  <summary>
    The action chosen by the user after displaying the reading list context
    menu.
  </summary>
</histogram>

<histogram name="ReadingList.Download.Failures" units="count"
    expires_after="2024-03-15">
  <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="2024-03-15">
  <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="2024-03-15">
  <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.MarkEntryRead" enum="ReadingListStorageState"
    expires_after="2024-06-15">
  <owner>mastiz@chromium.org</owner>
  <owner>mmrashad@google.com</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    When a reading list entry is marked as read, records in which storage this
    happened.
  </summary>
</histogram>

<histogram name="ReadingList.OfflineVersionDisplayed" enum="Boolean"
    expires_after="2024-03-15">
  <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="2024-03-15">
  <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.AgeOnFirstRead" units="hours"
    expires_after="2024-02-11">
  <owner>thegreenfrog@chromium.org</owner>
  <owner>olivierrobin@google.com</owner>
  <summary>
    Time since the creation of the read reading list entry being read for the
    first time.
  </summary>
</histogram>

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

<histogram name="ReadingList.SyncStateMatchesBookmarks" enum="BooleanMatched"
    expires_after="2022-11-20">
  <obsolete>
    No longer recorded as of 2023-05.
  </obsolete>
  <owner>corising@chromium.org</owner>
  <owner>chrome-desktop-ui-sea@google.com</owner>
  <summary>
    Records whether the reading list and bookmarks sync states match on startup
    when not in Incognito or guest mode (Desktop only).
  </summary>
</histogram>

<histogram name="ReadingList.Unread.AgeOnDeletion" units="hours"
    expires_after="2024-03-15">
  <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="2024-03-15">
  <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.InitialEntriesRenderTime" units="ms"
    expires_after="2022-11-20">
  <owner>corising@chromium.org</owner>
  <owner>chrome-desktop-ui-sea@google.com</owner>
  <summary>
    Records the time taken to load the Read Later WebUI and render (at least)
    the initial list of entries. This is roughly equivalent to 'time to first
    meaningful paint' for the Read Later UI.
  </summary>
</histogram>

<histogram name="ReadingList.WebUI.LoadCompletedTime" units="ms"
    expires_after="2024-03-10">
  <owner>corising@chromium.org</owner>
  <owner>chrome-desktop-ui-sea@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="2024-03-17">
  <owner>corising@chromium.org</owner>
  <owner>chrome-desktop-ui-sea@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.WebUI.ReadingListDataReceived" units="ms"
    expires_after="2021-08-15">
  <obsolete>
    Deprecated as of 2021/02. Metric is no longer needed.
  </obsolete>
  <owner>corising@chromium.org</owner>
  <owner>chrome-desktop-ui-sea@google.com</owner>
  <summary>
    The time taken for the WebUI in the renderer to receive the full list of
    entries for the current user profile. This is measured as the time from when
    the data was first requested by the WebUI to when the data was received by
    the WebUI.
  </summary>
</histogram>

<histogram name="ReadingList.WindowDisplayedDuration" units="ms"
    expires_after="2022-11-21">
  <owner>corising@chromium.org</owner>
  <owner>chrome-desktop-ui-sea@google.com</owner>
  <summary>
    Records the amount of time between when a reading list bubble is opened and
    when it is closed. It does so by recording the difference in time between
    when the the hosting WebUIBubbleDialogView's Widget is first created and
    when the widget is destroyed. This is logged on Desktop only.
  </summary>
</histogram>

<histogram name="ReadingList.{ReadStatus}.Count.{RecordedAt}.{StorageState}"
    units="count" expires_after="2024-06-20">
  <owner>corising@chromium.org</owner>
  <owner>mastiz@chromium.org</owner>
  <owner>mmrashad@google.com</owner>
  <owner>treib@chromium.org</owner>
  <owner>chrome-desktop-ui-sea@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="RecoveryComponent.Event" enum="RecoveryComponentEvent"
    expires_after="M77">
  <owner>robertshield@chromium.org</owner>
  <summary>Log each stage of a recovery component event.</summary>
</histogram>

<histogram base="true" name="RecurrenceRanker.InitializationStatus"
    enum="RecurrenceRankerInitializationStatus" expires_after="2021-02-01">
  <obsolete>
    Removed January 2021.
  </obsolete>
<!-- Name completed by histogram_suffixes
       name="RecurrenceRankerModel" -->

  <owner>tby@chromium.org</owner>
  <owner>charleszhao@chromium.org</owner>
  <summary>
    Records situations that can occur during the configuration and
    initialization of a RecurrenceRanker.
  </summary>
</histogram>

<histogram base="true" name="RecurrenceRanker.JsonConfigConversionStatus"
    enum="BooleanSuccess" expires_after="2021-02-01">
  <obsolete>
    Removed January 2021.
  </obsolete>
<!-- Name completed by histogram_suffixes
       name="RecurrenceRankerModel" -->

  <owner>tby@chromium.org</owner>
  <owner>charleszhao@chromium.org</owner>
  <summary>
    Whether the conversion of a JSON config for a RecurrenceRanker succeeded for
    failed.
  </summary>
</histogram>

<histogram base="true" name="RecurrenceRanker.SerializationStatus"
    enum="RecurrenceRankerSerializationStatus" expires_after="2021-02-01">
  <obsolete>
    Removed January 2021.
  </obsolete>
<!-- Name completed by histogram_suffixes
       name="RecurrenceRankerModel" -->

  <owner>tby@chromium.org</owner>
  <owner>charleszhao@chromium.org</owner>
  <summary>
    Reports the result of a save or load of a RecurrenceRanker model.
  </summary>
</histogram>

<histogram base="true" name="RecurrenceRanker.Usage"
    enum="RecurrenceRankerUsage" expires_after="2021-02-01">
  <obsolete>
    Removed January 2021.
  </obsolete>
<!-- Name completed by histogram_suffixes
       name="RecurrenceRankerModel" -->

  <owner>tby@chromium.org</owner>
  <owner>charleszhao@chromium.org</owner>
  <summary>
    Reports when the functions of a RecurrenceRanker model are used.
  </summary>
</histogram>

<histogram name="ReduceAcceptLanguage.AcceptLanguageNegotiationRestart"
    enum="AcceptLanguageNegotiationRestart" expires_after="2024-02-04">
  <owner>awillia@chromium.org</owner>
  <owner>miketaylr@chromium.org</owner>
  <owner>victortan@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.ClearLatency" units="ms"
    expires_after="M122">
  <owner>awillia@chromium.org</owner>
  <owner>miketaylr@chromium.org</owner>
  <owner>victortan@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="M122">
  <owner>awillia@chromium.org</owner>
  <owner>miketaylr@chromium.org</owner>
  <owner>victortan@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="M122">
  <owner>awillia@chromium.org</owner>
  <owner>miketaylr@chromium.org</owner>
  <owner>victortan@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="M122">
  <owner>awillia@chromium.org</owner>
  <owner>miketaylr@chromium.org</owner>
  <owner>victortan@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 base="true" name="RelaunchNotification.ShowResult"
    enum="RelaunchNotificationShowResult" expires_after="2021-06-20">
  <obsolete>
    Removed in M90.
  </obsolete>
  <owner>ayaelattar@chromium.org</owner>
  <owner>grt@chromium.org</owner>
  <summary>
    The result of an attempt to show a relaunch notification dialog.
  </summary>
</histogram>

<histogram name="RenderFrameHostImpl.DroppedInterfaceRequests" units="count"
    expires_after="M85">
  <obsolete>
    Removed in January 2022.
  </obsolete>
  <owner>engedy@chromium.org</owner>
  <summary>
    For each load in a frame, records the number of interface requests to
    RenderFrame::GetRemoteInterfaces that arrived to the RenderFrameHostImpl
    after the RFHI had already committed the next cross-document navigation.

    This means that |document_scoped_interface_provider_binding_| was already
    unbound at the time from the interface connection that had been used to
    service RenderFrame::GetRemoteInterface for the previous load, so those
    interface requests are dropped. This histogram measures how often, if at
    all, that happens in practice.
  </summary>
</histogram>

<histogram name="RenderTextHarfBuzz.GetFallbackFontsTime" units="ms"
    expires_after="2024-02-25">
  <owner>ccameron@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    Time retrieve the fallback fonts on the system used for
    RenderTextHarfBuzz::ShapeRuns. This metric is known to be quite slow on bad
    cases.
  </summary>
</histogram>

<histogram name="RenderTextHarfBuzz.GetFallbackFontTime" units="ms"
    expires_after="2024-06-04">
  <owner>ccameron@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    Time retrieve the preferred fallback font on the system used for
    RenderTextHarfBuzz::ShapeRuns. Fallback font is determined based on the
    input text and locale.
  </summary>
</histogram>

<histogram name="RenderTextHarfBuzz.ShapeRunsFallback" enum="ShapeRunFallback"
    expires_after="2024-02-11">
  <owner>ccameron@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    This metric records the fallback font mechanism required to complete the
    shaping of a text.
  </summary>
</histogram>

<histogram name="RenderTextHarfBuzz.ShapeRunsWithFallbackFontsTime" units="ms"
    expires_after="2024-02-11">
  <owner>ccameron@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    Time to perform RenderTextHarfBuzz::ShapeRuns with retrieved the fallback
    fonts. This metric is known to be quite slow on bad cases.
  </summary>
</histogram>

<histogram name="RenderViewContextMenu.OpenLinkAsProfile" enum="OpenLinkAs"
    expires_after="2024-02-04">
  <owner>gabolvr@google.com</owner>
  <owner>droger@chromium.org</owner>
  <summary>
    Count the clicks and displays of renderer view context menu item Open Link
    as Profile, as well as Open Link in Incognito Window for comparison. If Open
    Link as Profile is a submenu, it is counted as displayed even if the submenu
    is not open, and only counted one time regardless the amount of items in the
    submenu.
  </summary>
</histogram>

<histogram name="RenderViewContextMenu.Shown" enum="RenderViewContextMenuItem"
    expires_after="2024-02-11">
  <owner>avi@chromium.org</owner>
  <owner>edwardjung@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>Count of renderer view context menu items shown.</summary>
</histogram>

<histogram name="RenderViewContextMenu.Used" enum="RenderViewContextMenuItem"
    expires_after="never">
<!-- expires-never: part of top-line metric (internal: go/chrome-browser-nsm) -->

  <owner>avi@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <summary>
    Count of renderer view context menu items (Only commands now) used.

    The user action RenderViewContextMenu.Used.IDC_CONTENT_CONTEXT_SEARCHWEBFOR
    is also logged in case that IDC_CONTENT_CONTEXT_SEARCHWEBFOR is logged to
    this histogram.

    This histogram is of special interest to the chrome-analysis-team@. Do not
    change its semantics or retire it without talking to them first.
  </summary>
</histogram>

<histogram name="ReportingAndNEL.ErrorInitializeDB"
    enum="SqliteLoggedResultCode" expires_after="2024-03-17">
  <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-03-10">
  <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-03-10">
  <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.WinGetLastErrorInitializeDB"
    enum="WinGetLastError" expires_after="2024-03-10">
  <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="Reset.ChromeOS.PowerwashDialogShown"
    enum="PowerwashDialogViewType" expires_after="M77">
  <owner>merkulova@chromium.org</owner>
  <summary>
    Records the number of times the factory reset dialog was shown. Grouped by
    the viewtype.
  </summary>
</histogram>

<histogram name="ResourceLoadingHints.ResourceLoadingBlocked"
    units="loading blocked" expires_after="M85">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records if the loading of a resource was blocked because the resource URL
    matched the resource loading hints. Recorded every time a resource load is
    requested.
  </summary>
</histogram>

<histogram
    name="ResourceLoadingHints.ResourceLoadingBlocked.ResourceLoadPriority.Allowed"
    enum="WebURLRequestPriority" expires_after="M85">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the resource load priority of a resource when its loading is not
    blocked due to the resource loading hints. Recorded every time a resource
    load is requested, and the load is not blocked due to the resource loading
    hints.
  </summary>
</histogram>

<histogram
    name="ResourceLoadingHints.ResourceLoadingBlocked.ResourceLoadPriority.Blocked"
    enum="WebURLRequestPriority" expires_after="M85">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the resource load priority of a resource when its loading is blocked
    due to the resource loading hints. Recorded every time a resource load is
    requested and the resource load is blocked because the resource URL matched
    the resource loading hints.
  </summary>
</histogram>

<histogram
    name="ResourceLoadingHints.ResourcePatternsAvailableAtCommitForRedirect"
    enum="BooleanAvailable" expires_after="M85">
  <owner>tbansal@chromium.org</owner>
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Records if the resource patterns were available at the time of page commit
    if the committed previews type was RESOURCE_LOADING_HINTS and the navigation
    was redirected. This is a subset of the ResourcePatternsAvailableAtCommit
    histogram.
  </summary>
</histogram>

<histogram
    name="ResourceScheduler.DelayableRequests.WaitTimeToAvoidContentionWithNonDelayableRequest"
    units="ms" expires_after="M85">
  <obsolete>
    Obsoleted M85.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records how long after the start of a delayable resource request, a
    non-delayable resource request arrived. This is the duration of time that
    the delayable request should have been queued for so as to avoid any network
    contetion with later-arriving non-delayable requests.
  </summary>
</histogram>

<histogram
    name="ResourceScheduler.NonDelayableLastEndToNonDelayableStart.NonDelayableNotInFlight"
    units="ms" expires_after="2020-12-14">
  <obsolete>
    Obsoleted M89.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <owner>dougarnett@chromium.org</owner>
  <summary>
    The duration of time between the end of a non-delayable resource request to
    the start of the next non-delayable resource request. Recorded at the start
    of all non-delayable requests that are preceeded by at least one completed
    non-delayable request in the same resource scheduler client. Recorded only
    when a non-delayable request is NOT in-flight.
  </summary>
</histogram>

<histogram
    name="ResourceScheduler.NonDelayableLastStartToNonDelayableStart.NonDelayableInFlight"
    units="ms" expires_after="2021-09-01">
  <owner>tbansal@chromium.org</owner>
  <owner>dougarnett@chromium.org</owner>
  <summary>
    The duration of time between the start of a non-delayable resource request
    to the start of the next non-delayable resource request. Recorded at the
    start of all non-delayable requests that are preceeded by at least one
    started non-delayable request in the same resource scheduler client.
    Recorded only when a delayable request is in-flight.
  </summary>
</histogram>

<histogram name="ResourceScheduler.PeakObservedQueueingDelay" units="ms"
    expires_after="2021-09-01">
  <owner>tbansal@chromium.org</owner>
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Within a request's lifetime, the peak observed queueing delay tells whether
    the request was affected by the network congestion. Records the maximum
    network queueing delay when the given request was in-flight. This is emitted
    when the request is completed.
  </summary>
</histogram>

<histogram name="ResourceScheduler.RequestQueuingDuration" units="ms"
    expires_after="2022-01-02">
  <owner>tbansal@chromium.org</owner>
  <summary>
    The amount of time the ResourceScheduler queued a request. Recorded in
    separate histograms based on the request loading priority at the time the
    request was dequeued.
  </summary>
</histogram>

<histogram
    name="ResourceScheduler.WeakSignalThrottling.WeakSignalDuration.{NetworkType}"
    units="ms" expires_after="2021-12-01">
  <obsolete>
    Removed Feb 2022.
  </obsolete>
  <owner>eseckler@chromium.org</owner>
  <owner>khokhlov@chromium.org</owner>
  <owner>skyostil@chromium.org</owner>
  <summary>
    Records the duration of the period when some low-priority requests were
    throttled due to weak radio signal. Only supported on Android.
  </summary>
  <token key="NetworkType">
    <variant name="Cell"/>
    <variant name="Wifi"/>
  </token>
</histogram>

<histogram name="Rlz.SetRlzPingSent" enum="BooleanSuccess" expires_after="M85">
  <owner>wzang@chromium.org</owner>
  <summary>
    Record if updating |should_send_rlz_ping| in RW_VPD is successful within the
    maximum retry counts.
  </summary>
</histogram>

<histogram name="Rollback.OobeRestoreResult" enum="Rollback_OobeRestoreResult"
    expires_after="2023-11-30">
  <owner>mpolzer@google.com</owner>
  <owner>crisguerrero@chromium.org</owner>
  <owner>chromeos-commercial-remote-management@google.com</owner>
  <summary>
    The result when attempting to restore data during a ChromeOS rollback.
  </summary>
</histogram>

<histogram name="Rollback.RollbackSaveResult"
    enum="Rollback_RollbackSaveResult" expires_after="2024-03-24">
  <owner>mpolzer@google.com</owner>
  <owner>crisguerrero@chromium.org</owner>
  <owner>chromeos-commercial-remote-management@google.com</owner>
  <summary>
    The result when attempting to save data during a ChromeOS rollback.
  </summary>
</histogram>

<histogram name="SB2.DownloadChecks" enum="SB2DownloadChecks"
    expires_after="2024-02-04">
  <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="2023-10-22">
  <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.GetHashResponseOrErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode" expires_after="M85">
  <owner>vakh@google.com</owner>
  <summary>
    Response or error codes from the SafeBrowsing service. Logged after a
    GetHash request finishes to capture the response code or error code for that
    call. Split out from SB2.GetHashErrorResponseOrErrorCode in M49.
  </summary>
</histogram>

<histogram name="SB2.PhishingInterstitialTimeClosed" units="ms"
    expires_after="M85">
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing phishing interstitial and the
    user navigating away by for example, closing the tab, clicking the browser
    back button or typing another URL in the address bar.
  </summary>
</histogram>

<histogram name="SB2.PhishingInterstitialTimeExpandedSeeMore" units="ms"
    expires_after="M85">
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing phishing interstitial and the
    user expanding the &quot;see more info&quot; section of the page. (Only
    applies to field trial version 2 of the interstitial.)
  </summary>
</histogram>

<histogram name="SB2.PhishingInterstitialTimeLearnMore" units="ms"
    expires_after="M85">
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing phishing interstitial and the
    user clicking on the learn more link.
  </summary>
</histogram>

<histogram name="SB2.PhishingInterstitialTimeProceed" units="ms"
    expires_after="M85">
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing phishing interstitial and the
    user clicking on the proceed link.
  </summary>
</histogram>

<histogram name="SB2.PhishingInterstitialTimeReportError" units="ms"
    expires_after="M85">
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing phishing interstitial and the
    user clicking on the report error link.
  </summary>
</histogram>

<histogram name="SB2.PhishingInterstitialTimeTakeMeBack" units="ms"
    expires_after="M85">
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing phishing interstitial and the
    user clicking on the big green back button.
  </summary>
</histogram>

<histogram name="SB2.RemoteCall.CanCheckUrl" enum="BooleanCanCheckUrl"
    expires_after="2024-02-11">
  <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="2024-03-01">
  <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.CheckDelta" units="microseconds"
    expires_after="2024-03-17">
  <owner>vakh@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The microseconds between sending the Safe Browsing API call and receiving
    the response. Logged in java code and does not include any thread hops or
    extra work. Note that this does include task queue time to respond to the
    IPC (and that queue time is often non-trivial).

    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="SB2.RemoteCall.Elapsed" units="ms" expires_after="2024-02-04">
  <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="SB2.RemoteCall.InternalErrorStatusCode2"
    enum="GooglePlayServicesConnectionResult" expires_after="never">
<!-- expires-never: This tracks the result of connecting to GmsCore for
Safe Browsing lookups, which is critical for security. -->

  <owner>vakh@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The status code provided by GmsCore if it is unable to respond to a URL
    check request due to incorrect initialization, not being ready, etc. Logged
    on each URL check that hits the internal error condition. The total number
    of these should add up to the INTERNAL_ERROR reports under
    SB2.RemoteCall.Result.
  </summary>
</histogram>

<histogram name="SB2.RemoteCall.Result" enum="SB2RemoteCallResult"
    expires_after="2024-02-20">
  <owner>vakh@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Result of URL-classification API calls from Chrome via
    RemoteSafetyNetApiHandler. Logged after each URL is judged safe/not-safe, or
    hits a deadline. The INTERNAL_ERROR cases are further classified under
    SB2.RemoteCall.InternalErrorStatusCode.
  </summary>
</histogram>

<histogram name="SB2.RemoteCall.ThreatSubType.PotentiallyHarmfulApp"
    enum="SB2RemoteCallThreatSubType" expires_after="2021-07-28">
  <obsolete>
    Removed from code Jul 2021.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The threat sub-type annotated for URLs classified as PHA via remote calls
    through RemoteSafeBrowsingApiHandler. &quot;PHA&quot; classifications
    generate &quot;malware&quot; interstitials.
  </summary>
</histogram>

<histogram name="SB2.RemoteCall.ThreatSubType.SocialEngineering"
    enum="SB2RemoteCallThreatSubType" expires_after="2021-07-28">
  <obsolete>
    Removed from code Jul 2021.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The threat sub-type annotated returned for URLs classified as social
    engineering via remote calls through RemoteSafeBrowsingApiHandler.
    &quot;Social engineering&quot; classifications generate &quot;phishing&quot;
    interstitials.
  </summary>
</histogram>

<histogram base="true" name="SB2.RequestDestination" enum="RequestDestination"
    expires_after="2024-03-17">
  <owner>xinghuilu@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Request destinations of resources that were inspected by Safe Browsing in
    the SafeBrowsingResourceThrottle. kDocument is for a main resource request
    in a main frame or a Portal. Subframe requests are a combination of kIframe
    and kFrame.
  </summary>
</histogram>

<histogram name="SB2.ResourceTypes2" enum="ContentResourceType2"
    expires_after="2022-01-16">
  <obsolete>
    Removed from code in M94. Replaced with SB2.RequestDestination.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Resource types of resources that were inspected by Safe Browsing in the
    SafeBrowsingResourceThrottle.

    Starting M89, this metric is derived from
    network::mojom::RequestDestination. kPrefetch, kFavicon, kXhr, kPing,
    kNavigationPreloadMainFrame, and kNavigationPreloadSubFrame are all mapped
    to kSubResource.
  </summary>
</histogram>

<histogram name="SBDownloadFeedback.UploadDuration" units="ms"
    expires_after="2020-03-29">
  <obsolete>
    Removed 10-2021 due to lack of use.
  </obsolete>
  <owner>drubery@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The time it takes for the TwoPhaseUploader to complete. This is logged on
    every upload.
  </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.EnvCollectionTime" units="ms" expires_after="2018-08-30">
  <owner>caitkp@google.com</owner>
  <summary>
    The elapsed time to collect environmental data for a safe browsing incident
    report.
  </summary>
</histogram>

<histogram name="SBIRS.FindDownloadedBinaryTime" units="ms"
    expires_after="2018-08-30">
  <owner>caitkp@google.com</owner>
  <summary>
    The elapsed time to find the most recent binary download from all loaded
    profiles when creating a safe browsing incident report.
  </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.InterIncidentTime" units="ms" expires_after="2018-08-30">
  <owner>caitkp@google.com</owner>
  <summary>
    The elapsed time between two successive incidents collated into the same
    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="2024-02-04">
  <owner>caitkp@google.com</owner>
  <summary>
    The result of an attempted report upload by the safe browsing incident
    reporting service.
  </summary>
</histogram>

<histogram name="SBIRS.VerifyBinaryIntegrity.0" units="ms"
    expires_after="2018-08-30">
  <owner>caitkp@google.com</owner>
  <summary>
    The elapsed time to verify the binary integrity of chrome.exe.
  </summary>
</histogram>

<histogram name="SBIRS.VerifyBinaryIntegrity.1" units="ms"
    expires_after="2018-08-30">
  <owner>caitkp@google.com</owner>
  <summary>
    The elapsed time to verify the binary integrity of chrome.dll.
  </summary>
</histogram>

<histogram name="SBIRS.VerifyBinaryIntegrity.2" units="ms"
    expires_after="2018-08-30">
  <owner>caitkp@google.com</owner>
  <summary>
    The elapsed time to verify the binary integrity of chrome_child.dll.
  </summary>
</histogram>

<histogram name="SBIRS.VerifyBinaryIntegrity.3" units="ms"
    expires_after="2018-08-30">
  <owner>caitkp@google.com</owner>
  <summary>
    The elapsed time to verify the binary integrity of chrome_elf.dll.
  </summary>
</histogram>

<histogram name="SBMultipartUploader.FailedUploadDuration" units="s"
    expires_after="2022-09-29">
  <obsolete>
    Removed 09-2022 due to lack of use and historical stability.
  </obsolete>
  <owner>drubery@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Measures the total duration (including delay due to retries) of a failed
    upload request. This is recorded after the last retry on every failed
    upload.

    Warning: This histogram was expired in M91 and restored in M92. Data may be
    missing in M91.
  </summary>
</histogram>

<histogram name="SBMultipartUploader.NetworkRequestResponseCodeOrError"
    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2022-09-29">
  <obsolete>
    Removed 09-2022 due to lack of use and historical stability.
  </obsolete>
  <owner>drubery@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The HTTP response code or net error from each upload attempt. This is
    recorded once for each network request made as part of an upload, i.e. if an
    upload fails the first time, but a retry succeeds, this metric is recorded
    twice.

    Warning: This histogram was expired in M91 and restored in M92. Data may be
    missing in M91.
  </summary>
</histogram>

<histogram name="SBMultipartUploader.RetriesNeeded" units="retries"
    expires_after="2022-09-29">
  <obsolete>
    Removed 09-2022 due to lack of use and historical stability.
  </obsolete>
  <owner>drubery@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Counts how many retries were needed to complete the upload request. This is
    emitted for every successful upload.

    Warning: This histogram was expired in M91 and restored in M92. Data may be
    missing in M91.
  </summary>
</histogram>

<histogram name="SBMultipartUploader.SuccessfulUploadDuration" units="s"
    expires_after="2022-09-29">
  <obsolete>
    Removed 09-2022 due to lack of use and historical stability.
  </obsolete>
  <owner>drubery@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Measures the total duration (including delay due to retries) of a successful
    upload request. This is recorded for every successful upload.

    Warning: This histogram was expired in M91 and restored in M92. Data may be
    missing in M91.
  </summary>
</histogram>

<histogram name="SBMultipartUploader.UploadSize" units="bytes"
    expires_after="2022-09-29">
  <obsolete>
    Removed 09-2022 due to lack of use and historical stability.
  </obsolete>
  <owner>drubery@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The size of the upload request body. This is a combination of the upload
    data and metadata. This is recorded once for each upload, regardless of
    whether it was successful.

    Warning: This histogram was expired in M91 and restored in M92. Data may be
    missing in M91.
  </summary>
</histogram>

<histogram name="SBMultipartUploader.UploadSuccess" enum="BooleanSuccess"
    expires_after="2022-09-29">
  <obsolete>
    Removed 09-2022 due to lack of use and historical stability.
  </obsolete>
  <owner>drubery@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Whether the overall upload request succeeded or not. This is recorded once
    for an upload request, regardless of how many retries were needed to
    complete the upload.

    Warning: This histogram was expired in M91 and restored in M92. Data may be
    missing in M91.
  </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>rsorokin@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>rsorokin@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>rsorokin@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>rsorokin@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>rsorokin@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 base="true" name="SendTabToSelf.ClickResult"
    enum="SendTabToSelfClickResult" expires_after="2024-07-18">
  <owner>jeffreycohen@chromium.org</owner>
  <owner>src/components/send_tab_to_self/OWNERS</owner>
  <component>UI&gt;Browser&gt;Sharing</component>
  <summary>
    Records user flow for SendTabToSelf feature.

    Because each bucket represents a different aspect of the flow, it's
    important to look at &quot;bucket count&quot;, not &quot;bucket
    proportion&quot;.

    On iOS this was not recorded between M85 and M90, inclusive (see
    crbug.com/1204944).

    This expired 2022/10 and got revived 2023/07, some data will be missing.
  </summary>
</histogram>

<histogram name="ServicesCustomization.LoadResult"
    enum="ServicesCustomizationLoadResult" expires_after="M77">
  <owner>alemate@chromium.org</owner>
  <summary>
    Records result of fetching and parsing OEM customization manifest. See
    ServicesCustomizationDocument class for more info. Used only on Chrome OS.
  </summary>
</histogram>

<histogram name="Servicification.Startup2" enum="ServicificationStartupMode"
    expires_after="2024-02-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.
  </summary>
</histogram>

<histogram name="Servicification.Startup3" enum="ServicificationStartupMode"
    expires_after="2024-02-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="Setup.Install.AddAppContainerAce" enum="Boolean"
    expires_after="M77">
  <owner>forshaw@chromium.org</owner>
  <summary>
    True if the the installer successfully added AppContainer ACEs to the
    application directory during installation and updating.
  </summary>
</histogram>

<histogram name="Setup.Install.CumulativeDiskUsage2" units="MB"
    expires_after="never">
<!-- expires-never: used to monitor memory usage of setup installer.  -->

  <owner>etiennep@chromium.org</owner>
  <owner>grt@chromium.org</owner>
  <summary>
    The cumulative disk usage in MB during install or uninstall attempt,
    recorded right after the install/uninstall attempt on windows only.
  </summary>
</histogram>

<histogram name="Setup.Install.DeleteAppLauncherClientsKey"
    enum="BooleanDeletedOrNot" expires_after="2021-03-22">
  <obsolete>
    Removed in M94.
  </obsolete>
  <owner>grt@chromium.org</owner>
  <owner>src/chrome/installer/OWNERS</owner>
  <summary>
    Hit following a successful install or update when the legacy &quot;app
    launcher&quot; Clients key is deleted from the registry.
  </summary>
</histogram>

<histogram name="Setup.Install.DeleteBinariesClientsKey"
    enum="BooleanDeletedOrNot" expires_after="2021-03-22">
  <obsolete>
    Removed in M94.
  </obsolete>
  <owner>grt@chromium.org</owner>
  <owner>src/chrome/installer/OWNERS</owner>
  <summary>
    Hit following a successful install or update when the legacy
    &quot;binaries&quot; Clients key is deleted from the registry.
  </summary>
</histogram>

<histogram name="Setup.Install.DeleteIExecuteCommandClassKey"
    enum="BooleanDeletedOrNot" expires_after="2021-03-22">
  <obsolete>
    Removed in M94.
  </obsolete>
  <owner>grt@chromium.org</owner>
  <owner>src/chrome/installer/OWNERS</owner>
  <summary>
    Hit following a successful install or update when the COM registration for
    the legacy &quot;IExecuteCommand&quot; implementation class key is deleted
    from the registry.
  </summary>
</histogram>

<histogram name="Setup.Install.DeleteInstallExtensionCommand"
    enum="BooleanDeletedOrNot" expires_after="2021-03-22">
  <obsolete>
    Removed in M94.
  </obsolete>
  <owner>grt@chromium.org</owner>
  <owner>src/chrome/installer/OWNERS</owner>
  <summary>
    Hit following a successful install or update when the legacy
    &quot;install-extension&quot; app command is deleted from the registry.
  </summary>
</histogram>

<histogram name="Setup.Install.LzmaUnPackStatus" enum="UnPackStatus"
    expires_after="2024-02-04">
  <owner>zmin@chromium.org</owner>
  <owner>grt@chromium.org</owner>
  <summary>Record the status of unpacking the contents of a 7z file.</summary>
</histogram>

<histogram name="Setup.Install.PeakPagefileUsage" units="KB"
    expires_after="never">
<!-- expires-never: used to monitor memory usage of setup installer.  -->

  <owner>huangs@chromium.org</owner>
  <summary>
    The peak page file usage by setup.exe in KB during install or uninstall
    attempt.
  </summary>
</histogram>

<histogram name="Setup.Install.PeakWorkingSetSize" units="KB"
    expires_after="never">
<!-- expires-never: used to monitor memory usage of setup installer.  -->

  <owner>huangs@chromium.org</owner>
  <summary>
    The peak working set size of setup.exe in KB during install or uninstall
    attempt.
  </summary>
</histogram>

<histogram name="Setup.Install.RemoveProfileStatistics"
    enum="BooleanDeletedOrNot" expires_after="M87">
  <obsolete>
    Removed in M100 (expired a long time ago).
  </obsolete>
  <owner>waffles@chromium.org</owner>
  <summary>
    Hit following a successful install or update when the legacy profile count
    keys / values are deleted from the registry.
  </summary>
</histogram>

<histogram name="Setup.Install.Result" enum="SetupInstallResult"
    expires_after="never">
<!-- expires-never: Fundamental metric used to gague overall failure rates. -->

  <owner>grt@chromium.org</owner>
  <owner>ydago@chromium.org</owner>
  <summary>
    The final exit-result of the entire run of setup.exe on Windows.
  </summary>
</histogram>

<histogram name="SharedMemory.MapBlockedForSecurity" enum="BooleanBlocked"
    expires_after="M85">
  <obsolete>
    Expired on 10/2020.
  </obsolete>
  <owner>dcheng@chromium.org</owner>
  <owner>rsesek@chromium.org</owner>
  <summary>
    Tracks whether an attempt to map shared memory was blocked due to too much
    shared memory already being mapped into the address space.
  </summary>
</histogram>

<histogram name="ShortcutsProvider.DatabaseSize" units="units"
    expires_after="2018-08-30">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The number of entries in shortcuts backend's database when initialized,
    which happens during profile load.
  </summary>
</histogram>

<histogram name="Shutdown.BrowserExit.Time2" units="ms"
    expires_after="2024-03-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="2024-03-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="2024-03-10">
  <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="2024-03-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-03-10">
  <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.WindowClose.Time2" units="ms"
    expires_after="2024-03-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.CertVerificationResult" enum="NetErrorCodes"
    expires_after="2023-03-29">
  <owner>ksakamoto@chromium.org</owner>
  <owner>webpackage-dev@chromium.org</owner>
  <summary>
    Reports the result of Signed Exchange cert verification, including success.
  </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="2024-02-05">
  <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.JS.Behaviour"
    enum="SiteIsolatedCodeCacheJSBehaviour" expires_after="2024-04-03">
  <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" units="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.PotentialMemoryBackedCodeCacheHit"
    enum="Boolean" expires_after="2023-10-08">
  <owner>yhirano@chromium.org</owner>
  <owner>loading-dev@chromium.org</owner>
  <summary>
    Represents whether fetching from the memory-backed code cache would succeed.
    Recorded when the code cache result gets available.
  </summary>
</histogram>

<histogram name="SiteIsolatedCodeCache.JS.PotentialMemoryBackedCodeCacheSize2"
    units="counts" expires_after="2024-03-17">
  <owner>yhirano@chromium.org</owner>
  <owner>loading-dev@chromium.org</owner>
  <summary>
    Represents the (hypothetical) size of the memory-backed code cache. Recorded
    for every 5 minutes.
  </summary>
</histogram>

<histogram name="SiteIsolatedCodeCache.JS.WebUI.Behaviour"
    enum="SiteIsolatedCodeCacheJSBehaviour" expires_after="2024-04-03">
  <owner>temao@chromium.org</owner>
  <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.WASM.Behaviour"
    enum="SiteIsolatedCodeCacheWASMBehaviour" expires_after="2024-04-03">
  <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="Skia.DrawScaleFactor" enum="SkiaScaleFactor"
    expires_after="M85">
  <obsolete>
    Removed in Oct 2020.
  </obsolete>
  <owner>ericrk@chromium.org</owner>
  <summary>The scale factor of any images drawn by Skia.</summary>
</histogram>

<histogram name="Skia.DrawTiled" enum="BooleanTiled" expires_after="M85">
  <obsolete>
    Removed in Oct 2020.
  </obsolete>
  <owner>ericrk@chromium.org</owner>
  <summary>
    Whether a call to drawBitmap(Rect) or drawImage(Rect) used the tiled or
    non-tiled rasterization path.
  </summary>
</histogram>

<histogram name="Skia.FilterQuality" enum="SkiaFilterQuality"
    expires_after="M85">
  <obsolete>
    Removed in Oct 2020.
  </obsolete>
  <owner>ericrk@chromium.org</owner>
  <summary>
    The count of images drawn by Skia with a given filter quality.
  </summary>
</histogram>

<histogram name="Skia.LockTexturePath" enum="SkiaLockTexturePath"
    expires_after="M85">
  <obsolete>
    Removed in Oct 2020.
  </obsolete>
  <owner>ericrk@chromium.org</owner>
  <summary>
    The path taken by Skia when it attempts to lock a texture for use.
  </summary>
</histogram>

<histogram name="Skia.SubmitRenderPasses" units="renderpasses"
    expires_after="2023-07-16">
  <owner>egdaniel@google.com</owner>
  <owner>bsalomon@google.com</owner>
  <summary>
    The number of Skia render passes sent to the GPU during a GrContext::submit
    call. The max value that is sent here is 100 so anything in the 100 bucket
    actually includes render pass counts of 100+. Though we don't expect to be
    reaching 100 render passes often. This is collected each time we submit to
    the GPU in Skia.
  </summary>
</histogram>

<histogram name="Skia.VulkanMemoryAllocator.AmountAllocated" units="KB"
    expires_after="2024-02-11">
  <owner>egdaniel@google.com</owner>
  <owner>bsalomon@google.com</owner>
  <summary>
    The total amount of memory that the GrVkMemoryAllocator used by Skia's
    Vulkan backend has allocated. This is GPU memory for VkImages and VkBuffers.
    Note that the allocator may be shared with other users outside of Skia and
    this amount includes their uses as well. This is collected each time we
    request an allocation from Skia.
  </summary>
</histogram>

<histogram name="Skia.VulkanMemoryAllocator.PercentUsed" units="%"
    expires_after="2021-09-05">
  <owner>egdaniel@google.com</owner>
  <owner>bsalomon@google.com</owner>
  <summary>
    The percent of allocated memory that is in use by the GrVkMemoryAllocator
    used by Skia's Vulkan backend. This is GPU memory for VkImages and
    VkBuffers. Note that the allocator may be shared with other users outside of
    Skia and this includes their allocations as well. This is collected each
    time we request an allocation from Skia.
  </summary>
</histogram>

<histogram name="Snackbar.Shown" enum="SnackbarIdentifier"
    expires_after="never">
<!-- expires-never: Required as long as snackbars exist. -->

  <owner>pavely@chromium.org</owner>
  <owner>src/chrome/browser/ui/messages/OWNERS</owner>
  <summary>
    Records the identifier of a snackbar every time one is shown.
  </summary>
</histogram>

<histogram name="SpecialLocale.PromotionDialog" enum="SpecialLocalePromoAction"
    expires_after="M81">
  <owner>ianwen@chromium.org</owner>
  <summary>
    Records how users interact with the special locale promotion dialog.
  </summary>
</histogram>

<histogram name="Spellcheck.Android.Available" enum="BooleanAvailable"
    expires_after="2021-10-10">
  <obsolete>
    Removed 2021/10: This histogram was added as part of an investigation that
    has been completed.
  </obsolete>
  <owner>timvolodine@chromium.org</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Whether the Android spellchecking service was available at the start of a
    new spellchecking session. Note that the user can disable the Android
    spellchecking service in settings, in which case it will show up as not
    available in the histogram.

    Warning: for chrome versions 78-88 this histogram was listed as expired, so
    for that period the data might be missing or incomplete.
  </summary>
</histogram>

<histogram name="SpellCheck.Android.Latency" units="ms" expires_after="M77">
  <obsolete>
    Removed 2021/10: This histogram was added as part of an investigation that
    has been completed.
  </obsolete>
  <owner>timvolodine@chromium.org</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Measures the amount of time it takes to receive results from the
    spellchecking service on Android. More precisely this is the
    SystemClock.elapsedRealtime() between the
    SpellCheckerSession.getSentenceSuggestions() and the invocation of the
    onGetSentenceSuggestions() callback.
  </summary>
</histogram>

<histogram name="SpellCheck.api.async" units="code units"
    expires_after="2024-04-01">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@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-04-01">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@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-04-01">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@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.CheckedWords" units="words"
    expires_after="2024-04-01">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    The number of words checked within a session.

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

<histogram name="SpellCheck.CheckedWordsPerHour" units="words"
    expires_after="2024-04-01">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@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.Enabled" enum="BooleanEnabled"
    expires_after="2024-04-01">
  <obsolete>
    Logged on profile open, including for profiles that do not use this setting
    (such as &quot;system&quot; profiles) and for profiles that do not allow the
    profile-owner to to configure this setting (such as &quot;guest&quot;
    profiles). When logged in such cases, reported the default value. Replaced
    in M-114 with the histogram SpellCheck.Enabled2, which is similar yet only
    emitted for regular profiles.
  </obsolete>
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    The number of sessions that started with spellchecking enabled.

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

<histogram name="SpellCheck.Enabled2" enum="BooleanEnabled"
    expires_after="2024-04-01">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@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="2024-04-01">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    The number of misspelled words within a session.

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

<histogram name="SpellCheck.MisspellRatio" units="%" expires_after="M90">
  <obsolete>
    Removed 2021/01: the relevant code path isn't used anymore.
  </obsolete>
  <owner>gujen@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>The percentage of misspelled words within checked words.</summary>
</histogram>

<histogram name="SpellCheck.ReplacedWords" units="words"
    expires_after="2024-04-01">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    The number of misspelled-but-replaced words within a session.

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

<histogram name="SpellCheck.ReplaceRatio" units="%" expires_after="M90">
  <obsolete>
    Removed 2021/01: the relevant code path isn't used anymore.
  </obsolete>
  <owner>gujen@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>The percentage of replaced words within misspelled words.</summary>
</histogram>

<histogram name="SpellCheck.ShownSuggestions" units="suggestions"
    expires_after="2024-04-01">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@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; data may be missing.
  </summary>
</histogram>

<histogram name="SpellCheck.SpellingService.Enabled" enum="BooleanEnabled"
    expires_after="M114">
  <obsolete>
    Logged on profile open, including for profiles that do not use this setting
    (such as &quot;system&quot; profiles) and for profiles that do not allow the
    profile-owner to to configure this setting (such as &quot;guest&quot;
    profiles). When logged in such cases, reported the default value. Replaced
    in M-114 with the histogram SpellCheck.SpellingService.Enabled2, which is
    similar yet only emitted for regular profiles.
  </obsolete>
  <owner>groby@chromium.org</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Whether the user has opted in to asking Google for spelling suggestions.
    Recorded both when spelling is initialized and when the preference is
    changed.
  </summary>
</histogram>

<histogram name="SpellCheck.SpellingService.Enabled2" enum="BooleanEnabled"
    expires_after="2024-04-01">
  <owner>groby@chromium.org</owner>
  <owner>chrome-language@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.RequestDuration" units="ms"
    expires_after="2024-04-01">
  <owner>yyushkina@google.com</owner>
  <owner>gujen@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    The elapsed time, in ms, between the moment the SimpleURLLoader starts
    downloading the request and the moment the SimpleURLLoader callback is
    invoked after the request finishes, whether an error or a success.
  </summary>
</histogram>

<histogram name="SpellCheck.SpellingService.RequestHttpResponseCode"
    enum="HttpResponseCode" expires_after="2024-04-01">
  <owner>yyushkina@google.com</owner>
  <owner>gujen@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>The HTTP code of Spelling service responses.</summary>
</histogram>

<histogram name="SpellCheck.SpellingService.RequestResultType"
    enum="ServiceRequestResultType" expires_after="2024-04-01">
  <owner>yyushkina@google.com</owner>
  <owner>gujen@google.com</owner>
  <owner>chrome-language@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="2024-04-01">
  <owner>gujen@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    The percentage of replacement executions within suggestion occurrences.
  </summary>
</histogram>

<histogram base="true" name="Spellcheck.Windows.ChromeLocalesSupport"
    units="locales" expires_after="M114">
  <obsolete>
    Logged on profile open, including for profiles that do not use this setting
    (such as &quot;system&quot; profiles) and for profiles that do not allow the
    profile-owner to to configure this setting (such as &quot;guest&quot;
    profiles). When logged in such cases, reported the default value. Replaced
    in M-114 with the histogram Spellcheck.Windows.ChromeLocalesSupport2.*,
    which are similar yet only emitted for regular profiles.
  </obsolete>
  <owner>gujen@google.com</owner>
  <owner>chrome-language@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).

    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.
  </summary>
</histogram>

<histogram base="true" name="Spellcheck.Windows.ChromeLocalesSupport2"
    units="locales" expires_after="2024-04-01">
  <owner>gujen@google.com</owner>
  <owner>chrome-language@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.
  </summary>
</histogram>

<histogram base="true" name="Spellcheck.Windows.SpellcheckLocalesSupport"
    units="locales" expires_after="2024-04-01">
  <obsolete>
    Logged on profile open, including for profiles that do not use this setting
    (such as &quot;system&quot; profiles) and for profiles that do not allow the
    profile-owner to to configure this setting (such as &quot;guest&quot;
    profiles). When logged in such cases, reported the default value. Replaced
    in M-114 with the histogram Spellcheck.Windows.SpellcheckLocalesSupport2.*,
    which are similar yet only emitted for regular profiles.
  </obsolete>
  <owner>gujen@google.com</owner>
  <owner>chrome-language@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).

    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.
  </summary>
</histogram>

<histogram base="true" name="Spellcheck.Windows.SpellcheckLocalesSupport2"
    units="locales" expires_after="2024-04-01">
  <owner>gujen@google.com</owner>
  <owner>chrome-language@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.
  </summary>
</histogram>

<histogram base="true" name="Spellcheck.Windows.SpellcheckRequestDuration"
    units="ms" expires_after="2024-04-01">
  <owner>gujen@google.com</owner>
  <owner>chrome-language@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.
  </summary>
</histogram>

<histogram base="true" name="Spellcheck.Windows.SuggestionGatheringDuration"
    units="ms" expires_after="2024-04-01">
  <owner>gujen@google.com</owner>
  <owner>chrome-language@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).
  </summary>
</histogram>

<histogram name="SSL.CertificateErrorReportEvent"
    enum="CertificateErrorReportEvent" expires_after="M81">
  <owner>meacer@chromium.org</owner>
  <summary>
    Users can opt in to send reports of certificate validation errors to Google.
    This records the outcome whenever Chrome sends such a report.

    Some certificate validation reports might not be received because proxies,
    firewalls or other content filters might filter report uploads.
  </summary>
</histogram>

<histogram name="SSL.CertificateErrorReportFailure" enum="NetErrorCodes"
    expires_after="M81">
  <obsolete>
    Removed in M98
  </obsolete>
  <owner>estark@chromium.org</owner>
  <summary>
    Users can opt in to send reports of certificate validation errors to Google.
    This records the error code whenever Chrome fails to send such a report.
  </summary>
</histogram>

<histogram name="SSL.ExpectCTReportFailure2" enum="NetErrorCodes"
    expires_after="M77">
  <obsolete>
    Expired in M77, code removed in M98
  </obsolete>
  <owner>estark@chromium.org</owner>
  <summary>
    Sites can opt in to Expect CT, a reporting feature that sends a report
    whenever a TLS connection does not have valid Certificate Transparency
    information associated with it. This records the error code when Chrome
    fails to send an Expect CT report.
  </summary>
</histogram>

<histogram name="SSL.ExpectCTReportSendingAttempt" units="units"
    expires_after="M77">
  <obsolete>
    Expired in M77, code removed in M98
  </obsolete>
  <owner>estark@chromium.org</owner>
  <summary>
    Sites can opt in to Expect CT, a reporting feature that sends a report
    whenever a TLS connection does not have valid Certificate Transparency
    information associated with it. This metric fires whenever Chrome attempts
    to send an Expect CT report.
  </summary>
</histogram>

<histogram name="SSL.Experimental.SubresourceResponse"
    enum="SSLSubresourceResponseType" expires_after="2023-07-15">
  <owner>amanvr@chromium.org</owner>
  <owner>carlscab@chromium.org</owner>
  <owner>woa-performance@google.com</owner>
  <summary>
    The histogram is being used to track the number of messages
    (content::mojom::FrameHost::SubresourceResponseStarted IPCs) resulting in
    no-op (i.e. returning without doing anything) but requiring an IPC vs
    messages which revoke exceptions after seeing a good certificate when
    calling SSLManager::DidStartResourceResponse() from
    RenderFrameHostImpl::SubresourceResponseStarted(). We are not interested in
    calls to SSLManager::DidStartResourceResponse() from ReadyToCommitNavigation
    since they don't involve mojo messages. From local benchmarks, we observe
    this request causes significant IPC chatter, and this histogram will help us
    understand it better.
  </summary>
</histogram>

<histogram name="SSL.InsecureContent" enum="InsecureContentType"
    expires_after="2020-02-23">
  <obsolete>
    Expired in 02/2020. Code removed in M98.
  </obsolete>
  <owner>estark@chromium.org</owner>
  <summary>
    Keeps track of various insecure content events, such as loading an HTTP
    script from an HTTPS page.
  </summary>
</histogram>

<histogram name="SSL.NonWebbyMixedContentLoaded" enum="Boolean"
    expires_after="2020-12-01">
  <owner>carlosil@chromium.org</owner>
  <owner>estark@chromium.org</owner>
  <summary>
    Tracks when mixed content is loaded from a &quot;non-webby&quot; URL, e.g.
    an external protocol. The security of such URLs is unknown, but they are
    exempt from mixed content UI treatment because they don't usually return
    data to the browser. This histogram tracks how often such content is loaded
    so that we can decide whether to block such resources unless an enterprise
    policy is enabled.
  </summary>
</histogram>

<histogram name="SSORecallPromo.AccountsAvailable" units="units"
    expires_after="2024-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="2024-04-01">
  <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="2024-04-01">
  <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="2024-03-17">
  <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="2024-03-17">
  <owner>futhark@chromium.org</owner>
  <summary>
    Microseconds spent in RebuildLayoutTree called from Document::UpdateStyle.
  </summary>
</histogram>

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

<histogram name="SubresourceWebBundles.BundleFetchErrorCode"
    enum="NetErrorCodes" expires_after="2024-01-14">
  <owner>ksakamoto@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="2023-12-24">
  <owner>horo@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="2024-02-25">
  <owner>horo@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="2023-10-22">
  <owner>horo@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="2024-01-14">
  <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="2023-10-22">
  <owner>horo@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="2023-10-22">
  <owner>ksakamoto@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="Suggestions.FailedRequestErrorCode" enum="NetErrorCodes"
    expires_after="2020-02-23">
  <owner>mathp@chromium.org</owner>
  <summary>
    The counts of network error codes encountered by SuggestionsService when an
    attempt to fetch suggestions from the server fails.
  </summary>
</histogram>

<histogram name="Suggestions.FetchResponseCode" enum="HttpResponseCode"
    expires_after="2020-05-31">
  <owner>mathp@chromium.org</owner>
  <summary>
    The counts of HTTP response codes encountered by SuggestionsService when
    attempting to fetch suggestions from the server.
  </summary>
</histogram>

<histogram name="Suggestions.FetchSuccessLatency" units="ms"
    expires_after="M81">
  <owner>mathp@chromium.org</owner>
  <summary>
    The latency of a SuggestionsService fetch that results in a success
    response.
  </summary>
</histogram>

<histogram name="Suggestions.LocalBlacklistSize" units="URLcount"
    expires_after="M77">
  <obsolete>
    Removed some time before 10/2020.
  </obsolete>
  <owner>siggi@chromium.org</owner>
  <summary>
    Number of URLs present in the Suggestions local blacklist when the
    Suggestions service is created.
  </summary>
</histogram>

<histogram name="Suggestions.ResponseState" enum="SuggestionsResponseState"
    expires_after="M77">
  <owner>mathp@chromium.org</owner>
  <summary>
    The counts of response states (such as empty or invalid) encountered by
    SuggestionsService when attempting to fetch suggestions from the server.
  </summary>
</histogram>

<histogram name="Tablet.AppDrag.EndWindowState"
    enum="AppWindowDragEndWindowState" expires_after="2022-10-01">
  <obsolete>
    The corresponding feature was removed.
  </obsolete>
  <owner>minch@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>
    Drag an app window from top in tablet mode will result in different window
    states. Logged when the app drag ended to record the window end state.
  </summary>
</histogram>

<histogram name="Tablet.AppWindowDrag.CountOfPerUserSession" units="times"
    expires_after="2023-07-02">
  <obsolete>
    The corresponding feature was removed.
  </obsolete>
  <owner>minch@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>
    The number of the action that drag an app window from top in tablet mode.
    Logged when the TabletModeController is destructed, which means the user
    session is ended.
  </summary>
</histogram>

<histogram name="Tablet.AppWindowDrag.InSplitView.CountOfPerUserSession"
    units="times" expires_after="2023-07-02">
  <obsolete>
    The corresponding feature was removed.
  </obsolete>
  <owner>minch@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>
    The number of the action that drag an app window from top in tablet mode
    when splitview is active. Logged when the TabletModeController is
    destructed, which means the user session is ended.
  </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="Tablet.TabDrag.CountOfPerUserSession" units="times"
    expires_after="2023-05-01">
  <obsolete>
    The corresponding feature was removed.
  </obsolete>
  <owner>minch@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>
    The number of the action that drag a tab of the browser window in tablet
    mode. Logged when the TabletModeController is destructed, which means the
    user session is ended.
  </summary>
</histogram>

<histogram name="Tablet.TabDrag.DragType" enum="TabDragType"
    expires_after="2022-12-25">
  <obsolete>
    The corresponding feature was removed.
  </obsolete>
  <owner>minch@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>
    The type of a tab drag done in tablet mode. Logged when start to drag a tab
    of the browser window in tablet mode.
  </summary>
</histogram>

<histogram name="Tablet.TabDrag.InSplitView.CountOfPerUserSession"
    units="times" expires_after="2023-07-02">
  <obsolete>
    The corresponding feature was removed.
  </obsolete>
  <owner>minch@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>
    The number of the action that drag a tab of the browser window in tablet
    mode when splitview is active. Logged when the TabletModeController is
    destructed, which means the user session is ended.
  </summary>
</histogram>

<histogram name="Tablet.WindowDrag.DragEndEventType"
    enum="WindowDragEndEventType" expires_after="2023-06-11">
  <obsolete>
    The corresponding feature was removed.
  </obsolete>
  <owner>minch@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>
    The type of the window (app window or tab strip) drag end event in tablet
    mode. Logged when the window drag in tablet mode ended.
  </summary>
</histogram>

<histogram name="Tablet.WindowDrag.OpenedWindowsNumber" units="numbers"
    expires_after="2022-10-01">
  <obsolete>
    The corresponding feature was removed.
  </obsolete>
  <owner>minch@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>
    The number of windows in overview when dragging a window from top in tablet
    mode. Logged when start the window drag and overview has been opened behind.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Certificates.Microsoft" units="certificates"
    expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    The total number of certificates for modules loaded (or potentially loaded)
    into the browser process that are signed by Microsoft. A catalog counts as a
    single certificate, and may refer to many modules. Measured shortly after
    startup. Windows only. This histogram was expired between M85 and M114.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Certificates.Total" units="certificates"
    expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    The total number of certificates for modules loaded (or potentially loaded)
    into the browser process. A catalog counts as a single certificate, and may
    refer to many modules. Measured shortly after startup. Windows only. This
    histogram was expired between 2019-12-31 and M114.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.GetDriveLetterPathFound" enum="BooleanFound"
    expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    Records whether an equivalent driver letter path was found for a device
    path. This histogram was expired between M85 and M114.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Heartbeat.BlockedModulesCount"
    units="modules" expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    Records the number of modules that were blocked from loading into the
    browser process by the third-party DLL blocking feature. This is recorded
    every 5 minutes. This histogram was expired between M85 and M114.
  </summary>
</histogram>

<histogram
    name="ThirdPartyModules.Heartbeat.PrintingWorkaround.BlockingEnabled"
    enum="BooleanEnabled" expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    Records whether or not Chrome is still blocking third-party DLLs. This is a
    bit that turns to false when the in-process printing is invoked. Recorded
    every 5 minutes. This histogram was expired between M85 and M114.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Heartbeat.UniqueBlockedModulesCount"
    units="modules" expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    Records the number of unique modules that were blocked from loading into the
    browser process by the third-party DLL blocking feature. This is recorded
    every 5 minutes. This histogram was expired between M85 and M114.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.InputMethodEditorsCount" units="counts"
    expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    The number of registered input method editors found on the user's machine.
    This is emitted shortly after startup when the IME enumeration takes place.
    This histogram was expired between M77 and M114.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Modules.Loaded" units="modules"
    expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    The total number of third-party modules (neither Microsoft nor Google) that
    are loaded in the browser process. Measured shortly after startup. Windows
    only. This histogram was expired between M85 and M114.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Modules.NotLoaded" units="modules"
    expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    The total number of third-party modules (neither Microsoft nor Google) that
    are not yet loaded in the browser process, but may potentially be (shell
    extensions, for example). Measured shortly after startup. Windows only. This
    histogram was expired between 2019-12-31 and M114.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Modules.Signed" units="modules"
    expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    The total number of signed modules loaded (or potentially loaded) into the
    browser process. Measured shortly after startup. Windows only. This
    histogram was expired between 2019-12-31 and M114.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Modules.Signed.Catalog" units="modules"
    expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    The total number of modules loaded (or potentially loaded) into the browser
    process that are signed via a catalog. Measured shortly after startup.
    Windows only. This histogram was expired between 2019-12-31 and M114.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Modules.Signed.Microsoft" units="modules"
    expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    The total number of modules loaded (or potentially loaded) into the browser
    process that are signed by Microsoft. Measured shortly after startup.
    Windows only. This histogram was expired between M85 and M114.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Modules.Total" units="modules"
    expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    The total number of modules loaded (or potentially loaded) into the browser
    process. Measured shortly after startup. Windows only. This histogram was
    expired between M85 and M114.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Modules.Unsigned" units="modules"
    expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    The total number of unsigned modules loaded (or potentially loaded) into the
    browser process. Measured shortly after startup. Windows only. This
    histogram was expired between M85 and M114.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.ShellExtensionsCount3" units="counts"
    expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    The number of registered shell extensions found on the user's machine. This
    is emitted shortly after startup when the shell extensions enumeration is
    done. Doesn't count duplicates. This histogram was expired between M85 and
    M114.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Uninstallable" enum="BooleanUninstallable"
    expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    Records whether or not a loaded third party module could be uninstalled
    using the Windows Apps &amp; Features page. This histogram was expired
    between M85 and M114.
  </summary>
</histogram>

<histogram name="Thumbnails.CopyFromSurfaceTime" units="ms" expires_after="M90">
  <obsolete>
    Removed 01/2021.
  </obsolete>
  <owner>dfried@chromium.org</owner>
  <owner>pbos@chromium.org</owner>
  <summary>
    While taking a screenshot of the current tab for use as a thumbnail, the
    time it took to copy the tab's contents into a bitmap.
  </summary>
</histogram>

<histogram name="Thumbnails.Gradient.ImageDetectionTime" units="ms"
    expires_after="M84">
  <owner>carlosk@chromium.org</owner>
  <owner>skym@chromium.org</owner>
  <summary>
    The time it takes to detect whether a thumbnail requires a gradient overlay.
    This is run when thumbnails are downloaded for content suggestions, as they
    load and the result is cached for future use. It is Android specific.
  </summary>
</histogram>

<histogram name="Thumbnails.Gradient.ImageRequiresGradient" enum="Boolean"
    expires_after="M84">
  <owner>carlosk@chromium.org</owner>
  <owner>skym@chromium.org</owner>
  <summary>
    Whether a thumbnail used for a suggestions image requires a gradient to be
    overlaid to not fade into the background. It applies to the thumbnails used
    for content suggestions and is Android specific.
  </summary>
</histogram>

<histogram name="Thumbnails.ProcessBitmapTime" units="ms" expires_after="M90">
  <obsolete>
    Removed 01/2021.
  </obsolete>
  <owner>dfried@chromium.org</owner>
  <owner>pbos@chromium.org</owner>
  <summary>
    While taking a screenshot of the current tab for use as a thumbnail, the
    time it took to post-process the captured bitmap.
  </summary>
</histogram>

<histogram name="TileManager.ExceededMemoryBudget" enum="TileMemoryBudget"
    expires_after="2021-10-25">
  <obsolete>
    Removed Sept 2021 due to lack of use.
  </obsolete>
  <owner>pdr@chromium.org</owner>
  <owner>vmpstr@chromium.org</owner>
  <summary>
    Measures whether the tile manager exceeded the hard GPU memory budget
    (OOMed). Recorded each time the tile manager assigns GPU memory to tiles.
  </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="Toolbar.ChromeLabs.{State}LabAction"
    enum="ChromeLabsSelectedLab" expires_after="M122">
  <owner>elainechien@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Chrome Labs features user-facing experiments through a button in the
    toolbar.

    This metric tracks which experiment (also called lab in the context of
    Chrome Labs) a user selects {State} for. This histogram is emitted to when
    {State} is selected in the combobox of the ChromeLabs dialog.
  </summary>
  <token key="State">
    <variant name="Default" summary="Default state selected for lab"/>
    <variant name="Disable" summary="Disabled state selected for lab"/>
    <variant name="Enable" summary="Enabled state selected for lab"/>
  </token>
</histogram>

<histogram name="Toolbar.ShowToolsMenuResponsiveness" units="ms"
    expires_after="M77">
  <owner>peterlaurens@chromium.org</owner>
  <summary>
    Number of milliseconds passed between the event that triggers the
    presentation of the tools menu (the main menu of actions accessed from the
    toolbar), and the actual appearance of the menu on screen. Includes the
    animation duration.
  </summary>
</histogram>

<histogram name="Toolbar.TabSwitcher.NewIncognitoTabPresentationDuration"
    units="ms" expires_after="M85">
  <owner>peterlaurens@chromium.org</owner>
  <summary>
    The number of millseconds between the user requesting a new incognito tab,
    from within the tab switcher, e.g. by tapping the New Tab button from the
    tab switcher UI, and it completing its animation on screen.
  </summary>
</histogram>

<histogram name="Touchpad.Device" enum="TouchpadDeviceState"
    expires_after="M85">
  <owner>jhawkins@chromium.org</owner>
  <summary>Tracks touchpad device state.</summary>
</histogram>

<histogram name="Touchpad.HapticClickSensitivity.Changed"
    enum="HapticClickSensitivity" expires_after="2024-03-10">
  <owner>gavinwill@chromium.org</owner>
  <owner>cros-peripherals@chromium.org</owner>
  <summary>
    Tracks touchpad haptic click sensitivity setting changes by the user. Only
    reported on Chrome OS.
  </summary>
</histogram>

<histogram name="Touchpad.HapticClickSensitivity.Started"
    enum="HapticClickSensitivity" expires_after="2024-02-11">
  <owner>gavinwill@chromium.org</owner>
  <owner>cros-peripherals@chromium.org</owner>
  <summary>
    Tracks touchpad haptic click sensitivity setting on startup. Only reported
    on Chrome OS.
  </summary>
</histogram>

<histogram name="Touchpad.HapticFeedback.Changed" enum="BooleanEnabled"
    expires_after="2024-02-11">
  <owner>gavinwill@chromium.org</owner>
  <owner>cros-peripherals@chromium.org</owner>
  <summary>
    Tracks touchpad haptic feedback setting changes by the user. Only reported
    on Chrome OS.
  </summary>
</histogram>

<histogram name="Touchpad.HapticFeedback.Started" enum="BooleanEnabled"
    expires_after="2024-02-11">
  <owner>gavinwill@chromium.org</owner>
  <owner>cros-peripherals@chromium.org</owner>
  <summary>
    Tracks touchpad haptic feedback setting on startup. Only reported on Chrome
    OS.
  </summary>
</histogram>

<histogram name="Touchpad.NaturalScroll.Changed" enum="BooleanEnabled"
    expires_after="2024-02-11">
  <owner>zentaro@chromium.org</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    Tracks touchpad natural scroll setting changes by the user. Only reported on
    Chrome OS.

    Warning: this histogram was expired from 2022-06-15 to M105; data may be
    missing.
  </summary>
</histogram>

<histogram name="Touchpad.NaturalScroll.Started" enum="BooleanEnabled"
    expires_after="2024-02-11">
  <owner>zentaro@chromium.org</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    Tracks touchpad natural scroll setting on startup. Only reported on Chrome
    OS.
  </summary>
</histogram>

<histogram name="Touchpad.PointerSensitivity.Changed" enum="PointerSensitivity"
    expires_after="2024-02-11">
  <owner>zentaro@chromium.org</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    Tracks touchpad sensitivity setting changes by the user. This replaces the
    old Touchpad.Sensitivity.Changed metric. Only reported on Chrome OS.

    Warning: this histogram was expired from 2022-06-15 to M105; data may be
    missing.
  </summary>
</histogram>

<histogram name="Touchpad.PointerSensitivity.Started" enum="PointerSensitivity"
    expires_after="2024-02-11">
  <owner>zentaro@chromium.org</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    Tracks touchpad sensitivity setting on startup. This replaces the old
    Touchpad.Sensitivity.Started metric. Only reported on Chrome OS.

    Warning: this histogram was expired from 2022-06-15 to M105; data may be
    missing.
  </summary>
</histogram>

<histogram base="true" name="Touchpad.ScrollAcceleration" enum="BooleanEnabled"
    expires_after="2023-12-10">
<!-- Name completed by histogram_suffixes name="PreferenceChangeType" -->

  <owner>zentaro@chromium.org</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    Whether touchpad scroll acceleration is enabled. Only reported on Chrome OS.

    Warning: this histogram was expired from 2020-12-01 to M105; data may be
    missing.
  </summary>
</histogram>

<histogram base="true" name="Touchpad.ScrollSensitivity"
    enum="PointerSensitivity" expires_after="2023-12-10">
<!-- Name completed by histogram_suffixes name="PreferenceChangeType" -->

  <owner>zentaro@chromium.org</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    Touchpad scroll sensitivity value. Only reported on Chrome OS.

    Warning: this histogram was expired from 2020-12-01 to M105; data may be
    missing.
  </summary>
</histogram>

<histogram name="Touchpad.TapDragging.Changed" enum="BooleanEnabled"
    expires_after="2024-02-11">
  <owner>zentaro@chromium.org</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    Tracks touchpad TapDragging setting changes by the user. Only reported on
    Chrome OS.

    Warning: this histogram was expired from 2022-06-15 to M105; data may be
    missing.
  </summary>
</histogram>

<histogram name="Touchpad.TapDragging.Started" enum="BooleanEnabled"
    expires_after="2024-02-11">
  <owner>zentaro@chromium.org</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    Tracks touchpad TapDragging setting on startup. Only reported on Chrome OS.

    Warning: this histogram was expired from 2022-06-15 to M105; data may be
    missing.
  </summary>
</histogram>

<histogram name="Touchpad.TapToClick.Changed" enum="BooleanEnabled"
    expires_after="2024-02-11">
  <owner>zentaro@chromium.org</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    Tracks touchpad TapToClick setting changes by the user. Only reported on
    Chrome OS.

    Warning: this histogram was expired from 2022-06-15 to M105; data may be
    missing.
  </summary>
</histogram>

<histogram name="Touchpad.TapToClick.Started" enum="BooleanEnabled"
    expires_after="2024-02-11">
  <owner>zentaro@chromium.org</owner>
  <owner>cros-peripherals@google.com</owner>
  <summary>
    Tracks touchpad TapToClick setting changes by the user. Only reported on
    Chrome OS.
  </summary>
</histogram>

<histogram name="TouchScreen.MissedTOUCHEVENTF_UP" enum="BooleanHit"
    expires_after="2023-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="Touchscreen.TouchEventsEnabled"
    enum="TouchEventFeatureDetectionState" expires_after="M77">
  <owner>flackr@chromium.org</owner>
  <summary>
    Tracks whether Touch Event Feature Detection is enabled. This is based on
    the touch events enabled flag and the presence of a touchscreen.

    Team: input-dev@chromium.org.

    NOTE: This metric was incorrectly recorded on Chrome OS for versions 42
    through 45, see http://crbug.com/499476 for more details. As of
    http://crbug.com/644318, we changed the internal name to
    TouchEventFeatureDetection, but we still keep the old histogram name here to
    keep consistensy.
  </summary>
</histogram>

<histogram name="Tracing.Background.CompressedTraceSizeInKB" units="KB"
    expires_after="2024-03-24">
  <owner>etiennep@chromium.org</owner>
  <owner>tracing@chromium.org</owner>
  <owner>chrometto-team@google.com</owner>
  <summary>
    The size, in kilobytes, of a compressed trace ready to be uploaded. Values
    can range from 1KB to 100MB.
  </summary>
</histogram>

<histogram name="Tracing.Background.FinalizationDisallowedReason"
    enum="TracingFinalizationDisallowedReason" expires_after="2024-02-25">
  <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.FinalizingTraceSizeInKB2" units="KB"
    expires_after="2024-02-11">
  <owner>oksamyt@chromium.org</owner>
  <owner>tracing@chromium.org</owner>
  <owner>chrometto-team@google.com</owner>
  <summary>
    The size, in kilobytes, of a finalized trace ready to be uploaded. Values
    can range from 1KB to 100MB. This replaces
    Tracing.Background.FinalizingTraceSizeInKB, which had a minimum of 1MB and
    was not precise enough for WebView traces.
  </summary>
</histogram>

<histogram name="Tracing.Background.ScenarioState"
    enum="BackgroundTracingState" expires_after="2024-02-25">
  <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.Background.UploadingTraceSizeInKB" units="KB"
    expires_after="2024-02-11">
  <owner>oksamyt@chromium.org</owner>
  <owner>tracing@chromium.org</owner>
  <owner>chrometto-team@google.com</owner>
  <summary>
    The size, in kilobytes, of a trace about to be uploaded. Values can range
    from 1KB to 100MB.
  </summary>
</histogram>

<histogram name="Tracing.SharedBufferIsValid" enum="BooleanSuccess"
    expires_after="2024-03-24">
  <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="UI.DeviceScale" units="%" expires_after="2024-03-24">
  <owner>bsep@chromium.org</owner>
  <summary>
    The device scales available on the system at startup. A system may report
    more than one if it has multiple displays with varying device scales. Only
    logged on Windows.
  </summary>
</histogram>

<histogram name="UI.ScreenWin.UpdateDisplaysTime" units="ms"
    expires_after="2023-12-31">
  <owner>davidbienvenu@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Records the time spent in UpdateAllDisplaysAndNotify. Only logged on
    Windows.
  </summary>
</histogram>

<histogram name="UncompressAndParseSkiaVectorAsset" units="microseconds"
    expires_after="M85">
  <owner>malaykeshav@chromium.org</owner>
  <summary>
    Records the time spent in uncompressing a gzipped animation file.
  </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.MakeSearchesAndBrowsingBetter.OnStartup"
    enum="BooleanEnabled" expires_after="M111">
  <obsolete>
    Deprecated as of 2023/01 in favor of
    UnifiedConsent.MakeSearchesAndBrowsingBetter.OnProfileLoad as histogram
    UnifiedConsent.MakeSearchesAndBrowsingBetter.OnStartup was also recorded for
    all profiles, including system, guest and other irregular ChromeOS profiles.
  </obsolete>
  <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 profile was loaded. Note: Starting with CL
    https://crrev.com/c/3913924 (M109), this histogram was no longer recorded
    for System, Guest and other irregular profiles on desktop and ChromeOS.
  </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="UpgradeDetector.DaysBeforeUpgrade" units="days"
    expires_after="2024-05-01">
  <owner>emshack@chromium.org</owner>
  <owner>pbos@chromium.org</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="2024-05-01">
  <owner>emshack@chromium.org</owner>
  <owner>pbos@chromium.org</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.NotificationStage"
    enum="UpgradeNotificationStage" expires_after="M77">
  <owner>spqchan@chromium.org</owner>
  <summary>
    Tracks the upgrade notification stage. This is recorded with every UMA log.
  </summary>
</histogram>

<histogram name="UpgradeDetector.PollType" enum="InstalledVersionPollType"
    expires_after="M89">
  <obsolete>
    Removed in M90.
  </obsolete>
  <owner>grt@chromium.org</owner>
  <owner>ydago@chromium.org</owner>
  <summary>
    Records the type of poll that first detected an installed version change.
    Note that a browser that is running while multiple updates are applied will
    only record this metric once.
  </summary>
</histogram>

<histogram name="UpgradeDetector.RollbackReason"
    enum="UpgradeDetectorRollbackReason" expires_after="2023-11-30">
  <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="2024-02-04">
  <owner>alemate@chromium.org</owner>
  <owner>cros-oac@google.com</owner>
  <owner>xiyuan@chromium.org</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-02-11">
  <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>alemate@chromium.org</owner>
  <owner>cros-oac@google.com</owner>
  <owner>xiyuan@chromium.org</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="2024-02-11">
  <owner>alemate@chromium.org</owner>
  <owner>cros-oac@google.com</owner>
  <owner>xiyuan@chromium.org</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>alemate@chromium.org</owner>
  <owner>cros-oac@google.com</owner>
  <owner>xiyuan@chromium.org</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>alemate@chromium.org</owner>
  <owner>cros-oac@google.com</owner>
  <owner>xiyuan@chromium.org</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>alemate@chromium.org</owner>
  <owner>cros-oac@google.com</owner>
  <owner>xiyuan@chromium.org</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>alemate@chromium.org</owner>
  <owner>cros-oac@google.com</owner>
  <owner>xiyuan@chromium.org</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="URL.Host.DidEscape" enum="BooleanEscaped"
    expires_after="2022-09-09">
  <obsolete>
    Removed in M100.
  </obsolete>
  <owner>wanderview@chromium.org</owner>
  <owner>dcheng@chromium.org</owner>
  <summary>
    Measures whether DoSimpleHost() in url_canon_host.cc escaped any characters
    in the ASCII table. This is recorded every time a URL hostname is
    successfully parsed.
  </summary>
</histogram>

<histogram name="URL.Host.EscapeChar" enum="URLHostEscapedChar"
    expires_after="2022-09-09">
  <obsolete>
    Removed in M100.
  </obsolete>
  <owner>wanderview@chromium.org</owner>
  <owner>dcheng@chromium.org</owner>
  <summary>
    This histogram records which ASCII characters are escaped in DoSimpleHost().
    Each escaped character is recorded separately, but only once for any
    invocation of DoSimpleHost(). This can potentially be recorded every time a
    URL hostname is parsed, but only if parsing escaped at least one character.
  </summary>
</histogram>

<histogram name="URL.Path.UnescapeEscapedChar" enum="Boolean"
    expires_after="2024-02-01">
  <owner>hayato@chromium.org</owner>
  <owner>src/url/OWNERS</owner>
  <summary>
    Measures whether DoPartialPathInternal() in url_canon_path unescaped any
    percent-encoded characters. The measurement is not specific to any
    particular use case.

    For example, this is recored to parse the following URL:

    new URL(&quot;https://example.com/%61&quot;)

    This can potentially be recorded every time a URL path is parsed, but only
    if unescaping at least one percent-encoded character.

    Eventually, we will add other metrics for each use case to better understand
    the usage.
  </summary>
</histogram>

<histogram name="URL.Scheme.SetNonSpecialSchemeOnSpecialScheme" enum="Boolean"
    expires_after="2024-02-01">
  <owner>hayato@chromium.org</owner>
  <owner>src/url/OWNERS</owner>
  <summary>
    This metrics is recorded each time when KRUL.SetProtocol is called on a
    special scheme URL. The value is whether a new scheme is a non-special
    scheme or not.

    The measurement is not specific to any particular use case. For example,
    this is recorded in the following:

    const url = new URL(&quot;https://example.com/&quot;); url.protocol =
    &quot;non-special&quot;;

    See https://crbug.com/1416018 for details.
  </summary>
</histogram>

<histogram name="UsageStats.Events" enum="UsageStatsEvents"
    expires_after="2024-03-17">
  <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>alemate@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="UserImage.ProfileDownloadTime" units="ms" expires_after="M81">
  <owner>achuith@chromium.org</owner>
  <summary>The time it took to download user's profile picture.</summary>
</histogram>

<histogram name="UserManager.LoginUserType" enum="UserType"
    expires_after="2024-02-11">
  <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.ProfileEverInitializedMigrationCompleted"
    enum="BooleanCompleted" expires_after="M77">
  <owner>atwilson@chromium.org</owner>
  <summary>
    Whether the profile_ever_initialized() user attribute migration has
    completed for the current user.
  </summary>
</histogram>

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

  <owner>alemate@chromium.org</owner>
  <owner>michaelpg@chromium.org</owner>
  <owner>rsorokin@chromium.org</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="UserSessionManager.RestoreOnCrash.AccountIdValid"
    enum="BooleanValid" expires_after="2021-02-16">
  <obsolete>
    Removed 01/2021.
  </obsolete>
  <owner>rsorokin@chromium.org</owner>
  <owner>cros-oac@google.com</owner>
  <summary>
    The result of restoring account id on Chrome restart after crash on Chrome
    OS.
  </summary>
</histogram>

<histogram name="Vibration.Context" enum="NavigatorVibrationType"
    expires_after="2019-01-30">
  <owner>binlu@google.com</owner>
  <summary>
    Records instances of navigator.vibrate. Includes whether or not it comes
    with a user gesture, same-origin subframe or cross-origin subframe.
  </summary>
</histogram>

<histogram name="ViewResourceAdapter.GetBitmapInterval" units="ms"
    expires_after="M82">
  <owner>wychen@chromium.org</owner>
  <owner>dtrainor@chromium.org</owner>
  <summary>The interval between ViewResourceAdapter#getBitmap calls.</summary>
</histogram>

<histogram name="VirtualKeyboard.ControllerStateTransition"
    enum="VirtualKeyboardControllerStateTransition" expires_after="M85">
  <owner>oka@chromium.org</owner>
  <summary>
    An integer representing a state transition from x to y in the form of x *
    1000 + y. If the transition is not expected, the value is negated. For
    example an expected transition from SHOWING (= 2) to SHOWN (= 1) is denoted
    as 2001, and an unexpected transition from SHOWING to SHOWING is denoted as
    -2002. See KeyboardControllerState for the correspondence between the number
    and the enum.
  </summary>
</histogram>

<histogram name="VoiceInteraction.AssistantActionPerformed{Source}"
    enum="AssistantActionPerformed" expires_after="2023-04-20">
  <obsolete>
    Deprecated as of 2023/04 as the Assistant integration project has been
    calcelled
  </obsolete>
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Android: The action performed by Assistant upon being invoked during a voice
    search initiated via the {Source}, such as transcription of a voice search
    query or translation of the current page. This is recorded after an
    Assistant intent has completed successfully.
  </summary>
  <token key="Source">
<!-- Must be kept in sync with VoiceInteractionEventSource in enums.xml. -->

    <variant name=".NTP" summary="NTP"/>
    <variant name=".Omnibox" summary="Omnibox"/>
    <variant name=".SearchWidget" summary="Search widget"/>
    <variant name=".TasksSurface" summary="Tasks surface"/>
    <variant name=".Toolbar" summary="Toolbar"/>
  </token>
</histogram>

<histogram name="VoiceInteraction.AssistantIntent.TranslateExtrasAttached"
    enum="BooleanSuccess" expires_after="2023-04-10">
  <obsolete>
    Deprecated as of 2023/04 as the Assistant integration project has been
    calcelled
  </obsolete>
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Android: Whether Translate extras were successfully attached to an Assistant
    intent. This is recorded just before the intent is sent to Assistant, and is
    only recorded if the Translate extras are enabled.
  </summary>
</histogram>

<histogram name="VoiceInteraction.AudioPermissionEvent{Timing}"
    enum="AudioPermissionState" expires_after="2023-07-05">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Android: The events related to granting or denying audio permission for
    system level transcription (as opposite to Assistant). Will be logged
    {Timing}.
  </summary>
  <token key="Timing">
    <variant name=""
        summary="each time non-Assistant voice recognition is triggered with
                 a mic button press"/>
    <variant name=".SessionStart" summary="on browser session start"/>
  </token>
</histogram>

<histogram name="VoiceInteraction.DismissedEventSource"
    enum="VoiceInteractionEventSource" expires_after="2024-03-17">
  <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.DismissedEventTarget"
    enum="VoiceIntentTarget" expires_after="2024-01-14">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Android: The target of a dismissed voice search, such as the system
    transcription dialog or Assistant. This is recorded after the dismissed
    intent returns to Chrome.
  </summary>
</histogram>

<histogram name="VoiceInteraction.FailureEventSource"
    enum="VoiceInteractionEventSource" expires_after="2024-02-04">
  <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.FailureEventTarget" enum="VoiceIntentTarget"
    expires_after="2023-08-20">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Android: The target of a failed voice search, such as the system
    transcription dialog or Assistant. 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="2024-03-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.FinishEventTarget" enum="VoiceIntentTarget"
    expires_after="2024-03-17">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Android: The target of a successful voice search, such as the system
    transcription dialog or Assistant. This is recorded immediately after the
    successful intent returns to Chrome.
  </summary>
</histogram>

<histogram name="VoiceInteraction.IllegalContextRequest" enum="BooleanHit"
    expires_after="M85">
  <owner>muyuanli@chromium.org</owner>
  <summary>
    Counts the number of requests to retrieve voice interaction context when no
    user interaction is initiated.
  </summary>
</histogram>

<histogram name="VoiceInteraction.QueryDuration.Android" units="ms"
    expires_after="2023-07-05">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Records the time it takes between the user clicking the mic and chrome
    receiving the transcribed voice query. This is recorded after an Assistant
    intent has completed successfully.
  </summary>
</histogram>

<histogram name="VoiceInteraction.QueryDuration.Android.Target.{Target}"
    units="ms" expires_after="2023-07-05">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Records the time it takes between the user clicking the mic and chrome
    receiving the transcribed voice query. This is recorded after an Assistant
    intent has completed successfully. This histogram is limited to intents sent
    to {Target}. See VoiceInteraction.QueryDuration.Android for the total count
    across all targets.
  </summary>
  <token key="Target" variants="VoiceIntentTargetVariant"/>
</histogram>

<histogram name="VoiceInteraction.QueryDuration.Android{Action}" units="ms"
    expires_after="2023-07-05">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Records the time it takes between the user clicking the mic and chrome
    receiving the intent response for {Action} actions. This is recorded after
    an Assistant intent has completed successfully. These per-action variants
    are recorded only when non-transcription actions are enabled. See
    VoiceInteraction.QueryDuration.Android for the total count that includes
    clients with non-transcription actions disabled.
  </summary>
  <token key="Action">
<!-- Must be kept in sync with AssistantActionPerformed in enums.xml. -->

    <variant name=".Readout" summary="Readout"/>
    <variant name=".Transcription" summary="Transcription"/>
    <variant name=".Translate" summary="Translate"/>
    <variant name=".Unknown" summary="Unknown"/>
  </token>
</histogram>

<histogram name="VoiceInteraction.StartEventSource"
    enum="VoiceInteractionEventSource" expires_after="2024-03-17">
  <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.StartEventTarget" enum="VoiceIntentTarget"
    expires_after="2024-03-17">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Android: The target of a voice search start event, such as the system
    transcription dialog or Assistant. This is recorded immediately before the
    voice transcription intent is sent.
  </summary>
</histogram>

<histogram name="VoiceInteraction.UnexpectedResultSource"
    enum="VoiceInteractionEventSource" expires_after="2023-07-05">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Android: The source of an incoming result that doesn't align with an
    outgoing request from Chrome. This is recorded when the extraneous intent
    response is received.
  </summary>
</histogram>

<histogram name="VoiceInteraction.UnexpectedResultTarget"
    enum="VoiceIntentTarget" expires_after="2023-07-05">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Android: The target of an intent result that doesn't align with an outgoing
    request from Chrome. This is recorded when the extraneous intent response is
    received.
  </summary>
</histogram>

<histogram name="VoiceInteraction.UserInteractionToRequestArrival" units="ms"
    expires_after="M85">
  <owner>muyuanli@chromium.org</owner>
  <summary>
    Records the time between user interaction and the actual request arrival.
  </summary>
</histogram>

<histogram name="VoiceInteraction.VoiceResultConfidenceValue" units="%"
    expires_after="2024-02-04">
  <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.
  </summary>
</histogram>

<histogram name="VoiceInteraction.VoiceResultConfidenceValue.{Target}"
    units="%" expires_after="2023-07-05">
  <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, limited to intents sent to {Target}. This is recorded when the
    voice intent returns successfully.
  </summary>
  <token key="Target" variants="VoiceIntentTargetVariant"/>
</histogram>

<histogram name="VoiceInteraction.VoiceSearchResult" enum="BooleanSuccess"
    expires_after="2024-03-17">
  <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="VoiceInteraction.VoiceSearchResult.{Target}"
    enum="BooleanSuccess" expires_after="2023-07-05">
  <owner>basiaz@google.com</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Android: Records whether the voice search produced results, limited to
    intents sent to {Target}. This is recorded when the voice intent returns
    successfully.
  </summary>
  <token key="Target" variants="VoiceIntentTargetVariant"/>
</histogram>

<histogram name="WebContentsObserver.{Method}" units="ms"
    expires_after="2023-07-28">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <summary>
    Measures the time it takes to call all observers of the WebContents observer
    method {Method}. Logged every time the method is called.
  </summary>
  <token key="Method" variants="WebContentsObserverMethods"/>
</histogram>

<histogram name="WebContextFetcher.Time.RunJavaScript" units="ms"
    expires_after="2021-11-01">
  <owner>benwgold@chromium.org</owner>
  <owner>mdjones@chromium.org</owner>
  <summary>
    Records the number of milliseconds that it takes for a web context fetch to
    complete. Recorded when the javascript execution completes. To start will be
    used for Google Lens image queries to track time to retrieve page context,
    but may extend to other features over time.
  </summary>
</histogram>

<histogram name="WebController.BackForwardListOutOfSyncInProvisionalNavigation"
    enum="IOSOutOfSyncURLAction" expires_after="2021-12-25">
  <obsolete>
    Removed 2021-11, since the WebKit bug whose occurrences were being tracked
    by this metric no longer reprodcues on iOS 13+.
  </obsolete>
  <owner>ajuma@chromium.org</owner>
  <owner>gambard@chromium.org</owner>
  <summary>
    [iOS] Records the action take when the backForwardList of the WebView is out
    of sync with the URL exposed by the WebView when starting a new provisional
    navigation. The URLs can get out of sync because of a bugs in WebKit. This
    is only recorded when the URLs are out of sync.
  </summary>
</histogram>

<histogram name="WebController.CertVerificationErrorsCacheHit"
    enum="BooleanCacheHit" expires_after="2024-03-20">
  <owner>ajuma@chromium.org</owner>
  <owner>gambard@chromium.org</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="WebController.ExternalURLRequestBlocking"
    enum="IOSExternalURLRequestStatus" expires_after="2021-08-09">
  <owner>mrefaat@chromium.org</owner>
  <summary>
    [iOS] Measures the proportion of external URL requests that originate from a
    subframe without any user interaction (e.g. an advertisement contains an
    iframe directed at the App Store).
  </summary>
</histogram>

<histogram name="WebDatabase.AutofillWebDataBackendImpl.OperationResult"
    enum="AutofillWebDataBackendImplOperationResult" expires_after="2023-12-01">
  <owner>battre@chromium.org</owner>
  <owner>asully@chromium.org</owner>
  <summary>
    Records the success or failure of various database operations in
    autofill::AutofillWebDataBackendImpl.
  </summary>
</histogram>

<histogram name="WebDatabase.FailedMigrationToVersion" units="version"
    expires_after="2024-02-04">
  <owner>battre@chromium.org</owner>
  <owner>asully@chromium.org</owner>
  <summary>
    If a migration to a new WebDatabase schema fails, this histogram records the
    target version to which the migration failed.
  </summary>
</histogram>

<histogram name="WebDatabase.InitResult" enum="WebDatabaseInitResult"
    expires_after="2024-02-04">
  <owner>battre@chromium.org</owner>
  <owner>asully@chromium.org</owner>
  <summary>
    Records whether WebDatabase::Init succeeds or otherwise a failure reason.
  </summary>
</histogram>

<histogram name="WebDatabase.SucceededMigrationToVersion" units="version"
    expires_after="2024-02-04">
  <owner>battre@chromium.org</owner>
  <owner>fleimgruber@google.com</owner>
  <summary>
    If a migration to a new WebDatabase schema succeeds, this histogram records
    the target version to which the migration failed.
  </summary>
</histogram>

<histogram name="WebFont.BlankTextShownTime" units="ms"
    expires_after="2024-02-04">
  <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="2024-03-03">
  <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-02-04">
  <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.0.Under10KB" units="ms"
    expires_after="2022-11-13">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time it takes for a webfont download to finish, for webfonts of under
    10KB.
  </summary>
</histogram>

<histogram name="WebFont.DownloadTime.1.10KBTo50KB" units="ms"
    expires_after="2022-01-15">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time it takes for a webfont download to finish, for webfonts of
    10KB-50KB.
  </summary>
</histogram>

<histogram name="WebFont.DownloadTime.2.50KBTo100KB" units="ms"
    expires_after="2022-01-15">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time it takes for a webfont download to finish, for webfonts of
    50KB-100KB.
  </summary>
</histogram>

<histogram name="WebFont.DownloadTime.3.100KBTo1MB" units="ms"
    expires_after="2022-01-15">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time it takes for a webfont download to finish, for webfonts of
    100KB-1MB.
  </summary>
</histogram>

<histogram name="WebFont.DownloadTime.4.Over1MB" units="ms"
    expires_after="2022-01-15">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time it takes for a webfont download to finish, for webfonts of over
    1MB.
  </summary>
</histogram>

<histogram name="WebFont.DownloadTime.LoadError" units="ms"
    expires_after="2024-02-11">
  <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.FontDisplayValue" enum="FontDisplayValue"
    expires_after="2021-03-21">
  <obsolete>
    Removed 2021-03
  </obsolete>
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The value of font-display @font-face descriptor. Counted only when
    explicitly specified in the @font-face rule.
  </summary>
</histogram>

<histogram name="WebFont.HadBlankText" enum="BooleanHadBlankText"
    expires_after="2024-02-04">
  <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.LoadLimitOnDiskCacheMiss" enum="WebFontLoadLimitState"
    expires_after="2021-03-21">
  <obsolete>
    Removed in M91.
  </obsolete>
  <owner>ksakamoto@chromium.org</owner>
  <owner>toyoshim@chromium.org</owner>
  <summary>
    The load limit state when the first disk-cache-only request fails by cache
    miss, if WebFonts cache-aware timeout adaptation is enabled and applicable.
  </summary>
</histogram>

<histogram name="WebFont.LocalFontUsed" enum="BooleanUsage"
    expires_after="2024-02-05">
  <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="WebP.DecodedImageFormat" enum="WebpDecodedFormat"
    expires_after="2020-12-13">
  <obsolete>
    No longer recorded in M89.
  </obsolete>
  <owner>droger@chromium.org</owner>
  <summary>
    Histogram for the format of decoded WebP images on iOS, as Chrome re-encodes
    WebP images on that platform.
  </summary>
</histogram>

<histogram name="WebShare.ApiCount" enum="WebShareMethod"
    expires_after="2024-02-20">
  <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.ShareOutcome" enum="WebShareOutcome"
    expires_after="M85">
  <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="Webstore.ExtensionInstallResult" enum="BooleanSuccess"
    expires_after="M81">
  <owner>jackhou@chromium.org</owner>
  <summary>
    The success or failure of all extension installs from the webstore. This
    includes those initiated by sync.
  </summary>
</histogram>

<histogram name="WebUI.CreatedForUrl" enum="WebUIUrlHashes"
    expires_after="2024-12-31">
  <owner>dpapad@chromium.org</owner>
  <owner>chrome-webui@google.com</owner>
  <summary>URLs for which Chrome creates WebUIControllers.</summary>
</histogram>

<histogram name="WebUI.Settings.PathVisited" enum="WebUISettingsPathHashes"
    expires_after="2024-03-17">
  <owner>dschuyler@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <owner>bettes@chromium.org</owner>
  <summary>
    Paths within chrome://settings visited. For evaluating popularity and
    priorities for chrome://settings GUI. Note that this metric used to include
    paths that were part of OS settings, but starting with M-81, this metric
    only records browser settings paths.
  </summary>
</histogram>

<histogram name="WebUI.WebUIURLLoaderFactory.URLRequestLoadTime" units="ms"
    expires_after="2022-10-30">
  <owner>dpapad@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <summary>
    The elapsed time for URL requests made through the WebUIURLLoaderFactory.
    The reported duration is the time spent in the browser process from the
    reception of the mojo request up to the content delivery through mojo call.
  </summary>
</histogram>

<histogram name="WebUICodeCache.FeatureEnabled" units="Boolean"
    expires_after="2024-04-12">
  <owner>temao@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <summary>
    True if WebUICodeCache feature is enabled. This counts the number of times
    generated WebUICodeCache JS code cache is instantiated.
  </summary>
</histogram>

<histogram name="WebUITabStrip.CloseAction" enum="WebUITabStripCloseActions"
    expires_after="2024-02-11">
  <owner>collinbaker@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <summary>
    The WebUI tab strip is a more touch-friendly tab strip used in place of
    Chrome's native tab strip in some cases. It can be opened and closed. This
    records how a user closed it.
  </summary>
</histogram>

<histogram name="WebUITabStrip.CloseTabAction"
    enum="WebUITabStripCloseTabActions" expires_after="2023-12-13">
  <owner>johntlee@chromium.org</owner>
  <owner>dpapad@chromium.org</owner>
  <summary>
    The WebUI tab strip is a more touch-friendly tab strip used in place of
    Chrome's native tab strip in some cases. This records how a user closed a
    tab within the WebUI tab strip.
  </summary>
</histogram>

<histogram name="WebUITabStrip.LoadCompletedTime" units="ms"
    expires_after="2024-02-11">
  <owner>yuhengh@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>romanarora@chromium.org</owner>
  <summary>
    The amount of time between the RenderFrameHost StartProvisionalLoad event
    and the RenderFrameHost DocumentOnLoadCompleted event for the WebUI tab
    strip page. This happens once when a browser window with WebUI tab strip
    enabled is created. WebUITabStrip.LoadDocumentTime should be smaller or
    equal to WebUITabStrip.LoadCoimpletedTime.
  </summary>
</histogram>

<histogram name="WebUITabStrip.LoadDocumentTime" units="ms"
    expires_after="2024-02-11">
  <owner>yuhengh@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>romanarora@chromium.org</owner>
  <summary>
    The amount of time between the RenderFrameHost StartProvisionalLoad and
    DidFinishDocumentLoad events for the WebUI tab strip page. This happens once
    when a browser window with WebUI tab strip enabled is created.
    WebUITabStrip.LoadDocumentTime should be smaller or equal to
    WebUITabStrip.LoadCoimpletedTime.
  </summary>
</histogram>

<histogram name="WebUITabStrip.OpenAction" enum="WebUITabStripOpenActions"
    expires_after="2024-02-11">
  <owner>collinbaker@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <summary>
    The WebUI tab strip is a more touch-friendly tab strip used in place of
    Chrome's native tab strip in some cases. It can be opened and closed. This
    records how a user opened it.
  </summary>
</histogram>

<histogram name="WebUITabStrip.OpenDuration" units="ms"
    expires_after="2023-12-13">
  <owner>collinbaker@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <summary>
    The WebUI tab strip is a more touch-friendly tab strip used in place of
    Chrome's native tab strip in some cases. It can be opened and closed. This
    records how long it was open when closing.
  </summary>
</histogram>

<histogram name="WebUITabStrip.TabActivation" units="ms"
    expires_after="2024-02-11">
  <owner>robliao@chromium.org</owner>
  <owner>johntlee@chromium.org</owner>
  <summary>
    WebUI Tabstrip: Time from activating a tab from WebUI to receiving an
    activation notification in WebUI.
  </summary>
</histogram>

<histogram name="WebUITabStrip.TabCreation" units="ms"
    expires_after="2023-12-13">
  <owner>robliao@chromium.org</owner>
  <owner>johntlee@chromium.org</owner>
  <summary>
    WebUI Tabstrip: Time needed to create all of the tab elements at launch.
  </summary>
</histogram>

<histogram name="WebUITabStrip.TabDataReceived" units="ms"
    expires_after="2023-12-13">
  <owner>robliao@chromium.org</owner>
  <owner>johntlee@chromium.org</owner>
  <summary>
    WebUI Tabstrip: Time from requesting the tab data to receiving the data.
  </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.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="WebView.ApiCall" enum="WebViewApiCall"
    expires_after="2022-01-31">
  <obsolete>
    Renamed in M99. Please see &quot;Android.WebView.ApiCall&quot; going
    forward, which has the same logging behavior.
  </obsolete>
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>Records calls to WebView APIs in WebViewChromium.</summary>
</histogram>

<histogram name="Welcome.SignInPromptResult" enum="WelcomeSignInPromptOutcome"
    expires_after="2021-08-29">
  <owner>tmartino@chromium.org</owner>
  <owner>msarda@chromium.org</owner>
  <owner>droger@chromium.org</owner>
  <owner>chrome-signin-team@google.com</owner>
  <summary>
    Records the result of promoting sign-in via the Welcome page.
  </summary>
</histogram>

<histogram name="Welcome.Win10.DefaultPromptResult" enum="BooleanDefault"
    expires_after="M85">
  <owner>tmartino@chromium.org</owner>
  <summary>
    Records whether or not Chrome was the default browser when the user left the
    Win10-specific Welcome page.
  </summary>
</histogram>

<histogram name="Welcome.Win10.NewPromoPageAdded" enum="BooleanShown"
    expires_after="M77">
  <owner>pmonette@chromium.org</owner>
  <owner>tmartino@chromium.org</owner>
  <summary>
    Emits a &quot;true&quot; sample when the revamped WebUI-based welcome page
    is added to the startup tabs list. This means that barring an error on
    startup, it was shown to the user. This histogram can only be recorded
    during first-run flow, when the EnableWelcomeWin10 experiment is enabled.
  </summary>
</histogram>

<histogram name="Welcome.Win10.OriginalPromoPageAdded" enum="BooleanShown"
    expires_after="M85">
  <owner>pmonette@chromium.org</owner>
  <owner>tmartino@chromium.org</owner>
  <summary>
    Emits a &quot;true&quot; sample when the old external welcome page is added
    to the startup tabs list. This means that barring an error on startup, it
    was shown to the user. This histogram can only be recorded during first-run
    flow, when the EnableWelcomeWin10 experiment is disabled.
  </summary>
</histogram>

<histogram name="Welcome.Win10.PinCheckTimedOut" enum="BooleanTimedOut"
    expires_after="M77">
  <owner>pmonette@chromium.org</owner>
  <owner>tmartino@chromium.org</owner>
  <summary>
    Records whether or not the check that verifies if Chrome is pinned to the
    taskbar has timed out. This check is done when the welcome page is opened in
    order to determine which instructions to display to the user.
  </summary>
</histogram>

<histogram name="Welcome.Win10.PinnedPromptResult" enum="BooleanPinned"
    expires_after="M85">
  <owner>tmartino@chromium.org</owner>
  <summary>
    Records whether or not Chrome was pinned to the taskbar when the user left
    the Win10-specific Welcome page.
  </summary>
</histogram>

<histogram name="WhatsNew.LoadEvent" enum="WhatsNewLoadEvent"
    expires_after="2024-02-25">
  <owner>rbpotter@chromium.org</owner>
  <owner>mahmadi@chromium.org</owner>
  <summary>
    Records load events for the What's New page when a load event occurs. This
    tracks how many times loading remote content is attempted, and whether it
    succeeds, fails and results in an error page, fails and redirects to the New
    Tab Page, fails and doesn't open the tab (for preloading), or fails and
    closes the tab. Load is attempted when the page is first opened or on first
    startup after updating to a new milestone. Success or failure will occur
    when the network request completes. Desktop only.
  </summary>
</histogram>

<histogram name="WhatsNew.LoadResponseCode"
    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2024-02-04">
  <owner>rbpotter@chromium.org</owner>
  <owner>mahmadi@chromium.org</owner>
  <summary>
    Records the net error or HTTP response code of the network request for the
    remote content for the iframe in the What's New page. This request is
    triggered when the What's New page is opened. Desktop only.
  </summary>
</histogram>

<histogram name="WhatsNew.StartupType" enum="WhatsNewStartupType"
    expires_after="2024-02-25">
  <owner>rbpotter@chromium.org</owner>
  <owner>mahmadi@chromium.org</owner>
  <summary>
    Records whether the What's New page should try to show, whether it is
    overridden (e.g. by welcome) and whether the user is ineligible (e.g. due to
    being in incognito mode). Recorded when startup tabs are being determined at
    initialization. Desktop only.
  </summary>
</histogram>

<histogram name="WheelScrolling.WasLatched" enum="BooleanLatched"
    expires_after="M77">
  <owner>flackr@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    Records whether or not a GSU event with wheel source is latched to the
    current scrolling element. It is false for the first GSU event of every
    scrolling sequence and true for the rest of the GSU events.
  </summary>
</histogram>

<histogram name="Win8.PageLoad" enum="Win8PageLoadType" expires_after="M85">
  <owner>zturner@chromium.org</owner>
  <summary>
    Count of page loads in each of the 2 different environments (metro/desktop)
    on Windows 8.
  </summary>
</histogram>

<histogram name="WindowOcclusionChanged" enum="WindowOcclusionState"
    expires_after="2021-10-04">
  <obsolete>
    Retired in M99.
  </obsolete>
  <owner>davidbienvenu@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    A top level window's occlusion state. Recorded each time the state changes.
  </summary>
</histogram>

<histogram name="WinJumplist.Action" enum="WinJumplistCategory"
    expires_after="M77">
  <owner>noms@chromium.org</owner>
  <summary>The type of category clicked in the Windows Jumplist</summary>
</histogram>

<histogram name="WorkerThread.ExitCode" enum="WorkerThreadExitCode"
    expires_after="2021-10-31">
  <owner>nhiroki@chromium.org</owner>
  <owner>chrome-worker@google.com</owner>
  <summary>Records the exit code of WorkerThread.</summary>
</histogram>

<histogram name="WrenchMenu.MenuAction" enum="WrenchMenuAction"
    expires_after="2024-03-17">
  <owner>ainslie@chromium.org</owner>
  <owner>edwardjung@chromium.org</owner>
  <summary>Number of times that each menu item is clicked.</summary>
</histogram>

<histogram name="WrenchMenu.RecentTabsSubMenu" enum="RecentTabsAction"
    expires_after="M85">
  <owner>rpop@chromium.org</owner>
  <summary>
    The number of times each tab or window restore option in the Recent Tabs
    submenu is clicked.
  </summary>
</histogram>

<histogram name="WrenchMenu.TimeToAction.{Action}" units="ms"
    expires_after="2024-10-01">
  <owner>ainslie@chromium.org</owner>
  <owner>edwardjung@chromium.org</owner>
  <summary>
    The time a user takes to select a menu item after opening the menu.
  </summary>
  <token key="Action">
    <variant name="About"/>
    <variant name="AddNewProfile"/>
    <variant name="AppInfo"/>
    <variant name="BetaForum"/>
    <variant name="BookmarkAllTabs"/>
    <variant name="BookmarkPage"/>
    <variant name="Cast"/>
    <variant name="ChromeOSRestart"/>
    <variant name="ChromeTips"/>
    <variant name="ClearBrowsingData"/>
    <variant name="CloseProfile"/>
    <variant name="Copy"/>
    <variant name="CopyUrl"/>
    <variant name="CreateHostedApp"/>
    <variant name="CreateQrCode"/>
    <variant name="CustomizeChrome"/>
    <variant name="Cut"/>
    <variant name="DevTools"/>
    <variant name="DevToolsConsole"/>
    <variant name="DevToolsDevices"/>
    <variant name="DistillPage"/>
    <variant name="EnterFullScreen"/>
    <variant name="Exit"/>
    <variant name="Feedback"/>
    <variant name="Find"/>
    <variant name="HelpPage"/>
    <variant name="ImportSettings"/>
    <variant name="InstallPwa"/>
    <variant name="LoginForDeviceTabs"/>
    <variant name="ManageChromeProfiles"/>
    <variant name="ManageExtensions"/>
    <variant name="ManageGoogleAccount"/>
    <variant name="NewIncognitoWindow"/>
    <variant name="NewTab"/>
    <variant name="NewWindow"/>
    <variant name="OpenBookmark"/>
    <variant name="OpenGuestProfile"/>
    <variant name="OpenInChrome"/>
    <variant name="OpenInPwaWindow"/>
    <variant name="OpenRecentTab"/>
    <variant name="PasswordManager"/>
    <variant name="Paste"/>
    <variant name="Print"/>
    <variant name="ProfilingEnabled"/>
    <variant name="ReadingListAddTab"/>
    <variant name="ReadingListShowUi"/>
    <variant name="RequestTabletSite"/>
    <variant name="RestoreTab"/>
    <variant name="SavePage"/>
    <variant name="SendToDevices"/>
    <variant name="Settings"/>
    <variant name="ShowAddresses"/>
    <variant name="ShowBookmarkBar"/>
    <variant name="ShowBookmarkMgr"/>
    <variant name="ShowBookmarkSidePanel"/>
    <variant name="ShowChromeLabs"/>
    <variant name="ShowDownloads"/>
    <variant name="ShowHistory"/>
    <variant name="ShowKaleidoscope"/>
    <variant name="ShowPasswordManager"/>
    <variant name="ShowPaymentMethods"/>
    <variant name="ShowSearchCompanion"/>
    <variant name="ShowSigninWhenPaused"/>
    <variant name="ShowSyncSettings"/>
    <variant name="ShowTranslate"/>
    <variant name="ShowTurnOnSync"/>
    <variant name="SiteSettings"/>
    <variant name="SwitchToAnotherProfile"/>
    <variant name="TaskManager"/>
    <variant name="ViewSource"/>
    <variant name="VisitChromeWebStore"/>
    <variant name="Win8MetroRestart"/>
    <variant name="WinDesktopRestart"/>
    <variant name="ZoomMinus"/>
    <variant name="ZoomPlus"/>
  </token>
</histogram>

<histogram name="WrenchMenu.TouchDuration" units="ms" expires_after="M85">
  <owner>kkimlabs@chromium.org</owner>
  <summary>
    Time difference between touch down and touch up on Android wrench button.
  </summary>
</histogram>

<histogram name="X11.XInternAtomFailure" units="count"
    expires_after="2021-01-01">
  <obsolete>
    Removed July 2021 as enough data was collected.
  </obsolete>
  <owner>huangdarwin@chromium.org</owner>
  <owner>src/ui/base/clipboard/OWNERS</owner>
  <summary>
    Counts how often the X11 server fails to register an atom. Recorded when
    ::XInternAtom fails (returns None). Failure rates will inform whether we
    implement error handling. https://crbug.com/1000919
  </summary>
</histogram>

<histogram name="XHR.Async.PageDismissal" enum="XHRPageDismissalState"
    expires_after="M81">
  <owner>panicker@chromium.org</owner>
  <summary>
    Records occurence of async XHR during page dismissal state (unload,
    beforeunload, pagehide etc).
  </summary>
</histogram>

<histogram name="XHR.Sync.PageDismissal" enum="XHRPageDismissalState"
    expires_after="2020-06-28">
  <owner>panicker@chromium.org</owner>
  <summary>
    Records occurence of sync XHR during page dismissal state (unload,
    beforeunload, pagehide etc).
  </summary>
</histogram>

<histogram name="XHR.Sync.PageDismissal_forbidden" enum="XHRPageDismissalState"
    expires_after="2020-05-24">
  <owner>kdillon@chromium.org</owner>
  <owner>panicker@chromium.org</owner>
  <summary>
    Records occurence of sync XHR requests during page dismissal state (unload,
    beforeunload, pagehide etc) that were forbidden.
  </summary>
</histogram>

</histograms>

</histogram-configuration>
