<!--
Copyright 2022 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 Views 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="BubbleName">
  <variant name="All" summary="Aggregated metrics for all bubbles"/>
  <variant name="DownloadBubbleContentsView"
      summary="Aggregated metrics DownloadBubbleContentsView bubbles"/>
  <variant name="ExtensionsMenuView"
      summary="Aggregated metrics for ExtensionsMenuView bubbles"/>
  <variant name="PageInfoBubbleViewBase"
      summary="Aggregated metrics for PageInfoBubbleViewBase bubbles"/>
  <variant name="PermissionPromptBaseView"
      summary="Aggregated metrics for PermissionPromptBaseView bubbles"/>
  <variant name="ProfileMenuViewBase"
      summary="Aggregated metrics for ProfileMenuViewBase bubbles"/>
</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=".LinkWithInterestFor"
      summary="The context menu was shown for a link (image or non-image)
               that has the `interestfor` attribute."/>
  <variant name=".Page" summary="The context menu was shown for a page."/>
  <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="CreationSource">
  <variant name=".AllSources" summary="Aggregated across all sources"/>
  <variant name=".BrowserInitiated"
      summary="Triggered by browser action, e.g. shortcut or menu"/>
  <variant name=".DragToNewWindow"
      summary="Triggered by dragging a tab to a new window"/>
  <variant name=".SessionRestore" summary="Triggered by session restore"/>
</variants>

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

<variants name="DefaultBrowserEntrypointType">
  <variant name="BubbleDialog"
      summary="the bubble dialog anchored to app menu button"/>
  <variant name="ChangeDetectedNotification"
      summary="the change detected Os notification"/>
  <variant name="InfoBar" summary="the startup infobar"/>
  <variant name="ModalDialogWithoutSettingsIllustration"
      summary="the modal dialog without settings illustration"/>
  <variant name="ModalDialogWithSettingsIllustration"
      summary="the modal dialog with settings illustration"/>
  <variant name="SettingsPage" summary="the settings page"/>
</variants>

