<!--
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 Omnibox 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="AimEligibilityBooleanFeature">
  <variant name="is_cobrowse_eligible" summary="is_cobrowse_eligible"/>
  <variant name="is_deep_search_eligible" summary="is_deep_search_eligible"/>
  <variant name="is_eligible" summary="is_eligible"/>
  <variant name="is_fusebox_eligible" summary="is_fusebox_eligible"/>
  <variant name="is_image_generation_eligible"
      summary="is_image_generation_eligible"/>
  <variant name="is_pdf_upload_eligible" summary="is_pdf_upload_eligible"/>
</variants>

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

<variants name="AimEligibilityRequestSource">
  <variant name="" summary="Aggregated across all request sources"/>
  <variant name=".AimUrlNavigation"
      summary="Requests triggered by AIM URL navigation"/>
  <variant name=".CookieChange" summary="Requests triggered by cookie changes"/>
  <variant name=".NetworkChange"
      summary="Requests triggered by network changes (expected at most once
               after startup)"/>
  <variant name=".OAuthFallbackCookieChange"
      summary="Requests triggered by cookie changes during OAuth fallback"/>
  <variant name=".PrimaryAccountChange"
      summary="Requests triggered by primary account changes"/>
  <variant name=".RefreshTokenError"
      summary="Requests triggered by refresh token errors"/>
  <variant name=".RefreshTokenRemoved"
      summary="Requests triggered by refresh token removals"/>
  <variant name=".RefreshTokenUpdated"
      summary="Requests triggered by refresh token updates"/>
  <variant name=".Startup" summary="Requests triggered on browser startup"/>
  <variant name=".User"
      summary="Requests triggered manually from the debug page"/>
</variants>

<!-- LINT.ThenChange(//components/omnibox/browser/aim_eligibility_service.h:RequestSource) -->

<variants name="AimEntrypointParty">
  <variant name=""
      summary="Unsliced; recorded for google and 3rd party AIM entrypoint."/>
  <variant name=".3p" summary="Recorded for 3rd party AIM entrypoint."/>
  <variant name=".google" summary="Recorded for google entrypoint."/>
</variants>

<variants name="ClipboardSuggestionType">
  <variant name="" summary="Aggregated across all clipboard suggestion types"/>
  <variant name=".IMAGE" summary="IMAGE from clipboard."/>
  <variant name=".TEXT" summary="Text from clipboard."/>
  <variant name=".URL" summary="URL from clipboard."/>
</variants>

<variants name="Completed">
  <variant name=""
      summary="This slice includes all inputs, both 'Completed' and
               'Interrupted'"/>
  <variant name=".Completed"
      summary="The 'Completed' slice only includes inputs that completed;
               i.e. the last async update completed without interruption by,
               e.g., closing the omnibox dropdown."/>
  <variant name=".Interrupted"
      summary="The 'Interrupted' slice only includes inputs that were
               interrupted; i.e. the last async update was interrupted by,
               e.g., closing the omnibox dropdown before completing. It can
               be misleading to interpret this slice, as neither an increase
               or decrease is necessarily good."/>
</variants>

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

<variants name="ComposeboxDragAndDropType">
  <variant name="" summary="All drag and drop types"/>
  <variant name=".Image" summary="Image drag and drop"/>
  <variant name=".PDF" summary="PDF drag and drop"/>
  <variant name=".RawFile" summary="Raw file drag and drop"/>
  <variant name=".Tab" summary="Tab drag and drop"/>
  <variant name=".Text" summary="Text drag and drop"/>
  <variant name=".Unknown" summary="Unknown drag and drop type"/>
</variants>

<!-- LINT.ThenChange(//ios/chrome/browser/composebox/shared/metrics/composebox_metrics_recorder.h:ComposeboxDragAndDropType, //tools/metrics/histograms/metadata/omnibox/enums.xml:ComposeboxDragAndDropType) -->

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

<variants name="ComposeboxEntrypoint">
  <variant name="" summary="Overall"/>
  <variant name=".Cobrowse" summary="Cobrowse entrypoint"/>
  <variant name=".NTPAIMButton" summary="NTP AIM button entrypoint"/>
  <variant name=".NTPFakebox" summary="NTP fakebox entrypoint"/>
  <variant name=".NTPPlusButton" summary="NTP plus button entrypoint"/>
  <variant name=".Other" summary="Other entrypoint (Omnibox)"/>
</variants>

<!-- LINT.ThenChange(//ios/chrome/browser/composebox/public/composebox_entrypoint.h:ComposeboxEntrypoint) -->

<variants name="CrossDeviceTabTarget">
  <variant name="Action"
      summary="action button (which opens chrome://history/syncedTabs)"/>
  <variant name="Match" summary="match row itself (which opens the tab URL)"/>
</variants>

<variants name="DsePreloadTriggerType">
  <variant name=".OnPress" summary="on-press trigger"/>
  <variant name=".OnSuggest" summary="on-suggest trigger"/>
</variants>

<variants name="FuseboxAttachmentButtonType">
  <variant name=".Camera" summary="Camera"/>
  <variant name=".Clipboard" summary="Clipboard"/>
  <variant name=".CurrentTab" summary="Current Tab button"/>
  <variant name=".Files" summary="File picker"/>
  <variant name=".Gallery" summary="Image picker"/>
  <variant name=".RecentTab" summary="Add Recent Tabs button"/>
  <variant name=".TabPicker" summary="Tab picker"/>
</variants>

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

<variants name="FuseboxAttachmentFileType">
  <variant name="" summary="All files"/>
  <variant name=".Audio" summary="Audio file"/>
  <variant name=".Image" summary="Image file"/>
  <variant name=".Pdf" summary="PDF file"/>
  <variant name=".Text" summary="Text file"/>
  <variant name=".Unknown" summary="Unknown file type"/>
  <variant name=".Video" summary="Video file"/>
</variants>

<!-- LINT.ThenChange(//chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/fusebox/FuseboxMetrics.java:getHistogramExtensionForMimeType) -->

<variants name="KeywordType">
  <variant name="" summary="aggregated across all keyword types"/>
  <variant name=".DefaultSearchEngineSetByPolicy"
      summary="Default Search keywords set by policy."/>
  <variant name=".DefaultSearchEngineSetByUser"
      summary="Default Search keywords set by user"/>
  <variant name=".Extension" summary="keywords created by an extension."/>
  <variant name=".FeaturedOverridableSiteSearchSetByPolicy"
      summary="featured SiteSearch keywords set by an enterprise admin
               through policy that users can override"/>
  <variant name=".FeaturedSearchAggregatorSetByPolicy"
      summary="featured EnterpriseSearchAggregator keywords set by an
               enterprise admin through policy"/>
  <variant name=".FeaturedSiteSearchSetByPolicy"
      summary="featured SiteSearch keywords set by an enterprise admin
               through policy that users cannot override"/>
  <variant name=".NonFeaturedOverridableSiteSearchSetByPolicy"
      summary="non-featured SiteSearch keywords set by an enterprise admin
               through policy that users can override"/>
  <variant name=".NonFeaturedSearchAggregatorSetByPolicy"
      summary="non-featured EnterpriseSearchAggregator keywords set by an
               enterprise admin through policy"/>
  <variant name=".NonFeaturedSiteSearchSetByPolicy"
      summary="non-featured SiteSearch keywords set by an enterprise admin
               through policy that users cannot override"/>
  <variant name=".NonSubstitutingSiteSearchSetByUser"
      summary="SiteSearch keywords set by the user that do not support
               replacement. (e.g. 'x.com')"/>
  <variant name=".Prepopulated" summary="prepopulated keywords"/>
  <variant name=".StarterPack" summary="starter pack keywords"/>
  <variant name=".SubstitutingSiteSearchSetByUser"
      summary="SiteSearch keywords set by the user that support replacement
               (e.g. 'x.com/q=%s')"/>
</variants>

<variants name="NavigationOrSuggestionPrefetch">
  <variant name="NavigationPrefetch"
      summary="Recorded for prefetches where Chrome is relatively confident
               an omnibox navigation is about to occur (i.e. the user
               selected a search suggestion). These prefetches allow Chrome
               to kickstart the request without waiting until before unload
               handlers or other navigation pre-processing mechanisms in
               Chrome."/>
  <variant name="SuggestionPrefetch"
      summary="Recorded for prefetches where an omnibox suggestion from the
               suggestion server recommends a prefetch of a suggestion
               results page."/>
</variants>

<variants name="OmniboxAutocompleteUpdateSlice">
  <variant name=""
      summary="This slice measures match changes for all updates, regardless
               of whether it or the previous update were asynchronous or
               synchronous. Logged exactly once per update; 0, 1, or multiple
               times per input. The count here will be the sum of the counts
               for the other 2 slices."/>
  <variant name=".Async"
      summary="This slice measures match changes between the last update for
               the current input, whether it be asynchronous or synchronous,
               and the current asynchronous, i.e. non-first, update of the
               current input. Logged exactly once per asynchronous update; 0,
               1, or multiple times per input."/>
  <variant name=".CrossInput"
      summary="This slice measures match changes between the last update for
               the previous input, whether it be asynchronous or synchronous,
               and the synchronous, i.e. first, update of the current input.
               Logged exactly once per synchronous update; at most once per
               input."/>
</variants>

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

<variants name="OmniboxModelMode">
  <variant name="GeminiFlashLatest" summary="Gemini Flash Latest model"/>
  <variant name="GeminiPreview" summary="Gemini Preview model"/>
  <variant name="GeminiPro" summary="Gemini Pro model"/>
  <variant name="GeminiProAutoroute" summary="Gemini Pro Autoroute model"/>
  <variant name="GeminiProLatest" summary="Gemini Pro Latest model"/>
  <variant name="GeminiProNoGenUi" summary="Gemini Pro No-Gen-UI model"/>
  <variant name="GeminiRegular" summary="Gemini Regular model"/>
  <variant name="Unspecified" summary="Unspecified model"/>
</variants>

<!-- LINT.ThenChange(//components/omnibox/common/omnibox_metrics_utils.cc:ModelMode, //third_party/omnibox_proto/model_mode.proto:ModelMode) -->

<!--
  IMPORTANT
  This list MUST be kept consistent with the list of active page classifications in OmniboxEventProto.
  IMPORTANT
-->

<variants name="OmniboxPageContext">
  <variant name="ANDROID_HUB" summary="Searchbox in the Android Hub"/>
  <variant name="ANDROID_SEARCH_WIDGET" summary="Android search widget"/>
  <variant name="ANDROID_SHORTCUTS_WIDGET" summary="Android Shortcuts widget"/>
  <variant name="ANDROID_TAB_SEARCH_OVERLAY"
      summary="Searchbox in the Android Tab Search overlay"/>
  <variant name="APP_HOME" summary="home screen"/>
  <variant name="APP_MAPS" summary="maps app"/>
  <variant name="APP_SEARCH" summary="search app"/>
  <variant name="BLANK" summary="about:blank"/>
  <variant name="CHROMEOS_APP_LIST" summary="ChromeOS app list"/>
  <variant name="CO_BROWSING_COMPOSEBOX" summary="Co-browsing composebox"/>
  <variant name="COMPOSEBOX_EVERYWHERE" summary="Composebox everywhere"/>
  <variant name="CONTEXTUAL_SEARCHBOX" summary="Contextual searchbox"/>
  <variant name="HOME_PAGE" summary="the user's home page"/>
  <variant name="INSTANT_NTP_WITH_OMNIBOX_AS_STARTING_FOCUS"
      summary="new tab page with omnibox as starting focus"/>
  <variant name="INVALID_SPEC" summary="invalid spec; shouldn't happen"/>
  <variant name="JOURNEYS"
      summary="Journeys landing page, side Panel or the NTP"/>
  <variant name="JUMP_START" summary="JumpStart Omnibox (Android)"/>
  <variant name="LENS_SIDE_PANEL_COMPOSEBOX"
      summary="Lens side panel composebox"/>
  <variant name="LENS_SIDE_PANEL_SEARCHBOX"
      summary="Lens side panel searchbox"/>
  <variant name="NTP"
      summary="extension-replaced new tab page OR obsolete new tab page"/>
  <variant name="NTP_ACTION_CHIPS" summary="New Tab Page Action Chips"/>
  <variant name="NTP_COMPOSEBOX"
      summary="New Tab Page with focus in the composebox"/>
  <variant name="NTP_COMPOSEBOX_PREFETCH"
      summary="New Tab Page composebox zero-prefix suggestion prefetch"/>
  <variant name="NTP_OMNIBOX_COMPOSEBOX"
      summary="Omnibox composebox in the NTP"/>
  <variant name="NTP_REALBOX"
      summary="New Tab Page with realbox as starting focus"/>
  <variant name="NTP_ZPS_PREFETCH"
      summary="new tab page zero-prefix suggestion prefetch"/>
  <variant name="OBSOLETE_INSTANT_NTP"
      summary="obsolete: instant new tab page"/>
  <variant name="OBSOLETE_INSTANT_NTP_WITH_FAKEBOX_AS_STARTING_FOCUS"
      summary="new tab page with fakebox as starting focus, replaced with
               NTP_REALBOX on desktop starting in Aug 2020, replaced with
               INSTANT_NTP_WITH_OMNIBOX_AS_STARTING_FOCUS on Android starting
               in Aug 2024. Shouldn't be reported on any platform as of M129."/>
  <variant name="OBSOLETE_SEARCH_RESULT_PAGE_DOING_SEARCH_TERM_REPLACEMENT"
      summary="obsolete: search results page with search term replacement"/>
  <variant name="OMNIBOX_EVERYWHERE" summary="omnibox everywhere"/>
  <variant name="OTHER"
      summary="other (typically an arbitrary URL, not a search results page,
               new tab page, etc.)"/>
  <variant name="OTHER_OMNIBOX_COMPOSEBOX" summary="Omnibox composebox on Web"/>
  <variant name="OTHER_ON_CCT"
      summary="other (typically an arbitrary URL, not a search results page,
               new tab page, etc.) on CCT"/>
  <variant name="OTHER_ZPS_PREFETCH"
      summary="non-NTP and non-SRP zero-prefix suggestion prefetch"/>
  <variant name="SEARCH_BUTTON_AS_STARTING_FOCUS"
      summary="interaction starting with the search button"/>
  <variant name="SEARCH_RESULT_PAGE_NO_SEARCH_TERM_REPLACEMENT"
      summary="search results page without search term replacement"/>
  <variant name="SEARCH_RESULT_PAGE_ON_CCT"
      summary="search results page on CCT"/>
  <variant name="SEARCH_SIDE_PANEL_SEARCHBOX"
      summary="Search side panel searchbox"/>
  <variant name="SRP_OMNIBOX_COMPOSEBOX"
      summary="Omnibox composebox in the SRP"/>
  <variant name="SRP_ZPS_PREFETCH"
      summary="Search Results Page zero-prefix suggestion prefetch"/>
</variants>

<variants name="OmniboxPopupWebUIType">
  <variant name="Aim" summary="Aim WebUI"/>
  <variant name="FullWebUI" summary="Full WebUI"/>
  <variant name="WebUI" summary="Classic WebUI"/>
</variants>

<variants name="OmniboxProviders">
<!--
Keep consistent with active providers. Doesn't need to include every provider in
`AutocompleteProvider::Type`, but should include every provider in
`AutocompleteProvider::TypeToString()`.
-->

  <variant name="Bookmark"/>
  <variant name="Builtin"/>
  <variant name="Calculator"/>
  <variant name="Clipboard"/>
  <variant name="ContextualSearch"/>
  <variant name="Document"/>
  <variant name="EnterpriseSearchAggregator"/>
  <variant name="FeaturedSearch"/>
  <variant name="HistoryCluster"/>
  <variant name="HistoryEmbeddings"/>
  <variant name="HistoryFuzzy"/>
  <variant name="HistoryQuick"/>
  <variant name="HistoryURL"/>
  <variant name="Keyword"/>
  <variant name="LocalHistoryZeroSuggest"/>
  <variant name="MostVisitedSites"/>
  <variant name="OnDeviceHead"/>
  <variant name="OpenTab"/>
  <variant name="QueryTile"/>
  <variant name="RecentlyClosedTabs"/>
  <variant name="Search"/>
  <variant name="Shortcuts"/>
  <variant name="UnscopedExtension"/>
  <variant name="VerbatimMatch"/>
  <variant name="VoiceSuggest"/>
  <variant name="ZeroSuggest"/>
</variants>

<variants name="OmniboxSummarizedResultType">
  <variant name="OTHER" summary="other result type (neither Search nor URL)"/>
  <variant name="SEARCH" summary="search result type"/>
  <variant name="URL" summary="URL result type"/>
</variants>

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

<variants name="OmniboxToolMode">
  <variant name="AgentTask" summary="Agent Task tool"/>
  <variant name="Aim" summary="AIM tool"/>
  <variant name="AimGenPrompt" summary="AIM Generated Prompt tool"/>
  <variant name="Canvas" summary="Canvas tool"/>
  <variant name="DeepBrowse" summary="Deep Browse tool"/>
  <variant name="DeepSearch" summary="Deep Search tool"/>
  <variant name="DisableSuggest" summary="Disable Suggest tool"/>
  <variant name="GeminiPro" summary="Gemini Pro tool"/>
  <variant name="ImageGen" summary="Image Generation tool"/>
  <variant name="ImageGenSelfie" summary="Image Generation Selfie tool"/>
  <variant name="ImageGenUpload" summary="Image Generation Upload tool"/>
  <variant name="Unspecified" summary="Unspecified tool"/>
</variants>

<!-- LINT.ThenChange(//components/omnibox/common/omnibox_metrics_utils.cc:ToolMode, //third_party/omnibox_proto/tool_mode.proto:ToolMode) -->

<variants name="OmniboxZeroPrefixState">
  <variant name="TypedSuggest" summary="typed suggest"/>
  <variant name="ZeroSuggest" summary="zero-prefix suggest"/>
</variants>

<variants name="PrefetchFallbackOrInitial">
  <variant name="Fallback"
      summary="Recorded for the fallback request after the prefetch fails."/>
  <variant name="Initial" summary="Recorded for the initial prefetch request."/>
</variants>

<variants name="PreloadType">
  <variant name=".Prefetch" summary="prefetch"/>
  <variant name=".Prerender" summary="prerender"/>
</variants>

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

<variants name="RemoteRequestSuccess">
  <variant name="" summary="aggregated across all response codes"/>
  <variant name=".Failed" summary="not HTTP 200 OK response codes"/>
  <variant name=".Successful" summary="HTTP 200 OK response code"/>
</variants>

<!-- LINT.ThenChange(//components/omnibox/browser/remote_suggestions_service.cc:ResponseCodeToSuccessString) -->

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

<variants name="RemoteRequestType">
  <variant name="" summary="aggregated across all types"/>
  <variant name=".Deletion" summary="suggestion deletion"/>
  <variant name=".DocumentSuggest" summary="document suggestion"/>
  <variant name=".EnterpriseSearchAggregatorSuggest"
      summary="enterprise search aggregator suggestion"/>
  <variant name=".Images" summary="search suggestion for images"/>
  <variant name=".Search" summary="search suggestion"/>
  <variant name=".SearchWarmup" summary="search suggestion warm-up"/>
  <variant name=".ZeroSuggest" summary="zero-prefix suggestion"/>
  <variant name=".ZeroSuggestPrefetch"
      summary="zero-prefix suggestion prefetching"/>
</variants>

<!-- LINT.ThenChange(//components/omnibox/browser/remote_suggestions_service.cc:RequestTypeToString) -->

<variants name="SearchPrefetch">
  <variant name="SearchPrefetch"
      summary="Search Prefetch issues results page requests in response to
               either the suggestion server or the Omnibox client being
               confident that the user will navigate to a specific search
               suggestion. These requests are then served instantly to the
               user when the user navigates to a search suggestion with the
               same search terms. These requests can have mismatching query
               params as the Omnibox client updates the search navigation URL
               as the user types more into the Omnibox. The suggestion server
               issues prefetch hints along with the suggestion request.
               Additionally, the Omnibox client decides to prefetch when the
               user has chosen (or likely chosen) a search suggestion to
               initiate the search suggestion navigation earlier."/>
</variants>

<histogram
    name="MobileOmnibox.PressedClipboardSuggestionAge{ClipboardSuggestionType}"
    units="ms" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    When a user presses an omnibox suggestion based on the content of the
    clipboard, this histograms records how long ago Chrome detected a change in
    the clipboard.

    Intended to be compared to Omnibox.ClipboardSuggestionShownAge.

    If Chrome never detected a change to the clipboard, no clipboard suggestion
    is shown, meaning this histogram will never be emitted to.

    {ClipboardSuggestionType}
  </summary>
</histogram>

<histogram name="Omnibox.AcceptedKeywordSuggestion"
    enum="OmniboxEnteredKeywordMode2" expires_after="2027-02-07">
  <owner>yoangela@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records number of accepted keyword searches enumerated by how the user
    entered the keyword mode. See also Omnibox.EnteredKeywordMode2 for the total
    number of times a user enters keyword mode whether or not the keyword
    suggestion was accepted. Note that this only records when a user accepts a
    search suggestion for the keyword search engine and does not record for URL
    suggestions even if the user is in keyword mode.
  </summary>
</histogram>

<histogram name="Omnibox.ActionInSuggest.UsageByType.{Type}"
    enum="BooleanUsage" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    For action of type &quot;{Type}&quot;, captures whether the user interacted
    with this action to complete the interaction with the omnibox.

    The histogram is captured only if the action &quot;{Type}&quot; was
    presented to the user when the interaction with the omnibox completed. The
    sum of &quot;Used&quot; and &quot;Not Used&quot; indicates the sum of all
    impressions of a given action.

    Action in Suggest are the Omnibox Action chips attached to a search
    suggestion.

    Starting with Chrome/Android M142 this histogram is recorded whenever the
    Omnibox is used to navigate somewhere, closely matching how other Omnibox
    histograms are recorded. Before M142 this histogram would be recorded any
    time the Omnibox interaction has completed, whether the user initiated
    navigation or not.
  </summary>
  <token key="Type">
    <variant name="AIM"/>
    <variant name="Call"/>
    <variant name="Directions"/>
    <variant name="Lens"/>
    <variant name="Reviews"/>
    <variant name="TabSwitch"/>
  </token>
</histogram>

<histogram name="Omnibox.ActionInSuggest.{ShownOrUsed}"
    enum="ActionInSuggestType" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Counts how often Omnibox Action in Suggest are {ShownOrUsed} and records the
    type (Omnibox Action in Suggest Type) of every {ShownOrUsed} action.

    Recorded once at the end of the interaction with the Omnibox Suggestions for
    every Action presented to the user. Not recorded for Suggestions that are
    annotated with Action in Suggest, where the Action in Suggest row was not
    shown to the user.

    Action in Suggest are the Omnibox Action chips attached to a search
    suggestion.

    Starting with Chrome/Android M142 this histogram is recorded whenever the
    Omnibox is used to navigate somewhere, closely matching how other Omnibox
    histograms are recorded. Before M142 this histogram would be recorded any
    time the Omnibox interaction has completed, whether the user initiated
    navigation or not.
  </summary>
  <token key="ShownOrUsed">
    <variant name="Shown" summary="shown"/>
    <variant name="Used" summary="used"/>
  </token>
</histogram>

<histogram name="Omnibox.AimEligibility.CountryCodeEmpty" enum="Boolean"
    expires_after="2027-02-14">
  <owner>mahmadi@chromium.org</owner>
  <owner>mercerd@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Logs whether the country code returned by variations service was empty.
    Logged every time the country code is requested by the AIM eligibility
    service.
  </summary>
</histogram>

<histogram
    name="Omnibox.AimEligibility.EligibilityRequestDebounced{RequestSource}"
    enum="Boolean" expires_after="2027-02-07">
  <owner>mahmadi@chromium.org</owner>
  <owner>avivkiss@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The AIM Eligibility service makes HTTP requests to determine which AIM
    features the user is eligible for. This metric logs whether the request was
    debounced (i.e., a new request is scheduled while a timer for a previous
    request is already running), sliced by request source. This metric is logged
    every time a request is attempted.
  </summary>
  <token key="RequestSource" variants="AimEligibilityRequestSource"/>
</histogram>

<histogram
    name="Omnibox.AimEligibility.EligibilityRequestOAuthFallback{RequestSource}"
    enum="Boolean" expires_after="2026-12-06">
  <owner>mahmadi@chromium.org</owner>
  <owner>avivkiss@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The AIM Eligibility service makes HTTP requests to determine which AIM
    features the user is eligible for. This metric logs whether the request fell
    back to cookies because an OAuth token was unavailable, sliced by request
    source. The metric is logged when a request is attempted and OAuth is not
    available.
  </summary>
  <token key="RequestSource" variants="AimEligibilityRequestSource"/>
</histogram>

<histogram
    name="Omnibox.AimEligibility.EligibilityRequestOAuthTokenFetchStatus{RequestSource}"
    enum="GoogleServiceAuthError" expires_after="2026-08-05">
  <owner>mahmadi@chromium.org</owner>
  <owner>avivkiss@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The AIM Eligibility service makes HTTP requests to determine which AIM
    features the user is eligible for. This metric logs the status of the OAuth
    token fetch, sliced by request source. This metric is logged every time the
    OAuth token is fetched (happens whenever a request is made).
  </summary>
  <token key="RequestSource" variants="AimEligibilityRequestSource"/>
</histogram>

<histogram
    name="Omnibox.AimEligibility.EligibilityRequestOAuthTokenProvided{RequestSource}"
    enum="Boolean" expires_after="2026-12-06">
  <owner>mahmadi@chromium.org</owner>
  <owner>avivkiss@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The AIM Eligibility service makes HTTP requests to determine which AIM
    features the user is eligible for. This metric logs whether an OAuth token
    was successfully provided for the request, sliced by request source. This
    metric is logged every time the OAuth token is fetched (happens whenever a
    request is made).
  </summary>
  <token key="RequestSource" variants="AimEligibilityRequestSource"/>
</histogram>

<histogram
    name="Omnibox.AimEligibility.EligibilityRequestPrimaryAccountExists{RequestSource}"
    enum="Boolean" expires_after="2027-02-07">
  <owner>mahmadi@chromium.org</owner>
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The AIM Eligibility service makes HTTP requests to determine which AIM
    features the user is eligible for. The requests are triggered on profile
    startup, when the primary account changes, or whenever an AIM interception
    may happen.

    This metric logs whether the primary account exists when the request was
    sent, sliced by request source.
  </summary>
  <token key="RequestSource" variants="AimEligibilityRequestSource"/>
</histogram>

<histogram
    name="Omnibox.AimEligibility.EligibilityRequestPrimaryAccountInCookieJar{RequestSource}"
    enum="Boolean" expires_after="2026-12-06">
  <owner>mahmadi@chromium.org</owner>
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The AIM Eligibility service makes HTTP requests to determine which AIM
    features the user is eligible for. The requests are triggered on profile
    startup, when the primary account changes, or whenever an AIM interception
    may happen.

    This metric logs whether the primary account was found in the cookie jar
    when the request was sent, sliced by request source. Logged only if the
    primary account exists.
  </summary>
  <token key="RequestSource" variants="AimEligibilityRequestSource"/>
</histogram>

<histogram
    name="Omnibox.AimEligibility.EligibilityRequestPrimaryAccountIndex{RequestSource}"
    units="index" expires_after="2026-12-06">
  <owner>mahmadi@chromium.org</owner>
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The AIM Eligibility service makes HTTP requests to determine which AIM
    features the user is eligible for. The requests are triggered on profile
    startup, when the primary account changes, or whenever an AIM interception
    may happen.

    This metric logs the index of the primary account in the cookie jar when the
    request was sent, sliced by request source. Logged only if the primary
    account exists and was found in the cookie jar.
  </summary>
  <token key="RequestSource" variants="AimEligibilityRequestSource"/>
</histogram>

<histogram name="Omnibox.AimEligibility.EligibilityRequestRetries.{Status}"
    units="count" expires_after="2026-11-12">
  <owner>mahmadi@chromium.org</owner>
  <owner>avivkiss@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The AIM Eligibility service makes HTTP requests to determine which AIM
    features the user is eligible for. This metric logs the number of retries
    for failed requests. Retries are triggered on network changes or DNS
    resolution failures. A count of 0 indicates that the request succeeded or
    failed on the first attempt (and wasn't within policy for a retry). This
    metric is logged only when the request completes.
  </summary>
  <token key="Status">
    <variant name="Failed" summary="failed"/>
    <variant name="Succeeded" summary="succeeded"/>
  </token>
</histogram>

<histogram
    name="Omnibox.AimEligibility.EligibilityRequestStatus{RequestSource}"
    enum="AimEligibilityRequestStatus" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The AIM Eligibility service makes HTTP requests to determine which AIM
    features the user is eligible for. The requests are triggered on profile
    startup, when the primary account changes, or whenever an AIM interception
    may happen.

    This metric logs the status of the request, sliced by request source.
  </summary>
  <token key="RequestSource" variants="AimEligibilityRequestSource"/>
</histogram>

<histogram
    name="Omnibox.AimEligibility.EligibilityResponseAccountMismatch{RequestSource}"
    enum="Boolean" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>avivkiss@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The AIM Eligibility service makes HTTP requests to determine which AIM
    features the user is eligible for. The requests are triggered on profile
    startup, when the primary account changes, or whenever an AIM interception
    may happen.

    This metric logs whether the account changed in the time between when the
    eligibility request was sent and when the response was received. This is
    logged whenever a response is received.
  </summary>
  <token key="RequestSource" variants="AimEligibilityRequestSource"/>
</histogram>

<histogram name="Omnibox.AimEligibility.EligibilityResponseChange.{Feature}"
    enum="Boolean" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The AIM Eligibility service makes HTTP requests to determine which AIM
    features the user is eligible for. The requests are triggered on profile
    startup, when the primary account changes, or whenever an AIM interception
    may happen.

    This metric is logged only when the server response changes compared to the
    previous value (e.g., the value of the &quot;{Feature}&quot; field differs
    from the last logged response). For the &quot;session_index&quot; variant,
    this records whether the selected account index changed. If the response
    fails (e.g. server is down or response is poorly formatted), this metric
    will not be logged.
  </summary>
  <token key="Feature">
    <variant name="is_cobrowse_eligible" summary="is_cobrowse_eligible"/>
    <variant name="is_deep_search_eligible" summary="is_deep_search_eligible"/>
    <variant name="is_eligible" summary="is_eligible"/>
    <variant name="is_fusebox_eligible" summary="is_fusebox_eligible"/>
    <variant name="is_image_generation_eligible"
        summary="is_image_generation_eligible"/>
    <variant name="is_pdf_upload_eligible" summary="is_pdf_upload_eligible"/>
    <variant name="session_index" summary="session_index"/>
  </token>
</histogram>

<histogram name="Omnibox.AimEligibility.EligibilityResponseCode{RequestSource}"
    enum="HttpResponseCode" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The AIM Eligibility service makes HTTP requests to determine which AIM
    features the user is eligible for. The requests are triggered on profile
    startup, when the primary account changes, or whenever an AIM interception
    may happen.

    This metric logs the HTTP response code, sliced by request source.
  </summary>
  <token key="RequestSource" variants="AimEligibilityRequestSource"/>
</histogram>

<histogram name="Omnibox.AimEligibility.EligibilityResponseSource"
    enum="AimEligibilityResponseSource" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The AIM Eligibility service makes HTTP requests to determine which AIM
    features the user is eligible for. The requests are triggered on profile
    startup, when the primary account changes, or whenever an AIM interception
    may happen.

    This metric logs the source of the eligibility response when the service is
    queried by its clients for the server eligibility status. It helps determine
    how often the clients are receiving a fresh response from the server, a
    stale response stored in the prefs, or the default value.
  </summary>
</histogram>

<histogram
    name="Omnibox.AimEligibility.EligibilityResponse{RequestSource}.session_index"
    units="index" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The AIM Eligibility service makes HTTP requests to determine which AIM
    features the user is eligible for. The requests are triggered on profile
    startup, when the primary account changes, or whenever an AIM interception
    may happen.

    This metric logs the selected session index (index of the account in the
    cookie jar selected by the server for authentication), sliced by request
    source. If the field is missing or false, this metric will log false. If the
    response fails (e.g. server is down or response is poorly formatted), this
    metric will not be logged.
  </summary>
  <token key="RequestSource" variants="AimEligibilityRequestSource"/>
</histogram>

<histogram
    name="Omnibox.AimEligibility.EligibilityResponse{RequestSource}.{Feature}"
    enum="Boolean" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The AIM Eligibility service makes HTTP requests to determine which AIM
    features the user is eligible for. The requests are triggered on profile
    startup, when the primary account changes, or whenever an AIM interception
    may happen.

    This metric logs whether the response contained a &quot;{Feature}&quot;
    field set to true, sliced by request source. If the field is missing or
    false, this metric will log false. If the response fails (e.g. server is
    down or response is poorly formatted), this metric will not be logged.
  </summary>
  <token key="RequestSource" variants="AimEligibilityRequestSource"/>
  <token key="Feature" variants="AimEligibilityBooleanFeature"/>
</histogram>

<histogram
    name="Omnibox.AimEntrypoint.Activated.UserTextPresent.ByPageContext.{OmniboxPageContext}{AimEntrypointParty}"
    enum="Boolean" expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Recorded when the user activates the AIM entrypoint (page action) in the
    Omnibox. More specifically, this metric records whether the user had text in
    the Omnibox at the time they activated the AIM entrypoint.

    Activation can be achieved via keyboard events (e.g. hitting [ENTER] or
    [SPACE] while the page action is focused), via mouse/gesture events (e.g.
    clicking or tapping on the page action), or by adding context (e.g. an open
    tab).

    Sliced by {OmniboxPageContext} which represents the page classification at
    the time of AIM page action activation.

    {AimEntrypointParty}
  </summary>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
  <token key="AimEntrypointParty" variants="AimEntrypointParty"/>
</histogram>

<histogram
    name="Omnibox.AimEntrypoint.Activated.UserTextPresent{AimEntrypointParty}"
    enum="Boolean" expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Recorded when the user activates the AIM entrypoint (page action) in the
    Omnibox. More specifically, this metric records whether the user had text in
    the Omnibox at the time they activated the AIM entrypoint.

    Activation can be achieved via keyboard events (e.g. hitting [ENTER] or
    [SPACE] while the page action is focused), via mouse/gesture events (e.g.
    clicking or tapping on the page action), or by adding context (e.g. an open
    tab).

    {AimEntrypointParty}
  </summary>
  <token key="AimEntrypointParty" variants="AimEntrypointParty"/>
</histogram>

<histogram
    name="Omnibox.AimEntrypoint.Activated.ViaKeyboard.ByPageContext.{OmniboxPageContext}{AimEntrypointParty}"
    enum="Boolean" expires_after="2026-11-12">
  <owner>khalidpeer@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Recorded when the user activates the AIM entrypoint (page action) in the
    Omnibox.

    This metric records `true` when the user activates the entrypoint via
    keyboard (e.g. hitting [ENTER] or [SPACE]) and records `false` when the user
    activates the entrypoint via mouse/gesture events (e.g. clicking or tapping
    on the page action) or by adding context (e.g. an open tab).

    Sliced by {OmniboxPageContext} which represents the page classification at
    the time of AIM page action activation.

    {AimEntrypointParty}
  </summary>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
  <token key="AimEntrypointParty" variants="AimEntrypointParty"/>
</histogram>

<histogram
    name="Omnibox.AimEntrypoint.Activated.ViaKeyboard{AimEntrypointParty}"
    enum="Boolean" expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Recorded when the user activates the AIM entrypoint (page action) in the
    Omnibox.

    This metric records `true` when the user activates the entrypoint via
    keyboard (e.g. hitting [ENTER] or [SPACE]) and records `false` when the user
    activates the entrypoint via mouse/gesture events (e.g. clicking or tapping
    on the page action) or by adding context (e.g. an open tab).

    {AimEntrypointParty}
  </summary>
  <token key="AimEntrypointParty" variants="AimEntrypointParty"/>
</histogram>

<histogram
    name="Omnibox.AimEntrypoint.Shown.ByPageContext.{OmniboxPageContext}{AimEntrypointParty}"
    enum="Boolean" expires_after="2027-01-24">
  <owner>khalidpeer@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Recorded whether the AIM entrypoint (page action) was shown at least once
    during an Omnibox session. This is recorded once per Omnibox navigation or
    AIM entrypoint activation. The entrypoint will only be shown if the user is
    eligible for AIM functionality.

    Showing the AIM entrypoint on focus only won't log true for navigations; it
    must be shown as the user is typing in order to log true. Showing the AIM
    entrypoint on focus only and activating the entrypoint will log true.

    Sliced by {OmniboxPageContext} which represents the page classification when
    the AIM page action was shown to the user.

    {AimEntrypointParty}
  </summary>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
  <token key="AimEntrypointParty" variants="AimEntrypointParty"/>
</histogram>

<histogram name="Omnibox.AimEntrypoint.Shown{AimEntrypointParty}"
    enum="Boolean" expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Recorded whether the AIM entrypoint (page action) was shown at least once
    during an Omnibox session. This is recorded once per Omnibox navigation or
    AIM entrypoint activation. The entrypoint will only be shown if the user is
    eligible for AIM functionality.

    Showing the AIM entrypoint on focus only won't log true for navigations; it
    must be shown as the user is typing in order to log true. Showing the AIM
    entrypoint on focus only and activating the entrypoint will log true.

    {AimEntrypointParty}
  </summary>
  <token key="AimEntrypointParty" variants="AimEntrypointParty"/>
</histogram>

<histogram name="Omnibox.AiModePageAction.IconSource"
    enum="AiModePageActionIconSource" expires_after="2027-06-01">
  <owner>manukh@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    The source of the icon for the AI mode page action. Logged exactly once when
    the icon is updated or hidden. When shown, logs where the icon was sourced
    from. Logged when the page action is explicitly hidden. Logged when the page
    action is requested to be shown, but the icon fails to load, and the page
    action is therefore hidden.

    Can be logged multiple times if the page action is shown/hidden multiple
    times, even if caused by a single user action. E.g., focusing the omnibox on
    the NTP will trigger the show-page-action logic 5 times, and will log this
    histogram 5 times. This makes this histogram pretty difficult to interpret
    since the 1st show may log `kNetworkFetch` while the next 4 shows may log
    `kMemoryFaviconCache`, giving a false impression that most times the icon
    was cached.

    When the page action is shown, it'll attempt to update its icon. If google
    is the DSE, it will use a built-in vector icon. Else if the 3rd party's
    favicon is in the omnibox's in-memory favicon cache, it will use that cached
    icon. Else if the favicon is in the on-disk DB favicon cache, it will use
    that cached icon. Else if a network request to fetch the icon succeeds, it
    will use that fetched icon. Else it will hide the page action. Each of these
    cases will log a corresponding value. Exactly 1 of these will be logged when
    the page action is shown or hidden.
  </summary>
</histogram>

<histogram name="Omnibox.AnswerParseSuccess" enum="BooleanSuccess"
    expires_after="2027-01-31">
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    For each answer received in suggest responses, the number that are
    well-formed and contain all the required elements.
  </summary>
</histogram>

<histogram name="Omnibox.AnswerParseType" enum="SuggestionAnswerType"
    expires_after="2027-02-07">
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of times each omnibox suggestion answer type (e.g., weather,
    sports score) was received and parsed successfully. Can be normalized with
    the count of emits to Omnibox.SuggestRequest.Success.GoogleResponseTime,
    which counts all successful suggest responses from Google, not just those
    with answers attached. Note that GoogleResponseTime is technically off given
    that it will still count cases where we fail to extract, deserialize, or
    parse the response. But these cases are rare to non-existent.
  </summary>
</histogram>

<histogram
    name="Omnibox.AsyncAutocompletionTime2.Provider.{Provider}{Completed}"
    units="ms" expires_after="2027-02-07">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    When the user focuses or types into the omnibox, the dropdown results can be
    updated multiple times per input (i.e. when focused, per char typed,
    backspace, etc).

    Specifically, the set of events that trigger dropdown updates are:

    - synchronous suggestions

    - asynchronous suggestions. Can trigger multiple times per input. These are
    often generated on different threads.

    - expiring copied matches

    - interruptions e.g. additional user input changes or closing the dropdown

    A sample flow looks like:

    1) User types a character.

    2) 10ms later, update results with synchronous suggestions.

    3) 50ms later, update results with some asynchronous suggestions.

    4) 50ms later, update results with more asynchronous suggestions.

    5) 400ms later, update results by removing copied matches from the previous
    input.

    6) 50 later, update results with the last batch of asynchronous suggestions.

    The 'Provider.*' slices measure the time between the input change and the
    last async update of that provider is done or interrupted. Includes async
    updates that have no user visible change (i.e. that do not produce async
    matches or produce only async matches that get deduped, culled, or are the
    same as the existing match in its position). Only logged for asynchronous
    providers. Emitted exactly once per input per asynchronous provider;
    additionally emits to exactly one of the 'Completed' and 'Interrupted'
    slices per input per asynchronous provider.

    {Completed}
  </summary>
  <token key="Provider" variants="OmniboxProviders"/>
  <token key="Completed" variants="Completed"/>
</histogram>

<histogram name="Omnibox.AsyncAutocompletionTime2.{Change}{Completed}"
    units="ms" expires_after="2027-01-31">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    When the user focuses or types into the omnibox, the dropdown results can be
    updated multiple times per input (i.e. when focused, per char typed,
    backspace, etc).

    Specifically, the set of events that trigger dropdown updates are:

    - synchronous suggestions

    - asynchronous suggestions. Can trigger multiple times per input. These are
    often generated on different threads.

    - expiring copied matches

    - interruptions e.g. additional user input changes or closing the dropdown

    A sample flow looks like:

    1) User types a character.

    2) 10ms later, update results with synchronous suggestions.

    3) 50ms later, update results with some asynchronous suggestions.

    4) 50ms later, update results with more asynchronous suggestions.

    5) 400ms later, update results by removing copied matches from the previous
    input.

    6) 50 later, update results with the last batch of asynchronous suggestions.

    {Change}

    {Completed}
  </summary>
  <token key="Change">
    <variant name="Done"
        summary="The 'Done' slice measures the time between input change and
                 the last async update is done or interrupted. Includes async
                 updates that have no user visible change (i.e. that do not
                 produce async matches or produce only async matches that get
                 deduped, culled, or are the same as the existing match in
                 its position). Emitted exactly once per input; additionally
                 emits to exactly one of the 'Completed' and 'Interrupted'
                 slices per input."/>
    <variant name="LastChange"
        summary="The 'LastChange' slice measures the time between input
                 change and the last async update that made at least 1 change
                 to the results. Updates that produce only async matches that
                 get deduped, culled, or are the same as the existing match
                 in its position are not included. Emitted exactly once per
                 input; additionally emits to exactly one of the 'Completed'
                 and 'Interrupted' slices per input."/>
    <variant name="LastDefaultChange"
        summary="The 'LastDefaultChange' slice measures the time between
                 input change and the last async update that changed the
                 default suggestion. Updates that produce an async default
                 match that is the same as the existing default match are not
                 included. Emitted exactly once per input; additionally emits
                 to exactly one of the 'Completed' and 'Interrupted' slices
                 per input."/>
  </token>
  <token key="Completed" variants="Completed"/>