<!-- LINT.ThenChange(//chrome/browser/default_browser/default_browser_controller.h:DefaultBrowserEntrypointType) -->

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

<variants name="DefaultBrowserSetterType">
  <variant name="ShellIntegration" summary="the shell integration setter"/>
  <variant name="VisualGuide" summary="the visual guide setter"/>
</variants>

<!-- LINT.ThenChange(//chrome/browser/default_browser/default_browser_setter.h:DefaultBrowserSetterType) -->

<variants name="ExistingWindow">
  <variant name="WithExistingWindow"
      summary="the profile already has one or more browser windows when this
               new window is created"/>
  <variant name="WithoutExistingWindow"
      summary="the profile has no browser windows when this new window is
               created"/>
</variants>

<variants name="InitialWebUIStartupTemperature">
  <variant name="" summary=""/>
  <variant name=".Temperature.ColdStartup"
      summary=", where startup was cold (mostly hard faults). Only available
               on Windows."/>
  <variant name=".Temperature.Other"
      summary=", where startup temperature was undetermined"/>
  <variant name=".Temperature.WarmStartup"
      summary=", where startup was warm (almost no hard faults). Only
               available on Windows."/>
</variants>

<variants name="NewWindowMetricVersion">
  <variant name="" summary="(DEPRECATED in M152. Replaced by V2)"/>
  <variant name="2" summary="(V2 with fixed metric start times)"/>
</variants>

<variants name="PaintType">
  <variant name="FirstContentfulPaint" summary="contentful paint"/>
  <variant name="FirstPaint" summary="paint"/>
</variants>

<variants name="Scenario">
  <variant name="" summary="standard"/>
  <variant name=".SessionRestore"
      summary="session restored (without showing the Profile Picker)"/>
</variants>

<variants name="StartPoint">
  <variant name="FromConstructor"
      summary="immediately before the Browser constructor is called"/>
</variants>

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

<variants name="TopChromeWebUIName">
  <variant name=""/>
  <variant name=".BookmarksSidePanel"/>
  <variant name=".CommentsSidePanel"/>
  <variant name=".CompanionSidePanelUntrusted"/>
  <variant name=".Compose"/>
  <variant name=".ContextualTasks"/>
  <variant name=".CustomizeChrome"/>
  <variant name=".DataSharingBubble"/>
  <variant name=".DefaultBrowserModal"/>
  <variant name=".Emoji"/>
  <variant name=".ExtensionsWebStoreZeroStatePromo"/>
  <variant name=".Feed"/>
  <variant name=".Feedback"/>
  <variant name=".HistoryClustersSidePanel"/>
  <variant name=".HistorySidePanel"/>
  <variant name=".LensOverlayUntrusted"/>
  <variant name=".LensSidePanelUntrusted"/>
  <variant name=".MakoUntrusted"/>
  <variant name=".NewTabFooter"/>
  <variant name=".OmniboxEverywhere"/>
  <variant name=".OmniboxPopup"/>
  <variant name=".PerformanceSidePanel"/>
  <variant name=".ReadAnythingUntrusted"/>
  <variant name=".ReadingList"/>
  <variant name=".ReloadButtonUI"/>
  <variant name=".ShoppingInsightsSidePanel"/>
  <variant name=".TabSearch"/>
  <variant name=".TabsFromOtherDevicesSidePanel"/>
  <variant name=".UserEducation"/>
</variants>

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

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

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

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

<histogram name="Bubble.{BubbleName}.CloseReason" enum="WidgetClosedReason"
    expires_after="2026-07-22">
  <owner>kerenzhu@chromium.org</owner>
  <owner>dayeung@chromium.org</owner>
  <owner>yuhengh@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>Records the reason a bubble was closed.</summary>
  <token key="BubbleName" variants="BubbleName"/>
</histogram>

<histogram name="Bubble.{BubbleName}.CreateToPresentationTime" units="ms"
    expires_after="2026-07-22">
  <owner>yuhengh@chromium.org</owner>
  <owner>kerenzhu@chromium.org</owner>
  <owner>dayeung@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Records the time it takes from a bubble construction to when the compositor
    finishes the first presentation.
  </summary>
  <token key="BubbleName" variants="BubbleName"/>
</histogram>

<histogram name="Bubble.{BubbleName}.CreateToVisibleTime" units="ms"
    expires_after="2026-07-22">
  <owner>yuhengh@chromium.org</owner>
  <owner>kerenzhu@chromium.org</owner>
  <owner>dayeung@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Records the time it takes from a bubble construction to when the bubble
    becomes visible.
  </summary>
  <token key="BubbleName" variants="BubbleName"/>
</histogram>

<histogram name="Bubble.{BubbleName}.TimeVisible" units="ms"
    expires_after="2026-07-22">
  <owner>yuhengh@chromium.org</owner>
  <owner>kerenzhu@chromium.org</owner>
  <owner>dayeung@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>Records the time a bubble is visible.</summary>
  <token key="BubbleName" variants="BubbleName"/>
</histogram>

<histogram name="ContextMenu.LensSupportStatus" enum="LensSupportStatus"
    expires_after="2027-01-31">
  <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.SelectedOptionAndroid{Type}"
    enum="ContextMenuOptionAndroid" expires_after="never">
<!-- expires-never: part of top-line metric (internal: go/chrome-browser-nsm) -->

<!-- expires-never: part of vital metric ChromeSearch.Actions -->

  <owner>twellington@chromium.org</owner>
  <owner>clank-app-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.
  </summary>
  <token key="Type" variants="ContextMenuAndroidTypes"/>
</histogram>

<histogram name="ContextMenu.SelectedOptionDesktop{ContextMenuTypeDesktop}"
    enum="ContextMenuOptionDesktop" expires_after="2027-02-07">
  <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. {ContextMenuTypeDesktop}
  </summary>
  <token key="ContextMenuTypeDesktop">
    <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=".MisspelledWord"
        summary="The context menu was shown for a misspelt word"/>
    <variant name=".Other"
        summary="The context menu was shown in a context other than those
                 explicitly enumerated"/>
    <variant name=".SelectedText"
        summary="The context menu was shown for a text selection"/>
    <variant name=".Video" summary="The context menu was shown for a video"/>
  </token>
</histogram>

<histogram name="ContextMenu.Shown{Type}" enum="BooleanPresent"
    expires_after="2027-02-07">
  <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.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.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="DataPack.BusyOpenRetriesFailed" enum="BooleanHit"
    expires_after="2027-03-19">
  <owner>grt@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    A .pak file was prevented from being opened because it was in use, and this
    error persisted for at least 300ms. Recorded once for each attempt to open a
    .pak file that fails due to FILE_ERROR_IN_USE.
  </summary>
</histogram>

<histogram name="DataPack.BusyOpenRetryCount" units="count"
    expires_after="2027-03-19">
  <owner>grt@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The number of retries (not counting the initial attempt) required to open a
    .pak file that could not initially be opened because it was in use. Recorded
    once for each successfully opened .pak file after an initial
    FILE_ERROR_IN_USE.
  </summary>
</histogram>

<histogram name="DefaultBrowser.InfoBar.TimesShownBeforeAccept" units="count"
    expires_after="2027-02-07">
  <owner>agale@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Times the default browser info bar has been shown before the user accepted
    the prompt.
  </summary>
</histogram>

<histogram name="DefaultBrowser.InfoBar.UserInteraction"
    enum="DefaultBrowserInfoBarUserInteraction" expires_after="2027-01-31">
  <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.PinInfoBar.UserInteraction"
    enum="PinInfoBarUserInteraction" expires_after="2027-01-24">
  <owner>jessemckenna@google.com</owner>
  <owner>davidbienvenu@chromium.org</owner>
  <summary>
    User interaction with the pin-to-taskbar infobar (e.g., accepted, ignored,
    dismissed).
  </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.VisualGuide.EventHookDiscoveryTime" units="ms"
    expires_after="2027-08-06">
  <owner>alsan@chromium.org</owner>
  <owner>atharvmaan@chromium.org</owner>
  <owner>koretadaniel@chromium.org</owner>
  <summary>
    Time between starting the search for the Windows Settings default-apps
    window and the window being discovered by the visual guided setter. Recorded
    on Windows only, when the window is found.
  </summary>
</histogram>

<histogram name="DefaultBrowser.VisualGuide.Outcome"
    enum="DefaultBrowserVisualGuideOutcome" expires_after="2027-08-06">
  <owner>alsan@chromium.org</owner>
  <owner>atharvmaan@chromium.org</owner>
  <owner>koretadaniel@chromium.org</owner>
  <summary>
    Outcome of the visual guided setter flow that docks the Windows Settings
    default-apps window over the chrome://default-browser WebUI stage. Recorded
    on Windows only, when the flow tears down.
  </summary>
</histogram>

<histogram
    name="DefaultBrowser.{DefaultBrowserEntrypointType}.{DefaultBrowserSetterType}.DefaultSetAfterSetterFailure"
    enum="BooleanSuccess" expires_after="2027-04-27">
  <owner>alsan@chromium.org</owner>
  <owner>atharvmaan@chromium.org</owner>
  <owner>koretadaniel@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Recorded when the primary setter fails (e.g. times out). Records whether
    Chrome eventually becomes the default browser asynchronously from
    {DefaultBrowserEntrypointType} with {DefaultBrowserSetterType} as the
    setter.
  </summary>
</histogram>

<histogram
    name="DefaultBrowser.{DefaultBrowserEntrypointType}.{DefaultBrowserSetterType}.Interaction"
    enum="DefaultBrowserUserInteraction" expires_after="2027-04-27">
  <owner>alsan@chromium.org</owner>
  <owner>atharvmaan@chromium.org</owner>
  <owner>koretadaniel@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Records the action taken by user when presented with an option to set Chrome
    as the default browser from {DefaultBrowserEntrypointType} with
    {DefaultBrowserSetterType} as the setter.
  </summary>
</histogram>

<histogram
    name="DefaultBrowser.{DefaultBrowserEntrypointType}.{DefaultBrowserSetterType}.Shown"
    units="count" expires_after="2027-04-27">
  <owner>alsan@chromium.org</owner>
  <owner>atharvmaan@chromium.org</owner>
  <owner>koretadaniel@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Records how many times {DefaultBrowserEntrypointType} entrypoint with
    {DefaultBrowserSetterType} as the setter was shown to the user.
  </summary>
</histogram>

<histogram
    name="DefaultBrowser.{DefaultBrowserEntrypointType}.{DefaultBrowserSetterType}.TimeAfterSetterFailure"
    units="ms" expires_after="2027-04-27">
  <owner>alsan@chromium.org</owner>
  <owner>atharvmaan@chromium.org</owner>
  <owner>koretadaniel@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Recorded when the primary setter fails (e.g. times out) but Chrome
    eventually becomes the default browser asynchronously. Records the duration
    from when the setter failed until Chrome becomes the default browser from
    {DefaultBrowserEntrypointType} with {DefaultBrowserSetterType} as the
    setter.
  </summary>
</histogram>

<histogram name="DefaultBrowser.{DefaultBrowserSetterType}.Result"
    enum="BooleanSuccess" expires_after="2027-01-03">
  <owner>alsan@chromium.org</owner>
  <owner>atharvmaan@chromium.org</owner>
  <owner>koretadaniel@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Records whether setting Chrome as the default browser was successful using
    {DefaultBrowserSetterType}.
  </summary>
</histogram>

<histogram name="DefaultBrowser.{DefaultBrowserSetterType}.SuccessDuration"
    units="ms" expires_after="2027-04-27">
  <owner>alsan@chromium.org</owner>
  <owner>atharvmaan@chromium.org</owner>
  <owner>koretadaniel@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Only recorded when setting Chrome as the default browser succeeds
    synchronously (within the setter's timeout) after the user accepts the
    default browser flow using {DefaultBrowserSetterType}.
  </summary>
</histogram>

<histogram name="DefaultBrowser.{DefaultBrowserStateValidator}Result"
    enum="DefaultBrowserStateValidationResult" expires_after="2027-04-27">
  <owner>alsan@chromium.org</owner>
  <owner>atharvmaan@chromium.org</owner>
  <owner>koretadaniel@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Only logged on Windows.

    Logs a comparison of the default browser state check result using the
    standard Win API compared to {DefaultBrowserStateValidator}. Results are
    relative to the Win API checker; e.g., a false-positive means the Win API
    detected the default browser but the alternative validator did not.
  </summary>
  <token key="DefaultBrowserStateValidator">
    <variant name="HttpProgIdAssocValidation"
        summary="AssocQueryString to get the HTTP default client's program ID"/>
    <variant name="HttpProgIdRegistryValidation"
        summary="the HTTP default client's program ID from the registry"/>
  </token>
</histogram>

<histogram
    name="InitialWebUI.NewWindow.AllSources.BrowserWindow.FirstPaint.FromConstructor"
    units="ms" expires_after="2027-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Deprecated. Replaced by WithExistingWindow and WithoutExistingWindow
    variants. Records the time from immediately before the Browser constructor
    is called to 'First Paint' of the new browser window. Aggregated across all
    sources.
  </summary>
</histogram>

<histogram
    name="InitialWebUI.NewWindow.AllSources.ReloadButton.FirstPaint.FromConstructor"
    units="ms" expires_after="2027-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Deprecated. Replaced by WithExistingWindow and WithoutExistingWindow
    variants. Records the time from immediately before the Browser constructor
    is called to first paint of the Reload Button in the new browser window.
    Aggregated across all sources.
  </summary>
</histogram>

<histogram
    name="InitialWebUI.NewWindow{CreationSource}.{ExistingWindow}.BrowserWindow.ClosedBeforeFirstPaint{Version}"
    units="ms" expires_after="2026-12-31">
  <owner>annasato@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Records the duration from window creation to closing the browser window for
    new windows {CreationSource} {ExistingWindow} {Version}.

    This is only recorded for desktop platforms when the InitialWebUIMetrics is
    enabled, and when the initial paint has not been recorded.
  </summary>
  <token key="CreationSource" variants="CreationSource"/>
  <token key="ExistingWindow" variants="ExistingWindow"/>
  <token key="Version" variants="NewWindowMetricVersion"/>
</histogram>

<histogram
    name="InitialWebUI.NewWindow{CreationSource}.{ExistingWindow}.BrowserWindow.FirstPaint.{StartPoint}{Version}"
    units="ms" expires_after="2027-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Records the time from {StartPoint} to 'First Paint' of the new browser
    window. {CreationSource} {ExistingWindow} {Version}.

    This is only recorded for desktop platforms when the InitialWebUIMetrics is
    enabled.
  </summary>
  <token key="CreationSource" variants="CreationSource"/>
  <token key="ExistingWindow" variants="ExistingWindow"/>
  <token key="StartPoint" variants="StartPoint"/>
  <token key="Version" variants="NewWindowMetricVersion"/>
</histogram>

<histogram
    name="InitialWebUI.NewWindow{CreationSource}.{ExistingWindow}.BrowserWindow.ShowRequestedToFirstPaint{Version}"
    units="ms" expires_after="2027-02-07">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Records the duration from the initial show/activation request of a new
    browser window to its first paint. {CreationSource} {ExistingWindow}
    {Version}.

    This metric is used to measure the impact of window show deferral. It is
    recorded only once per window lifecycle. If multiple windows are shown
    during startup, e.g. due to session restore, the first window is measured in
    &quot;InitialWebUI.Startup&quot; and not in this histogram.

    This is only recorded for desktop platforms when the InitialWebUIMetrics is
    enabled.
  </summary>
  <token key="CreationSource" variants="CreationSource"/>
  <token key="ExistingWindow" variants="ExistingWindow"/>
  <token key="Version" variants="NewWindowMetricVersion"/>
</histogram>

<histogram
    name="InitialWebUI.NewWindow{CreationSource}.{ExistingWindow}.BrowserWindowToReloadButton.FirstPaintGap{Version}"
    units="ms" expires_after="2027-01-31">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Records the delay between the native browser window's first presentation
    (paint) and the Reload Button first paint in a new window. {CreationSource}
    {ExistingWindow} {Version}.

    This is a direct, session-linked measurement of the delta, unlike the
    separately logged `.FirstPaint` metrics. Used to quantify the rendering lag.

    This is only recorded for desktop platforms when the InitialWebUIMetrics is
    enabled.
  </summary>
  <token key="CreationSource" variants="CreationSource"/>
  <token key="ExistingWindow" variants="ExistingWindow"/>
  <token key="Version" variants="NewWindowMetricVersion"/>
</histogram>

<histogram
    name="InitialWebUI.NewWindow{CreationSource}.{ExistingWindow}.ReloadButton.{PaintType}.{StartPoint}{Version}"
    units="ms" expires_after="2027-01-10">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Records the time from {StartPoint} to first {PaintType} of the Reload Button
    in the new browser window. {CreationSource} {ExistingWindow} {Version}.

    This is only recorded for desktop platforms when the InitialWebUIMetrics is
    enabled.
  </summary>
  <token key="CreationSource" variants="CreationSource"/>
  <token key="ExistingWindow" variants="ExistingWindow"/>
  <token key="PaintType" variants="PaintType"/>
  <token key="StartPoint" variants="StartPoint"/>
  <token key="Version" variants="NewWindowMetricVersion"/>
</histogram>

<histogram
    name="InitialWebUI.ReloadButton.Dropped{PaintType}FromNavigationStart"
    units="ms" expires_after="2027-01-10">
  <owner>leimy@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Records the time from navigation start to {PaintType} for the Reload Button
    when the InitialWebUIWindowMetricsManager was null and the metric was
    dropped.

    Note: This is measured from NavigationStart rather than FromConstructor
    because the browser window creation timestamp is unavailable when the
    metrics manager is null (e.g. for background prewarmed WebContents whose
    paint occurs before a window constructor runs, or fast in-process loads
    before the window reference is resolved).
  </summary>
  <token key="PaintType">
    <variant name="FirstContentfulPaint"/>
    <variant name="FirstPaint"/>
  </token>
</histogram>

<histogram name="InitialWebUI.ReloadButton.InputCount"
    enum="ReloadButtonInputType" expires_after="2027-01-17">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Counts the number of times the ReloadButton is activated, sliced by input
    type.

    This is only recorded for desktop platforms when the InitialWebUIMetrics is
    enabled.
  </summary>
</histogram>

<histogram name="InitialWebUI.ReloadButton.InteractionToReload{InputType}"
    units="ms" expires_after="2027-06-15">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Records the latency from {InputType} user interaction with the WebUI or C++
    Views reload button to the initiation of the reload command execution.

    For C++ Views, the start time is the event timestamp of the click or key
    press, and the end time is when the browser button handler is executed. The
    metric is emitted immediately during the button press handler.

    For WebUI, the start time is the physical interaction time reconstructed in
    the browser process by adding the renderer-reported interaction time offset
    (relative to navigation start) to the browser-side recorded navigation start
    ticks. The end time is when the browser process receives the Mojo reload
    request. The metric is emitted immediately upon validating and processing
    the Mojo request.

    This is only recorded for desktop platforms when the InitialWebUIMetrics is
    enabled.
  </summary>
  <token key="InputType">
    <variant name="" summary="any physical"/>
    <variant name=".KeyPress" summary="a KeyPress"/>
    <variant name=".MouseRelease" summary="a MouseRelease"/>
  </token>
</histogram>

<histogram
    name="InitialWebUI.Startup.WithoutExistingWindow.BrowserWindow.FirstPaint"
    units="ms" expires_after="2026-09-06">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Deprecated. Removed the WithExistingWindow and WithoutExistingWindow
    dimension from Startup metrics, since they do not apply during startup.
    Records the time from browser application startup to the first presentation
    of the browser window onto the screen when no existing window is present.
  </summary>
</histogram>

<histogram
    name="InitialWebUI.Startup.WithoutExistingWindow.BrowserWindowToReloadButton.FirstPaintGap"
    units="ms" expires_after="2026-09-13">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Deprecated. Removed the WithExistingWindow and WithoutExistingWindow
    dimension from Startup metrics, since they do not apply during startup.
    Records the delay between the native browser window's first presentation
    (paint) and the Reload Button first paint during startup when no existing
    window is present.
  </summary>
</histogram>

<histogram
    name="InitialWebUI.Startup.WithoutExistingWindow.ReloadButton.FirstContentfulPaint"
    units="ms" expires_after="2026-09-06">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Deprecated. Removed the WithExistingWindow and WithoutExistingWindow
    dimension from Startup metrics, since they do not apply during startup.
    Records the time spent initializing a newly constructed ReloadButton in
    standard browser application startup. The timer starts immediately after the
    browser application startup, and ends immediately after a contentful paint
    of the view is requested when no existing window is present.
  </summary>
</histogram>

<histogram
    name="InitialWebUI.Startup.WithoutExistingWindow.ReloadButton.FirstPaint"
    units="ms" expires_after="2026-09-06">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Deprecated. Removed the WithExistingWindow and WithoutExistingWindow
    dimension from Startup metrics, since they do not apply during startup.
    Records the time spent initializing a newly constructed ReloadButton in
    standard browser application startup. The timer starts immediately after the
    browser application startup, and ends immediately after a paint of the view
    is requested when no existing window is present.
  </summary>
</histogram>

<histogram
    name="InitialWebUI.Startup{Scenario}.BrowserWindow.ClosedBeforeFirstPaint{StartupTemperature}"
    units="ms" expires_after="2026-12-31">
  <owner>annasato@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Records the duration from the initial show/activation request of the first
    browser window during {Scenario} startup to closing the
    window{StartupTemperature}.

    This is only recorded for desktop platforms when the InitialWebUIMetrics is
    enabled, and when the initial paint has not been recorded.
  </summary>
  <token key="Scenario" variants="Scenario"/>
  <token key="StartupTemperature" variants="InitialWebUIStartupTemperature"/>
</histogram>

<histogram
    name="InitialWebUI.Startup{Scenario}.BrowserWindow.FirstPaint{StartupTemperature}"
    units="ms" expires_after="2027-02-14">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Records the time from {Scenario} browser application startup to the first
    presentation of the browser window onto the screen{StartupTemperature}.

    This metric is mutually exclusive by scenarios.

    This is only recorded for desktop platforms when the InitialWebUIMetrics
    feature is enabled.
  </summary>
  <token key="Scenario" variants="Scenario"/>
  <token key="StartupTemperature" variants="InitialWebUIStartupTemperature"/>
</histogram>

<histogram
    name="InitialWebUI.Startup{Scenario}.BrowserWindow.ShowRequestedToFirstPaint{StartupTemperature}"
    units="ms" expires_after="2027-02-14">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Records the duration from the initial show/activation request of the first
    browser window during {Scenario} startup to its first
    paint{StartupTemperature}.

    This metric is used to measure the impact of window show deferral. It is
    recorded only once per browser process. If multiple windows are shown during
    startup, e.g. due to session restore, only the first window is measured, and
    all the others are measured in the &quot;InitialWebUI.NewWindow&quot;
    histogram.

    This is only recorded for desktop platforms when the InitialWebUIMetrics
    feature is enabled.
  </summary>
  <token key="Scenario" variants="Scenario"/>
  <token key="StartupTemperature" variants="InitialWebUIStartupTemperature"/>
</histogram>

<histogram
    name="InitialWebUI.Startup{Scenario}.BrowserWindowToReloadButton.FirstPaintGap{StartupTemperature}"
    units="ms" expires_after="2027-01-31">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Records the delay between the native browser window's first presentation
    (paint) and the Reload Button first paint during {Scenario} startup
    {StartupTemperature}.

    This is a direct, session-linked measurement of the delta, unlike the
    separately logged `.FirstPaint` metrics. Used to quantify the rendering lag
    of the WebUI process relative to the native UI creation during heavy
    resource contention at startup.

    This metric is mutually exclusive by scenarios.

    This is only recorded for desktop platforms when the InitialWebUIMetrics
    feature is enabled.
  </summary>
  <token key="Scenario" variants="Scenario"/>
  <token key="StartupTemperature" variants="InitialWebUIStartupTemperature"/>
</histogram>

<histogram
    name="InitialWebUI.Startup{Scenario}.ReloadButton.RendererProcessCreated{StartupTemperature}"
    units="ms" expires_after="2027-02-14">
  <owner>elkurin@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Records the duration from the start of {Scenario} browser application
    startup to the point where the dedicated renderer process for the Reload
    button WebUI is initialized {StartupTemperature}.

    This metric specifically measures the renderer process creation cost (Cost
    A), which is an overhead incurred by the Initial WebUI architecture that
    does not exist in the native C++ Views implementation.

    This is only recorded for desktop platforms when the InitialWebUIMetrics
    feature is enabled.
  </summary>
  <token key="Scenario" variants="Scenario"/>
  <token key="StartupTemperature" variants="InitialWebUIStartupTemperature"/>
</histogram>

<histogram
    name="InitialWebUI.Startup{Scenario}.ReloadButton.RendererProcessLaunched{StartupTemperature}"
    units="ms" expires_after="2027-02-14">
  <owner>elkurin@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Records the duration from the start of {Scenario} browser application
    startup to the point where the dedicated renderer process for the Reload
    button WebUI is launched {StartupTemperature}.

    This metrics captures the completion of the process launch sequence.
    Comparing this with the `.RendererProcessCreated` metric reveals the time
    spent in the process launch phase, specifically isolating the OS and Sandbox
    overhead incurred before the renderer becomes available.

    This is only recorded for desktop platforms when the InitialWebUIMetrics
    feature is enabled.
  </summary>
  <token key="Scenario" variants="Scenario"/>
  <token key="StartupTemperature" variants="InitialWebUIStartupTemperature"/>
</histogram>

<histogram
    name="InitialWebUI.Startup{Scenario}.ReloadButton.{PaintType}{StartupTemperature}"
    units="ms" expires_after="2027-01-31">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Records the time spent initializing a newly constructed ReloadButton in the
    {Scenario} browser application startup with pre/post Initial WebUI setup.
    The timer starts immediately after the browser application
    startup{StartupTemperature}, and ends immediately after a {PaintType} of the
    view is requested.

    This metric is mutually exclusive by scenarios.

    For FirstPaint, the paint is requested by either the browser process
    (pre-Initial WebUI) or by the WebUI renderer process (post-Initial WebUI).

    Only recorded on desktop platforms.
  </summary>
  <token key="Scenario" variants="Scenario"/>
  <token key="PaintType" variants="PaintType"/>
  <token key="StartupTemperature" variants="InitialWebUIStartupTemperature"/>
</histogram>

<histogram name="InitialWebUI.Toolbar.ParseFinishedToFirstUpdate" units="ms"
    expires_after="2027-02-07">
  <owner>leimy@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Records the time elapsed from when the main document finishes parsing and
    becomes interactive (domInteractive) to when the WebUI toolbar component
    completes its first rendering update (firstUpdated). This measures the
    latency introduced by JavaScript execution and the initial Lit component
    lifecycle.

    This is only recorded for desktop platforms when the InitialWebUIMetrics
    feature is enabled.
  </summary>
</histogram>

<histogram
    name="InitialWebUI.Toolbar.ProcessAlreadyExistsForTheSameProfileOnCreation"
    enum="Boolean" expires_after="2027-01-17">
  <owner>leimy@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Recorded during `RenderProcessHostImpl::Init()` for TopChromeWebUI
    processes. Records true if there is already an existing RenderProcessHost
    for TopChromeWebUI for the same profile that is initialized and not dead.
  </summary>
</histogram>

<histogram name="InitialWebUI.Toolbar.RenderProcessGone"
    enum="TerminationStatus" expires_after="2026-07-05">
  <owner>leimy@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Records the status when the Web UI Toolbar render process is terminated.

    This is recorded every time when `WebUIToolbarWebView` receives
    `PrimaryMainFrameRenderProcessGone()` signal including the normal
    termination (i.e. `TERMINATION_STATUS_NORMAL_TERMINATION` and
    `TERMINATION_STATUS_STILL_RUNNING`).
  </summary>
</histogram>

<histogram name="InitialWebUI.Toolbar.RenderProcessGoneExceedingRecoveryLimit"
    enum="Boolean" expires_after="2026-07-05">
  <owner>leimy@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Record the number of times that the Web UI Toolbar render process is
    terminated abnormmaly and it exceeds the recovery limit.
  </summary>
</histogram>

<histogram name="InitialWebUI.View.Creation" enum="InitialWebUIView"
    expires_after="2027-01-17">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Records the counts of key Initial WebUI views when they are created in the
    constructor. Use this to normalize other metrics.

    This is only recorded for desktop platforms when the InitialWebUIMetrics is
    enabled.
  </summary>
</histogram>

<histogram name="RenderTextHarfBuzz.GetFallbackFontsTime" units="ms"
    expires_after="2027-01-17">
  <owner>dayeung@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="2027-01-17">
  <owner>dayeung@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.MissingGlyphCount" units="count"
    expires_after="2025-07-13">
  <owner>dayeung@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>Count of missing glyphs at the end of text shaping.</summary>
</histogram>

<histogram name="RenderTextHarfBuzz.ShapeRunsFallback" enum="ShapeRunFallback"
    expires_after="2026-11-29">
  <owner>dayeung@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="2027-01-17">
  <owner>dayeung@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.SelectedTextWordCount.SearchWeb"
    units="words" expires_after="2027-07-26">
  <owner>sophiechang@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Recorded when the user selects the &quot;Search Google for&quot; (Search Web
    for) context menu item. Logs the number of words selected.
  </summary>
</histogram>

<histogram name="RenderViewContextMenu.Shown" enum="RenderViewContextMenuItem"
    expires_after="2027-01-31">
  <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) -->

<!-- expires-never: part of vital metric ChromeSearch.Actions -->

  <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. Note
    that this counts cases where the context menu item is used, but the item has
    no effect (eg. autofill commands have no effect if the RenderFrameHost is
    null). Update: as of M122, setting text direction via the context menu may
    also have no effect if the RFH is null, though we will continue to count in
    this case.

    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="Snackbar.DismissalReason" enum="SnackbarDismissalReason"
    expires_after="2027-01-03">
  <owner>aishwaryarj@google.com</owner>
  <owner>src/chrome/browser/ui/messages/OWNERS</owner>
  <summary>Records the reason why a snackbar was dismissed.</summary>
</histogram>

<histogram name="Snackbar.QueueDepthAtInsertion" units="Snackbars"
    expires_after="2026-12-31">
  <owner>vpasupathy@google.com</owner>
  <owner>chrome-ui-security-bugs@google.com</owner>
  <summary>
    Records the combined size of the standard and persistent snackbar queues at
    the exact moment a new snackbar is inserted via add(). Used to detect queue
    spam and DoS conditions.
  </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="Snackbar.TimerDrift" units="ms" expires_after="2026-12-31">
  <owner>vpasupathy@google.com</owner>
  <owner>chrome-ui-security-bugs@google.com</owner>
  <summary>
    Records the difference between the actual time a snackbar was dismissed due
    to timeout and its requested duration. Tracks the exact uptimeMillis() to
    detect Android UI thread stalls or deadlocks that delay security notices.
    Capped at 60 seconds.
  </summary>
</histogram>

<histogram name="Toolbar.ChromeLabs.{State}LabAction"
    enum="ChromeLabsSelectedLab" expires_after="never">
<!-- expires-never: Chrome Labs is a feature that allows teams to add their
experimental features for users to try out and give feedback on before it is
fully rolled out. We want teams that add their features to Chrome Labs to
continue to have access to metrics on how many users enable (or disable) their
features through Chrome Labs. -->

  <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.Overflow.HomeButton" enum="Boolean"
    expires_after="2027-02-07">
  <owner>robliao@chromium.org</owner>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Whether the home button is enabled and overflowed due to width constraints.
  </summary>
</histogram>

<histogram name="TopChromeUI.{UIName}.RequestToFirstContentfulPaint" units="ms"
    expires_after="2027-02-07">
  <owner>mych@chromium.org</owner>
  <owner>chrome-webui@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time elapsed from the initiation of a user-initiated request to
    its first contentful paint for a Top Chrome UI: {UIName}.

    This metric is recorded for both Native and WebUI implementations. To ensure
    comparative parity, it is recorded at most once per window instance. This
    aligns the native view lifecycle with the WebUI document lifecycle.

    Only recorded on desktop platforms.
  </summary>
  <token key="UIName">
    <variant name="OmniboxPopup" summary="Omnibox Popup"/>
  </token>
</histogram>

<histogram name="Views.ColorProviderCacheSize" units="entries"
    expires_after="2026-01-11">
  <owner>tluk@chromium.org</owner>
  <owner>skau@chromium.org</owner>
  <summary>
    Records the size of the ColorProviderManager cache when a new ColorProvider
    is generated. New entries are generated when a client requests a
    ColorProvider with a Key that is not in the cache. Since the cache size is
    capped, a distribution with too many results at the tail indicate that the
    cache is too small.
  </summary>
</histogram>

<histogram name="Views.FocusRing.RefreshLayer.Time" units="microseconds"
    expires_after="2027-01-24">
  <owner>gjc@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records the duration of all FocusRing::RefreshLayer calls. Recorded when the
    focus ring's layer is refreshed. This captures fast cached cases as well as
    slow layer creation/destruction cases. This metric is only reported for
    clients with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Views.FocusRing.RefreshLayer.Time.NotCached"
    units="microseconds" expires_after="2027-01-24">
  <owner>gjc@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records the duration of FocusRing::RefreshLayer calls that result in actual
    layer creation or destruction. Recorded when the focus ring's layer is
    refreshed and results in actual layer creation or destruction. This metric
    is only reported for clients with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Views.InvalidatesDuringLayout" units="count"
    expires_after="2027-01-24">
  <owner>dpranke@chromium.org</owner>
  <owner>elainechien@chromium.org</owner>
  <owner>kylixrd@chromium.org</owner>
  <summary>
    Records the number of times a view's InvalidateLayout() method is called
    during a Layout() call. Calling InvalidateLayout() during a layout call
    should never be necessary.
  </summary>
</histogram>

<histogram name="Views.LayoutCallDepth" units="count"
    expires_after="2025-07-06">
  <owner>dpranke@chromium.org</owner>
  <owner>elainechien@chromium.org</owner>
  <owner>kylixrd@chromium.org</owner>
  <summary>
    The maximum reentrant call depth seen during a view's layout. Normally this
    value will be one (Layout() was not reentered). But, we know Layout() is
    reentered sometimes in some views (where the value will be two), and want to
    measure how often that is. We also want to know if Layout() is ever
    reentered more than two deep.
  </summary>
</histogram>

<histogram name="Views.UnnecessaryLayouts" units="count"
    expires_after="2025-07-06">
  <owner>elainechien@chromium.org</owner>
  <owner>kylixrd@chromium.org</owner>
  <owner>pkasting@chromium.org</owner>
  <summary>
    Records excess layouts of a view that will not be visible. This includes
    doing more than one layout between paints, or any layouts after the final
    paint. While some such layouts might be unavoidable in computing
    layout-related properties during other operations, these mostly represent
    unnecessary work. The zero bucket counts cases where all the layouts we did
    were necessary, i.e. paints that had a single preceding layout.
  </summary>
</histogram>

<histogram
    name="Views.{Process}.NumColorProvidersInitializedDuringOnNativeThemeUpdated"
    units="providers" expires_after="2027-01-31">
  <owner>pkasting@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>skau@chromium.org</owner>
  <summary>
    Records the number of ColorProvider instances constructed and initialized by
    the ColorProviderManager following a NativeTheme update in a {Process}
    process. Emitted after the NotifyOnNativeThemeUpdated() event has been
    processed.
  </summary>
  <token key="Process">
    <variant name="Browser"/>
    <variant name="NonBrowser"/>
  </token>
</histogram>

<histogram name="Views.{Process}.TimeSpentInitializingColorProvider" units="ms"
    expires_after="2026-01-11">
  <owner>pkasting@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>skau@chromium.org</owner>
  <summary>
    Records the time spent initializing a newly constructed ColorProvider
    instance in a {Process} process. The timer starts immediately before the
    ColorProvider is constructed and emitted immediately after initialization
    (i.e. all mixers are run and the ColorMap is created).
  </summary>
  <token key="Process">
    <variant name="Browser"/>
    <variant name="NonBrowser"/>
  </token>
</histogram>

<histogram name="Views.{Process}.TimeSpentProcessingOnNativeThemeUpdatedEvent"
    units="ms" expires_after="2026-01-11">
  <owner>pkasting@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>skau@chromium.org</owner>
  <summary>
    Records the time spent synchronously processing the the
    NotifyOnNativeThemeUpdated() event in a {Process} process. The timer starts
    as soon as the event handler is entered and emitted when code returns from
    the event handler.
  </summary>
  <token key="Process">
    <variant name="Browser"/>
    <variant name="NonBrowser"/>
  </token>
</histogram>

<histogram name="WebUI.ColorsStylesheetServingDuration" units="ms"
    expires_after="2027-02-14">
  <owner>skau@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time in milliseconds to generate chrome://theme/colors.css and queue it
    to be sent to the renderer for WebUI. Does not include url parsing time.
    Recorded for every request for colors.css. Lower is better.

    Expired Jan 2024. Revived M124.
  </summary>
</histogram>

<histogram name="WebUI.CreatedForUrl" enum="WebUIUrlHashes"
    expires_after="2027-01-24">
  <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="2027-01-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.

    For Android settings usage check Settings.FragmentAttached.
  </summary>
</histogram>

<histogram name="WebUI.ShownUrl" enum="WebUIUrlHashes"
    expires_after="2027-02-14">
  <owner>kerenzhu@chromium.org</owner>
  <owner>dpapad@chromium.org</owner>
  <owner>chrome-webui@google.com</owner>
  <summary>
    WebUI URLs that are shown to the user. For WebUIs that don't have a WebUI
    object (e.g. chrome://dino), recorded on the network request. For others,
    recorded on commit if not preloaded. For preloaded WebUIs, recorded when
    WebUIContentsPreloadManager::Request() is invoked. This differs from
    WebUI.CreatedForUrl as it only logs WebUIs that are actually shown (i.e., a
    preloaded WebUI may never be shown).
  </summary>
</histogram>

<histogram name="WebUI.TopChrome.Preload.Reason" enum="WebUIPreloadReason"
    expires_after="2027-02-07">
  <owner>kerenzhu@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    The reason of preloading a WebUI. Logged when a preloaded WebUI is created.
  </summary>
</histogram>

<histogram name="WebUI.TopChrome.Preload.Result" enum="WebUIPreloadResult"
    expires_after="2026-12-27">
  <owner>kerenzhu@chromium.org</owner>
  <owner>dayeung@chromium.org</owner>
  <owner>elainechien@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    The result of attempting to use a preloaded WebUI when a new Top Chrome
    WebUI is requested.
  </summary>
</histogram>

<histogram name="WebUI.TopChrome.RequestToFCP{WebUIName}" units="ms"
    expires_after="2027-01-03">
  <owner>kerenzhu@chromium.org</owner>
  <owner>chrome-webui-for-features@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time elapsed from the initiation of a WebUI request to its
    first contentful paint. This metric applies to the main frame documents of
    top-chrome WebUI pages, such as side-panel content. The request initiation
    is marked by the call to WebUIContentsPreloadManager::Request().
  </summary>
  <token key="WebUIName" variants="TopChromeWebUIName"/>
</histogram>

<histogram name="WebUI.TopChrome.RequestToLCP{WebUIName}" units="ms"
    expires_after="2027-01-03">
  <owner>kerenzhu@chromium.org</owner>
  <owner>chrome-webui-for-features@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time elapsed from the initiation of a WebUI request to its
    largest contentful paint. This metric applies to the main frame documents of
    top-chrome WebUI pages, such as side-panel content. The request initiation
    is marked by the call to WebUIContentsPreloadManager::Request().
  </summary>
  <token key="WebUIName" variants="TopChromeWebUIName"/>
</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" enum="Boolean"
    expires_after="2025-06-08">
  <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="WrenchMenu.MenuAction" enum="WrenchMenuAction"
    expires_after="2027-01-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.TimeToAction{Action}" units="ms"
    expires_after="2027-01-10">
  <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=""/>
    <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=".ChromeWhatsNew"/>
    <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=".FindExtensions"/>
    <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=".OpenGlic"/>
    <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=".SafetyHubNotificationManageExtensions"/>
    <variant name=".SafetyHubNotificationOpenSafetyHub"/>
    <variant name=".SafetyHubNotificationPasswordCheck"/>
    <variant name=".SavePage"/>
    <variant name=".SeeDeviceTabs"/>
    <variant name=".SendToDevices"/>
    <variant name=".SetBrowserAsDefault"/>
    <variant name=".Settings"/>
    <variant name=".ShowAddresses"/>
    <variant name=".ShowBookmarkBar"/>
    <variant name=".ShowBookmarkMgr"/>
    <variant name=".ShowBookmarkSidePanel"/>
    <variant name=".ShowChromeLabs"/>
    <variant name=".ShowContactInfo"/>
    <variant name=".ShowCustomizeChromeSidePanel"/>
    <variant name=".ShowDownloads"/>
    <variant name=".ShowHistory"/>
    <variant name=".ShowHistoryClustersSidePanel"/>
    <variant name=".ShowIdentityDocs"/>
    <variant name=".ShowKaleidoscope"/>
    <variant name=".ShowLensOverlay"/>
    <variant name=".ShowPasswordManager"/>
    <variant name=".ShowPaymentMethods"/>
    <variant name=".ShowPerformanceSettings"/>
    <variant name=".ShowReadingModeSidePanel"/>
    <variant name=".ShowSavedTabGroups"/>
    <variant name=".ShowSignin"/>
    <variant name=".ShowSigninWhenPaused"/>
    <variant name=".ShowSyncSettings"/>
    <variant name=".ShowTranslate"/>
    <variant name=".ShowTravel"/>
    <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>

</histograms>

</histogram-configuration>