</histogram>

<histogram name="Omnibox.AutocompletionTime.UpdateResult{Slice}"
    units="microseconds" expires_after="2026-04-12">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The time `AutocompleteController::UpdateResult()` took.

    That method is invoked, and this histogram is recorded: a) Once for the sync
    autocomplete update that occurs when the omnibox input changes (e.g. the
    user types a character, pastes text, focuses the omnibox, etc). b) Once for
    each async autocomplete update that occurs asyncly after the omnibox input
    changes and the various async providers complete. Usually occurs up to 3
    times per input change. But can be less if the updates are interrupted (e.g.
    the popup is closed or input changed again) or include no new suggestions.
    c) Once when copied matches from the previous autocomplete pass expire. This
    happens at most once per input change, but may not occur if all providers
    complete or the input changes prior to the expiration.

    Because this encompasses both sync and async omnibox updates, and the number
    of async updates per sync update is not fixed, it's not a good
    representative of how a feature effects user experienced latency. E.g., a
    feature that makes users type slower will bias this metric towards async
    updates. Besides, this is only a small segment of the user experienced
    latency. This is only intended to measure changes in the actual
    implementation of `UpdateResult()`.

    {Slice}

    This metric uses SCOPED_UMA_HISTOGRAM_TIMER_MICROS so clients without
    high-resolution clocks will either a) be dropped, b) report 0 for very short
    times, or c) be recorded as expected (depending on which comments you
    believe ¯\_(ツ)_/¯).
  </summary>
  <token key="Slice">
    <variant name=""/>
    <variant name=".DeduplicateMatches"
        summary="The '.DeduplicateMatches' slice measures the time
                 `AutocompleteResult::DeduplicateMatches()` took. When ML
                 ranking is enabled, this can include async calls that aren't
                 included in the unsliced metric. Otherwise, it's a subset of
                 both the unsliced metric and the sliced '.SortAndCull'
                 metric and is called exactly once per `SortAndCull()` call."/>
    <variant name=".SortAndCull"
        summary="The '.SortAndCull' slice measures the time
                 `AutocompleteResult::SortAndCull()` took. Besides being
                 called from `AutocompleteController::UpdateResult()`, this
                 is also called asyncly in ML ranking code paths. Therefore,
                 when ML ranking is enabled, not all '.SortAndCull' times are
                 included in the unsliced metric. `SortAndCull()` can be
                 called up to twice per `UpdateResult()`. For all but the
                 last async update, it's called twice; for the last async
                 update (which may not occur if interrupted), it's called
                 once."/>
  </token>
</histogram>

<histogram name="Omnibox.CalculateVisibleHint.Duration" units="ms"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>woa-performance-bugs+jank@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the amount of time it takes to call UrlBar.calculateVisibleHint().
    Recorded once per call.
  </summary>
</histogram>

<histogram name="Omnibox.CharTypedToRepaintLatency" units="ms"
    expires_after="2027-01-31">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Records the time taken between a keystroke being typed in the omnibox and
    the text being painted. If there are multiple keystrokes before a paint,
    logs the time since the earliest one.

    This duration is composed of three parts:

    a) the time spent processing the initial input event

    b) the time spent for the repaint task to be scheduled on the message loop

    c) the time spent painting the Omnibox

    d) (on views platforms) the time until the pixels are actually composited

    There's a number of breakdown metrics to help diagnose a regression. First,
    Omnibox.CharTypedToRepaintLatency.ToPaint measures the combined time of (a)
    and (b). Omnibox.QueryTime2 is a good proxy for just (a). And there's also
    Omnibox.PaintTime that corresponds to (c). We don't have a direct metric for
    (d), but if neither Omnibox.CharTypedToRepaintLatency.ToPaint nor
    Omnibox.PaintTime regressed, then the regression must be in (d).

    Note #1: The semantics of this metric on views platforms changed in M62, as
    previously time (d) was not included in the metric.

    Note #2: The semantics of this metric changed in M130, due to switching over
    from the `OnCompositingAckDeprecated()` compositor lifecycle function to
    `OnDidPresentCompositorFrame()`. The new function provides more accurate
    timings, which also happen to be larger in magnitude than values that were
    logged prior to M130. For more details, please refer to crbug.com/347322940
    and crrev.com/c/5857101.
  </summary>
</histogram>

<histogram name="Omnibox.CharTypedToRepaintLatency.InsertToPresent" units="ms"
    expires_after="2027-02-07">
  <owner>manukh@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    A refinement of Omnibox.CharTypedToRepaintLatency metric. It measures the
    time between the first character insertion in a series that happen during a
    frame, to the time the compositor reports the text was rendered on-screen.
    Compositor-provided timestamps are used for this version of the metric, so
    it is expected to be more accurate: the baseline CharTypedToRepaintLatency
    uses now() from when the subsequent has-processed notification arrives back
    on the UI thread, which may overestimate user-visible latency.

    Note: Compositor-provided timestamps are taken using presentation time
    callbacks. Before M110 the callbacks used for this histogram might be called
    even if the next submitted frame fails to present which means that the
    character is not really rendered on-screen yet. From M110 onward, this is
    fixed by using callbacks that are only called after the first following
    successful presentation, so a slight change might be noticed in the
    histogram values.
  </summary>
</histogram>

<histogram name="Omnibox.CharTypedToRepaintLatency.PaintToPresent" units="ms"
    expires_after="2027-01-17">
  <owner>manukh@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Records the time between when OnPaint() is called to the time the compositor
    reports pixels were successfully drawn to the screen. This a subset of the
    time reported in Omnibox.CharTypedToRepaintLatency.InsertToPresent.

    Note: Compositor-provided timestamps are taken using presentation time
    callbacks. Before M110 the callbacks used for this histogram might be called
    even if the next submitted frame fails to present which means that the
    character is not really rendered on-screen yet. From M110 onward, this is
    fixed by using callbacks that are only called after the first following
    successful presentation, so a slight change might be noticed in the
    histogram values.

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

<histogram name="Omnibox.CharTypedToRepaintLatency.ToPaint" units="ms"
    expires_after="2027-02-07">
  <owner>manukh@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Records the time taken between a keystroke being typed in the omnibox and
    the time when we're ready to paint the omnibox. This is a breakdown
    diagnostic metric for Omnibox.CharTypedToRepaintLatency, to help diagnose
    regressions in that metric. See that metric's description for more info.
  </summary>
</histogram>

<histogram
    name="Omnibox.ClipboardSuggestionRemovedAge{ClipboardSuggestionType}"
    units="ms" expires_after="2027-10-01">
  <owner>jdonnelly@chromium.org</owner>
  <owner>ender@google.com</owner>
  <summary>
    Recorded every time the clipboard suggestion is removed from omnibox
    suggestion list and the system clipboard. The value indicates the estimated
    age of the clipboard.

    {ClipboardSuggestionType}

    Note: There is a recording gap between: 2022.09-2023.08, 2026.01-2026.08.
  </summary>
</histogram>

<histogram name="Omnibox.ClipboardSuggestionShownAge{ClipboardSuggestionType}"
    units="ms" expires_after="2027-10-01">
  <owner>jdonnelly@chromium.org</owner>
  <owner>ender@google.com</owner>
  <summary>
    Recorded every time the omnibox is focussed and recent content from the
    user's clipboard is suggested. The value indicates the estimated age of the
    clipboard. (If Chrome observed the clipboard modification, this age is
    exact. If Chrome did not observe the modification, then it's a conservative
    estimate: the last time Chrome observed a clipboard modification, which is
    certainly older than the current clipboard. If Chrome never observed a
    clipboard modification, no clipboard suggestion is shown, meaning this
    histogram will never be emitted to.)

    Intended to be compared with MobileOmnibox.PressedClipboardSuggestionAge.

    {ClipboardSuggestionType}
  </summary>
</histogram>

<histogram
    name="Omnibox.ClipboardSuggestionShownNumTimes{ClipboardSuggestionType}"
    units="units" expires_after="2027-10-01">
  <owner>jdonnelly@chromium.org</owner>
  <owner>ender@google.com</owner>
  <summary>
    Recorded every time the omnibox is focussed and a recent content from the
    user's clipboard is suggested. The number emitted is the number of times the
    clipboard content has been suggested within the same session including the
    current time. Thus, the third time it is shown, we'll emit a three to this
    histogram, and this histogram will have previously seen emits of one and
    two. If the clipboard content was the same during a previous run of Chrome
    and this clipboard content was suggested during that run, those impressions
    are not counted. Also, if the clipboard content changes during a particular
    run of Chrome to other content, the omnibox is focused and that clipboard
    content is suggested, then content changes back and Chrome starts suggesting
    the older clipboard content again, the counts start again from scratch.
    Chrome only remembers the number of times the clipboard content was shown
    consecutively.

    This value is useful to compare with the number of times a clipboard
    suggestion has been shown when it is clicked. This value can be obtained
    from OmniboxEvent records in which the selected suggestion is from Clipboard
    provider. In those cases, look in the Clipboard provider's ProviderInfo
    field for |times_returned_results_in_session|. Note that at the time of this
    writing that OmniboxEvent logs aren't recorded in incognito whereas
    histograms are. Thus, the total counts will not be comparable, though the
    distributions should be.

    {ClipboardSuggestionType}
  </summary>
</histogram>

<histogram
    name="Omnibox.ClipboardSuggestionShownWithCurrentURL{ClipboardSuggestionType}"
    enum="BooleanPresent" expires_after="2027-10-01">
  <owner>jdonnelly@chromium.org</owner>
  <owner>ender@google.com</owner>
  <summary>
    Recorded every time the omnibox is focussed and a recent content from the
    user's clipboard is suggested. The value indicates whether the current URL
    was shown (which would appear above the clipboard suggestion) or was absent
    (which ought to only happen when the omnibox is empty / the user is on the
    NTP).

    On Android, the total count for this histogram can be usefully compared with
    the count of the user action FocusLocation in order to determine the rate at
    which a clipboard suggestion is shown in the omnibox. To determine the same
    rate on iOS, one needs to compare this histogram's count with the sum of the
    user actions MobileFocusedOmniboxOnNtp, MobileFocusedFakeboxOnNtp, and
    MobileFocusedOmniboxNotOnNtp.

    Furthermore, on either platform, this histogram's count can be usefully
    compared with the count in the clipboard bucket of the
    Omnibox.SuggestionUsed.Provider histogram to determine the clickthrough rate
    on these suggestions.

    {ClipboardSuggestionType}

    Note: There is a recording gap between: 2022.10-2023.08, 2025.11-2026.08.
  </summary>
</histogram>

<histogram name="Omnibox.CompanyEntityImageAblated" enum="Boolean"
    expires_after="2025-08-04">
  <owner>jennserrano@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records whether any company entity image was ablated. This histogram is
    logged to once per autocomplete pass when there exists a suggestion of
    entity type. Recorded after attempting to find matching domains between a
    historical URL and a company entity website URI.
  </summary>
</histogram>

<histogram name="Omnibox.ContextMenu.AnimationShown.ContextualTasks"
    enum="Boolean" expires_after="2027-08-01">
  <owner>dhruvkathpalia@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records whether the context menu (nextbox) animation was shown to the user
    or blocked due to the ContextMenuAnimationLimiting experiment on Contextual
    Tasks page. Recorded when the context menu animation is shown on the
    Nextbox.
  </summary>
</histogram>

<histogram name="Omnibox.ContextMenu.AnimationShown.NTP" enum="Boolean"
    expires_after="2027-08-01">
  <owner>dhruvkathpalia@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records whether the context menu (realbox) animation was shown to the user
    or blocked due to the ContextMenuAnimationLimiting experiment on NTP.
    Recorded when the context menu animation is shown on the Realbox.
  </summary>
</histogram>

<histogram name="Omnibox.ContextualSearchSuggestion.Precision" enum="Boolean"
    expires_after="2027-01-03">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Upon navigation, this metric is recorded if at least one contextual search
    suggestion was offered during the course of the Omnibox session. Given that
    at least one contextual search suggestion was offered during the session,
    this records whether or not the user ultimately selected a contextual search
    suggestion in the Omnibox.

    An &quot;Omnibox session&quot; is currently defined as a span of time that
    starts when the user focuses the Omnibox and ends when the user de-focuses
    it, whether implicitly (e.g. by selecting one of the suggestions) or
    explictly (e.g. by clicking on some non-Omnibox browser UI). The session
    data that's maintained by AutocompleteResult will be initialized when the
    session starts, updated throughout the course of the session, and ultimately
    reset when the session ends.

    (Precision = Usage / Recall)
  </summary>
</histogram>

<histogram name="Omnibox.ContextualSearchSuggestion.Recall" enum="Boolean"
    expires_after="2027-01-03">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Upon navigation, this metric is recorded if at least one contextual search
    suggestion was offered during the course of the Omnibox session.

    An &quot;Omnibox session&quot; is currently defined as a span of time that
    starts when the user focuses the Omnibox and ends when the user de-focuses
    it, whether implicitly (e.g. by selecting one of the suggestions) or
    explictly (e.g. by clicking on some non-Omnibox browser UI). The session
    data that's maintained by AutocompleteResult will be initialized when the
    session starts, updated throughout the course of the session, and ultimately
    reset when the session ends.

    (Recall = Usage / Precision)
  </summary>
</histogram>

<histogram name="Omnibox.ContextualSearchSuggestion.Usage" enum="Boolean"
    expires_after="2027-01-03">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Upon navigation, this metric is recorded if the user selected a contextual
    search suggestion in the Omnibox.

    An &quot;Omnibox session&quot; is currently defined as a span of time that
    starts when the user focuses the Omnibox and ends when the user de-focuses
    it, whether implicitly (e.g. by selecting one of the suggestions) or
    explictly (e.g. by clicking on some non-Omnibox browser UI). The session
    data that's maintained by AutocompleteResult will be initialized when the
    session starts, updated throughout the course of the session, and ultimately
    reset when the session ends.

    (Usage = Precision * Recall)
  </summary>
</histogram>

<histogram name="Omnibox.CrossDeviceTab.Match.ShowAge" units="ms"
    expires_after="2027-05-01">
  <owner>mastiz@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The age of the remote tab when the cross-device suggestion was shown.

    Background: When the omnibox is focused (Zero-Suggest state), it may show at
    most one cross-device tab suggestion. This suggestion always corresponds to
    the user's most recently active tab across all synced devices. If this most
    recent tab is not eligible (e.g., URL is invalid or the tab is too old), no
    suggestion is shown. These suggestions always include an action chip to open
    the synced tabs history page (chrome://history/syncedTabs).

    Recorded when the user completes their omnibox interaction with a
    navigation, provided the cross-device suggestion was present in the list
    (impressed). It is recorded even if the user navigated to a different
    suggestion, but is not recorded if the cross-device suggestion was not shown
    at all.
  </summary>
</histogram>

<histogram name="Omnibox.CrossDeviceTab.Provider.Eligibility"
    enum="CrossDeviceTabProviderEligibility" expires_after="2027-05-01">
  <owner>mastiz@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Tracks the eligibility of showing the cross-device tab match.

    Background: When the omnibox is focused (Zero-Suggest state), it may show at
    most one cross-device tab suggestion. This suggestion always corresponds to
    the user's most recently active tab across all synced devices. If this most
    recent tab is not eligible (e.g., URL is invalid or the tab is too old), no
    suggestion is shown. These suggestions always include an action chip to open
    the synced tabs history page (chrome://history/syncedTabs).

    Recorded every time CrossDeviceTabProvider is run in Zero-Suggest state (but
    not in typed state), indicating whether a match was created or why it
    wasn't.
  </summary>
</histogram>

<histogram name="Omnibox.CrossDeviceTab.Provider.MostRecentTabAge" units="ms"
    expires_after="2027-05-01">
  <owner>mastiz@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The age of the most recent tab found across all foreign sessions, before
    applying the age filter (i.e. selection of recent tabs only).

    Background: When the omnibox is focused (Zero-Suggest state), it may show at
    most one cross-device tab suggestion. This suggestion always corresponds to
    the user's most recently active tab across all synced devices. If this most
    recent tab is not eligible (e.g., URL is invalid or the tab is too old), no
    suggestion is shown. These suggestions always include an action chip to open
    the synced tabs history page (chrome://history/syncedTabs).

    Recorded every time CrossDeviceTabProvider is run in Zero-Suggest state (but
    not in typed state) and at least one tab is found.
  </summary>
</histogram>

<histogram name="Omnibox.CrossDeviceTab.{Target}.ClickAge" units="ms"
    expires_after="2027-05-01">
  <owner>mastiz@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The age of the remote tab when the user navigated by selecting the
    cross-device tab {Target}.

    Background: When the omnibox is focused (Zero-Suggest state), it may show at
    most one cross-device tab suggestion. This suggestion always corresponds to
    the user's most recently active tab across all synced devices. If this most
    recent tab is not eligible (e.g., URL is invalid or the tab is too old), no
    suggestion is shown. These suggestions always include an action chip to open
    the synced tabs history page (chrome://history/syncedTabs).

    Recorded on navigation, only if the user selected this specific target. It
    is not recorded if another suggestion was selected.
  </summary>
  <token key="Target" variants="CrossDeviceTabTarget"/>
</histogram>

<histogram name="Omnibox.CrossDeviceTab.{Target}.FocusToOpenTime" units="ms"
    expires_after="2027-05-01">
  <owner>mastiz@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The amount of time between the user focusing the location bar and navigating
    by selecting the cross-device tab {Target}.

    Background: When the omnibox is focused (Zero-Suggest state), it may show at
    most one cross-device tab suggestion. This suggestion always corresponds to
    the user's most recently active tab across all synced devices. If this most
    recent tab is not eligible (e.g., URL is invalid or the tab is too old), no
    suggestion is shown. These suggestions always include an action chip to open
    the synced tabs history page (chrome://history/syncedTabs).

    Recorded on navigation, only if the user selected this specific target. It
    is not recorded if another suggestion was selected.
  </summary>
  <token key="Target" variants="CrossDeviceTabTarget"/>
</histogram>

<histogram name="Omnibox.CutOrCopyAllText" units="count"
    expires_after="2027-01-03">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of cut or copy commands on all selected text in the omnibox.
    Gathered on desktop platforms (Win, Mac, Linux, Chrome OS).
  </summary>
</histogram>

<histogram name="Omnibox.DocumentSuggest.HttpResponseCode"
    enum="HttpResponseCode" expires_after="2027-01-24">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Counts the number of responses from the document suggestion service,
    bucketed by the HTTP response code. Recorded once per response received,
    which is 0 or 1 times per request sent, since some requests are cancelled.
    At most 1 request is sent per omnibox autocompletion cycle (in other words,
    per each time the user changes the omnibox input).
  </summary>
</histogram>

<histogram
    name="Omnibox.DocumentSuggest.HttpResponseCode.IsSubjectToEnterprisePolicies.{SigninTribool}"
    enum="HttpResponseCode" expires_after="2027-02-07">
  <owner>mahmadi@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Counts the number of responses from the DocumentSuggestionsService and if
    the user is subject to Enterprise policies bucketed by the HTTP response
    code. Recorded once per response received, which is at most 1 time per
    request sent, which is at most 1 time per omnibox autocompletion cycle,
    i.e., each time the user changes the omnibox input.
  </summary>
  <token key="SigninTribool">
    <variant name="False" summary="False"/>
    <variant name="True" summary="True"/>
    <variant name="Unknown" summary="Unknown"/>
  </token>
</histogram>

<histogram name="Omnibox.DocumentSuggest.ProviderAllowed"
    enum="DocumentProviderAllowedReason" expires_after="2027-02-07">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Counts the number of times the document provider's `Start` method is called
    by the AutocompleteController, bucketed by the reason applied for whether or
    not the provider is allowed to run (in other words, whether the profile and
    session meets all the requirements to request document suggestions from the
    server).

    Recorded exactly once per omnibox autocompletion cycle (in other words, per
    each time the user changes the omnibox input). The reason recorded is the
    first reason encountered which determines that we should not run the
    provider. In other words, each bucket is an undercount of whether that
    reason _could have been used_ to decide not to run the provider. Therefore,
    interpreting these results requires an understanding the order of the checks
    in `DocumentProvider::IsDocumentProviderAllowed`.
  </summary>
</histogram>

<histogram name="Omnibox.DocumentSuggest.Requests"
    enum="DocumentSuggestRequestEvent" expires_after="2027-02-07">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Counts the number of requests DocumentProvider sent, were invalidated, and
    were completed successfully.
  </summary>
</histogram>

<histogram name="Omnibox.DocumentSuggest.RequestTime" units="ms"
    expires_after="2027-02-07">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration between when the async backend request was sent and
    response received.

    Recorded exactly once per backend request. This will be a subset of times
    document suggestions were requested, as 1) the provider is debounced, 2) the
    provider may be interrupted (e.g. due to a new input) before the request is
    sent (i.e. before the oauth token is ready), and 3) some provider requests
    are filtered (e.g. input too short).
  </summary>
</histogram>

<histogram name="Omnibox.DocumentSuggest.RequestTime.Interrupted" units="ms"
    expires_after="2026-03-22">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Measures the duration between when the async backend request was sent and
    response received.

    Recorded at most once per backend request. This will be a subset of times
    document suggestions were requested, as 1) the provider is debounced, 2) the
    provider may be interrupted (e.g. due to a new input) before the request is
    sent (i.e. before the oauth token is ready), and 3) some provider requests
    are filtered (e.g. input too short).

    Only recorded if the backend request was invalidated; i.e., the provider was
    interrupted before the response was received.
  </summary>
</histogram>

<histogram name="Omnibox.DocumentSuggest.RequestTime.NotInterrupted" units="ms"
    expires_after="2026-03-22">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Measures the duration between when the async backend request was sent and
    response received.

    Recorded at most once per backend request. This will be a subset of times
    document suggestions were requested, as 1) the provider is debounced, 2) the
    provider may be interrupted (e.g. due to a new input) before the request is
    sent (i.e. before the oauth token is ready), and 3) some provider requests
    are filtered (e.g. input too short).

    Only recorded if the backend request was not invalidated; i.e., the provider
    was not interrupted before the response was received.
  </summary>
</histogram>

<histogram name="Omnibox.DocumentSuggest.ResultCount" units="count"
    expires_after="2027-02-07">
  <owner>manukh@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>skare@chromium.org</owner>
  <summary>
    Number of results returned in each document suggestion reply. Logged for
    successful requests where the provider returned a parseable result set.
  </summary>
</histogram>

<histogram name="Omnibox.DocumentSuggest.TotalTime" units="ms"
    expires_after="2027-02-07">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration between when the provider begins (after a debouncing
    delay) and ends.

    Recorded exactly once per processed provider request. This will be a subset
    of times document suggestions were requested, as 1) the provider is
    debounced, and 2) some provider requests are filtered (e.g. input too
    short).
  </summary>
</histogram>

<histogram name="Omnibox.DocumentSuggest.TotalTime.Interrupted" units="ms"
    expires_after="2026-03-08">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Measures the duration between when the provider begins (after a debouncing
    delay) and ends.

    Recorded at most once per processed provider request. This will be a subset
    of times document suggestions were requested, as 1) the provider is
    debounced, and 2) some provider requests are filtered (e.g. input too
    short).

    Only recorded if the provider was interrupted (e.g. due to a new input).
  </summary>
</histogram>

<histogram name="Omnibox.DocumentSuggest.TotalTime.NotInterrupted" units="ms"
    expires_after="2025-03-09">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Measures the duration between when the provider begins (after a debouncing
    delay) and ends.

    Recorded at most once per processed provider request. This will be a subset
    of times document suggestions were requested, as 1) the provider is
    debounced, and 2) some provider requests are filtered (e.g. input too
    short).

    Only recorded if the provider was not interrupted (e.g. due to a new input).
  </summary>
</histogram>

<histogram name="Omnibox.DsePreload.Prefetch.NoVarySearchDataCacheUpdate"
    enum="SearchPreloadServiceNoVarySearchDataCacheUpdate"
    expires_after="2026-08-09">
  <owner>kenoss@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Records a No-Varry-Search data cache change when a non-redirect response
    header for DSE prefetch is received.
  </summary>
</histogram>

<histogram
    name="Omnibox.DsePreload.SignalResult{DsePreloadTriggerType}{PreloadType}"
    enum="SearchPreloadSignalResult" expires_after="2027-01-03">
  <owner>khalidpeer@chromium.org</owner>
  <owner>kenoss@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Measures the difference between &quot;the client judged it should
    preload&quot; and &quot;preload is actually triggered&quot;.

    Records the result of signal when the client judged it should trigger
    {PreloadType} in DSE {DsePreloadTriggerType}.
  </summary>
  <token key="DsePreloadTriggerType" variants="DsePreloadTriggerType"/>
  <token key="PreloadType" variants="PreloadType"/>
</histogram>

<histogram name="Omnibox.EnteredKeywordMode2" enum="OmniboxEnteredKeywordMode2"
    expires_after="2027-02-07">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The new enumeration of how many times users enter keyword hint mode
    &quot;Search ___ for:&quot; and how. Changing the keyword after entering
    keyword mode will re-log this metric.
  </summary>
</histogram>

<histogram name="Omnibox.EnteredKeywordModeWithInput"
    enum="OmniboxEnteredKeywordMode2" expires_after="2027-01-17">
  <owner>orinj@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Counts how many times users entered keyword mode with each entry method,
    just like Omnibox.EnteredKeywordMode2, but logged only when the user has
    additional input text after entering keyword mode. In many cases, some input
    is required to enter keyword mode, for example by typing a keyword and then
    accepting it with tab or space. But then once in keyword mode, the input
    field again appears empty. This histogram will not log in such cases. It
    will only log when some extra input remains after entering keyword mode.
    Some examples of how this could happen: 1) Invoking an omnibox toolbelt
    action after typing a query like 'hi'. 2) Backing up the cursor and
    inserting a space afer the 'm' in 'google.comhi'. 3) Typing 'hi' and then
    pressing Ctrl+K. In these cases, the additional 'hi' text remains after the
    omnibox enters keyword mode, so this histogram will be logged. Changing the
    keyword after entering keyword mode will re-log this metric.
  </summary>
</histogram>

<histogram name="Omnibox.Escape" enum="OmniboxEscapeAction"
    expires_after="2025-01-05">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    When the omnibox is focused and escape is pressed, the 1st of the following
    occurs:

    1) If there is temporary text (i.e. a non default suggestion is selected),
    it is cleared.

    2) If the popup is open, the popup is closed.

    3) If the popup is open, which is considered as user input in progress, then
    the popup is closed and user input is cleared.

    4) If user input is in progress, it is cleared. This state (i.e. input in
    progress with the popup closed) typically occurs when input was in progress,
    then the omnibox was blurred, and then it was refocused.

    5) The omnibox is blurred.

    This histogram records which of the above occurred.

    It is recorded every time escape is pressed with the omnibox focused.
    Pressing escape repeatedly e.g. 10 times will emits at most 4 times until
    the omnibox is blurred.
  </summary>
</histogram>

<histogram name="Omnibox.FocusResultedInNavigation{Entrypoint}{Usage}"
    enum="FocusResultedInNavigationTypes" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    This records whether user initiated navigation after focusing the Omnibox
    versus switches focus elsewhere without navigating in the {Usage} case. This
    metric includes accidental focus-then-losing-focus events, including brief
    ones. It also includes ones in which the user did not type any text or
    otherwise engage with the Omnibox. E.g., the user tabbing through all top
    Chrome UI controls will cause this metric to be recorded. If the user
    switches focus from the Chrome window to another window while the Omnibox is
    focused, that also counts as a loss of focus.

    On Android variants with attachments are recorded as of M144.

    On Android M144-M146 the values &quot;Navigation w/o attachments&quot; and
    &quot;No navigation with attachments&quot; were flipped.

    This metric is not recorded for the Realbox interactions.

    Recorded every time the Omnibox focus is cleared.
  </summary>
  <token key="Entrypoint" variants="ComposeboxEntrypoint"/>
  <token key="Usage">
    <variant name="" summary="Overall"/>
    <variant name=".AIMode" summary="AI Mode"/>
    <variant name=".Canvas" summary="Canvas"/>
    <variant name=".DeepSearch" summary="Deep Search"/>
    <variant name=".ImageGeneration" summary="Image generation"/>
    <variant name=".Search" summary="Search"/>
  </token>
</histogram>

<histogram name="Omnibox.FocusToCutOrCopyAllTextTime" units="ms"
    expires_after="2026-12-27">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between when a user focused the Omnibox and issued a
    cut/copy command.

    Recorded when the user cuts/copies all text in the Omnibox (e.g. select-all,
    followed by cut/copy). If the user deletes all text (a.k.a. clobber) or only
    cuts/copies part of the text in the Omnibox, then this metric will NOT be
    recorded. Also, if focus-related timing info is not available (which should
    be rare), then this metric will NOT be recorded.

    Collected on desktop platforms (Win, Mac, Linux, Chrome OS).
  </summary>
</histogram>

<histogram
    name="Omnibox.FocusToCutOrCopyAllTextTime.ByPageContext.{OmniboxPageContext}"
    units="ms" expires_after="2027-01-03">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between when a user focused the Omnibox and issued a
    cut/copy command. Sliced by page context (a.k.a. page classification).

    Recorded when the user cuts/copies all text in the Omnibox (e.g. select-all,
    followed by cut/copy). If the user deletes all text (a.k.a. clobber) or only
    cuts/copies part of the text in the Omnibox, then this metric will NOT be
    recorded. Also, if focus-related timing info is not available (which should
    be rare), then this metric will NOT be recorded.

    Collected on desktop platforms (Win, Mac, Linux, Chrome OS).
  </summary>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
</histogram>

<histogram name="Omnibox.FocusToCutOrCopyAllTextTime.{OmniboxZeroPrefixState}"
    units="ms" expires_after="2026-10-25">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between when a user focused the Omnibox and issued a
    cut/copy command. Sliced by zero-prefix state.

    Recorded when the user cuts/copies all text in the Omnibox (e.g. select-all,
    followed by cut/copy). If the user deletes all text (a.k.a. clobber) or only
    cuts/copies part of the text in the Omnibox, then this metric will NOT be
    recorded. Also, if focus-related timing info is not available (which should
    be rare), then this metric will NOT be recorded.

    Collected on desktop platforms (Win, Mac, Linux, Chrome OS).
  </summary>
  <token key="OmniboxZeroPrefixState" variants="OmniboxZeroPrefixState"/>
</histogram>

<histogram
    name="Omnibox.FocusToCutOrCopyAllTextTime.{OmniboxZeroPrefixState}.ByPageContext.{OmniboxPageContext}"
    units="ms" expires_after="2026-10-25">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between when a user focused the Omnibox and issued a
    cut/copy command. Sliced by zero-prefix state and page context (a.k.a. page
    classification).

    Recorded when the user cuts/copies all text in the Omnibox (e.g. select-all,
    followed by cut/copy). If the user deletes all text (a.k.a. clobber) or only
    cuts/copies part of the text in the Omnibox, then this metric will NOT be
    recorded. Also, if focus-related timing info is not available (which should
    be rare), then this metric will NOT be recorded.

    Collected on desktop platforms (Win, Mac, Linux, Chrome OS).
  </summary>
  <token key="OmniboxZeroPrefixState" variants="OmniboxZeroPrefixState"/>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
</histogram>

<histogram name="Omnibox.FocusToOpenTimeAnyPopupState3" units="ms"
    expires_after="2026-12-27">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between when a user focused on the omnibox and opened an
    omnibox match (which could be what they typed or a suggestion). This is
    recorded regardless of whether the omnibox dropdown (a.k.a. popup) is open.
    It is not recorded if a match is opened without triggering a focus event,
    e.g., when a user drags a URL to the omnibox to navigate.

    To know how common this last condition is, compare the total count of this
    histogram to the total number of omnibox events.
  </summary>
</histogram>

<histogram
    name="Omnibox.FocusToOpenTimeAnyPopupState3.ByPageContext.{OmniboxPageContext}"
    units="ms" expires_after="2027-01-03">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between when a user focused on the omnibox and opened an
    omnibox match (which could be what they typed or a suggestion). Sliced by
    page context. This is recorded regardless of whether the omnibox dropdown
    (a.k.a. popup) is open. It is not recorded if a match is opened without
    triggering a focus event, e.g., when a user drags a URL to the omnibox to
    navigate.

    To know how common this last condition is, compare the total count of this
    histogram to the total number of omnibox events.
  </summary>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
</histogram>

<histogram
    name="Omnibox.FocusToOpenTimeAnyPopupState3.BySummarizedResultType.{OmniboxSummarizedResultType}"
    units="ms" expires_after="2027-01-03">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between when a user focused on the omnibox and opened an
    omnibox match (which could be what they typed or a suggestion). Sliced by
    summarized result type (SEARCH, URL, OTHER). This is recorded regardless of
    whether the omnibox dropdown (a.k.a. popup) is open. It is not recorded if a
    match is opened without triggering a focus event, e.g., when a user drags a
    URL to the omnibox to navigate.

    To know how common this last condition is, compare the total count of this
    histogram to the total number of omnibox events.
  </summary>
  <token key="OmniboxSummarizedResultType"
      variants="OmniboxSummarizedResultType"/>
</histogram>

<histogram
    name="Omnibox.FocusToOpenTimeAnyPopupState3.BySummarizedResultType.{OmniboxSummarizedResultType}.ByPageContext.{OmniboxPageContext}"
    units="ms" expires_after="2027-01-03">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between when a user focused on the omnibox and opened an
    omnibox match (which could be what they typed or a suggestion). Sliced by
    summarized result type (SEARCH, URL, OTHER) and page context. This is
    recorded regardless of whether the omnibox dropdown (a.k.a. popup) is open.
    It is not recorded if a match is opened without triggering a focus event,
    e.g., when a user drags a URL to the omnibox to navigate.

    To know how common this last condition is, compare the total count of this
    histogram to the total number of omnibox events.
  </summary>
  <token key="OmniboxSummarizedResultType"
      variants="OmniboxSummarizedResultType"/>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
</histogram>

<histogram
    name="Omnibox.FocusToOpenTimeAnyPopupState3.{OmniboxZeroPrefixState}"
    units="ms" expires_after="2026-10-25">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between when a user focused on the omnibox and opened an
    omnibox match (which could be what they typed or a suggestion). Sliced by
    zero-prefix state. This is recorded regardless of whether the omnibox
    dropdown (a.k.a. popup) is open. It is not recorded if a match is opened
    without triggering a focus event, e.g., when a user drags a URL to the
    omnibox to navigate.

    To know how common this last condition is, compare the total count of this
    histogram to the total number of omnibox events.
  </summary>
  <token key="OmniboxZeroPrefixState" variants="OmniboxZeroPrefixState"/>
</histogram>

<histogram
    name="Omnibox.FocusToOpenTimeAnyPopupState3.{OmniboxZeroPrefixState}.ByPageContext.{OmniboxPageContext}"
    units="ms" expires_after="2026-10-25">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between when a user focused on the omnibox and opened an
    omnibox match (which could be what they typed or a suggestion). Sliced by
    zero-prefix state and page context. This is recorded regardless of whether
    the omnibox dropdown (a.k.a. popup) is open. It is not recorded if a match
    is opened without triggering a focus event, e.g., when a user drags a URL to
    the omnibox to navigate.

    To know how common this last condition is, compare the total count of this
    histogram to the total number of omnibox events.
  </summary>
  <token key="OmniboxZeroPrefixState" variants="OmniboxZeroPrefixState"/>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
</histogram>

<histogram
    name="Omnibox.FocusToOpenTimeAnyPopupState3.{OmniboxZeroPrefixState}.BySummarizedResultType.{OmniboxSummarizedResultType}"
    units="ms" expires_after="2026-10-25">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between when a user focused on the omnibox and opened an
    omnibox match (which could be what they typed or a suggestion). Sliced by
    zero-prefix state and summarized result type (SEARCH, URL, OTHER). This is
    recorded regardless of whether the omnibox dropdown (a.k.a. popup) is open.
    It is not recorded if a match is opened without triggering a focus event,
    e.g., when a user drags a URL to the omnibox to navigate.

    To know how common this last condition is, compare the total count of this
    histogram to the total number of omnibox events.
  </summary>
  <token key="OmniboxZeroPrefixState" variants="OmniboxZeroPrefixState"/>
  <token key="OmniboxSummarizedResultType"
      variants="OmniboxSummarizedResultType"/>
</histogram>

<histogram
    name="Omnibox.FocusToOpenTimeAnyPopupState3.{OmniboxZeroPrefixState}.BySummarizedResultType.{OmniboxSummarizedResultType}.ByPageContext.{OmniboxPageContext}"
    units="ms" expires_after="2026-10-25">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between when a user focused on the omnibox and opened an
    omnibox match (which could be what they typed or a suggestion). Sliced by
    zero-prefix state, summarized result type (SEARCH, URL, OTHER), and page
    context. This is recorded regardless of whether the omnibox dropdown (a.k.a.
    popup) is open. It is not recorded if a match is opened without triggering a
    focus event, e.g., when a user drags a URL to the omnibox to navigate.

    To know how common this last condition is, compare the total count of this
    histogram to the total number of omnibox events.
  </summary>
  <token key="OmniboxZeroPrefixState" variants="OmniboxZeroPrefixState"/>
  <token key="OmniboxSummarizedResultType"
      variants="OmniboxSummarizedResultType"/>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
</histogram>

<histogram name="Omnibox.GeolocationHeaderService.GetLocationOutcome.{Trigger}"
    enum="GeolocationHeaderGetLocationOutcome" expires_after="2027-06-29">
  <owner>andypaicu@chromium.org</owner>
  <owner>chrome-permissions-team@google.com</owner>
  <summary>
    Recorded every time the geolocation header is attempted to be built by the
    GeolocationHeaderService. This happens automatically when an omnibox
    navigation goes to the DSE origin (if it has permission) [Automatic], or
    during autocomplete match generation when attempting to build the inline
    location suggestion [InlineSuggestion]. It records the outcome of the
    attempt to build the geolocation header: either success or the failure
    reason.
  </summary>
  <token key="Trigger">
    <variant name="Automatic" summary="Automatic header addition"/>
    <variant name="InlineSuggestion"
        summary="Header built for inline suggestion"/>
  </token>
</histogram>

<histogram name="Omnibox.GeolocationHeaderService.PrimeLocationOutcome"
    enum="GeolocationHeaderPrimeLocationOutcome" expires_after="2027-06-29">
  <owner>andypaicu@chromium.org</owner>
  <owner>chrome-permissions-team@google.com</owner>
  <summary>
    Recorded every time the geolocation header service tries to retrieve the
    user's geoposition in preparation for it be used to construct the XGeo HTTP
    header. Logs the outcome of the priming attempt: either an early exit due to
    checks (like no default search provider, permission denied, already in
    progress, etc) or a successful request start (specifying if it requested a
    cached position only or a next position update).
  </summary>
</histogram>

<histogram name="Omnibox.GroupId.ToggledOff" enum="GroupId"
    expires_after="2025-11-02">
  <owner>mahmadi@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Counts the number of times a suggestion group ID is prevented form appearing
    in the results. This is recorded when the user hides a set of grouped
    suggestions, such as trending zero-suggest, in the omnibox UI using the
    control in the grouped suggestions' header.
  </summary>
</histogram>

<histogram name="Omnibox.GroupId.ToggledOn" enum="GroupId"
    expires_after="2025-04-29">
  <owner>mahmadi@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Counts the number of times a suggestion group ID is permitted to appear in
    the results. This is recorded when the user makes a set of previously hidden
    grouped suggestions, such as trending zero-suggest, visible in the omnibox
    UI using the control in the grouped suggestions' header.
  </summary>
</histogram>

<histogram name="Omnibox.HistoryFuzzy.MatchConversion.{SubProvider}"
    units="counts" expires_after="2026-11-12">
  <owner>orinj@chromium.org</owner>
  <owner>jdonnelly-team@google.com</owner>
  <summary>
    Fuzzy match conversion produces modified matches from other synchronous
    autocomplete providers (sub-providers) using alternative inputs: what the
    user might have typed, the automatic corrections. This metric is logged once
    per sub-provider per omnibox input if and only if the fuzzy provider runs a
    search (not all omnibox inputs result in search) and finds any corrections
    (this includes the zero case where corrections are found but produce no
    matches). Logs for each fuzzy sub-provider the number of correction matches
    converted to fuzzy provider matches for a single omnibox input. This
    measures how many 'best' matches (among all the sub-provider's matches for a
    specific correction) are converted from this sub-provider, summed for the
    various corrections of a single user input (will not exceed
    `provider_max_matches_` even in unlikely extreme cases). This is useful in
    evaluating the efficacy of various sub-providers for fuzzy matching.
  </summary>
  <token key="SubProvider">
    <variant name="Bookmark" summary="Bookmark conversion count"/>
    <variant name="HistoryQuick" summary="HistoryQuick conversion count"/>
  </token>
</histogram>

<histogram name="Omnibox.HistoryFuzzy.Precision" enum="Boolean"
    expires_after="2026-11-12">
  <owner>orinj@chromium.org</owner>
  <owner>jdonnelly-team@google.com</owner>
  <summary>
    When a fuzzy match was offered at the moment the user opened a match, this
    measures whether a fuzzy suggestion was taken. This is only recorded when at
    least one fuzzy match is in the result set, so it is useful to measure total
    presence and engagement with fuzzy URL suggestions. It can be interpreted as
    a click through rate for fuzzy match presentation as a whole: given that any
    fuzzy matches were presented at the moment a match was selected by the user,
    how often was the selected match a fuzzy URL suggestion?

    Context: Fuzzy match conversion produces modified matches from other
    synchronous autocomplete providers (sub-providers) using alternative inputs:
    what the user might have typed, the automatic corrections.
  </summary>
</histogram>

<histogram name="Omnibox.HistoryFuzzy.SearchDuration" units="ms"
    expires_after="2027-01-17">
  <owner>orinj@chromium.org</owner>
  <owner>jdonnelly-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time taken by HistoryFuzzyProvider to search for fuzzy input
    corrections. This is measured if and only if a search is performed, so many
    input states will not result in recording this metric (for example if the
    input contains a space, that's taken as a hint that the user may be
    searching instead of typing a domain name so no fuzzy search is performed).
    It is useful to distinguish portions of the total time taken by the
    provider, particularly as separate from sub-provider match gathering, so
    that if there are any pathological cases in the search algorithm then they
    will be apparent here.

    Context: Fuzzy match conversion produces modified matches from other
    synchronous autocomplete providers (sub-providers) using alternative inputs:
    what the user might have typed, the automatic corrections.
  </summary>
</histogram>

<histogram name="Omnibox.InlineLocationSuggestion.Ask.ShownState"
    enum="OmniboxInlineLocationSuggestionShown" expires_after="2027-02-07">
  <owner>andypaicu@chromium.org</owner>
  <owner>chrome-permissions@google.com</owner>
  <summary>
    Recorded when an autocomplete pass completes, for Default Search Engines
    where the geolocation permission is set to ASK. Tracks whether an inline
    location suggestion was shown, or whether there was or not a eligible parent
    suggestion.
  </summary>
</histogram>

<histogram name="Omnibox.InlineLocationSuggestion.Deny.ShownState"
    enum="OmniboxInlineLocationSuggestionShown" expires_after="2027-02-07">
  <owner>andypaicu@chromium.org</owner>
  <owner>chrome-permissions@google.com</owner>
  <summary>
    Recorded when an autocomplete pass completes, for Default Search Engines
    where the geolocation permission is set to DENY. Tracks whether an inline
    location suggestion was shown, or whether there was or not a eligible parent
    suggestion.
  </summary>
</histogram>

<histogram name="Omnibox.InlineLocationSuggestion.Index" units="position"
    expires_after="2027-02-07">
  <owner>andypaicu@chromium.org</owner>
  <owner>chrome-permissions@google.com</owner>
  <summary>
    Recorded when a duplicate inline location suggestion is shown. Tracks the
    0-based position index of the suggestion in the matches list.
  </summary>
</histogram>

<histogram
    name="Omnibox.InlineLocationSuggestion.{DSEPermissionState}.{ClickType}"
    enum="Boolean" expires_after="2027-02-07">
  <owner>andypaicu@chromium.org</owner>
  <owner>chrome-permissions@google.com</owner>
  <summary>
    Recorded when the user performs a click on an inline location suggestion or
    its parent. Always emits true.
  </summary>
  <token key="DSEPermissionState">
    <variant name="Ask" summary="DSE permission status is 'Ask'"/>
    <variant name="Deny" summary="DSE permission status is 'Deny'"/>
  </token>
  <token key="ClickType">
    <variant name="Clicked"
        summary="Click directly on the location suggestion"/>
    <variant name="ParentClicked"
        summary="Click on the parent suggestion instead of the location
                 suggestion"/>
  </token>
</histogram>

<histogram name="Omnibox.InputToAcceptNonAction" units="microseconds"
    expires_after="2027-01-17">
  <owner>kouhei@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Records the time taken between the OS captured input event timestamp to an
    URL is about to be selected. Recorded once per call to
    OmniboxEditModel::OpenSelection if an OmniboxAction is involved.

    This uses the same time origin with
    Omnibox.SuggestionUsed.Search.InputToNavigationStart2. See also
    Omnibox.InputToOpenSelection for the breakdown of input routing latency. See
    also Omnibox.InputToExecuteAction which covers the other branch.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Omnibox.InputToExecuteAction" units="microseconds"
    expires_after="2026-11-12">
  <owner>kouhei@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Records the time taken between the OS captured input event timestamp to
    OmniboxAction is about to be executed. Recorded once per call to
    OmniboxEditModel::OpenSelection if an OmniboxAction is involved.

    This uses the same time origin with
    Omnibox.SuggestionUsed.Search.InputToNavigationStart2. See also
    Omnibox.InputToOpenSelection for the breakdown of input routing latency. See
    also Omnibox.InputToAcceptNonAction which covers the other branch.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Omnibox.InputToOpenSelection" units="microseconds"
    expires_after="2026-11-12">
  <owner>kouhei@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Records the time taken between the OS captured input event timestamp to
    OmniboxEditModel::OpenSelection. Recorded once per call to
    OmniboxEditModel::OpenSelection.

    This uses the same time origin with
    Omnibox.SuggestionUsed.Search.InputToNavigationStart2. See also
    Omnibox.InputToExecuteAction and Omnibox.InputToAcceptNonAction for other
    breakdowns of the metric.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Omnibox.InputType" enum="OmniboxInputType"
    expires_after="2027-01-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The kind of input the user provided when using the omnibox to go somewhere.
    The type can be misleading. For example if the user typed 'http:/', it gets
    marked as a query because it cannot be opened as a URL even though the user
    probably wanted and selected a URL from the list of suggestions.

    In M-74 and earlier, this was only recorded if the user had no incognito
    windows open. In M-75 and later, it records all omnibox interactions
    regardless, in order to be consistent with how user actions and histograms
    are handled.
  </summary>
</histogram>

<histogram name="Omnibox.IPv4AddressPartsCount" units="count"
    expires_after="2024-01-14">
  <owner>gjc@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    The number of IPv4 address parts input by the user. The histogram is used to
    verify whether shortened IPv4 addresses like 127.1 are still used. This
    histogram is recorded when the user fully types the URL in the omnibox and
    the URL uses an IPv4 address or IPv4 embedded IPv6 address as the host.
  </summary>
</histogram>

<histogram name="Omnibox.IsPasteAndGo" enum="Boolean"
    expires_after="2027-01-24">
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Whether an omnibox interaction is a paste-and-search/paste-and-go action.
    (This histogram records both of these in the &quot;True&quot; bucket for
    this histogram because both of these are referred to as paste-and-go in the
    code.) These typically involve right-clicking in the omnibox and selecting
    that option from the dropdown.

    In M-74 and earlier, this was only recorded if the user had no incognito
    windows open. In M-75 and later, it records all omnibox interactions
    regardless, in order to be consistent with how user actions and histograms
    are handled.
  </summary>
</histogram>

<histogram name="Omnibox.JustDeletedText" enum="Boolean"
    expires_after="2027-02-07">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Whether the user deleted text immediately before selecting an omnibox
    suggestion. This is usually the result of pressing backspace or delete.

    In M-74 and earlier, this was only recorded if the user had no incognito
    windows open. In M-75 and later, it records all omnibox interactions
    regardless, in order to be consistent with how user actions and histograms
    are handled.
  </summary>
</histogram>

<histogram name="Omnibox.KeywordCount{KeywordType}" units="count"
    expires_after="2027-02-07">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    `TemplateURLs` that are active at load time (usually on start up) are logged
    in this histogram. Each active keyword should fall into exactly 1 slice (in
    addition to the aggregate unsliced histogram). This only gets logged once
    each time the search engines are loaded from the database. If a user changes
    the active status of a search engine during the same browser session, the
    keyword counts do not get logged again.

    This slice counts the number of {KeywordType}.
  </summary>
  <token key="KeywordType" variants="KeywordType"/>
</histogram>

<histogram name="Omnibox.KeywordModeUsageByEngineType.{Usage}"
    enum="OmniboxBuiltinEngineType" expires_after="2027-02-07">
  <owner>yoangela@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records number of times users use keyword mode enumerated by the type of
    search engine (whether the engine is &quot;built-in&quot;).

    {Usage}
  </summary>
  <token key="Usage">
    <variant name="Accepted"
        summary="Logged when a user accepts a keyword suggestion while in
                 keyword mode. Not logged if a user enters keyword mode but
                 doesn't complete a search. Not logged if a user enters
                 keyword mode, but selects a URL suggestion or a search
                 suggestion that is not for the keyword mode search engine."/>
    <variant name="Activated"
        summary="Logged each time a search engine's active status is switched
                 from inactive to active by the user. Not logged if the
                 search engine is switched to active automatically based on
                 prior usage."/>
    <variant name="ActiveOnStartup"
        summary="Counts the number of search engines that are active at load
                 time (usually on start up). Only gets logged once each time
                 the search engines are loaded from the database. If a user
                 changes the active status of a search engine during the same
                 browser session, this does not get logged again."/>
    <variant name="Deactivated"
        summary="Logged each time a search engine's active status is switched
                 from active to inactive by the user. Not logged when a new
                 search engine is added in a default-inactive state."/>
    <variant name="Entered"
        summary="Logged each time the user enters keyword mode. If a user
                 enters, then leaves, then re-enters keyword mode during the
                 same session (i.e. without selecting a navigation), this is
                 logged twice. If the user doesn't accept the keyword
                 suggestion, this is still logged."/>
    <variant name="InactiveOnStartup"
        summary="Counts the number of search engines that are inactive at
                 load time (usually on start up). Only gets logged once each
                 time the search engines are loaded from the database. If a
                 user changes the active status of a search engine during the
                 same browser session, this does not get logged again."/>
  </token>
</histogram>

<histogram name="Omnibox.LensAction.Precision" enum="Boolean"
    expires_after="2026-12-27">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Upon navigation, this metric is recorded if the &quot;Ask Google Lens about
    this page&quot; action was offered at least once during the course of the
    Omnibox session. Given it was offered at least once during the session, this
    records whether or not the user ultimately selected the &quot;Ask Google
    Lens about this page&quot; action in the Omnibox.

    An &quot;Omnibox session&quot; is currently defined as a span of time that
    starts when the user focuses the Omnibox and ends when the user de-focuses
    it, whether implicitly (e.g. by selecting one of the suggestions) or
    explictly (e.g. by clicking on some non-Omnibox browser UI). The session
    data that's maintained by AutocompleteResult will be initialized when the
    session starts, updated throughout the course of the session, and ultimately
    reset when the session ends.

    (Precision = Usage / Recall)
  </summary>
</histogram>

<histogram name="Omnibox.LensAction.Recall" enum="Boolean"
    expires_after="2027-01-03">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Upon navigation, this metric is recorded if the &quot;Ask Google Lens about
    this page&quot; action was offered at least once during the course of the
    Omnibox session.

    An &quot;Omnibox session&quot; is currently defined as a span of time that
    starts when the user focuses the Omnibox and ends when the user de-focuses
    it, whether implicitly (e.g. by selecting one of the suggestions) or
    explictly (e.g. by clicking on some non-Omnibox browser UI). The session
    data that's maintained by AutocompleteResult will be initialized when the
    session starts, updated throughout the course of the session, and ultimately
    reset when the session ends.

    (Recall = Usage / Precision)
  </summary>
</histogram>

<histogram name="Omnibox.LensAction.Usage" enum="Boolean"
    expires_after="2027-01-03">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Upon navigation, this metric is recorded if the user selected the &quot;Ask
    Google Lens about this page&quot; action in the Omnibox.

    An &quot;Omnibox session&quot; is currently defined as a span of time that
    starts when the user focuses the Omnibox and ends when the user de-focuses
    it, whether implicitly (e.g. by selecting one of the suggestions) or
    explictly (e.g. by clicking on some non-Omnibox browser UI). The session
    data that's maintained by AutocompleteResult will be initialized when the
    session starts, updated throughout the course of the session, and ultimately
    reset when the session ends.

    (Usage = Precision * Recall)
  </summary>
</histogram>

<histogram name="Omnibox.LoadingPredictor.MatchType.{PreconnectableType}"
    enum="OmniboxResultType" expires_after="2026-08-23">
  <owner>nidhijaju@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The type of autocomplete match with a recommended action of
    &quot;preconnect&quot; that {PreconnectableType} in a preconnect by the
    loading predictor. Emitted when an autocomplete match has a recommended
    action of &quot;preconnect&quot; as a result of the text entered into the
    omnibox changing.
  </summary>
  <token key="PreconnectableType">
    <variant name="NonPreconnectable" summary="did not result"/>
    <variant name="Preconnectable" summary="resulted"/>
  </token>
</histogram>

<histogram name="Omnibox.LocalHistoryPrefixSuggest.SearchTermsExtractionTimeV2"
    units="ms" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The amount of time it takes to extract up to the requested number of search
    terms from the database for both the default and the keyword providers (if
    applicable) and sort them by recency to produce local prefix search
    suggestions. Emitted when prefix search suggestions are requested as a
    result of the user typing into the Omnibox or the NTP Realbox.
  </summary>
</histogram>

<histogram name="Omnibox.LocalHistoryZeroSuggest.AsyncDeleteTime" units="ms"
    expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time it takes for the corresponding URLs that would produce a
    deleted match to be queried asynchronously and deleted. Emitted when user
    deletes a local history zero-prefix suggestion.
  </summary>
</histogram>

<histogram name="Omnibox.LocalHistoryZeroSuggest.SearchTermsExtractionTimeV2"
    units="ms" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The amount of time it takes to extract up to the requested number of search
    terms from the database and sort them by frecency to produce local
    zero-prefix suggestions. Emitted when zero-prefix suggestions are requested
    as a result of the user focusing into the Omnibox or the NTP Realbox.
  </summary>
</histogram>

<histogram name="Omnibox.LocalHistoryZeroSuggest.SyncDeleteTime" units="ms"
    expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time it takes to handle the deletion request for a match and
    to update the list of provider matches synchronously. Emitted when user
    requests to delete a local history zero-prefix suggestion.
  </summary>
</histogram>

<histogram name="Omnibox.LocationIconView.Update.Time" units="microseconds"
    expires_after="2027-01-24">
  <owner>gjc@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records the duration of LocationIconView::Update calls. Recorded when the
    location icon view is updated (e.g. during navigation or state changes).
    This metric is only reported for clients with high-resolution clocks.
  </summary>
</histogram>

<histogram
    name="Omnibox.MatchStability2.MatchChangeInAnyPosition{OmniboxAutocompleteUpdateSlice}"
    enum="BooleanChanged" expires_after="2027-02-07">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    This tracks how unstable omnibox matches are.

    Typically, each input change is followed by a single synchronous update, and
    then approximately 3 asynchronous updates. There may be more or less
    asynchronous updates depending on which providers are enabled for the
    particular platform/user, the input (e.g. some providers don't run for
    0-length inputs), and how quickly the input changes occur (e.g. if the
    inputs update rapidly, slower async providers won't have time to provide
    updates before they're aborted by newer inputs).

    For each autocomplete update, this histogram logs whether any match position
    changes. If 1 or more matches changed, logs true once; otherwise false once.

    When the number of matches changes, matches that are removed are considered
    a 'change', while matches that are appended are less disruptive to the user
    and not considered a 'change'. This is because this metric is primarily
    interested in how many times the user could be looking at a match with the
    intention of selecting it, and then it surprisingly goes away.

    Note that merely adding a new provider will increase these counts. That's
    intentional. Swapping matches out annoys users, and to avoid this, we should
    do some things like: caching, update coalescing, update deferral until next
    keystroke, provider timeouts, etc.

    This metric is designed to be normalized by the True count of
    Omnibox.Start.WantAsyncMatches, which will yield the number of match changes
    per keystroke or other user gesture.

    There're the related Omnibox.MatchStability2.InAnyPosition.* slices for
    tracking match instability for all, asynchronous, and synchronous updates.

    This histogram can be considered a boolean analogue to the
    Omnibox.MatchStability2.Index.* histogram which tracks which matches
    changed.

    {OmniboxAutocompleteUpdateSlice}
  </summary>
  <token key="OmniboxAutocompleteUpdateSlice"
      variants="OmniboxAutocompleteUpdateSlice"/>
</histogram>

<histogram
    name="Omnibox.MatchStability2.MatchChangeIndex{OmniboxAutocompleteUpdateSlice}"
    units="position" expires_after="2027-02-07">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    This tracks how unstable omnibox matches are.

    Typically, each input change is followed by a single synchronous update, and
    then approximately 3 asynchronous updates. There may be more or less
    asynchronous updates depending on which providers are enabled for the
    particular platform/user, the input (e.g. some providers don't run for
    0-length inputs), and how quickly the input changes occur (e.g. if the
    inputs update rapidly, slower async providers won't have time to provide
    updates before they're aborted by newer inputs).

    For each match change, this histogram logs the index of the match change.
    Match changes occur when any match position changes; i.e. is set to a new
    match different from the old match in that position, even if the new match
    was contained in the old matches set. If multiple matches change in a single
    autocomplete update, logs each. If none change in a single autocomplete
    update, this histogram is not logged.

    We primarily care about the default match, which is logged at index 0. All
    indices matter though, so we track the other indices too.

    When the number of matches changes, matches that are removed are considered
    a 'change', while matches that are appended are less disruptive to the user
    and not considered a 'change'. This is because this metric is primarily
    interested in how many times the user could be looking at a match with the
    intention of selecting it, and then it surprisingly goes away.

    Note that merely adding a new provider will increase these counts. That's
    intentional. Swapping matches out annoys users, and to avoid this, we should
    do some things like: caching, update coalescing, update deferral until next
    keystroke, provider timeouts, etc.

    This metric is designed to be normalized by the True count of
    Omnibox.Start.WantAsyncMatches, which will yield the number of match changes
    per keystroke or other user gesture.

    There're the related Omnibox.MatchStability2.Index.* slices for tracking
    match instability for all, asynchronous, and synchronous updates.

    There's the related Omnibox.MatchStability2.InAnyPosition histogram for
    tracking whether any match changed per autocomplete update.

    {OmniboxAutocompleteUpdateSlice}
  </summary>
  <token key="OmniboxAutocompleteUpdateSlice"
      variants="OmniboxAutocompleteUpdateSlice"/>
</histogram>

<histogram name="Omnibox.MobileFusebox.AiModeActivationSource"
    enum="AiModeActivationSource" expires_after="2027-10-01">
  <owner>pnoland@google.com</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the reason AI Mode was activated in the Mobile Fusebox: * Explicitly
    via the tool menu * Explicitly via a dedicated button * Implicitly due to
    the addition of attachment This is only recorded when transitioning to AI
    Mode from some other state.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.AttachmentAbandoned" units="ms"
    expires_after="2027-02-01">
  <owner>skym@chromium.org</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the amount of time between when the user choose to add an
    attachment, and when it was abandoned. Being abandoned might mean the user
    removed the attachment, or navigated, or backed out of the UI. Note that
    abandonment, success, and failure are exclusive outcomes, only one will be
    reported.
  </summary>
</histogram>

<histogram
    name="Omnibox.MobileFusebox.AttachmentAbandoned{FuseboxAttachmentButtonType}"
    units="ms" expires_after="2027-02-01">
  <owner>skym@chromium.org</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the amount of time between when the user choose to add an
    attachment, and when it was abandoned. Being abandoned might mean the user
    removed the attachment, or navigated, or backed out of the UI. Scoped to a
    particular button type. Note that abandonment, success, and failure are
    exclusive outcomes, only one will be reported.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.AttachmentButtonShown"
    enum="FuseboxAttachmentButtonType" expires_after="2027-10-01">
  <owner>pnoland@google.com</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records which attachment buttons were shown when the attachments popup was
    opened. Recorded once per popup open. Originally triggered when the popup
    was hidden instead of shown, through the plus button. This is very difficult
    to actaully do, most hidden is not from plus button, but other inputs. Do
    not trust data before the M-148 (likely merged to M-147) fix.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.AttachmentButtonUsed"
    enum="FuseboxAttachmentButtonType" expires_after="2027-10-01">
  <owner>pnoland@google.com</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Counts attachment button clicks, enumerated by the type of button. Recorded
    once per button click.
  </summary>
</histogram>

<histogram
    name="Omnibox.MobileFusebox.AttachmentButtonUsedInSession{FuseboxAttachmentButtonType}{Entrypoint}"
    enum="Boolean" expires_after="2027-10-01">
  <owner>pnoland@google.com</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records whether a given attachment button was used or not during an omnibox
    session. Recorded when the omnibox session ends only for buttons that were
    shown to the user.
  </summary>
  <token key="FuseboxAttachmentButtonType"
      variants="FuseboxAttachmentButtonType"/>
  <token key="Entrypoint" variants="ComposeboxEntrypoint"/>
</histogram>

<histogram name="Omnibox.MobileFusebox.AttachmentCountAtSubmission.{Type}"
    units="count" expires_after="2027-03-30">
  <owner>mreichhoff@chromium.org</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    The number of attachments of the specified type attached to the query when
    the user submits navigation.
  </summary>
  <token key="Type">
    <variant name="File" summary="Files"/>
    <variant name="Image" summary="Images"/>
    <variant name="Tab" summary="Tabs"/>
  </token>
</histogram>

<histogram name="Omnibox.MobileFusebox.AttachmentFailed" units="ms"
    expires_after="2027-02-01">
  <owner>skym@chromium.org</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the amount of time between when the user choose to add an
    attachment, and when it failed to upload. Note that abandonment, success,
    and failure are exclusive outcomes, only one will be reported.
  </summary>
</histogram>

<histogram
    name="Omnibox.MobileFusebox.AttachmentFailed{FuseboxAttachmentButtonType}"
    units="ms" expires_after="2027-02-01">
  <owner>skym@chromium.org</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the amount of time between when the user choose to add an
    attachment, and when it failed to upload. Scoped to a particular button
    type. Note that abandonment, success, and failure are exclusive outcomes,
    only one will be reported.
  </summary>
</histogram>

<histogram
    name="Omnibox.MobileFusebox.AttachmentLoadOOM{FuseboxAttachmentFileType}"
    enum="Boolean" expires_after="2027-03-30">
  <owner>jkoblinsky@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records whether an OutOfMemoryError was encountered while trying to read and
    prepare a {FuseboxAttachmentFileType} attachment for upload.

    There is a unique histogram for each file type (Audio, Image, PDF, ...), and
    a general aggregate total histogram for all file types.

    A value is emitted when we attempt to fetch the data of an attachment. This
    attempt occurs immediately after the Android file/gallery picker is closed
    via selection, and before the attachment is added to the Omnibox toolbar or
    uploaded to the server.

    It records true once if at least one OutOfMemoryError is thrown. It records
    false if no OutOfMemoryError is thrown, even if the fetch fails for another
    reason (e.g. IOException). At most one emission occurs per upload attempt.
    Note that duplicate files will result in separate emissions.
  </summary>
  <token key="FuseboxAttachmentFileType" variants="FuseboxAttachmentFileType"/>
</histogram>

<histogram name="Omnibox.MobileFusebox.AttachmentSizeLimitCheck"
    enum="FuseboxAttachmentSizeLimitCheck" expires_after="2027-01-10">
  <owner>jkoblinsky@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the result of the size limit check for a Fusebox file attachment.
    (whether it is under the limit or exceeds the limit on metered or unmetered
    networks), where exceeding the limit for a given file type and network
    condition will result in the file not being attached (or sent to the
    server).

    A value is emitted when the user selects a file from the file picker, or
    when they confirm their selection of multiple files from the file picker. In
    the case of multiple files, a value will be independently emitted for each
    selected file. Attaching the same file twice will result in duplicate
    emissions.

    An emission will certainly occur if the file is ultimately attached, and
    thus appears as an attachment chip. An emission will still occur even if the
    file is ultimately not attached on the client side (e.g., because its
    content cannot be read from disk or upload fails later), given that the
    title, mime type, and size can be resolved. If the title, mime type, or size
    cannot be resolved, then no emission will occur. An emission will still
    occur if the user dismisses the omnibox before the file is uploaded to the
    server, that is, the omnibox is dismissed while the loading spinner is
    shown. An emission will not occur if the user dismisses the file picker
    without selecting any files.

    At most one emission will occur per file attachment attempt. So, e.g., if a
    file is so large that it would exceed the size limit on both metered and
    unmetered networks, but the user is on a metered network, a value will be
    emitted for the metered network case, but not for the unmetered network
    case.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.AttachmentsPopupButtonClickedInSession"
    enum="Boolean" expires_after="2027-10-01">
  <owner>pnoland@google.com</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records whether the attachments popup button was clicked or not during an
    omnibox session. Recorded when the omnibox session ends.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.AttachmentsPopupToggled" enum="Boolean"
    expires_after="2027-10-01">
  <owner>pnoland@google.com</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Counts the number of times the user deliberately toggled the attachments
    popup on or off. Does not count popup dismissals as the result of attaching
    an item.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.AttachmentSucceeded" units="ms"
    expires_after="2027-02-01">
  <owner>skym@chromium.org</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the amount of time between when the user choose to add an
    attachment, and when it succeeded uploading. Note that abandonment, success,
    and failure are exclusive outcomes, only one will be reported.
  </summary>
</histogram>

<histogram
    name="Omnibox.MobileFusebox.AttachmentSucceeded{FuseboxAttachmentButtonType}"
    units="ms" expires_after="2027-02-01">
  <owner>skym@chromium.org</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the amount of time between when the user choose to add an
    attachment, and when it succeeded uploading. Scoped to a particular button
    type. Note that abandonment, success, and failure are exclusive outcomes,
    only one will be reported.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.AutocompleteRequestTypeAtAbandon"
    enum="AutocompleteRequestType" expires_after="2027-10-01">
  <owner>pnoland@google.com</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the autocomplete request type at the time of leaving the omnibox.
    Recorded when the omnibox is left without navigating.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.AutocompleteRequestTypeAtNavigation"
    enum="AutocompleteRequestType" expires_after="2027-10-01">
  <owner>pnoland@google.com</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the autocomplete request type at the time of navigation. Recorded
    when the omnibox is used to navigate.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.ContextUploadError"
    enum="ContextUploadErrorType" expires_after="2027-05-19">
  <owner>skym@chromium.org</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the error type when a context (attachment) upload fails.

    Emitted when the upload transitions to a terminal failure state (validation
    failure, upload failure, or upload expiration) after a user attempts to add
    an attachment (e.g. by choosing a file, capturing an image, or adding a tab)
    in the Composebox.

    This is recorded once per failed upload attempt. If an upload fails and is
    retried, subsequent failures will trigger additional emissions. It is not
    emitted if the upload succeeds, or if the user manually removes the pending
    attachment before the failure is reported. Adding the same attachment
    repeatedly will trigger subsequent emissions for each attempt.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.ContextUploadStatus"
    enum="ContextUploadStatus" expires_after="2027-05-19">
  <owner>skym@chromium.org</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the status of a context (attachment) upload.

    Emitted on every status change reported by the backend for an active upload,
    starting when the user adds an attachment (e.g. file, image, tab) in the
    Composebox. This includes intermediate states (processing, upload started)
    and terminal states (success, validation failed, upload failed, expired).

    Emitted multiple times per attachment upload (once for each transition). If
    the user manually removes the attachment before the upload finishes, no
    further status changes for that upload are recorded. Adding the same
    attachment repeatedly triggers subsequent emissions for each attempt.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.DragAndDrop{ComposeboxDragAndDropType}"
    enum="ComposeboxDragAndDropType" expires_after="2026-11-11">
  <owner>thegreenfrog@chromium.org</owner>
  <owner>ericekey@google.com</owner>
  <summary>
    Records the type of content (Text, Image, Tab, PDF, or Unknown) that is
    dragged and dropped into the Composebox, categorized by specific content
    type. Recorded for each processed item from a drag-and-drop action into the
    Composebox. {ComposeboxDragAndDropType}
  </summary>
  <token key="ComposeboxDragAndDropType" variants="ComposeboxDragAndDropType"/>
</histogram>

<histogram
    name="Omnibox.MobileFusebox.FileAttachmentSize{FuseboxAttachmentFileType}"
    units="KiB" expires_after="2027-05-01">
  <owner>jkoblinsky@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the size of the Fusebox file attachment.

    There is a unique histogram for each file type (Audio, Image, PDF, ...), and
    a general agregate total histogram for all file types. A value is emitted to
    both the general histogram and a specific file type histogram when the user
    selects a file from the file picker, or when they confirm their selection of
    multiple files from the file picker. In the case of multiple files, a value
    will be independently emmited for each selected file. Attaching the same
    file twice will result in duplicate emissions.

    An emmision to both histograms will certainly occur if file is ultimately
    attached, and thus appears as an attachment chip. An emmission will still
    occur even if the file is ultimately not attached on the client side (e.g.,
    because it's title cannot be resolved), given that the size and mime type
    can be resolved. If either the size or mime type cannot be resolved, then no
    emmission will occur. An emmission will still occur if the file exceeds the
    size limit (an error message is shown). An emmission will still occur if the
    user dismisses the omnibox before the file is uploaded to the server, that
    is, the omnibox is dismissed while the loading spinner is shown. An
    emmission will not occur if the user dismisses the file picker without
    selecting any files.
  </summary>
  <token key="FuseboxAttachmentFileType" variants="FuseboxAttachmentFileType"/>
</histogram>

<histogram name="Omnibox.MobileFusebox.FilesAttached" units="count"
    expires_after="2027-03-30">
  <owner>mreichhoff@chromium.org</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    The number of files attached to the query when the user selects a file.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.ImagesAttached" units="count"
    expires_after="2027-03-30">
  <owner>mreichhoff@chromium.org</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    The number of images attached to the query when the user selects an image.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.ModelAtAbandon" enum="OmniboxModelMode"
    expires_after="2027-03-20">
  <owner>skym@chromium.org</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the active model when a AI Omnibox session is ended. The model id
    comes from the server driven config.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.ModelAtNavigation"
    enum="OmniboxModelMode" expires_after="2027-03-20">
  <owner>skym@chromium.org</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the active model when a AI Omnibox session turns into a navigation.
    The model id comes from the server driven config.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.ModelButtonSelected"
    enum="OmniboxModelMode" expires_after="2027-03-20">
  <owner>skym@chromium.org</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the model that is selected when the user interacts with a model
    button on the popup. This may or may not be the model used to fulfill a
    subsequent query. The model id comes from the server driven config.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.ModelButtonShown"
    enum="OmniboxModelMode" expires_after="2027-03-20">
  <owner>skym@chromium.org</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records all of the ai mode models that are shown as options when the popup
    appears. The model id comes from the server driven config.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.NumDriveFilesAttached" units="count"
    expires_after="2027-03-30">
  <owner>erahmaoui@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    The number of Drive files attached to the query when the user selects a
    Drive file.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.TabPickerTabsAttached" units="count"
    expires_after="2027-01-10">
  <owner>ameurhosni@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the number of tabs attached via the Fusebox tab picker. Recorded
    when the user explicitly selects tabs and taps the attach button to include
    them in the Fusebox attachments.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.TextEditedBeforeAiMode" enum="Boolean"
    expires_after="2027-03-25">
  <owner>stkhapugin@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records whether the user edited the text in the Fusebox input plate before
    entering AI Mode. Recorded when AI Mode is activated.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.ToolButtonSelected"
    enum="OmniboxToolMode" expires_after="2027-03-20">
  <owner>skym@chromium.org</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the tool mode whenever it is selected by the user in the AI Mode
    popup. This may or may not be the tool used to fulfill a subsequent query.
    The tool id comes from the server driven config.
  </summary>
</histogram>

<histogram name="Omnibox.MobileFusebox.ToolButtonShown" enum="OmniboxToolMode"
    expires_after="2027-03-20">
  <owner>skym@chromium.org</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records all of the AI tool modes that are shown as options when the popup
    appears. The tool id comes from the server driven config.
  </summary>
</histogram>

<histogram name="Omnibox.MostVisitedProvider.QueryMostVisitedURLs.Duration"
    units="ms" expires_after="2026-11-12">
  <owner>niharm@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The amount of time for QueryMostVisitedURLs() to invoke its callback in the
    Most Visited Sites Provider. Only recorded when the history service callback
    is invoked when the provider is configured to query the HistoryService
    directly to update its set of most visited sites rather than querying
    TopSites to get its set of most visited sites. Currently only recorded on
    Desktop.
  </summary>
</histogram>

<histogram name="Omnibox.MostVisitedProvider.QueryMostVisitedURLs.NumReceived"
    units="count" expires_after="2026-11-12">
  <owner>niharm@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the number of results returned from HistoryService's
    QueryMostVisitedURLs() in the Most Visited Sites provider. Only recorded
    when the provider is configured to query the HistoryService directly to
    update its set of most visited sites rather than querying TopSites to get
    its set of most visited sites. Currently only recorded on Desktop.
  </summary>
</histogram>

<histogram name="Omnibox.MostVisitedProvider.QueryMostVisitedURLs.NumRequested"
    units="count" expires_after="2026-11-12">
  <owner>niharm@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the number of results requested from HistoryService's
    QueryMostVisitedURLs() in the Most Visited Sites provider. Only recorded
    when the provider is configured to query the HistoryService directly to
    update its set of most visited sites rather than querying TopSites to get
    its set of most visited sites. Currently only recorded on Desktop.
  </summary>
</histogram>

<histogram name="Omnibox.NavigationToPopupShown.DomContentLoaded" units="ms"
    expires_after="2026-11-12">
  <owner>mercerd@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between a DOMContentLoaded event and the suggest popup
    being shown to the user.

    Recorded the first time the the omnibox popup is opened after a
    DOMContentLoaded loaded. Only recorded on the first omnibox popup shown
    after a navigation. Subsequent omnibox openings are ignored. If the user
    focused the omnibox before the main document element was available, this
    metric will not be recorded. Each tab keeps track of its own page change
    events and omnibox popup open events, meaning if the user opens multiple
    tabs and opens the omnibox popup on each one, this metric will be recorded
    multiple times.
  </summary>
</histogram>

<histogram
    name="Omnibox.NavigationToPopupShown.DomContentLoaded.ByPageContext.{OmniboxPageContext}"
    units="ms" expires_after="2026-11-12">
  <owner>mercerd@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between a DOMContentLoaded event and the suggest popup
    being shown to the user.

    Recorded the first time the the omnibox popup is opened after a
    DOMContentLoaded event. Only recorded on the first omnibox popup shown after
    a navigation. Subsequent omnibox openings are ignored. If the user focused
    the omnibox before the main document element was available, this metric will
    not be recorded. Each tab keeps track of its own DOMContentLoaded events and
    omnibox popup open events, meaning if the user opens multiple tabs and opens
    the omnibox popup on each one, this metric will be recorded multiple times.

    Sliced by page context to help better understand the latency budget for
    different page types.
  </summary>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
</histogram>

<histogram name="Omnibox.NavigationToPopupShown.MainDocumentElementAvailable"
    units="ms" expires_after="2026-11-12">
  <owner>mercerd@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between a the main document element being available and
    the suggest popup being shown to the user. The main document element is
    available when the HTML has finished parsing and window.document is
    available.

    Recorded the first time the the omnibox popup is opened after a main
    document element available event. Only recorded on the first omnibox popup
    shown after a navigation. Subsequent omnibox openings are ignored. If the
    user focused the omnibox before the main document element was available,
    this metric will not be recorded. Each tab keeps track of its own main
    document element available events and omnibox popup open events, meaning if
    the user opens multiple tabs and opens the omnibox popup on each one, this
    metric will be recorded multiple times.
  </summary>
</histogram>

<histogram
    name="Omnibox.NavigationToPopupShown.MainDocumentElementAvailable.ByPageContext.{OmniboxPageContext}"
    units="ms" expires_after="2026-11-12">
  <owner>mercerd@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between a the main document element being available and
    the suggest popup being shown to the user. The main document element is
    available when the HTML has finished parsing and window.document is
    available.

    Recorded the first time the the omnibox popup is opened after a main
    document element available event. Only recorded on the first omnibox popup
    shown after a navigation. Subsequent omnibox openings are ignored. If the
    user focused the omnibox before the main document element was available,
    this metric will not be recorded. Each tab keeps track of its own main
    document element available events and omnibox popup open events, meaning if
    the user opens multiple tabs and opens the omnibox popup on each one, this
    metric will be recorded multiple times.

    Sliced by page context to help better understand the latency budget for
    different page types.
  </summary>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
</histogram>

<histogram name="Omnibox.NavigationToPopupShown.PrimaryPageChanged" units="ms"
    expires_after="2026-11-12">
  <owner>mercerd@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between a page change event and the suggest popup being
    shown to the user.

    Recorded the first time the the omnibox popup is opened after a page change
    event. Only recorded on the first omnibox popup shown after a navigation.
    Subsequent omnibox openings are ignored. If the user focused the omnibox
    before the main document element was available, this metric will not be
    recorded. Each tab keeps track of its own page change events and omnibox
    popup open events, meaning if the user opens multiple tabs and opens the
    omnibox popup on each one, this metric will be recorded multiple times.
  </summary>
</histogram>

<histogram
    name="Omnibox.NavigationToPopupShown.PrimaryPageChanged.ByPageContext.{OmniboxPageContext}"
    units="ms" expires_after="2026-11-12">
  <owner>mercerd@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time between a page change event and the suggest popup being
    shown to the user.

    Recorded the first time the the omnibox popup is opened after a page change
    event. Only recorded on the first omnibox popup shown after a navigation.
    Subsequent omnibox openings are ignored. If the user focused the omnibox
    before the main document element was available, this metric will not be
    recorded. Each tab keeps track of its own page change events and omnibox
    popup open events, meaning if the user opens multiple tabs and opens the
    omnibox popup on each one, this metric will be recorded multiple times.

    Sliced by page context to help better understand the latency budget for
    different page types.
  </summary>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
</histogram>

<histogram name="Omnibox.NonTrivialSuggestions.Precision.ByModel.{ModelMode}"
    enum="Boolean" expires_after="2027-01-17">
  <owner>christianxu@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Logged only when non-trivial suggestions were shown. Logs whether a
    non-trivial suggestion was selected (True) or a verbatim suggestion was
    selected (False), sliced by the active AIM model mode at submission time.
    This metric is only recorded when the active AIM model is explicitly
    specified (i.e., not Unspecified).
  </summary>
  <token key="ModelMode" variants="OmniboxModelMode"/>
</histogram>

<histogram name="Omnibox.NonTrivialSuggestions.Precision.ByToolType.{ToolMode}"
    enum="Boolean" expires_after="2027-01-17">
  <owner>christianxu@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Logged only when non-trivial suggestions were shown. Logs whether a
    non-trivial suggestion was selected (True) or a verbatim suggestion was
    selected (False), sliced by the active AIM tool mode at submission time.
    This metric is only recorded when the active AIM tool is explicitly
    specified (i.e., not Unspecified).
  </summary>
  <token key="ToolMode" variants="OmniboxToolMode"/>
</histogram>

<histogram
    name="Omnibox.NonTrivialSuggestions.Precision.ByToolType.{ToolMode}.ByModel.{ModelMode}"
    enum="Boolean" expires_after="2027-01-17">
  <owner>christianxu@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Logged only when non-trivial suggestions were shown. Logs whether a
    non-trivial suggestion was selected (True) or a verbatim suggestion was
    selected (False), sliced by the combination of active AIM tool mode and
    model mode. This metric is only recorded when the active AIM tool and model
    is explicitly specified (i.e., not Unspecified).
  </summary>
  <token key="ToolMode" variants="OmniboxToolMode"/>
  <token key="ModelMode" variants="OmniboxModelMode"/>
</histogram>

<histogram name="Omnibox.NonTrivialSuggestions.Recall.ByModel.{ModelMode}"
    enum="Boolean" expires_after="2027-01-17">
  <owner>christianxu@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Logs whether non-trivial (non-verbatim) suggestions were shown (True) or not
    (False) for a submitted query, sliced by the AIM model mode that was active.
    This metric is only recorded when the active AIM model is explicitly
    specified (i.e., not Unspecified).
  </summary>
  <token key="ModelMode" variants="OmniboxModelMode"/>
</histogram>

<histogram name="Omnibox.NonTrivialSuggestions.Recall.ByToolType.{ToolMode}"
    enum="Boolean" expires_after="2026-11-12">
  <owner>christianxu@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Logs whether non-trivial (non-verbatim) suggestions were shown (True) or not
    (False) for a submitted query, sliced by the AIM tool mode that was active.
    This metric is only recorded when the active AIM tool is explicitly
    specified (i.e., not Unspecified).
  </summary>
  <token key="ToolMode" variants="OmniboxToolMode"/>
</histogram>

<histogram
    name="Omnibox.NonTrivialSuggestions.Recall.ByToolType.{ToolMode}.ByModel.{ModelMode}"
    enum="Boolean" expires_after="2026-11-12">
  <owner>christianxu@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Logs whether non-trivial (non-verbatim) suggestions were shown (True) or not
    (False) for a submitted query, sliced by the combination of AIM tool mode
    and model mode that were active. This metric is only recorded when the
    active AIM tool and model is explicitly specified (i.e., not Unspecified).
  </summary>
  <token key="ToolMode" variants="OmniboxToolMode"/>
  <token key="ModelMode" variants="OmniboxModelMode"/>
</histogram>

<histogram name="Omnibox.NumberOfVisibleCharacters" units="characters"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>woa-performance-bugs+jank@google.com</owner>
  <summary>
    Records the number of characters visible in the omnibox. Recorded once per
    call to UrlBar.calculateVisibleHint().
  </summary>
</histogram>

<histogram name="Omnibox.NumCalculatorMatches" units="count"
    expires_after="2026-11-12">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    How many calculator matches where shown. Includes matches from both the
    search and calculator providers.

    Logged after deduping, so duplicate matches from the search and calc
    provider won't be double counted.

    Logged after culling, so matches that were generated but not shown are not
    counted.

    Logged when the last provider calls `OnProviderUpdate()`. So autocomplete
    calls with `omit_asynchronous_matches` true (i.e. classification calls)
    won't log this. Likewise, interrupted autocompleted passes (i.e. when the
    user is typing faster than the slowest async provider) won't log this. The
    search and calculator providers are on the slow end of async providers; so
    if they complete, it's likely this will be logged.

    Logged once per input (whose last autocomplete pass completed). Not logged
    once per autocomplete pass or once per omnibox selection.
  </summary>
</histogram>

<histogram name="Omnibox.NumTypedTerms" units="terms"
    expires_after="2026-11-12">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of terms in the text the user entered in the omnibox when they
    used the omnibox to go somewhere. Terms are defined by splitting on
    whitespace. All values larger than 6 are recorded in bucket 6.

    In M-74 and earlier, this was only recorded if the user had no incognito
    windows open. In M-75 and later, it records all omnibox interactions
    regardless, in order to be consistent with how user actions and histograms
    are handled.
  </summary>
</histogram>

<histogram name="Omnibox.OnDeviceBrainModel.Latency" units="ms"
    expires_after="2026-11-12">
  <owner>cechen@google.com</owner>
  <owner>suggest-2g@google.com</owner>
  <summary>
    Recorded once when OnDeviceHeadProvider is run and the provider calls the on
    device brain model. Records the latency for the brain model to generate
    predictions for a given prefix, in unit millisecond.
  </summary>
</histogram>

<histogram name="Omnibox.OnDeviceBrainModel.NumResults" units="count"
    expires_after="2026-11-12">
  <owner>cechen@google.com</owner>
  <owner>suggest-2g@google.com</owner>
  <summary>
    Recorded once when OnDeviceHeadProvider is run and the provider calls the on
    device brain model. Records how many predictions the brain model generates
    for a given prefix.
  </summary>
</histogram>

<histogram name="Omnibox.OnDeviceBrainModel.ResultLength" units="chars"
    expires_after="2026-11-12">
  <owner>cechen@google.com</owner>
  <owner>suggest-2g@google.com</owner>
  <summary>
    Recorded once for each prediction when OnDeviceHeadProvider is run and the
    provider calls the on device brain model to generate predictions for a given
    prefix. Records the length of each prediction respectively.
  </summary>
</histogram>

<histogram name="Omnibox.OnPopupOpen.PaywallSignal" enum="PaywallSignal"
    expires_after="2026-08-09">
  <owner>juanmojica@google.com</owner>
  <owner>mercerd@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Recorded once when the omnibox suggestion popup is opened. Records the
    current page paywall signal status as of the time the popup was opened.
    Records the paywall signal if its present, or unavailable if the APC was not
    available when the popup opened. This does not indicate that contextual
    suggestions were shown or hidden.
  </summary>
</histogram>

<histogram name="Omnibox.OpenMatchWithKeyboardModifiers"
    enum="OpenMatchWithKeyboardModifiers" expires_after="2027-01-17">
  <owner>manukh@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records what keyboard modifiers were used to alter the way the match opens.
    E.g. &quot;alt+return&quot; to open the match in a new foreground tab.

    Recorded once each time the user presses &quot;return&quot; in the omnibox.

    Recorded when the user presses &quot;return&quot; to open a match. The
    keyboard modifiers do affect how the match is opened.

    Recorded when the user presses &quot;return&quot; to open a pedal. The
    keyboard modifiers sometimes affect how the pedal is opened, but sometimes
    don't; e.g. modifiers don't affect the &quot;open incognito window&quot;
    pedal.

    Recorded when the user presses &quot;return&quot; to activate the
    &quot;switch to tab&quot; chip. The keyboard modifiers do not affect how tab
    switch behaves.

    Recorded when the user presses &quot;return&quot; on a match that does not
    navigate or perform an action (e.g. empty keyword inputs, instant keyword
    matches, or null match). The keyboard modifiers do not have an effect.

    Not recorded when the user mouse clicks or gestures to open a match. The
    keyboard modifiers do not affect how the match is opened.

    Does not record modifiers ignored in determining match opening. E.g.,
    &quot;option+return&quot; and &quot;option+command+return&quot; both open
    the match in a new foreground tab and both record the same value. This case
    of ignored modifiers only occurs on mac with the (&quot;option+return&quot;
    and &quot;option+command+return&quot;) pair and their +shift and +ctrl
    variants.

    This metric uses the key names used in the code rather than the names used
    commonly on each OS. E.g. linux's &quot;super&quot; is coded as
    &quot;command&quot; in chrome. The user pressing &quot;super+return&quot;
    will log &quot;command+return&quot; instead.
  </summary>
</histogram>

<histogram name="Omnibox.PaintTime" units="ms" expires_after="2027-01-17">
  <owner>manukh@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the time to paint the omnibox contents. This is a subcomponent of
    Omnibox.CharTypedToRepaintLatency. Implemented on desktop platforms.
  </summary>
</histogram>

<histogram name="Omnibox.Paste" units="count" expires_after="2027-01-24">
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of paste commands on the text in the omnibox. Reported every time
    a paste command is done.
  </summary>
</histogram>

<histogram name="Omnibox.PedalShown" enum="SuggestionPedalType"
    expires_after="2027-01-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>orinj@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Counts the type (concept ID) of omnibox pedals shown when the user used the
    omnibox to go somewhere.

    Pedals are a button attached to a search suggestion that either navigate to
    a chrome:// URL or trigger a Chrome action (for example, opening the page
    translation dialog or opening a new window in Incognito mode).

    Note that, while it is uncommon, it is possible for multiple pedals to be
    shown at one time so this can't be used as a count of how many times a pedal
    or pedals were present.

    This histogram is related to Omnibox.SuggestionUsed.Pedal.

    Starting with Chrome/Android M142 this histogram is recorded whenever the
    Omnibox is used to navigate somewhere, closely matching how other Omnibox
    histograms are recorded. Before M142 this histogram would be recorded any
    time the Omnibox interaction has completed, whether the user initiated
    navigation or not.
  </summary>
</histogram>

<histogram name="Omnibox.Popup.Aim.ConstructionToFirstShownDuration" units="ms"
    expires_after="2026-12-22">
  <owner>mahmadi@chromium.org</owner>
  <owner>kylixrd@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Records the time between the AI Mode WebUI page load which happens when the
    popup presenter is constructed and the first time the popup widget is shown.
    Given that the AI Mode WebUI page begins the asynchronous process of loading
    its resources, initialization, and binding immediately after it is loaded,
    this metric can be seen as a time budget for the AI Mode WebUI page remote
    to be bound and ready to receive calls. Recorded at most once per browser
    window.

    Recorded the very first time the AI Mode WebUI Omnibox popup is shown to the
    user during the course of a browser session (i.e. subsequent show-popup
    operations in the same browser window DO NOT log this histogram).
  </summary>
</histogram>

<histogram name="Omnibox.Popup.Aim.CrashRecovery" enum="Boolean"
    expires_after="2026-12-22">
  <owner>avivkiss@chromium.org</owner>
  <owner>kylixrd@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records whether the renderer process has crashed and the contents is being
    reloaded before showing the WebUI AI Mode popup.

    Recorded every time the AI Mode WebUI Omnibox popup web content is shown.
  </summary>
</histogram>

<histogram name="Omnibox.Popup.Aim.RendererProcessGoneStatus"
    enum="OmniboxWebUIRendererProcessGoneStatus" expires_after="2026-12-22">
  <owner>avivkiss@chromium.org</owner>
  <owner>kylixrd@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the termination status of the AI Mode Popup WebUI renderer process
    when it goes away, whether due to normal termination or a process crash.
    This helps monitor crash rates and types.
  </summary>
</histogram>

<histogram name="Omnibox.Popup.FullWebUI.ConstructionToFirstShownDuration"
    units="ms" expires_after="2026-12-22">
  <owner>khalidpeer@chromium.org</owner>
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Records the time between the Full WebUI page load which happens when the
    omnibox popup presenter is constructed and the first time the popup widget
    is shown. Given that the Full WebUI page begins the asynchronous process of
    loading its resources, initialization, and binding immediately after it is
    loaded, this metric can be seen as a time budget for the WebUI page remote
    to be bound and ready to receive calls. Recorded at most once per browser
    window.

    Recorded the very first time the full WebUI Omnibox popup is shown to the
    user during the course of a browser session (i.e. subsequent show-popup
    operations in the same browser window DO NOT log this histogram).
  </summary>
</histogram>

<histogram name="Omnibox.Popup.FullWebUI.CrashRecovery" enum="Boolean"
    expires_after="2026-12-22">
  <owner>khalidpeer@chromium.org</owner>
  <owner>avivkiss@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records whether the renderer process has crashed and the contents is being
    reloaded before showing the Full WebUI Omnibox popup.

    Recorded every time the full WebUI Omnibox popup web content is shown.
  </summary>
</histogram>

<histogram name="Omnibox.Popup.FullWebUI.RendererProcessGoneStatus"
    enum="OmniboxWebUIRendererProcessGoneStatus" expires_after="2026-12-22">
  <owner>khalidpeer@chromium.org</owner>
  <owner>avivkiss@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the termination status of the Full WebUI Omnibox Popup renderer
    process when it goes away, whether due to normal termination or a process
    crash. This helps monitor crash rates and types.
  </summary>
</histogram>

<histogram name="Omnibox.Popup.ResultToContentReadyEarlyExitReason"
    enum="OmniboxPopupResultToContentReadyEarlyExitReason"
    expires_after="2027-01-17">
  <owner>mych@chromium.org</owner>
  <owner>ryanakiyama@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the number of times the Views popup was shown but not being able to
    record the Omnibox.Popup.ResultToContentReady metric due to various early
    exit reasons.
  </summary>
</histogram>

<histogram name="Omnibox.Popup.ResultToContentReadyOnFirstShow" units="ms"
    expires_after="2027-01-17">
  <owner>mych@chromium.org</owner>
  <owner>ryanakiyama@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Measures the latency from when the Omnibox controller receives a new set of
    results to when the popup is rendered and visible for the very first time
    after popup creation. Recorded at most once per popup lifetime.

    The starting point is when the controller receives autocomplete results and
    begins updating the UI. The end point is when content is ready (compositor
    presentation for Views).
  </summary>
</histogram>

<histogram name="Omnibox.Popup.ResultToContentReadyPerShow" units="ms"
    expires_after="2027-01-17">
  <owner>mych@chromium.org</owner>
  <owner>ryanakiyama@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Measures the latency from when the Omnibox controller receives a new set of
    results to when the popup is rendered and visible. Recorded every time the
    popup transitions from closed to open.

    The starting point is when the controller receives autocomplete results and
    begins updating the UI. The end point is when content is ready (compositor
    presentation for Views).
  </summary>
</histogram>

<histogram name="Omnibox.Popup.WebUI.ConstructionToFirstShownDuration"
    units="ms" expires_after="2026-12-22">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Records the time between the WebUI page load which happens when the omnibox
    popup presenter is constructed and the first time the popup widget is shown.
    Given that the WebUI page begins the asynchronous process of loading its
    resources, initialization, and binding immediately after it is loaded, this
    metric can be seen as a time budget for the WebUI page remote to be bound
    and ready to receive calls. Recorded at most once per browser window.

    Recorded the very first time the classic WebUI Omnibox popup is shown to the
    user during the course of a browser session (i.e. subsequent show-popup
    operations in the same browser window DO NOT log this histogram).
  </summary>
</histogram>

<histogram name="Omnibox.Popup.WebUI.CrashRecovery" enum="Boolean"
    expires_after="2026-12-22">
  <owner>avivkiss@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records whether the renderer process has crashed and the contents is being
    reloaded before showing the classic WebUI Omnibox popup.

    Recorded every time the classic WebUI Omnibox popup web content is shown.
  </summary>
</histogram>

<histogram name="Omnibox.Popup.WebUI.PageRemoteIsBoundOnFirstCall"
    enum="Boolean" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records whether WebUI page remote is bound and ready to receive calls when
    the WebUI Handler attempts to make its first call to the WebUI Page.
    Recorded at most once per browser window.
  </summary>
</histogram>

<histogram name="Omnibox.Popup.WebUI.RendererProcessGoneStatus"
    enum="OmniboxWebUIRendererProcessGoneStatus" expires_after="2026-12-22">
  <owner>avivkiss@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the termination status of the Omnibox WebUI renderer process when it
    goes away, whether due to normal termination or a process crash. This helps
    monitor crash rates and types.
  </summary>
</histogram>

<histogram name="Omnibox.Popup.WebUI.ResultChangedToRepaintLatency.ToPaint"
    units="ms" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Records the time between AutocompleteController::Observer's OnResultChanged
    is called and the time when the &lt;cr-searchbox-dropdown&gt; is ready to
    render the results. If there are multiple calls to OnResultChanged before
    the results are rendered, logs the time since the earliest. This is
    Comparable to Omnibox.WebUI.CharTypedToRepaintLatency.ToPaint but excludes
    the time taken to send the input to the browser and process it. Similarly
    this does not take into account the time the DOM change task spends in the
    message loop nor its duration.
  </summary>
</histogram>

<histogram name="Omnibox.Popup.{WebUIType}.ContentReady.Duration" units="ms"
    expires_after="2026-12-22">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the duration it took for the visual state callback to be called (or
    fallback timeout to be reached) during a deferred show of the {WebUIType}
    popup, for every show of the popup.
  </summary>
  <token key="WebUIType" variants="OmniboxPopupWebUIType"/>
</histogram>

<histogram name="Omnibox.Popup.{WebUIType}.ContentReady.Duration.FirstShow"
    units="ms" expires_after="2026-12-22">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the duration it took for the visual state callback to be called (or
    fallback timeout to be reached) during a deferred show of the {WebUIType}
    popup, for the first show of the popup.
  </summary>
  <token key="WebUIType" variants="OmniboxPopupWebUIType"/>
</histogram>

<histogram name="Omnibox.Popup.{WebUIType}.ContentReady.FromTimeout"
    enum="Boolean" expires_after="2026-12-22">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records whether the deferred show of the {WebUIType} popup was triggered by
    the fallback timer task (True) or the visual state callback (False), for
    every show of the popup.
  </summary>
  <token key="WebUIType" variants="OmniboxPopupWebUIType"/>
</histogram>

<histogram name="Omnibox.Popup.{WebUIType}.ContentReady.FromTimeout.FirstShow"
    enum="Boolean" expires_after="2026-12-22">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records whether the deferred show of the {WebUIType} popup was triggered by
    the fallback timer task (True) or the visual state callback (False), for the
    first show of the popup.
  </summary>
  <token key="WebUIType" variants="OmniboxPopupWebUIType"/>
</histogram>

<histogram name="Omnibox.Popup.{WebUIType}.ResultToContentReadyEarlyExitReason"
    enum="OmniboxPopupResultToContentReadyEarlyExitReason"
    expires_after="2027-01-17">
  <owner>mych@chromium.org</owner>
  <owner>ryanakiyama@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the reason for early exit when the ResultToContentReady latency
    cannot be recorded for the {WebUIType} popup. Metrics for the AIM popup will
    not be recorded because it's triggered via explicit user interaction versus
    an async autocomplete result delivery.
  </summary>
  <token key="WebUIType" variants="OmniboxPopupWebUIType"/>
</histogram>

<histogram name="Omnibox.Popup.{WebUIType}.ResultToContentReadyOnFirstShow"
    units="ms" expires_after="2027-01-17">
  <owner>mych@chromium.org</owner>
  <owner>ryanakiyama@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the latency from when the popup results are updated to the first
    visual state change of the {WebUIType} popup on the first show. Metrics for
    the AIM popup will not be recorded because it's triggered via explicit user
    interaction versus an async autocomplete result delivery.
  </summary>
  <token key="WebUIType" variants="OmniboxPopupWebUIType"/>
</histogram>

<histogram name="Omnibox.Popup.{WebUIType}.ResultToContentReadyPerShow"
    units="ms" expires_after="2027-01-17">
  <owner>ryanakiyama@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the latency from when the popup results are updated to the first
    visual state change of the {WebUIType} popup. Metrics for the AIM popup will
    not be recorded because it's triggered via explicit user interaction versus
    an async autocomplete result delivery.
  </summary>
  <token key="WebUIType" variants="OmniboxPopupWebUIType"/>
</histogram>

<histogram name="Omnibox.Popup.{WebUIType}.ShowToPaint.Duration" units="ms"
    expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>ryanakiyama@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Record the time between the request of the {WebUIType} widget to show and
    when the first frame is painted by the widget on the screen, for every show
    of the popup.
  </summary>
  <token key="WebUIType" variants="OmniboxPopupWebUIType"/>
</histogram>

<histogram name="Omnibox.Popup.{WebUIType}.ShowToPaint.Duration.FirstShow"
    units="ms" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>ryanakiyama@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Record the time between the first request of the {WebUIType} widget to show
    and when the first frame is painted by the widget on the screen, for the
    first show of the popup.
  </summary>
  <token key="WebUIType" variants="OmniboxPopupWebUIType"/>
</histogram>

<histogram name="Omnibox.ProviderTime2.{OmniboxProvider}" units="ms"
    expires_after="2027-01-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The length of time taken by the {OmniboxProvider}Provider's synchronous
    pass.
  </summary>
  <token key="OmniboxProvider" variants="OmniboxProviders"/>
</histogram>

<histogram name="Omnibox.QueryTime2{QueryTimeSuffix}" units="ms"
    expires_after="2027-01-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Time it takes for the omnibox to become responsive to user input after the
    user has typed N characters (for 'Omnibox.QueryTime2.N') or any length input
    (for 'Omnibox.QueryTime2'). This measures the time it takes to start all
    autocomplete providers (but not wait for the asynchronous ones to finish).
    {QueryTimeSuffix}
  </summary>
  <token key="QueryTimeSuffix">
    <variant name=""/>
    <variant name=".0" summary="N = 0"/>
    <variant name=".1" summary="N = 1"/>
    <variant name=".2" summary="N = 2"/>
    <variant name=".3" summary="N = 3"/>
    <variant name=".4" summary="N = 4"/>
    <variant name=".5" summary="N = 5"/>
  </token>
</histogram>

<histogram name="Omnibox.ResumeJourneyShown" units="position"
    expires_after="2026-11-12">
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Emits the position of any &quot;Resume Journey&quot; omnibox actions shown
    in the popup. The position index is 0-based, so an action shown in the
    topmost match is logged as value 0, consistent with
    Omnibox.SelectedPosition.

    Note that these are emitted when the user uses the omnibox to go somewhere.
    When that happens, one count is emitted per action visible in the popup.
    These are NOT emitted per-keystroke, in order to make this a suitable
    denominator for Omnibox.SuggestionUsed.ResumeJourney.
  </summary>
</histogram>

<histogram name="Omnibox.ResumeJourneyShown.ClusterKeywordType"
    enum="HistoryClusterKeywordType" expires_after="2024-12-08">
  <owner>junzou@chromium.org</owner>
  <owner>chrome-intelligence-core@google.com</owner>
  <summary>
    Emits the type of the matched cluster keyword of any &quot;Resume
    Journey&quot; omnibox actions shown in the popup. The types indicate the
    sources from which the keywords are generated in the history clustering
    backend.

    Note that these are emitted when the user uses the omnibox to go somewhere.
    When that happens, one keyword type is emitted per action visible in the
    popup. These are NOT emitted per-keystroke, in order to make this a suitable
    denominator for Omnibox.SuggestionUsed.ResumeJourney.ClusterKeywordType.
  </summary>
</histogram>

<histogram name="Omnibox.RichAutocompletion.Triggered"
    enum="OmniboxRichAutocompletionType" expires_after="2025-09-14">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Measures the number of sessions for which each type of rich autocompletion
    triggered; does not measure the number of times each type of rich
    autocompletion triggered.

    As the user types into the omnibox, the omnibox suggestions are updated.
    Some of those suggestions may have rich autocompletion. No suggestion may
    have multiple types of rich autocompletion. A type of rich autocompletion is
    considered triggered only if the default suggestion has rich autocompletion.
    If a non-default suggestion has rich autocompletion, does not suffice. If
    any input during the session triggered a rich autocompletion type, that type
    is considered triggered for the entire session.

    Recorded multiple times per omnibox session (i.e. per user selecting a
    suggestion). Recorded once for each type of rich autocompletion that
    triggered during the session (i.e. while the user was typing their input).
    If a rich autocompletion type triggered multiple times during the session
    (very common), it will be logged exactly once. Hence, it's impossible for
    any single bucket's count to be larger than the count of omnibox sessions or
    Omnibox.RichAutocompletion.Triggered.Any. If multiple rich autocompletion
    types triggered during the session (less common), each will be logged.
    Hence, it's possible for the total count of this histogram to be larger than
    the count of omnibox sessions.
  </summary>
</histogram>

<histogram name="Omnibox.RichAutocompletion.Triggered.Any" enum="Boolean"
    expires_after="2025-09-14">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Measures the number of sessions for which any type of rich autocompletion
    triggered.

    As the user types into the omnibox, the omnibox suggestions are updated.
    Some of those suggestions may have rich autocompletion. No suggestion may
    have multiple types of rich autocompletion. A type of rich autocompletion is
    considered triggered only if the default suggestion has rich autocompletion.
    If a non-default suggestion has rich autocompletion, does not suffice. If
    any input during the session triggered a rich autocompletion type, that type
    is considered triggered for the entire session.

    The related &quot;Omnibox.RichAutocompletion.Triggered&quot; histogram
    breaks down the trigger count for each rich autocompletion type.

    Recorded exactly once per omnibox session (i.e. per user selecting a
    suggestion).
  </summary>
</histogram>

<histogram name="Omnibox.ScrollToTLD.Duration" units="ms"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>woa-performance-bugs+jank@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the amount of time it takes to call UrlBar.scrollToTLD(). Logged
    once per call.

    Note: There is a recording gap between: 2026.03-2026.08.
  </summary>
</histogram>

<histogram name="Omnibox.Search.CtrlEnter.ResolvedAsUrl" enum="Boolean"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Whenever Ctrl+Enter is used to complete an interaction with the Omnibox,
    this metric captures whether the keystroke was used to initiate navigation
    to a website (by affixing &quot;.com&quot;) or execute a search query (if
    affixing &quot;.com&quot; would not produce a valid URL).

    Recorded each time Ctrl+Enter is used to complete an interaction.

    Note: There is a recording gap between: 2026.07-2026.08.
  </summary>
</histogram>

<histogram name="Omnibox.Search.CtrlEnter.Used" enum="BooleanUsage"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Whether Ctrl+Enter key combination was used to complete an interaction with
    the Omnibox.

    Recorded each time user accepts Omnibox text via Keyboard.

    Note: There is a recording gap between: 2026.07-2026.08.
  </summary>
</histogram>

<histogram name="Omnibox.Search.OffTheRecord" enum="BooleanOffTheRecord"
    expires_after="2027-01-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>roagarwal@chromium.org</owner>
  <owner>chrome-incognito@google.com</owner>
  <summary>
    This histogram records the number of searches done from omnibox using
    default search engine on desktop and android devices, sliced based on being
    in regular mode or private modes.
  </summary>
</histogram>

<histogram name="Omnibox.Search.XGeoHeaderAttached" enum="Boolean"
    expires_after="2027-02-07">
  <owner>andypaicu@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records whether the X-Geo HTTP header was attached to a search request
    originating from the omnibox. Emitted when the network loader throttle
    processes WillStartRequest or WillRedirectRequest for default search engine
    search requests.
  </summary>
</histogram>

<histogram name="Omnibox.SearchboxStats.Length" units="chars"
    expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the length of the gs_lcrp= param in the Search Result Page request
    URLs. Recorded every time a Search Result Page URL is generated in the
    omnibox/realbox. This happens either when the user selects a suggestion in
    order to load Search Result Page or when a proactive request is made to
    prefetch the Search Result Page.
  </summary>
</histogram>

<histogram name="Omnibox.SearchEngineType.PostNavigation"
    enum="OmniboxSearchEngineType" expires_after="2027-01-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>wfh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The type of search engine associated with a match opened from the omnibox,
    recorded after all navigations (including server redirects) have completed.
  </summary>
</histogram>

<histogram name="Omnibox.SearchEngineType{Population}"
    enum="OmniboxSearchEngineType" expires_after="2027-01-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The type of search engine associated with a match opened from the omnibox.

    {Population}
  </summary>
  <token key="Population">
    <variant name="" summary="Reported for all users."/>
    <variant name=".Fallback.DefaultSearchProvider"
        summary="Reported for users whose default search engine was
                 pre-populated based on country/distribution channel."/>
    <variant name=".SetByEnterprisePolicy"
        summary="Reported for users with search engine set by Enterprise
                 policy."/>
    <variant name=".SetByEnterprisePolicy.DefaultSearchProvider"
        summary="Reported for users with search engine set by the
                 DefaultSearchProvider* Enterprise policies."/>
    <variant name=".SetByEnterprisePolicy.EnterpriseSearchAggregatorSettings"
        summary="Reported for users with search engine set by the
                 EnterpriseSearchAggregatorSettings policy."/>
    <variant name=".SetByEnterprisePolicy.SiteSearchSettings"
        summary="Reported for users with search engine set by the
                 SiteSearchSettings Enterprise policy."/>
    <variant name=".SetByExtension"
        summary="Reported for users with search engine set by an extension."/>
    <variant name=".SetByExtension.OmniboxAPI"
        summary="Reported for users with search engine set by an extension
                 using the chrome.omnibox API."/>
    <variant name=".SetByExtension.SettingsOverrideDefaultSearchProvider"
        summary="Reported for users with search engine set by an extension
                 using the Settings Override API and setting is_default to
                 true."/>
    <variant name=".SetByExtension.SettingsOverrideNonDefaultSearchProvider"
        summary="Reported for users with search engine set by an extension
                 using the Settings Override API and setting is_default to
                 false."/>
    <variant name=".SetByUser.DefaultSearchProvider"
        summary="Reported for users who selected their default search engine
                 using chrome://settings or a choice screen."/>
  </token>
</histogram>

<histogram name="Omnibox.SearchPrefetch.CacheAliasOnCompleteNetError"
    enum="NetErrorCodes" expires_after="2027-09-20">
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Records the network error code from the completion status when a search
    prefetch request using CacheAliasSearchPrefetchURLLoader completes. This is
    recorded in CacheAliasSearchPrefetchURLLoader::OnComplete. net::OK (value 0)
    is recorded on success. This helps monitor network failures for search
    prefetches that are aliased in the cache.
  </summary>
</histogram>

<histogram name="Omnibox.SearchPrefetch.KeepAliveRequestFinalStage"
    enum="FetchKeepAliveRequestStage" expires_after="2026-11-15">
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Records the final stage of a keep-alive request for search prefetch
    activated pages. Recorded when the SearchPrefetchKeepAliveRequestTracker is
    destroyed.
  </summary>
</histogram>

<histogram
    name="Omnibox.SearchPrefetch.SearchWhatYouTypedWasAlsoSuggested.{HistoryOrSuggest}"
    enum="Boolean" expires_after="2023-05-02">
  <owner>ryansturm@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records whether a &quot;search what you type&quot; omnibox navigation was
    also a {HistoryOrSuggest} type. Recorded when the user navigates to a search
    via typing the full query into the omnibox.
  </summary>
  <token key="HistoryOrSuggest">
    <variant name="History" summary="history"/>
    <variant name="HistoryOrSuggest" summary="history or suggest"/>
    <variant name="Suggest" summary="suggest"/>
  </token>
</histogram>

<histogram
    name="Omnibox.SearchPrefetch.TakePrefetchResponseFromMemoryCache.ResourceResponseReceived"
    enum="Boolean" expires_after="2027-02-14">
  <owner>gjc@google.com</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Records whether the resource response is available when the prefetch
    response is taken from the memory cache. This histogram helps understand the
    critical path of loading if a prefetch is triggered. The result determines
    if the navigation itself or the prefetch is in the critical path.
  </summary>
</histogram>

<histogram name="Omnibox.SearchPreload.ForwardingResult.NotServedToPrerender"
    enum="SearchPreloadForwardingResult" expires_after="2026-12-20">
  <owner>lingqi@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Recorded when posting a task to destroy StreamingSearchPrefetchURLLoader.
    Used to track whether the native forwarding works as expected. Together with
    Omnibox.SearchPreload.ForwardingResult.WasServedToPrerender, these two
    metrics are used to monitor whether shareable cache does not break the
    forwarding logic.
  </summary>
</histogram>

<histogram name="Omnibox.SearchPreload.ForwardingResult.WasServedToPrerender"
    enum="SearchPreloadForwardingResult" expires_after="2026-12-27">
  <owner>lingqi@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Recorded when posting a task to destroy StreamingSearchPrefetchURLLoader.
    Together with Omnibox.SearchPreload.ForwardingResult.NotServedToPrerender,
    these two metrics are used to monitor whether shareable cache does not break
    the forwarding logic.
  </summary>
</histogram>

<histogram name="Omnibox.SearchPreload.ResponseDataReaderFinalStatus.Prerender"
    enum="SearchPrefetchResponseDataReaderStatus" expires_after="2027-08-22">
  <owner>lingqi@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Tracks whether the StreamingSearchPrefetchURLLoader::ResponseReader can
    successfully serving to prerender clients. Recorded when a
    `StreamingSearchPrefetchURLLoader::ResponseReader` is destroyed.
  </summary>
</histogram>

<histogram name="Omnibox.SearchSuggest.Requests"
    enum="SearchSuggestRequestEvent" expires_after="2027-01-17">
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>cch@chromium.org</owner>
  <summary>
    Counts the number of requests SearchProvider sent, were invalidated, and
    were completed successfully.
  </summary>
</histogram>

<histogram name="Omnibox.Start.WantAsyncMatches" enum="Boolean"
    expires_after="2027-02-07">
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Whether asynchronous matches are requested. Recorded every time
    AutocompleteController::Start() is called.

    False counts roughly correspond to non-interactive invocations of
    AutocompleteController - like when we are classifying user text as a Search
    or URL.

    True counts roughly correspond to keystrokes or on-focus events, and can be
    used as a normalizer for per-user-gesture metrics.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionShown.ClientSummarizedResultType"
    enum="ClientSummarizedResultType" expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    When the user makes an omnibox selection to go somewhere, this records
    whether each (summarized) type of suggestion was shown at least once during
    the course of the Omnibox session.

    An &quot;Omnibox session&quot; is currently defined as a span of time that
    starts when the user focuses the Omnibox and ends when the user de-focuses
    it, whether implicitly (e.g. by selecting one of the suggestions) or
    explictly (e.g. by clicking on some non-Omnibox browser UI). The session
    data that's maintained by AutocompleteResult will be initialized when the
    session starts, updated throughout the course of the session, and ultimately
    reset when the session ends.
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestionShown.ClientSummarizedResultType.ByPageContext.{OmniboxPageContext}"
    enum="ClientSummarizedResultType" expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    When the user makes an omnibox selection to go somewhere, this records
    whether each (summarized) type of suggestion was shown at least once during
    the course of the Omnibox session.

    An &quot;Omnibox session&quot; is currently defined as a span of time that
    starts when the user focuses the Omnibox and ends when the user de-focuses
    it, whether implicitly (e.g. by selecting one of the suggestions) or
    explictly (e.g. by clicking on some non-Omnibox browser UI). The session
    data that's maintained by AutocompleteResult will be initialized when the
    session starts, updated throughout the course of the session, and ultimately
    reset when the session ends.

    Sliced by page context in order to allow us to answer questions like: Did
    the user see at least one Search/URL suggestion, during the course of the
    Omnibox session, when they selected a suggestion in the given page context?
  </summary>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
</histogram>

<histogram name="Omnibox.SuggestionShown.SuggestionResultType"
    enum="SuggestionResultType" expires_after="2027-03-25">
  <owner>mahmadi@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>Records which suggestion URL was selected.</summary>
</histogram>

<histogram
    name="Omnibox.SuggestionShown.{OmniboxZeroPrefixState}.ClientSummarizedResultType"
    enum="ClientSummarizedResultType" expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    When the user makes an omnibox selection to go somewhere, this records
    whether each (summarized) type of suggestion was shown at least once during
    the course of the Omnibox session.

    An &quot;Omnibox session&quot; is currently defined as a span of time that
    starts when the user focuses the Omnibox and ends when the user de-focuses
    it, whether implicitly (e.g. by selecting one of the suggestions) or
    explictly (e.g. by clicking on some non-Omnibox browser UI). The session
    data that's maintained by AutocompleteResult will be initialized when the
    session starts, updated throughout the course of the session, and ultimately
    reset when the session ends.

    Sliced by zero-prefix state in order to allow us to answer questions like:
    Did the user see at least one zero-prefix/typed Search/URL suggestion during
    the course of the Omnibox session?
  </summary>
  <token key="OmniboxZeroPrefixState" variants="OmniboxZeroPrefixState"/>
</histogram>

<histogram
    name="Omnibox.SuggestionShown.{OmniboxZeroPrefixState}.ClientSummarizedResultType.ByPageContext.{OmniboxPageContext}"
    enum="ClientSummarizedResultType" expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    When the user makes an omnibox selection to go somewhere, this records
    whether each (summarized) type of suggestion was shown at least once during
    the course of the Omnibox session.

    An &quot;Omnibox session&quot; is currently defined as a span of time that
    starts when the user focuses the Omnibox and ends when the user de-focuses
    it, whether implicitly (e.g. by selecting one of the suggestions) or
    explictly (e.g. by clicking on some non-Omnibox browser UI). The session
    data that's maintained by AutocompleteResult will be initialized when the
    session starts, updated throughout the course of the session, and ultimately
    reset when the session ends.

    Sliced by zero-prefix state and page context in order to allow us to answer
    questions like: Did the user see at least one zero-prefix/typed Search/URL
    suggestion, during the course of the Omnibox session, when they selected a
    suggestion in the given page context?
  </summary>
  <token key="OmniboxZeroPrefixState" variants="OmniboxZeroPrefixState"/>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
</histogram>

<histogram name="Omnibox.SuggestionUsed.AnswerInSuggest"
    enum="SuggestionAnswerOptionalType" expires_after="2027-01-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Counts how often omnibox suggestions are used, and in the case an Answer
    suggestion was selected - records the type of an answer. This histogram is
    useful because there is no distinct suggestion type recorded for answers so
    their use is not recorded by Omnibox.SuggestionUsed.ProviderAndResultType.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.ClientSummarizedResultType"
    enum="ClientSummarizedResultType" expires_after="2027-01-17">
  <owner>nyquist@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>chrome-segmentation-platform@google.com</owner>
  <summary>
    For each user navigation using the omnibox, logs the selected omnibox result
    as one of a limited set of result types, based on the autocomplete match.

    As an example, HISTORY_URL and HISTORY_TITLE are both summarized into the
    Url summarized result type.

    This histogram intended to match the server-side histograms that use
    OmniboxSummarizedResultType such as Omnibox.SuggestionUsed.SearchVsUrl. This
    is also calculated on the client side to enable functionality that is based
    on listening to local metrics at runtime.

    Logged whenever a user navigates using the omnibox.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.OfferedTabMatch" enum="BooleanOffered"
    expires_after="2027-10-01">
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>ender@google.com</owner>
  <summary>
    Measures whether the suggestion that was selected by the user offered a tab
    match. A tab match occurs when the URL specified by the suggestion matches
    the URL navigated to by another tab in the browser, within the margin of our
    URL stripping scheme.

    This metric typically only makes sense with respect to
    Omnibox.SuggestionUsed.OfferedTabMatch. Only recent versions of the browser
    send the metric. Therefore, other metrics may include datapoints not covered
    by this metric (unless one narrows the data by version.)

    In M-74 and earlier, this was only recorded if the user had no incognito
    windows open. In M-75 and later, it records all omnibox interactions
    regardless, in order to be consistent with how user actions and histograms
    are handled.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.Pedal" enum="SuggestionPedalType"
    expires_after="never">
<!-- expires-never: part of vital metric ChromeSearch.Actions -->

  <owner>jdonnelly@chromium.org</owner>
  <owner>orinj@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Counts how often omnibox pedals are used and records the type (concept ID)
    of the pedal used.

    Pedals are a button attached to a search suggestion that either navigate to
    a chrome:// URL or trigger a Chrome action (for example, opening the page
    translation dialog or opening a new window in Incognito mode).

    This histogram is related to Omnibox.PedalShown.

    Starting with Chrome/Android M142 this histogram is recorded whenever the
    Omnibox is used to navigate somewhere, closely matching how other Omnibox
    histograms are recorded. Before M142 this histogram would be recorded any
    time the Omnibox interaction has completed, whether the user initiated
    navigation or not.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.ResumeJourney" units="position"
    expires_after="2026-11-12">
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <owner>chrome-journeys@google.com</owner>
  <summary>
    Logs the position of &quot;Resume Journey&quot; omnibox actions actually
    selected by the user. The position index is 0-based, so a selected action in
    the topmost match is logged as value 0, consistent with
    Omnibox.SelectedPosition.

    This can be combined with Omnibox.ResumeJourneyShown to compute the Usage
    (or CTR) of the &quot;Resume Journey&quot; omnibox action on a per-position
    basis.

    It's safe to compare the total count of this metric to the total count of
    Omnibox.ResumeJourneyShown because within a single popup, only zero or one
    &quot;Resume Journey&quot; can be shown. If multiple actions start being
    shown in the popup, comparing to the total count becomes misleading to
    interpret as a CTR.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.ResumeJourney.ClusterKeywordType"
    enum="HistoryClusterKeywordType" expires_after="2024-03-17">
  <owner>sophiechang@chromium.org</owner>
  <owner>chrome-journeys@google.com</owner>
  <summary>
    Logs the type of the matched cluster keyword of &quot;Resume Journey&quot;
    omnibox actions actually selected by the user.

    This can be combined with Omnibox.ResumeJourneyShown.ClusterKeywordType to
    compute the precision (or CTR) of the &quot;Resume Journey&quot; omnibox
    action on a keyword type basis.

    It's safe to compare the total count of this metric to the total count of
    Omnibox.ResumeJourneyShown.ClusterKeywordType because within a single popup,
    only zero or one &quot;Resume Journey&quot; can be shown. If multiple
    actions start being shown in the popup, comparing to the total count becomes
    misleading to interpret as a CTR.
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestionUsed.ResumeJourney.ClusterKeywordType.{ClusterKeywordTypeLabel}.CTR"
    enum="BooleanSelected" expires_after="2023-12-10">
  <owner>sophiechang@chromium.org</owner>
  <owner>chrome-journeys@google.com</owner>
  <summary>
    Emitted when the user uses the omnibox to go somewhere AND the &quot;Resume
    Journey&quot; chip triggered by {ClusterKeywordTypeLabel} was offered in any
    position.

    This metric records &quot;Selected&quot; if the offered action chip was
    selected, and records &quot;Not Selected&quot; if the offered action chip
    was not selected.

    Therefore the &quot;Selected&quot; bucket proportion is the CTR of the
    action chip. The count of this bucket matches the {ClusterKeywordTypeLabel}
    bucket of Omnibox.SuggestionUsed.ResumeJourney.ClusterKeywordType.

    The total count of both buckets is how many times we've offered the chip
    triggered by {ClusterKeywordTypeLabel} in total, and matches the
    {ClusterKeywordTypeLabel} bucket of
    Omnibox.ResumeJourneyShown.ClusterKeywordType.
  </summary>
  <token key="ClusterKeywordTypeLabel">
    <variant name="Entity"/>
    <variant name="EntityAlias"/>
    <variant name="EntityCategory"/>
    <variant name="SearchTerms"/>
    <variant name="Unknown"/>
  </token>
</histogram>

<histogram name="Omnibox.SuggestionUsed.ResumeJourneyCTR"
    enum="BooleanSelected" expires_after="2025-09-14">
  <owner>manukh@chromium.org</owner>
  <owner>chrome-journeys@google.com</owner>
  <summary>
    Emitted when the user uses the omnibox to go somewhere AND the &quot;Resume
    Journey&quot; chip was offered in any position.

    This metric records &quot;Selected&quot; if the offered action chip was
    selected, and records &quot;Not Selected&quot; if the offered action chip
    was not selected.

    Therefore the &quot;Selected&quot; bucket proportion is the CTR of the
    action chip. The count of this bucket matches the sum of
    Omnibox.SuggestionUsed.ResumeJourney.

    The total count of both buckets is how many times we've offered the chip
    total, and matches the sum of Omnibox.ResumeJourneyShown.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.RichAutocompletion"
    enum="OmniboxRichAutocompletionType" expires_after="2027-01-17">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Measures the number of sessions for which each type of rich autocompletion
    was used.

    As the user types into the omnibox, the omnibox suggestions are updated.
    Some of those suggestions may have rich autocompletion. No suggestion may
    have multiple types of rich autocompletion. A type of rich autocompletion is
    considered triggered only if the default suggestion has rich autocompletion.
    If a non-default suggestion has rich autocompletion, does not suffice. If
    any input during the session triggered a rich autocompletion type, that type
    is considered triggered for the entire session.

    Recorded exactly once per omnibox session (i.e. per user selecting a
    suggestion).
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestionUsed.Search.Experimental.NavigationToFirstMeaningfulPaint"
    units="ms" expires_after="2026-07-26">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Measures the time from navigation start to first meaningful paint. Only
    recorded for a search query suggestion selected from the omnibox.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.Search.InputToNavigationStart2"
    units="ms" expires_after="2027-01-17">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Measures the time from the user selecting the omnibox suggestion and the
    navigation start time getting ticked. Only recorded for a search query
    suggestion selected from the omnibox.
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestionUsed.Search.NavigationToFirstContentfulPaint"
    units="ms" expires_after="2027-01-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Measures the time from navigation start to first contentful paint. Only
    recorded for a search query suggestion selected from the omnibox.
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestionUsed.Search.NavigationToLargestContentfulPaint2.1"
    units="ms" expires_after="2027-01-17">
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Measures the time from navigation start to largest contentful paint
    (https://github.com/w3c/largest-contentful-paint). Only recorded for a
    search query suggestion selected from the omnibox.
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestionUsed.Search.NavigationToLargestContentfulPaint2.1Above2s"
    units="ms" expires_after="2026-11-12">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Measures the time from navigation to the time the first largest contentful
    paint candidate
    (https://github.com/w3c/largest-contentful-paint#the-last-candidate) above 2
    seconds. Only recorded for a search query suggestion selected from the
    omnibox. Note that this histogram is most useful for use with Chrometto in
    order to record a high LCP trace as soon as it happens (rather than only
    once the slow page loads gets discarded).
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.SelectedTabMatch"
    enum="BooleanSelected" expires_after="2027-10-01">
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>ender@google.com</owner>
  <summary>
    Measures whether the suggestion that was selected by the user offered a tab
    match and specifically that the user chose the tab match over normal
    navigation. A tab match occurs when the URL specified by the suggestion
    matches the URL navigated to by another tab in the browser, within the
    margin of our URL stripping scheme. By selecting the tab match, the browser
    simply switches focus to the matching tab.

    This metric typically only makes sense with respect to
    Omnibox.SuggestionUsed.OfferedTabMatch. Only recent versions of the browser
    send the metric. Therefore, other metrics may include datapoints not covered
    by this metric (unless one narrows the data by version.)

    This metric should be stricly less than
    Omnibox.SuggestionUsed.OfferedTabMatch, and is typically used to discover
    the percentage of offered tab matches that the user accepts.

    In M-74 and earlier, this was only recorded if the user had no incognito
    windows open. In M-75 and later, it records all omnibox interactions
    regardless, in order to be consistent with how user actions and histograms
    are handled.
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestionUsed.URL.Experimental.NavigationToFirstMeaningfulPaint"
    units="ms" expires_after="2027-01-03">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Measures the time from navigation start to first meaningful paint. Only
    recorded for a URL suggestion selected from the omnibox.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.URL.InputToNavigationStart2" units="ms"
    expires_after="2027-01-17">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Measures the time from the user selecting the omnibox suggestion and the
    navigation start time getting ticked. Only recorded for a URL suggestion
    selected from the omnibox.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.URL.NavigationToFirstContentfulPaint"
    units="ms" expires_after="2027-01-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Measures the time from navigation start to first contentful paint. Only
    recorded for a URL suggestion selected from the omnibox.
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestionUsed.URL.NavigationToLargestContentfulPaint2.1"
    units="ms" expires_after="2027-02-14">
  <owner>robertlin@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Measures the time from navigation start to largest contentful paint. Only
    recorded for a URL suggestion selected from the omnibox.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestRequest.Failure.GoogleResponseTime" units="ms"
    expires_after="2027-01-17">
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>cch@chromium.org</owner>
  <summary>
    The time elapsed between the sending of a suggest request to Google until
    the time the request was returned with status==failed. Ignores requests that
    were canceled before being returned.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestRequest.Success.GoogleResponseTime" units="ms"
    expires_after="2027-01-17">
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>cch@chromium.org</owner>
  <summary>
    The time elapsed between the sending of a suggest request to Google until
    the time the request was returned with status==success. Ignores requests
    that were canceled before being returned.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestRequestsSent" enum="RemoteRequestType"
    expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of requests sent by the omnibox to its suggest backends, bucketed
    by the request type. Recorded when the request starts, i.e., after obtaining
    the OAuth token if applicable, at most once per omnibox autocompletion cycle
    as the user types or has focused or cleared the omnibox but has not typed in
    yet (aka zero-suggest); In other words, at most once per each time the user
    changes the omnibox input. For zero-suggest prefetching requests, this may
    be recorded on page load and on tab switch events for eligible pages.
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestRequestsSent.HttpResponseCode.{OmniboxPageContext}{RemoteRequestType}"
    enum="HttpResponseCode" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of responses from the omnibox suggest backends, sliced by the
    request type and the page context (a.k.a. page classification) and bucketed
    by the HTTP response code. Recorded once per response received, which is at
    most one time per Omnibox.SuggestRequestsSent is recorded, since some
    requests are cancelled.
  </summary>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
  <token key="RemoteRequestType" variants="RemoteRequestType"/>
</histogram>

<histogram
    name="Omnibox.SuggestRequestsSent.HttpResponseCode{RemoteRequestType}"
    enum="HttpResponseCode" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of responses from the omnibox suggest backends, sliced by the
    request type and bucketed by the HTTP response code. Recorded once per
    response received, which is at most one time per Omnibox.SuggestRequestsSent
    is recorded, since some requests are cancelled.
  </summary>
  <token key="RemoteRequestType" variants="RemoteRequestType"/>
</histogram>

<histogram
    name="Omnibox.SuggestRequestsSent.ResponseTime.{OmniboxPageContext}{RemoteRequestType}{RemoteRequestSuccess}"
    units="ms" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    How long it took in milliseconds to receive responses from the omnibox
    suggest backends for completed requests only, sliced by the request type,
    response success status, and the page context (a.k.a. page classification).
    Recorded once per response received, which is at most one time per
    Omnibox.SuggestRequestsSent is recorded, since some requests are cancelled.
  </summary>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
  <token key="RemoteRequestType" variants="RemoteRequestType"/>
  <token key="RemoteRequestSuccess" variants="RemoteRequestSuccess"/>
</histogram>

<histogram
    name="Omnibox.SuggestRequestsSent.ResponseTime2.RequestState{RemoteRequestType}{RemoteRequestCompleted}"
    units="ms" expires_after="2026-11-12">
  <owner>ananyaseelam@google.com</owner>
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    How long it took in milliseconds to receive responses from the
    EnterpriseSearchAggregatorProvider suggest backend.

    Sliced by whether the request was completed or interrupted. Sliced by
    request type.

    Recorded once per response received, which is at most one time per
    Omnibox.SuggestRequestsSent is recorded, since some requests are cancelled.
    Recorded for completed, completed with error, completed with empty response,
    and interrupted requests. Not recorded for requests that were queued but not
    started (i.e. provider debouncer or auth request did not complete before the
    provider was interrupted).
  </summary>
  <token key="RemoteRequestType" variants="RemoteRequestType"/>
  <token key="RemoteRequestCompleted" variants="Completed"/>
</histogram>

<histogram
    name="Omnibox.SuggestRequestsSent.ResponseTime{RemoteRequestType}{RemoteRequestSuccess}"
    units="ms" expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    How long it took in milliseconds to receive responses from the omnibox
    suggest backends for completed requests only, sliced by the request type,
    and response success status. Recorded once per response received, which is
    at most one time per Omnibox.SuggestRequestsSent is recorded, since some
    requests are cancelled.
  </summary>
  <token key="RemoteRequestType" variants="RemoteRequestType"/>
  <token key="RemoteRequestSuccess" variants="RemoteRequestSuccess"/>
</histogram>

<histogram
    name="Omnibox.SuggestRequestsSent.ResultCount.EnterpriseSearchAggregatorSuggest{EnterpriseSuggestionType}"
    units="count" expires_after="2026-11-12">
  <owner>ananyaseelam@chromium.org</owner>
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of results returned for each suggestion of type
    {EnterpriseSuggestionType} and the total number of suggestions. Can be more
    than the matches shown to the user as not every result in the response will
    be shown.

    Sliced by request type.

    Recorded once per response received, which is at most one time per
    Omnibox.SuggestRequestsSent is recorded, since some requests are cancelled.
    Recorded for completed, completed with error, and completed with empty
    response requests. Not logged for interrupted requests. Not recorded for
    requests that were queued but not started (i.e. provider debouncer or auth
    request did not complete before the provider was interrupted).
  </summary>
  <token key="EnterpriseSuggestionType">
    <variant name="" summary="Aggregated across all suggestion types"/>
    <variant name=".Content" summary="Number of content suggestions"/>
    <variant name=".People" summary="Number of people suggestions"/>
    <variant name=".Query" summary="Number of query suggestions"/>
  </token>
</histogram>

<histogram name="Omnibox.SuggestRequestsSent.{OmniboxPageContext}"
    enum="RemoteRequestType" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of requests sent by the omnibox to its suggest backends, bucketed
    by the request type, sliced by the page context (a.k.a. page
    classification). Recorded when the request starts, i.e., after obtaining the
    OAuth token if applicable, at most once per omnibox autocompletion cycle as
    the user types or has focused or cleared the omnibox but has not typed in
    yet (aka zero-suggest); In other words, at most once per each time the user
    changes the omnibox input. For zero-suggest prefetching requests, this may
    be recorded on page load and on tab switch events for eligible pages.
  </summary>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
</histogram>

<histogram name="Omnibox.SuggestTiles.DeletedTileIndex" units="position"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>mahmadi@chromium.org</owner>
  <summary>
    The index of the item in the MostVisited carousel that the user deleted.
    Zero-based: the first item in the carousel is recorded in bucket 0, second
    in bucket 1 and so on. Items beyond 16 will be stored in the overflow bucket
    (15).

    Recorded every time the user initiates deletion of a suggest tile, even if
    the operation is later canceled.

    Note: There is a recording gap between: 2026.07-2026.08.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestTiles.DeletedTileType" enum="SuggestTileType"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>mahmadi@chromium.org</owner>
  <summary>
    Records the type of the SuggestTile that the user deleted. Most Visited URLs
    record a URL, and Organic Repeatable Queries record a Search type.

    Recorded every time the user initiates deletion of a suggest tile, that
    results with tile removal. Not recorded if the user chooses to cancel the
    action.

    Note: There is a recording gap between: 2026.07-2026.08.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestTiles.SelectedTileIndex" units="position"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>mahmadi@chromium.org</owner>
  <summary>
    The index of the item in the MostVisited carousel that the user opened.
    Zero-based: the first item in the carousel is recorded in bucket 0, second
    in bucket 1 and so on. Items beyond 16 will be stored in the overflow bucket
    (15).

    Recorded every time the user selects the tile to initiate navigation, even
    if the navigation could not be completed (eg. target site did not load).
  </summary>
</histogram>

<histogram name="Omnibox.SuggestTiles.SelectedTileType" enum="SuggestTileType"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>mahmadi@chromium.org</owner>
  <summary>
    Records the type of the SuggestTile that the user interacted with. Most
    Visited URLs record a URL, and Organic Repeatable Queries record a Search
    type.

    Recorded every time the user selects the tile to initiate navigation, even
    if the navigation could not be completed (eg. target site did not load).

    Note: There is a recording gap between: 2023.06-2023.08.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestTiles.TileTypeCount.{SuggestTileType}"
    units="count" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>mahmadi@chromium.org</owner>
  <summary>
    Total count of offered {SuggestTileType} tile types.

    Recorded every time the current context is eligible to receive
    MostVisitedTiles, even if there were no tiles of any kind to show.

    Note: There is a recording gap between: 2023.06-2023.08, 2026.07-2026.08.
  </summary>
  <token key="SuggestTileType">
    <variant name="Search"/>
    <variant name="URL"/>
  </token>
</histogram>

<histogram name="Omnibox.TabMatchTime" units="microseconds"
    expires_after="2027-10-01">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    This histogram reports the amount of time it takes to match one set of
    suggestions against all open tabs. This metric is collected once for every
    time a new set of suggestions is received. This includes the Omnibox Focus
    event (when zero-prefix suggestions are offered) and every subsequent key
    stroke, including deletion, backspace etc.

    Each keystroke produces multiple events offering autocomplete matches: a)
    one synchronous, when Start() is called. b) any number of intermediate
    events, depending on whether Providers request the update. c) one at the
    end, when the process completes.

    Since these are produced about 3 times per keystroke, the total time
    consumed per Omnibox interaction is - optimistically -
    3*Omnibox.TypedLength*TabMatchTime. this excludes all the time spent
    formulating the query, such as correcting the input. This metric does not
    express the cumulative time spent matching the tabs (because we do not have
    a metric that counts the number of suggestions the user actually fetched -
    eg. we do not count the number of suggestions received when user pressed the
    backspace key).

    This histogram only records metrics on machines with high-resolution clocks.
    (Expired in 2024-04-28. Revived in 2025-01-06.)

    Note: There is a recording gap between: 2026.02-2026.08.
  </summary>
</histogram>

<histogram name="Omnibox.TemplateUrl.DBRefresh.DefaultSearchMatchCountById"
    units="count" expires_after="2027-10-01">
  <owner>dgn@google.com</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-regionalcapabiltiies@google.com</owner>
  <summary>
    At the beginning of the process of merging prepopulated engines into the
    keywords database, records the number of entries that match the current
    default search engine. Matching is done by preopulate ID or by ID of the
    DSE's pre-migration ID, if relevant. There may be more than one engine
    matching due to some unexpected behaviour associated with migrations, sync
    or changes in the profile's assigned country.

    Recorded once per keywords database merging, which gets triggered on startup
    if the built-in search engines data has been updated, or the profile's
    assigned country changed.
  </summary>
</histogram>

<histogram name="Omnibox.TemplateUrl.DBRefresh.EntryPreservationReason"
    enum="EntryPreservationReason" expires_after="2027-10-01">
  <owner>dgn@google.com</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-regionalcapabiltiies@google.com</owner>
  <summary>
    During the process of merging prepopulated engines into the keywords
    database, records a reason why an existing entry might be preserved after it
    did not match any of the regional prepopulated engines.

    Recorded once per keywords database merging, which gets triggered on startup
    if the built-in search engines data has been updated, or the profile's
    assigned country changed.
  </summary>
</histogram>

<histogram name="Omnibox.TemplateUrl.DBRefresh.MigrationAction"
    enum="PrepopulatedEngineMigrationAction" expires_after="2027-03-01">
  <owner>dgn@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    Emitted when an engine is migrated to a new ID during the Keywords database
    update pass. Records whether the migrated engine was the user's Default
    Search Provider or another engine present in the keywords DB.
  </summary>
</histogram>

<histogram name="Omnibox.TemplateUrl.DBRefresh.MigrationMatch"
    enum="MigrationMatch" expires_after="2026-12-31">
  <owner>dgn@google.com</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    The match or mismatch reason found while comparing prepopulated engines and
    keywords DB engines during prepopulated engines migration.

    A &quot;match&quot; (e.g., exact or host match) indicates that an engine in
    the keywords database corresponds to a prepopulated engine definition and
    can be migrated. A &quot;mismatch&quot; (e.g., URL mismatch or invalid URL)
    indicates that the existing engine does not sufficiently match the
    prepopulated one, and thus cannot be safely migrated.

    Recorded for each engine under migration that matches an existing engine,
    during the keywords DB refresh that is done on profile load after a database
    version update, country change, or migration feature flag flip.
  </summary>
</histogram>

<histogram name="Omnibox.TemplateUrl.DBRefresh.RegulatoryDuplicatesSameKeyword"
    enum="Boolean" expires_after="2026-12-01">
  <owner>dgn@google.com</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Recorded when multiple TemplateURLs tagged as created by a regulatory
    program (e.g., Android EEA Choice Screen) are loaded from the Keyword Web
    Database during startup reconciliation. Records True if all such duplicate
    regulatory entries share the identical search keyword, and False if at least
    one entry has a different keyword. This helps identify whether database
    duplicates are caused by row cloning vs incomplete deletions of prior engine
    choices.
  </summary>
</histogram>

<histogram name="Omnibox.TemplateUrl.DBRefresh.TotalDuplicates" units="units"
    expires_after="2026-12-31">
  <owner>dgn@google.com</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    The total number of duplicate prepopulated engine IDs found in the search
    engine database during a refresh.
  </summary>
</histogram>

<histogram name="Omnibox.TemplateUrl.DBRefresh.UnmatchedDefaultSearchCount"
    units="count" expires_after="2027-10-01">
  <owner>dgn@google.com</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-regionalcapabiltiies@google.com</owner>
  <summary>
    At the end of the process of merging prepopulated engines into the keywords
    database, records the number of entries that match the current default
    search engine but that did not get reconciled with some existing entry and
    will be discarded.

    Recorded once per keywords database merging, which gets triggered on startup
    if the built-in search engines data has been updated, or the profile's
    assigned country changed.
  </summary>
</histogram>

<histogram name="Omnibox.TemplateUrl.DseReconciler.MigrationMatch"
    enum="MigrationMatch" expires_after="2026-12-31">
  <owner>dgn@google.com</owner>
  <owner>chrome-reg-cap@google.com</owner>
  <summary>
    The type of match found during prepopulated engine migration in the DSE
    reconciler. Recorded for each engine under migration that matches an
    existing engine.
  </summary>
</histogram>

<histogram name="Omnibox.TemplateUrl.Reconciliation.Type"
    enum="ReconciliationType" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Captures the type of performed reconciliation (if any).

    Recorded once per Default Search Engine reconciliation event (on start + any
    time the Default Search Engine is changed).
  </summary>
</histogram>

<histogram name="Omnibox.TemplateUrl.Reconciliation.{ByVariant}.Result"
    enum="BooleanSuccess" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Captures the outcome of TemplateURL reconciliation whenever reconciliation
    takes place.

    This histogram captures outcome of reconciliation {ByVariant}.
  </summary>
<!-- LINT.IfChange(ByReconciliationVariant) -->

  <token key="ByVariant">
    <variant name="ByDomainBasedKeyword"
        summary="by domain-based keyword, aggregating the results for
                 reconciliations by seznam and yahoo keywords (See the
                 Omnibox.TemplateUrl.Reconciliation.Type histogram)"/>
    <variant name="ByID"
        summary="by ID, aggregating the results for all reconciliations by
                 prepopulate_id (See the
                 Omnibox.TemplateUrl.Reconciliation.Type histogram)"/>
    <variant name="ByKeyword" summary="by Keyword"/>
  </token>
<!-- LINT.ThenChange(//components/search_engines/reconciling_template_url_data_holder.h:ReconciliationVariant) -->

</histogram>

<histogram name="Omnibox.TemplateUrl.RegulatoryExtension.SearchVariant"
    enum="RegulatoryExtensionVariant" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the type of regulatory extension used to formulate the Search URL.

    Recorded for all TemplateURLs every time a Search URL is created, regardless
    of whether extensions are used, or a specific extension type is populated.

    Note: There is a recording gap between: 2026.07-2026.08.
  </summary>
</histogram>

<histogram name="Omnibox.TemplateUrl.RegulatoryExtension.SuggestVariant"
    enum="RegulatoryExtensionVariant" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the type of regulatory extension used to formulate the Suggest URL.

    Recorded for all TemplateURLs every time a Suggest URL is created,
    regardless of whether extensions are used, or a specific extension type is
    populated.
  </summary>
</histogram>

<histogram name="Omnibox.TemplateUrl.RlzPresent" enum="Boolean"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>jdonnelly@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    For every TemplateUrl expansion, captures whether Query has an organic
    nature (RLZ empty) or not (RLZ present).

    Recorded once for every TemplateUrl expansion if the Template URL references
    the {google:RLZ} parameter.

    Note: There is a recording gap between: 2026.07-2026.08.
  </summary>
</histogram>

<histogram name="Omnibox.TemplateUrl.SearchClientPresent" enum="Boolean"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>jdonnelly@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    For every TemplateUrl expansion, captures whether Query has an organic
    nature (Search client empty) or not (Search client present).

    Recorded once for every TemplateUrl expansion if the Template URL references
    the {google:searchClient} parameter.
  </summary>
</histogram>

<histogram name="Omnibox.TemplateUrl.UnrecognizedParameter"
    enum="BooleanPrepopulated" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>jdonnelly@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    For each TemplateUrl parameter that cannot be expanded, captures the origin
    of the template url parameter. Prepopulated TemplateUrl definitions come
    from `prepopulated_engines.json` file, whereas Non-prepopulated definitions
    may originate from external configuration files linked to region-specific
    DMA implementations (Android), user-supplied definitions (Desktop), or
    device configuration (e.g. ADCP, Enterprise policies).

    See go/chrome-android-dma for additional details.

    Recorded once per unexpanded parameter for every TemplateUrl expansion.
    Values reported by this histogram should be zero for mobile devices,
    possibly also for Desktop and ChromeOS (unconfirmed).

    Note: There is a recording gap between: 2026.07-2026.08.
  </summary>
</histogram>

<histogram name="Omnibox.URLNavigationScheme" enum="NavigationScheme"
    expires_after="2026-11-12">
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The scheme of the destination URL for the selected omnibox suggestion. This
    could be a what-you-typed suggestion (if the user fully typed a URL), an
    inline autocompletion, or something in the dropdown, anything as long as
    it's a URL navigation, not a search query. Excludes omnibox URL navigations
    that are effectively reloads as well as cut-and-pastes of URLs. Also does
    not take into account any redirects that destination URL may do before
    finally serving a page. In other words, it's the scheme of the first request
    in a possible chain.

    Due to a bug, recorded paste-and-go actions through M-88 (inclusive).
    Excluded in M-89+.
  </summary>
</histogram>

<histogram name="Omnibox.URLScoringModelExecuted.ElapsedTime"
    units="microseconds" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>yoangela@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The amount of time it takes to execute the URL scoring model for all the
    eligible matches. Emitted when all the providers are done and there is at
    least one eligible match for model execution.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Omnibox.URLScoringModelExecuted.Matches" units="counts"
    expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>yoangela@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of matches the URL scoring model was executed for. Emitted when
    all the providers are done and there is at least one eligible match for
    model execution.
  </summary>
</histogram>

<histogram name="Omnibox.URLScoringModelExecuted.MLScoreCache.CacheHit"
    enum="BooleanCacheHit" expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records whether there was a cache hit when attempting to fetch the ML score
    associated with a given vector of scoring signals. This will be recorded for
    each match that is submitted to the ML scoring service. Each omnibox input
    triggers multiple autocomplete passes with each pass generating multiple
    autocomplete matches. Therefore, this metric will get logged several times
    for a single omnibox input.
  </summary>
</histogram>

<histogram name="Omnibox.URLScoringModelExecuted.MLScoreCoverage"
    units="% of matches" expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the percentage of scoring-eligible autocomplete matches that were
    assigned non-null scores by the ML scoring model. This will be recorded for
    each batch that is submitted to the ML scoring service.
  </summary>
</histogram>

<histogram name="Omnibox.URLScoringModelExecuted.Preprocess.ValidInputSize"
    enum="Boolean" expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    During the execution of `AutocompleteScoringModelExecutor::Preprocess()`,
    this metric records whether or not the number of input tensors passed in
    matches the size of the ModelInput.

    This will be recorded once for each suggestion contained in a batch that's
    submitted to the ML scoring service.

    This will NOT be recorded for any suggestion that already has a non-null
    scoring result stored in the ML score cache.
  </summary>
</histogram>

<!--
  Keep consistent:
  - omnibox_event.proto `ScoringSignals`
  - omnibox_scoring_signals.proto `OmniboxScoringSignals`
  - autocomplete_scoring_model_handler.cc
    `AutocompleteScoringModelHandler::ExtractInputFromScoringSignals()`
  - autocomplete_match.cc `AutocompleteMatch::MergeScoringSignals()`
  - autocomplete_controller.cc `RecordScoringSignalCoverageForProvider()`
  - omnibox_metrics_provider.cc `GetScoringSignalsForLogging()`
  - omnibox.mojom `struct Signals`
  - omnibox_page_handler.cc `TypeConverter<AutocompleteMatch::ScoringSignals,
    mojom::SignalsPtr>`
  - omnibox_page_handler.cc `TypeConverter<mojom::SignalsPtr,
    AutocompleteMatch::ScoringSignals>`
  - omnibox_util.ts `signalNames`
  - omnibox/histograms.xml
    `Omnibox.URLScoringModelExecuted.ScoringSignalCoverage`
-->

<histogram
    name="Omnibox.URLScoringModelExecuted.ScoringSignalCoverage.{ProviderType}.{ScoringSignalType}"
    enum="BooleanNonNull" expires_after="2026-11-12">
  <owner>khalidpeer@chromium.org</owner>
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    For each ML eligible match generated by the autocomplete provider of type
    {ProviderType}, records the number of null/non-null values logged by client
    code for the ML scoring signal of type {ScoringSignalType}.
  </summary>
  <token key="ScoringSignalType">
    <variant name="allowed_to_be_default_match"
        summary="True if url can be default match."/>
    <variant name="elapsed_time_last_shortcut_visit_sec"
        summary="Elapsed time since last shortcut visit for this profile on
                 this device."/>
    <variant name="elapsed_time_last_visit_secs"
        summary="Elapsed time since last visit for this profile on this
                 device."/>
    <variant name="first_bookmark_title_match_position"
        summary="Position of the first matched bookmark title term."/>
    <variant name="first_url_match_position"
        summary="Position of the first matched URL substring."/>
    <variant name="has_non_scheme_www_match"
        summary="Has matches that are not in schemes (e.g., 'https') or
                 'www'."/>
    <variant name="host_match_at_word_boundary"
        summary="One word matches host at a word boundary."/>
    <variant name="is_answer_suggest"
        summary="Whether this match is a Search suggestion that contains an
                 answer."/>
    <variant name="is_calculator_suggest"
        summary="Whether this match is a CALCULATOR suggestion."/>
    <variant name="is_host_only"
        summary="URL points to the root page of a website, i.e., no query,
                 path words, or references after '/'."/>
    <variant name="is_navsuggest"
        summary="Whether this match is a NAVSUGGEST suggestion."/>
    <variant name="is_search_suggest_entity"
        summary="Whether this match is a Search suggestion that describes an
                 entity."/>
    <variant name="is_search_suggest_tail"
        summary="Whether this match is a SEARCH_SUGGEST_TAIL suggestion."/>
    <variant name="is_verbatim"
        summary="Whether this match is a verbatim suggestion."/>
    <variant name="length_of_url" summary="Length of url."/>
    <variant name="num_bookmarks_of_url"
        summary="Number of bookmarks for this profile with this URL."/>
    <variant name="num_input_terms_matched_by_bookmark_title"
        summary="Number of input terms matched by bookmark title."/>
    <variant name="num_input_terms_matched_by_title"
        summary="Number of input terms matched by title."/>
    <variant name="num_input_terms_matched_by_url"
        summary="Number of input terms matched by url."/>
    <variant name="search_suggest_relevance"
        summary="Server-generated relevance score provided by the remote
                 Suggest service for this suggestion."/>
    <variant name="shortcut_visit_count"
        summary="Number of times the suggestion was visited with the current
                 input or prefix of it for this profile on this device."/>
    <variant name="shortest_shortcut_len"
        summary="Length of the shortest shortcut text."/>
    <variant name="site_engagement"
        summary="Site engagement score for the site the URL is on."/>
    <variant name="total_bookmark_title_match_length"
        summary="Total length of matched strings in the bookmark title."/>
    <variant name="total_host_match_length"
        summary="Total length of the matched host substrings."/>
    <variant name="total_path_match_length"
        summary="Total length of the matched substrings in the path at word
                 boundaries."/>
    <variant name="total_query_or_ref_match_length"
        summary="Total length of the matched substrings in the query_or_ref
                 at word boundaries."/>
    <variant name="total_title_match_length"
        summary="Total length of the matched substrings in the page title at
                 word boundaries."/>
    <variant name="total_url_match_length"
        summary="Total length of the matched URL strings."/>
    <variant name="typed_count"
        summary="Number of times the URL was navigated to using the Omnibox
                 for this profile on this device, and all other devices
                 syncing with this profile."/>
    <variant name="visit_count"
        summary="Number of times the URL was visited in general for this
                 profile on this device."/>
  </token>
  <token key="ProviderType" variants="OmniboxProviders"/>
</histogram>

<histogram name="Omnibox.Views.PopupFirstPaint" units="ms"
    expires_after="2027-01-17">
  <owner>tluk@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the number of milliseconds between the views omnibox popup
    construction and the first time content for the popup is displayed on the
    screen. This is emitted once each time the omnibox is opened. It is recorded
    again if the omnibox has closed and later re-opened. It is not emitted more
    than once for a single opened instance of the ombibox popup.
  </summary>
</histogram>

<histogram name="Omnibox.Views.RevertAll.Time" units="microseconds"
    expires_after="2027-01-24">
  <owner>gjc@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records the duration of OmniboxViewViews::RevertAll. Recorded when the
    omnibox view is reverted (e.g. when the user presses Escape or navigation
    starts). This metric is only reported for clients with high-resolution
    clocks.
  </summary>
</histogram>

<histogram name="Omnibox.Views.SetTextAndSelectedRange.IdempotentCall"
    enum="Boolean" expires_after="2027-01-24">
  <owner>gjc@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records whether a call to OmniboxViewViews::SetTextAndSelectedRange was
    idempotent (i.e., the text and selection were already set to the target
    values, and no additional text was present). Recorded when
    SetTextAndSelectedRange is called. This helps measure the potential savings
    of adding an idempotency guard.
  </summary>
</histogram>

<histogram name="Omnibox.Views.SetTextAndSelectedRange.Time"
    units="microseconds" expires_after="2027-01-24">
  <owner>gjc@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records the duration of OmniboxViewViews::SetTextAndSelectedRange. Recorded
    when the text and selection in the omnibox view are updated. This metric is
    only reported for clients with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Omnibox.WebUI.AutocompleteResultSequenceIdMatched"
    enum="Boolean" expires_after="2027-01-17">
  <owner>orinj@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Logged each time a selection is opened from the WebUI omnibox popup. Records
    whether or not the AutocompleteResult sequence identifier specified by the
    page (WebUI popup) matched that of the AutocompleteController's published
    result. This can be used to determine how often the UI attempts to make use
    of a result that is not the latest from autocomplete.
  </summary>
</histogram>

<histogram name="Omnibox.WebUI.CharTypedToRepaintLatency.ToPaint" units="ms"
    expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Records the time between a keystroke being typed in the &lt;cr-searchbox&gt;
    and the time when the &lt;cr-searchbox-dropdown&gt; is ready to render the
    results. If there are multiple keystrokes before the results are rendered,
    logs the time since the earliest. This does not take into account the time
    the DOM change task spends in the message loop nor its duration.
  </summary>
</histogram>

<histogram name="Omnibox.WebUI.ResultChangedToRepaintLatency.ToPaint"
    units="ms" expires_after="2026-12-22">
  <owner>mahmadi@chromium.org</owner>
  <owner>kylixrd@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    between AutocompleteController::Observer's OnResultChanged and the time when
    the &lt;cr-searchbox-dropdown&gt; is ready to render the results. If there
    are multiple calls to OnResultChanged before the results are rendered, logs
    the time since the earliest. This does not take into account the time the
    DOM change task spends in the message loop nor its duration.
  </summary>
</histogram>

<histogram name="Omnibox.WebUI.SelectionMatched" enum="Boolean"
    expires_after="2026-11-12">
  <owner>orinj@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Logged each time a selection is opened from the WebUI omnibox popup. Records
    whether or not the selection specified by the page (WebUI popup) matched the
    current OmniboxEditModel popup selection.
  </summary>
</histogram>

<histogram name="Omnibox.Width" units="DIPs" expires_after="2027-01-17">
  <owner>agale@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The width of the omnibox view in each open browser window, in DIPs, reported
    once per UMA log. Desktop only.
  </summary>
</histogram>

<histogram name="Omnibox.WidthRatioToWindow" units="% of window"
    expires_after="2027-01-17">
  <owner>agale@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The ratio of the width of the omnibox view relative to the window width in
    each open browser window. Reported once per UMA log. Desktop only.
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggest.AllResults" units="units"
    expires_after="2027-10-01">
  <owner>pnoland@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of results (either query or URL) from ZeroSuggest. This is
    emitted every time ZeroSuggestProvider produces results on omnibox focus or
    on omnibox input clobber, either from the cache or from the remote response.
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggest.Precision" enum="Boolean"
    expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Upon navigation, this metric is recorded if at least one zero-prefix
    suggestion was offered during the course of the Omnibox session. Given that
    at least one zero-prefix suggestion was offered during the session, this
    records whether or not the user ultimately selected a zero-prefix suggestion
    in the Omnibox.

    An &quot;Omnibox session&quot; is currently defined as a span of time that
    starts when the user focuses the Omnibox and ends when the user de-focuses
    it, whether implicitly (e.g. by selecting one of the suggestions) or
    explictly (e.g. by clicking on some non-Omnibox browser UI). The session
    data that's maintained by AutocompleteResult will be initialized when the
    session starts, updated throughout the course of the session, and ultimately
    reset when the session ends.

    This metric is analogous to &quot;Bsb zpSCTR&quot;. Precision = Zero-Prefix
    Suggestions Used / Navigations with Zero-Prefix Suggestions Offered
    (Precision = Usage / Recall).
  </summary>
</histogram>

<histogram
    name="Omnibox.ZeroSuggest.Precision.ByPageContext.{OmniboxPageContext}"
    enum="Boolean" expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Upon navigation, this metric is recorded if at least one zero-prefix
    suggestion was offered during the course of the Omnibox session. Given that
    at least one zero-prefix suggestion was offered during the session, this
    records whether or not the user ultimately selected a zero-prefix suggestion
    in the Omnibox.

    An &quot;Omnibox session&quot; is currently defined as a span of time that
    starts when the user focuses the Omnibox and ends when the user de-focuses
    it, whether implicitly (e.g. by selecting one of the suggestions) or
    explictly (e.g. by clicking on some non-Omnibox browser UI). The session
    data that's maintained by AutocompleteResult will be initialized when the
    session starts, updated throughout the course of the session, and ultimately
    reset when the session ends.

    Sliced by page context (a.k.a. page classification).

    This metric is analogous to &quot;Bsb zpSCTR&quot;. Precision = Zero-Prefix
    Suggestions Used / Navigations with Zero-Prefix Suggestions Offered
    (Precision = Usage / Recall).
  </summary>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
</histogram>

<histogram name="Omnibox.ZeroSuggest.QueryResults" units="units"
    expires_after="2027-10-01">
  <owner>pnoland@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of query results returned from ZeroSuggest. This is emitted every
    time ZeroSuggestProvider produces results on omnibox focus or on omnibox
    input clobber, either from the cache or from the remote response.
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggest.Recall" enum="Boolean"
    expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Upon navigation, this metric is recorded if at least one zero-prefix
    suggestion was offered during the course of the Omnibox session.

    An &quot;Omnibox session&quot; is currently defined as a span of time that
    starts when the user focuses the Omnibox and ends when the user de-focuses
    it, whether implicitly (e.g. by selecting one of the suggestions) or
    explictly (e.g. by clicking on some non-Omnibox browser UI). The session
    data that's maintained by AutocompleteResult will be initialized when the
    session starts, updated throughout the course of the session, and ultimately
    reset when the session ends.

    This metric is analogous to &quot;Bsb QwZPS&quot;. Recall = Navigations with
    Zero-Prefix Suggestions Offered / All Navigations (Recall = Usage /
    Precision).
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggest.Recall.ByPageContext.{OmniboxPageContext}"
    enum="Boolean" expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Upon navigation, this metric is recorded if at least one zero-prefix
    suggestion was offered during the course of the Omnibox session.

    An &quot;Omnibox session&quot; is currently defined as a span of time that
    starts when the user focuses the Omnibox and ends when the user de-focuses
    it, whether implicitly (e.g. by selecting one of the suggestions) or
    explictly (e.g. by clicking on some non-Omnibox browser UI). The session
    data that's maintained by AutocompleteResult will be initialized when the
    session starts, updated throughout the course of the session, and ultimately
    reset when the session ends.

    This metric is analogous to &quot;Bsb QwZPS&quot;. Recall = Navigations with
    Zero-Prefix Suggestions Offered / All Navigations (Recall = Usage /
    Precision).

    Sliced by page context (a.k.a. page classification).
  </summary>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
</histogram>

<histogram name="Omnibox.ZeroSuggest.URLResults" units="units"
    expires_after="2027-10-01">
  <owner>pnoland@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of URL results returned from ZeroSuggest. This is emitted every
    time ZeroSuggestProvider produces results on omnibox focus or on omnibox
    input clobber, either from the cache or from the remote response.
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggest.Usage" enum="Boolean"
    expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Upon navigation, this metric is recorded if the user selected a zero-prefix
    suggestion in the Omnibox.

    An &quot;Omnibox session&quot; is currently defined as a span of time that
    starts when the user focuses the Omnibox and ends when the user de-focuses
    it, whether implicitly (e.g. by selecting one of the suggestions) or
    explictly (e.g. by clicking on some non-Omnibox browser UI). The session
    data that's maintained by AutocompleteResult will be initialized when the
    session starts, updated throughout the course of the session, and ultimately
    reset when the session ends.

    This metric is analogous to &quot;Bsb zpSQ/SEQ&quot;. Usage = Zero-Prefix
    Suggestions Used / All Navigations (Usage = Precision * Recall).
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggest.Usage.ByPageContext.{OmniboxPageContext}"
    enum="Boolean" expires_after="2027-01-17">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Upon navigation, this metric is recorded if the user selected a zero-prefix
    suggestion in the Omnibox.

    An &quot;Omnibox session&quot; is currently defined as a span of time that
    starts when the user focuses the Omnibox and ends when the user de-focuses
    it, whether implicitly (e.g. by selecting one of the suggestions) or
    explictly (e.g. by clicking on some non-Omnibox browser UI). The session
    data that's maintained by AutocompleteResult will be initialized when the
    session starts, updated throughout the course of the session, and ultimately
    reset when the session ends.

    This metric is analogous to &quot;Bsb zpSQ/SEQ&quot;. Usage = Zero-Prefix
    Suggestions Used / All Navigations (Usage = Precision * Recall).

    Sliced by page context (a.k.a. page classification).
  </summary>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
</histogram>

<histogram name="Omnibox.ZeroSuggestProvider.Eligibility"
    enum="ZeroSuggestEligibility" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Logs whether ZeroSuggestProvider is eligible to request and display zero-
    prefix suggestions, and if not, why not. Emitted for both
    omit_asynchronous_matches_ true (i.e, Autocomplete classifier) and false
    inputs (i.e, when the user has typed in, focused the omnibox, or cleared it
    but has not typed in yet) in ZeroSuggestProvider::Start(). Also emitted on
    applicable page load/switch events in ZeroSuggestProvider::StartPrefetch().
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggestProvider.{ResultType}.{RequestType}"
    enum="ZeroSuggestRequestEvent" expires_after="2027-01-17">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Enumerates the events in the ZeroSuggestProvider as a result of
    {RequestType} for {ResultType} (i.e., suggestions shown when the user has
    focused or cleared the omnibox but has not typed in yet).
  </summary>
  <token key="ResultType">
    <variant name="NoURL"
        summary="zero-prefix suggestions not based on the current page URL"/>
    <variant name="URLBased"
        summary="zero-prefix suggestions based on the current page URL"/>
  </token>
  <token key="RequestType">
    <variant name="NonPrefetch" summary="user-initiated requests"/>
    <variant name="Prefetch" summary="non-user-initiated proactive requests"/>
  </token>
</histogram>

<histogram name="Omnibox.{OmniboxActionType}.Ctr" enum="BooleanSelected"
    expires_after="2026-11-12">
  <owner>khalidpeer@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Emitted when the user uses the Omnibox to go somewhere AND an action of the
    given type was shown in the Omnibox popup.

    This metric records &quot;Selected&quot; (1) if the action was selected and
    records &quot;Not Selected&quot; (0) if the action was not selected.

    Therefore, the &quot;Selected&quot; bucket proportion is the CTR
    (click-through rate) of the action.

    The total count of both buckets is how many times we've shown the action
    total.
  </summary>
  <token key="OmniboxActionType">
    <variant name="ContextualSearchFulfillmentAction"/>
    <variant name="ContextualSearchOpenLensAction"/>
    <variant name="StarterPackAiModeAction"/>
    <variant name="StarterPackBookmarksAction"/>
    <variant name="StarterPackHistoryAction"/>
    <variant name="StarterPackTabsAction"/>
  </token>
</histogram>

<histogram name="Omnibox.{SearchPrefetch}.CacheAliasElapsedTimeToFallback"
    units="ms" expires_after="2026-09-20">
  <owner>nhiroki@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    {SearchPrefetch}

    Measures the time between the construction of
    CacheAliasSearchPrefetchURLLoader and the moment the prefetch fell back from
    the disk cache to network. This is recorded when the loader starts the
    fallback in CacheAliasSearchPrefetchURLLoader::RestartDirect().
  </summary>
  <token key="SearchPrefetch" variants="SearchPrefetch"/>
</histogram>

<histogram name="Omnibox.{SearchPrefetch}.CacheAliasFallbackReason"
    enum="SearchPrefetchCacheAliasFallbackReason" expires_after="2026-11-29">
  <owner>nhiroki@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    {SearchPrefetch}

    The reason that a search prefetch request failed to read a response from the
    disk cache and then fell back to network. This is recorded when
    CacheAliasSearchPrefetchURLLoader is destructed regardless of whether the
    fallback happened. When the fallback didn't happen, this records
    kNoFallback.
  </summary>
  <token key="SearchPrefetch" variants="SearchPrefetch"/>
</histogram>

<histogram
    name="Omnibox.{SearchPrefetch}.HasNoVarySearchHeader2.{PrefetchFallbackOrInitial}.{NavigationOrSuggestionPrefetch}"
    enum="Boolean" expires_after="2027-02-07">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    {SearchPrefetch}

    This histogram records whether a prefetch URL loader receives a
    No-Vary-Search HTTP response header or not. This is only recorded when the
    response is servable.

    {PrefetchFallbackOrInitial}

    {NavigationOrSuggestionPrefetch}
  </summary>
  <token key="SearchPrefetch" variants="SearchPrefetch"/>
  <token key="PrefetchFallbackOrInitial" variants="PrefetchFallbackOrInitial"/>
  <token key="NavigationOrSuggestionPrefetch"
      variants="NavigationOrSuggestionPrefetch"/>
</histogram>

<histogram
    name="Omnibox.{SearchPrefetch}.NavigationInterceptedToForwardingComplete"
    units="ms" expires_after="2027-02-07">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    {SearchPrefetch}

    Measures the time between the navigation is intercepted by the Search
    Prefetch code and the moment the Search Prefetch URL loader has finished
    forwarding the whole response to the navigation URL loader. This time
    includes finishing fetching the Search response and any queuing delays in
    the UI thread preventing the Search Prefetch URL loader from forwarding
    bytes to the navigation code.
  </summary>
  <token key="SearchPrefetch" variants="SearchPrefetch"/>
</histogram>

<histogram
    name="Omnibox.{SearchPrefetch}.NoVarySearchHeaderLength.{PrefetchFallbackOrInitial}.{NavigationOrSuggestionPrefetch}"
    units="length" expires_after="2027-02-07">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    {SearchPrefetch}

    This histogram records the length of the No-Vary-Search HTTP response header
    that a prefetch URL loader receives. This is only recorded when the response
    is servable and the No-Vary-Search HTTP response header exists.

    {PrefetchFallbackOrInitial}

    {NavigationOrSuggestionPrefetch}
  </summary>
  <token key="SearchPrefetch" variants="SearchPrefetch"/>
  <token key="PrefetchFallbackOrInitial" variants="PrefetchFallbackOrInitial"/>
  <token key="NavigationOrSuggestionPrefetch"
      variants="NavigationOrSuggestionPrefetch"/>
</histogram>

<histogram
    name="Omnibox.{SearchPrefetch}.PrefetchEligibilityReason2.{NavigationOrSuggestionPrefetch}"
    enum="SearchPrefetchEligibilityReason" expires_after="2027-01-31">
  <owner>ryansturm@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    {SearchPrefetch}

    The reason that a search prefetch request issued when a user navigates to a
    suggestion was not eligible to be prefetched (or 'Prefetched' if it was
    prefetched).

    {NavigationOrSuggestionPrefetch}
  </summary>
  <token key="SearchPrefetch" variants="SearchPrefetch"/>
  <token key="NavigationOrSuggestionPrefetch"
      variants="NavigationOrSuggestionPrefetch"/>
</histogram>

<histogram
    name="Omnibox.{SearchPrefetch}.PrefetchFinalStatus.{NavigationOrSuggestionPrefetch}"
    enum="SearchPrefetchStatus" expires_after="2027-01-31">
  <owner>ryansturm@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    {SearchPrefetch}

    The status of a Search Prefetch request when it is deleted by expiration or
    by serving the request.

    {NavigationOrSuggestionPrefetch}
  </summary>
  <token key="SearchPrefetch" variants="SearchPrefetch"/>
  <token key="NavigationOrSuggestionPrefetch"
      variants="NavigationOrSuggestionPrefetch"/>
</histogram>

<histogram
    name="Omnibox.{SearchPrefetch}.PrefetchServingReason2{PrerenderOrNavigation}"
    enum="SearchPrefetchServingReason" expires_after="2027-01-31">
  <owner>ryansturm@chromium.org</owner>
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    {SearchPrefetch}

    The reason that a navigation request could or could not serve a search
    prefetch request.

    {PrerenderOrNavigation}
  </summary>
  <token key="SearchPrefetch" variants="SearchPrefetch"/>
  <token key="PrerenderOrNavigation">
    <variant name="" summary="Recorded for typical navigations."/>
    <variant name=".Prerender"
        summary="Recorded for prerender navigations that might consume the
                 prefetch response."/>
  </token>
</histogram>

<histogram
    name="Omnibox.{SearchPrefetch}.ReceivedServableResponse2.{PrefetchFallbackOrInitial}.{NavigationOrSuggestionPrefetch}"
    enum="BooleanSuccess" expires_after="2027-02-07">
  <owner>ryansturm@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    {SearchPrefetch}

    This histogram records whether an activated (i.e., served) prefetch URL
    Loader receives a servabled response from the server.

    A servabled reasponse should contain valid headers and body, with any 200
    response code.

    {PrefetchFallbackOrInitial}

    {NavigationOrSuggestionPrefetch}
  </summary>
  <token key="SearchPrefetch" variants="SearchPrefetch"/>
  <token key="PrefetchFallbackOrInitial" variants="PrefetchFallbackOrInitial"/>
  <token key="NavigationOrSuggestionPrefetch"
      variants="NavigationOrSuggestionPrefetch"/>
</histogram>

<histogram name="ShortcutsProvider.DatabaseSize" units="units"
    expires_after="2027-01-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of entries in `ShortcutsBackend`'s database. Recorded once on
    profile load.

    See also ShorcutsProvider.DatabaseSize.FileMB,
    ShortcutsProvider.DatabaseSize.OldEntries and
    ShortcutsProvider.OldEntryDeletions.
  </summary>
</histogram>

<histogram name="ShortcutsProvider.DatabaseSize.OldEntries" units="units"
    expires_after="2027-01-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of entries in `ShortcutsBackend`'s database that are older than
    90 days. Recorded once on profile load.

    This value is expected to be near 0 as there are two mechanisms to delete
    old entries. The first is individual deletions due to notificaitons that the
    associated URL has been deleted from the history system. This mechanism is
    not 100% reliable, however, since the URL deletions are performed by
    HistoryService, which may be started up before ShortcutsBackend, which
    handles the notifications. Therefore the second mechanism is a batch
    deletion of all entries older than 90 days by ShortcutsBackend on profile
    load. The count of deletions via the second mechanism is recorded in
    ShortcutsProvider.OldEntryDeletions.

    See also ShortcutsProvider.DatabaseSize and
    ShortcutsProvider.DatabaseSize.OldEntriesPercentage.
  </summary>
</histogram>

<histogram name="ShortcutsProvider.DatabaseSize.OldEntriesPercentage"
    units="10ths of a %" expires_after="2027-01-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The percentage of entries in `ShortcutsBackend`'s database that are older
    than 90 days. Recorded once on profile load.

    See ShortcutsProvider.DatabaseSize.OldEntries for additional details on how
    and why this is recorded.
  </summary>
</histogram>

<histogram
    name="ShortcutsProvider.DeletedOrInactiveKeywordEntryDeletions.OnInit"
    units="units" expires_after="2027-01-17">
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of entries in `ShortcutsBackend`'s database that were deleted due
    to the associated keyword being deleted from the `TemplateURLService` or
    inactive. Recorded once on profile load.

    See also
    ShortcutsProvider.DeletedOrInactiveKeywordEntryDeletions.OnKeywordChange.
  </summary>
</histogram>

<histogram
    name="ShortcutsProvider.DeletedOrInactiveKeywordEntryDeletions.OnKeywordChange"
    units="units" expires_after="2026-11-12">
  <owner>manukh@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of entries in `ShortcutsBackend`'s database that were deleted due
    to the associated keyword being deleted from the `TemplateURLService` or
    inactive. Recorded each time an `OnTemplateURLServiceChanged` notification
    from `TemplateURLService` is received by `ShortcutsBackend`.

    See also ShortcutsProvider.DeletedOrInactiveKeywordEntryDeletions.OnInit.
  </summary>
</histogram>

<histogram name="ShortcutsProvider.OldEntryDeletions.OnHistoryDeletions"
    units="units" expires_after="2026-11-12">
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of entries in `ShortcutsBackend`'s database that were deleted due
    to the associated URL being deleted from the history database. Recorded each
    time an `OnHistoryDeletions` notification from `HistoryService` is received
    by `ShortcutsBackend`.

    See also ShortcutsProvider.OldEntryDeletions.OnInit.
  </summary>
</histogram>

<histogram name="ShortcutsProvider.OldEntryDeletions.OnInit" units="units"
    expires_after="2026-11-12">
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    The number of entries in `ShortcutsBackend`'s database that were deleted due
    to being older than 90 days. Recorded once on profile load.

    For each profile load, this is expected to record the same value as
    ShortcutsProvider.DatabaseSize.OldEntries. If experimental data appears to
    confirm this, it may not be necessary to maintain both histograms.

    See also ShortcutsProvider.OldEntryDeletions.OnHistoryDeletions.
  </summary>
</histogram>

<histogram name="VoiceSearch.Action" enum="VoiceSearchAction"
    expires_after="2027-01-24">
  <owner>wenhuc@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Total actions taken by users of Voice Search across ALL surfaces. This
    provides an aggregated view over all entry points. These actions may
    navigate away from the current page (e.g., submitting a speech query), but
    can also happen without navigating away (e.g., initiating, retrying, or
    canceling Voice Search). Recorded immediately when the user performs a
    specific voice search action, or when a lifecycle event concludes (e.g., an
    error canceling the search). Recorded exactly once per user action or
    lifecycle event.
  </summary>
</histogram>

<histogram name="VoiceSearch.Action.{OmniboxPageContext}"
    enum="VoiceSearchAction" expires_after="2027-01-24">
  <owner>wenhuc@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Actions taken by users of Voice Search on {OmniboxPageContext}. These
    actions may navigate away from the current page (e.g., submitting a speech
    query), but can also happen without navigating away (e.g., initiating,
    retrying, or canceling Voice Search). Recorded immediately when the user
    performs a specific voice search action, or when a lifecycle event concludes
    (e.g., an error canceling the search). Recorded exactly once per user action
    or lifecycle event.
  </summary>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
</histogram>

<histogram name="VoiceSearch.Errors" enum="VoiceSearchError"
    expires_after="2027-01-24">
  <owner>wenhuc@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Total errors that occur during Voice Search across ALL surfaces. This
    provides an aggregated view over all entry points. These may be user-induced
    (e.g., the user's utterance could not be recognized - no match), or
    resulting from external circumstances (e.g., network error, lack of
    microphone permission). Recorded immediately when the underlying Web Speech
    API reports an error event or a no-match event. All errors are recorded
    (recorded exactly once per error occurrence).
  </summary>
</histogram>

<histogram name="VoiceSearch.Errors.{OmniboxPageContext}"
    enum="VoiceSearchError" expires_after="2027-01-24">
  <owner>wenhuc@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Errors that occur during Voice Search use on {OmniboxPageContext}. These may
    be user-induced (e.g., the user's utterance could not be recognized - no
    match), or resulting from external circumstances (e.g., network error, lack
    of microphone permission). Recorded immediately when the underlying Web
    Speech API reports an error event or a no-match event. All errors are
    recorded (recorded exactly once per error occurrence).
  </summary>
  <token key="OmniboxPageContext" variants="OmniboxPageContext"/>
</histogram>

<histogram name="VoiceSearch.QuerySubmission.Source"
    enum="VoiceSearchQuerySource" expires_after="2026-11-20">
  <owner>wenhuc@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the entrypoint source immediately when the user submits a voice
    search query (i.e., QUERY_SUBMITTED action). This provides a consolidated
    view to compare voice query volumes across all 4 Chrome searchbox
    entrypoints (NTP Realbox Classic, NTP Composebox, Omnibox Composebox, and
    Nextbox Composebox).
  </summary>
</histogram>

</histograms>

</histogram-configuration>
