<!--
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="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="NavigationPrefetchOnly">
  <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."/>
</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>

<variants name="OmniboxProviders">
  <variant name="Bookmark"/>
  <variant name="Builtin"/>
  <variant name="Clipboard"/>
  <variant name="Contact"/>
  <variant name="Document"/>
  <variant name="ExtensionApp"/>
  <variant name="HistoryCluster"/>
  <variant name="HistoryContents"/>
  <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="Search"/>
  <variant name="Shortcuts"/>
  <variant name="VerbatimMatch"/>
  <variant name="VoiceSuggest"/>
  <variant name="ZeroSuggest"/>
</variants>

<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>

<variants name="SuggestionPrefetchOnly">
  <variant name="SuggestionPrefetch"
      summary="Recorded for prefetches where an omnibox suggestion from the
               suggestion server recommends a prefetch of a suggestion
               results page."/>
</variants>

<histogram name="Omnibox.AcceptedKeywordSuggestion"
    enum="OmniboxEnteredKeywordMode2" expires_after="2024-02-11">
  <owner>yoangela@chromium.org</owner>
  <owner>chrome-omnibox-team@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="2024-02-20">
  <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.
  </summary>
  <token key="Type">
    <variant name="Call"/>
    <variant name="Directions"/>
    <variant name="Reviews"/>
  </token>
</histogram>

<histogram name="Omnibox.ActionInSuggest.{ShownOrUsed}"
    enum="ActionInSuggestType" expires_after="2024-02-20">
  <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.
  </summary>
  <token key="ShownOrUsed">
    <variant name="Shown" summary="shown"/>
    <variant name="Used" summary="used"/>
  </token>
</histogram>

<histogram name="Omnibox.AnswerParseSuccess" enum="BooleanSuccess"
    expires_after="2024-02-04">
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-omnibox-team@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="2024-02-25">
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-omnibox-team@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.AssistedQueryStats.Length" units="chars"
    expires_after="2024-02-11">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    Records the length of the aqs= 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.AsyncAutocompletionTime2.Provider.{Provider}{Completed}"
    units="ms" expires_after="2024-02-20">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-omnibox-team@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">
    <variant name=""/>
    <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."/>
  </token>
</histogram>

<histogram name="Omnibox.AsyncAutocompletionTime2.{Change}{Completed}"
    units="ms" expires_after="2024-02-20">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-omnibox-team@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">
    <variant name=""/>
    <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."/>
  </token>
</histogram>

<histogram name="Omnibox.AutocompletionTime.UpdateResult{Slice}"
    units="microseconds" expires_after="2024-02-20">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-omnibox-team@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.BitmapFetchLatency" units="ms"
    expires_after="2022-09-11">
  <obsolete>
    3/2022; feature launched.
  </obsolete>
<!-- Name completed by histogram_suffixes name="Omnibox.BitmapFetchLatencyCacheSplit" -->

  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    The time elapsed between the ChromeOmniboxClient requesting a suggestion's
    image to receiving the image. This includes both uncached and cached
    requests. See BitmapFetcher.Fetch and BitmapFetcher.Decode for what
    contributes to uncached images latency; however, the sum of those metrics
    can be greater than this metric as image prefetching begins before the
    ChromeOmniboxClient requests an image.
  </summary>
</histogram>

<histogram name="Omnibox.CalculateVisibleHint.Duration" units="ms"
    expires_after="2024-02-25">
  <owner>peilinwang@google.com</owner>
  <owner>woa-performance-bugs+jank@google.com</owner>
  <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="2024-02-01">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>asvitkine@chromium.org</owner>
  <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: The semantics of this metric on views platforms changed in M62, as
    previously time (d) was not included in the metric.
  </summary>
</histogram>

<histogram name="Omnibox.CharTypedToRepaintLatency.InsertToPresent" units="ms"
    expires_after="2024-02-01">
  <owner>asvitkine@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <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="2024-02-01">
  <owner>asvitkine@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <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="2024-02-01">
  <owner>asvitkine@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <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" units="ms"
    expires_after="2024-08-01">
  <owner>gangwu@chromium.org</owner>
  <owner>jdonnelly@chromium.org</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.

    Note: recording gap between 2022/09 and 2023/08.
  </summary>
</histogram>

<histogram name="Omnibox.ClipboardSuggestionShownAge" units="ms"
    expires_after="2024-08-01">
  <owner>gangwu@chromium.org</owner>
  <owner>jdonnelly@chromium.org</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.
  </summary>
</histogram>

<histogram name="Omnibox.ClipboardSuggestionShownNumTimes" units="units"
    expires_after="2024-08-01">
  <owner>gangwu@chromium.org</owner>
  <owner>jdonnelly@chromium.org</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.
  </summary>
</histogram>

<histogram name="Omnibox.ClipboardSuggestionShownWithCurrentURL"
    enum="BooleanPresent" expires_after="2024-08-01">
  <owner>gangwu@chromium.org</owner>
  <owner>jdonnelly@chromium.org</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.

    Note: recording gap between 2022/10 and 2023/08.
  </summary>
</histogram>

<histogram name="Omnibox.CutOrCopyAllText" units="count"
    expires_after="2024-03-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-omnibox-team@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.Requests"
    enum="OmniboxDocumentSuggestRequests" expires_after="2024-02-04">
  <owner>manukh@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>skare@chromium.org</owner>
  <summary>
    Counts the number of document suggest requests the omnibox sent, were
    invalidated, and were completed successfully.
  </summary>
</histogram>

<histogram name="Omnibox.DocumentSuggest.RequestTime" units="ms"
    expires_after="2024-02-04">
  <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 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="2024-02-04">
  <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="2024-02-04">
  <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="2024-02-04">
  <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="2024-02-04">
  <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 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="2024-02-04">
  <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="2024-02-04">
  <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.EnteredKeywordMode2" enum="OmniboxEnteredKeywordMode2"
    expires_after="2024-02-25">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    The new enumeration of how many times users enter keyword hint mode
    &quot;Search ___ for:&quot; and how. Note that we don't recognize the
    changing of the keyword itself as entering keyword mode, if the user never
    left keyword mode e.g. if the user was arrowing around the suggestions, so
    we'll preserve the original keyword mode entry method in this case.
  </summary>
</histogram>

<histogram name="Omnibox.Escape" enum="OmniboxEscapeAction"
    expires_after="2024-02-04">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-omnibox-team@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" enum="BooleanNavigated"
    expires_after="2024-03-17">
  <owner>ender@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>tommycli@chromium.org</owner>
  <summary>
    This records whether user initiated navigation after focusing the Omnibox
    versus switches focus elsewhere without navigating. 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 focussed, that also
    counts as a loss of focus.

    This metric is not recorded for the Realbox interactions.

    Recorded every time the Omnibox focus is cleared.
  </summary>
</histogram>

<histogram name="Omnibox.FocusToEditTime" units="ms" expires_after="2022-06-30">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    The length of time between when a user focused on the omnibox and first
    modifies the omnibox.
  </summary>
</histogram>

<histogram name="Omnibox.FocusToOpenTimeAnyPopupState3" units="ms"
    expires_after="2024-02-01">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-omnibox-team@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.GroupId.ToggledOff" enum="GroupId"
    expires_after="2024-05-03">
  <owner>mahmadi@google.com</owner>
  <owner>chrome-omnibox-team@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="2024-05-03">
  <owner>mahmadi@google.com</owner>
  <owner>chrome-omnibox-team@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="2024-02-20">
  <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="M119">
  <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="2024-02-25">
  <owner>orinj@chromium.org</owner>
  <owner>jdonnelly-team@google.com</owner>
  <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.HoverTime" units="ms" expires_after="2021-10-31">
  <owner>estark@chromium.org</owner>
  <owner>carlosil@chromium.org</owner>
  <summary>
    The time duration that the user hovers the mouse over the omnibox before
    exiting the hover or focusing the omnibox. Whenever the user's mouse enters
    the omnibox, this histogram is recorded when the mouse next exits or the
    omnibox is focused, whichever comes first. The recorded value is a delta
    from a timestamp noted when the user's mouse first entered the omnibox.
  </summary>
</histogram>

<histogram name="Omnibox.InputType" enum="OmniboxInputType"
    expires_after="2024-03-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-omnibox-team@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="2024-02-01">
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-omnibox-team@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.IsPopupOpen" enum="Boolean" expires_after="2024-02-01">
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    Whether the omnibox popup (a.k.a. dropdown) is open at the time the user
    used the omnibox to go somewhere. It can be closed if, for instance, the
    user clicked in the omnibox and hit return to reload the same page. Also,
    because paste-and-search/paste-and-go actions ignore the current content of
    the omnibox dropdown (if it is open) when they happen, we pretend the
    dropdown is closed when logging these.

    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="2024-03-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-omnibox-team@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.KeywordModeUsageByEngineType.{Usage}"
    enum="OmniboxBuiltinEngineType" expires_after="2024-07-18">
  <owner>yoangela@chromium.org</owner>
  <owner>chrome-omnibox-team@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.LocalHistoryPrefixSuggest.SearchTermsExtractedCount"
    units="counts" expires_after="2023-04-23">
  <obsolete>
    Expired in M110.
  </obsolete>
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    The number of search terms extracted from the database 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 Realbox on
    the NTP.
  </summary>
</histogram>

<histogram name="Omnibox.LocalHistoryPrefixSuggest.SearchTermsExtractionTime"
    units="ms" expires_after="2023-04-23">
  <obsolete>
    Expired in M110 in favor of
    Omnibox.LocalHistoryPrefixSuggest.SearchTermsExtractionTimeV2
  </obsolete>
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    The amount of time it takes to extract search terms from the database and
    sort them by recency (if needed) 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 Realbox on the NTP.
  </summary>
</histogram>

<histogram name="Omnibox.LocalHistoryPrefixSuggest.SearchTermsExtractionTimeV2"
    units="ms" expires_after="2024-02-20">
  <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="2024-08-15">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-omnibox-team@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.SearchTermsExtractedCount"
    units="counts" expires_after="2024-08-15">
  <obsolete>
    Expired in M110.
  </obsolete>
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    The number of search terms extracted from the database 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 Realbox on the NTP.
  </summary>
</histogram>

<histogram name="Omnibox.LocalHistoryZeroSuggest.SearchTermsExtractionTime"
    units="ms" expires_after="2024-08-15">
  <obsolete>
    Expired in M110 in favor of
    Omnibox.LocalHistoryZeroSuggest.SearchTermsExtractionTimeV2
  </obsolete>
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    The amount of time it takes to extract 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 Realbox on the NTP. In M103, this was changed to no
    longer include the construction of the AutocompleteMatch values.
  </summary>
</histogram>

<histogram name="Omnibox.LocalHistoryZeroSuggest.SearchTermsExtractionTimeV2"
    units="ms" expires_after="2024-08-15">
  <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="2024-08-15">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-omnibox-team@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.MatchStability2.MatchChangeInAnyPosition{OmniboxAutocompleteUpdateSlice}"
    enum="BooleanChanged" expires_after="2024-02-20">
  <owner>tommycli@chromium.org</owner>
  <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="2024-02-20">
  <owner>tommycli@chromium.org</owner>
  <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.NumberOfVisibleCharacters" units="characters"
    expires_after="2023-12-24">
  <owner>peilinwang@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.NumTypedTerms" units="terms"
    expires_after="2024-02-25">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-omnibox-team@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.OnDeviceHeadSuggest.AsyncQueryTime" units="ms"
    expires_after="2021-12-12">
  <owner>cch@chromium.org</owner>
  <owner>suggest-2g@google.com</owner>
  <summary>
    Time it takes for omnibox on device head provider to fulfill the
    asynchronous suggest request.
  </summary>
</histogram>

<histogram name="Omnibox.OnDeviceHeadSuggest.ResultCount" units="count"
    expires_after="2021-12-12">
  <owner>cch@chromium.org</owner>
  <owner>suggest-2g@google.com</owner>
  <summary>
    The number of results returned by the on device head model which matches the
    user input. Note all numbers greater than 5 are recorded in bucket 5.
  </summary>
</histogram>

<histogram name="Omnibox.PaintTime" units="ms" expires_after="2024-02-01">
  <owner>asvitkine@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</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="2024-02-01">
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-omnibox-team@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="2024-02-25">
  <owner>jdonnelly@chromium.org</owner>
  <owner>orinj@chromium.org</owner>
  <owner>chrome-omnibox-team@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.
  </summary>
</histogram>

<histogram name="Omnibox.ProviderTime2.{OmniboxProvider}" units="ms"
    expires_after="2024-02-01">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-omnibox-team@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" units="ms" expires_after="2024-02-01">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-omnibox-team@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).
  </summary>
</histogram>

<histogram name="Omnibox.ResumeJourneyShown" units="position"
    expires_after="2024-03-17">
  <owner>tommycli@chromium.org</owner>
  <owner>chrome-omnibox-team@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.ClusterKeywordScore" units="count"
    expires_after="2024-01-14">
  <owner>junzou@chromium.org</owner>
  <owner>chrome-intelligence-core@google.com</owner>
  <summary>
    Emits the score of matched cluster keyword of any &quot;Resume Journey&quot;
    omnibox actions shown in the popup.

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

<histogram name="Omnibox.ResumeJourneyShown.ClusterKeywordType"
    enum="HistoryClusterKeywordType" expires_after="2024-02-25">
  <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.ResumeJourneyShown.PageEntityCollection"
    enum="OptimizationGuidePageEntityCollection" expires_after="2024-02-25">
  <owner>junzou@chromium.org</owner>
  <owner>chrome-intelligence-core@google.com</owner>
  <summary>
    Emits the top entity collection of any &quot;Resume Journey&quot; omnibox
    actions shown in the popup. The collections are high-level verticals the
    keywords belong to.

    Note that these are emitted when the user uses the omnibox to go somewhere.
    When that happens, one collection 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.PageEntityCollection.
  </summary>
</histogram>

<histogram name="Omnibox.RichAutocompletion.Triggered"
    enum="OmniboxRichAutocompletionType" expires_after="2024-02-04">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-omnibox-team@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" units="Boolean"
    expires_after="2024-02-25">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-omnibox-team@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="2024-02-25">
  <owner>peilinwang@google.com</owner>
  <owner>woa-performance-bugs+jank@google.com</owner>
  <summary>
    Measures the amount of time it takes to call UrlBar.scrollToTLD(). Logged
    once per call.
  </summary>
</histogram>

<histogram name="Omnibox.Search.CtrlEnter.ResolvedAsUrl" enum="Boolean"
    expires_after="2024-04-01">
  <owner>ender@google.com</owner>
  <owner>chrome-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.
  </summary>
</histogram>

<histogram name="Omnibox.Search.CtrlEnter.Used" enum="BooleanUsage"
    expires_after="2024-04-01">
  <owner>ender@google.com</owner>
  <owner>chrome-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.
  </summary>
</histogram>

<histogram name="Omnibox.Search.OffTheRecord" enum="BooleanOffTheRecord"
    expires_after="2024-02-01">
  <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.SearchboxStats.Length" units="chars"
    expires_after="2024-02-11">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-omnibox-team@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{Population}"
    enum="OmniboxSearchEngineType" expires_after="2024-08-08">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-omnibox-team@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=".SetByEnterprisePolicy"
        summary="Reported for users with DSP set by Enterprise policy."/>
  </token>
</histogram>

<histogram
    name="Omnibox.SearchPrefetch.SearchWhatYouTypedWasAlsoSuggested.{HistoryOrSuggest}"
    units="boolean" expires_after="2023-05-02">
  <owner>ryansturm@chromium.org</owner>
  <owner>chrome-omnibox-team@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.SearchPreload.ForwardingResult.NotServedToPrerender"
    enum="SearchPreloadForwardingResult" expires_after="2024-02-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="2024-02-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.
    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="2024-02-20">
  <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.SearchProviderMatches" units="units"
    expires_after="2022-09-11">
  <obsolete>
    Obsolete as of M112.
  </obsolete>
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    The number of matches returned by SearchProvider. Emitted on every call to
    SearchProvider::Start(), which effectively means every key stroke in the
    omnibox.
  </summary>
</histogram>

<histogram name="Omnibox.SetText.Duration" units="ms"
    expires_after="2024-03-24">
  <owner>peilinwang@google.com</owner>
  <owner>woa-performance-bugs+jank@google.com</owner>
  <summary>
    Measures the amount of time it takes to call UrlBar.setText(). Logged once
    per call.
  </summary>
</histogram>

<histogram name="Omnibox.SetText.TextLength" units="characters"
    expires_after="2023-12-24">
  <owner>peilinwang@google.com</owner>
  <owner>woa-performance-bugs+jank@google.com</owner>
  <summary>
    Records the length of the text to set when calling UrlBar.setText().
    Recorded once per call to setText().
  </summary>
</histogram>

<histogram name="Omnibox.setText.TruncatedTooMuch" units="boolean"
    expires_after="2023-12-24">
  <owner>peilinwang@google.com</owner>
  <owner>woa-performance-bugs+jank@google.com</owner>
  <summary>
    Records whether the truncated text was enough to fill the urlbar. Recorded
    every time urlbar text is updated and truncation was applied.
  </summary>
</histogram>

<histogram name="Omnibox.Shortcuts.NumberOfDuplicatesPerShortcutIterated"
    units="matches" expires_after="2023-11-30">
  <owner>manukh@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    For each autocomplete input, the shortcut provider 1) searches its index for
    all matching shortcuts, 2) dedupes them, 3) prunes them to 3, 4) and lastly
    converts them to `AutocompleteMatch`s.

    This metric records the number of duplicates per shortcut found in step (2).

    See the related `Omnibox.Shortcuts.NumberOfUniqueShortcutsIterated`.

    Recorded once per unique shortcut found each time the shortcut provider is
    ran with want-async input - i.e. the user editing the omnibox text. But some
    inputs (e.g. starter pack scopes) won't run the shortcut provider, and some
    actions (e.g. typing in chrome://omnibox) will also run the shortcut
    provider.
  </summary>
</histogram>

<histogram name="Omnibox.Shortcuts.NumberOfUniqueShortcutsIterated"
    units="matches" expires_after="2023-11-30">
  <owner>manukh@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    For each autocomplete input, the shortcut provider 1) searches its index for
    all matching shortcuts, 2) dedupes them, 3) prunes them to 3, 4) and lastly
    converts them to `AutocompleteMatch`s.

    This metric records the number of unique matching shortcuts (i.e. after step
    2, before step 3).

    See the related `Omnibox.Shortcuts.NumberOfDuplicatesPerShortcutIterated`.

    Recorded once each time the shortcut provider is ran with want-async input -
    i.e. the user editing the omnibox text. But some inputs (e.g. starter pack
    scopes) won't run the shortcut provider, and some actions (e.g. typing in
    chrome://omnibox) will also run the shortcut provider.
  </summary>
</histogram>

<histogram name="Omnibox.Start.WantAsyncMatches" enum="Boolean"
    expires_after="2024-02-25">
  <owner>tommycli@chromium.org</owner>
  <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.SuggestionUsed.AnswerInSuggest"
    enum="SuggestionAnswerOptionalType" expires_after="2024-03-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-omnibox-team@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="2024-03-17">
  <owner>nyquist@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>tommycli@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="2024-02-25">
  <owner>gangwu@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</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="2024-02-25">
  <owner>jdonnelly@chromium.org</owner>
  <owner>orinj@chromium.org</owner>
  <owner>chrome-omnibox-team@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.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.ResumeJourney" units="position"
    expires_after="2024-03-17">
  <owner>tommycli@chromium.org</owner>
  <owner>chrome-omnibox-team@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.ClusterKeywordScore"
    units="count" expires_after="2023-11-12">
  <owner>sophiechang@chromium.org</owner>
  <owner>chrome-journeys@google.com</owner>
  <summary>
    Logs the score of the matched cluster keyword of &quot;Resume Journey&quot;
    omnibox actions actually selected by the user.

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

    It's safe to compare the total count of this metric to the total count of
    Omnibox.ResumeJourneyShown.ClusterKeywordScore 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. Higher is better. 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.ResumeJourney.PageEntityCollection"
    enum="OptimizationGuidePageEntityCollection" expires_after="2024-01-14">
  <owner>sophiechang@chromium.org</owner>
  <owner>chrome-journeys@google.com</owner>
  <summary>
    Logs the top entity collection of &quot;Resume Journey&quot; omnibox actions
    actually selected by the user.

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

    It's safe to compare the total count of this metric to the total count of
    Omnibox.ResumeJourneyShown.PageEntityCollection 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.PageEntityCollection.{CollectionLabel}.CTR"
    enum="BooleanSelected" expires_after="2023-12-08">
  <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 {CollectionLabel} 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. Higher is better. The count of this bucket matches the
    {CollectionLabel} bucket of
    Omnibox.SuggestionUsed.ResumeJourney.PageEntityCollection.

    The total count of both buckets is how many times we've offered the chip
    triggered by {CollectionLabel} in total, and matches the {CollectionLabel}
    bucket of Omnibox.ResumeJourneyShown.PageEntityCollection.
  </summary>
  <token key="CollectionLabel">
    <variant name="Accommodations"/>
    <variant name="Actors"/>
    <variant name="Airports"/>
    <variant name="AnatomicalStructures"/>
    <variant name="Artworks"/>
    <variant name="Athletes"/>
    <variant name="Authors"/>
    <variant name="BookEditions"/>
    <variant name="BusinessOperations"/>
    <variant name="Cars"/>
    <variant name="CausesOfDeath"/>
    <variant name="CelestialObjectWithCoordinateSystems"/>
    <variant name="ChemicalCompounds"/>
    <variant name="ConsumerProducts"/>
    <variant name="Cuisines"/>
    <variant name="CulinaryMeasures"/>
    <variant name="Currencies"/>
    <variant name="Diets"/>
    <variant name="DiseaseOrMedicalConditions"/>
    <variant name="EducationalInstitutions"/>
    <variant name="Employers"/>
    <variant name="Events"/>
    <variant name="FictionalCharacters"/>
    <variant name="FilmActors"/>
    <variant name="Films"/>
    <variant name="FilmScreeningVenues"/>
    <variant name="FilmSeries"/>
    <variant name="Foods"/>
    <variant name="Garments"/>
    <variant name="GeoBusinessChain"/>
    <variant name="GeoEstablishment"/>
    <variant name="GeoLocality"/>
    <variant name="GeoNaturalFeature"/>
    <variant name="GeoPolitical"/>
    <variant name="Holidays"/>
    <variant name="HumanLanguages"/>
    <variant name="JobTitles"/>
    <variant name="LiterarySeries"/>
    <variant name="LocalShoppingBuyables"/>
    <variant name="Materials"/>
    <variant name="MedicalTreatments"/>
    <variant name="Models"/>
    <variant name="MusicalAlbums"/>
    <variant name="MusicalArtists"/>
    <variant name="MusicalGenres"/>
    <variant name="MusicalGroups"/>
    <variant name="MusicalRecordings"/>
    <variant name="MusicalReleases"/>
    <variant name="MusicGroupMembers"/>
    <variant name="Musicians"/>
    <variant name="OrganismClassifications"/>
    <variant name="Organizations"/>
    <variant name="People"/>
    <variant name="Periodicals"/>
    <variant name="Politicians"/>
    <variant name="RecordingClusters"/>
    <variant name="Religions"/>
    <variant name="Restaurants"/>
    <variant name="RideOfferingServices"/>
    <variant name="ShoppingCenters"/>
    <variant name="SocialNetworkServiceWebsites"/>
    <variant name="Software"/>
    <variant name="Sports"/>
    <variant name="SportsTeams"/>
    <variant name="Structures"/>
    <variant name="TouristAttractions"/>
    <variant name="TravelDestinations"/>
    <variant name="TvActors"/>
    <variant name="TvEpisodes"/>
    <variant name="TvPrograms"/>
    <variant name="Unknown"/>
    <variant name="Venues"/>
    <variant name="VideoGames"/>
    <variant name="Websites"/>
    <variant name="WrittenWorks"/>
  </token>
</histogram>

<histogram name="Omnibox.SuggestionUsed.ResumeJourneyCTR"
    enum="BooleanSelected" expires_after="2024-02-25">
  <owner>tommycli@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. Higher is better. 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="2024-02-25">
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-omnibox-team@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="2024-02-25">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-omnibox-team@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="2024-02-25">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <owner>chrome-omnibox-team@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="2024-02-04">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-omnibox-team@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="2024-03-17">
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <owner>chrome-omnibox-team@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="2024-02-04">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <owner>chrome-omnibox-team@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="2024-02-25">
  <owner>gangwu@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</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="2024-03-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-omnibox-team@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="2024-02-25">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <owner>chrome-omnibox-team@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="2024-03-17">
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-omnibox-team@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="2024-09-03">
  <owner>robertlin@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <owner>chrome-omnibox-team@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="2024-02-04">
  <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="2024-02-04">
  <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.SuggestRequest.Success.PrefetchImagesCount"
    units="count" expires_after="2022-05-01">
  <obsolete>
    3/2022; feature launched.
  </obsolete>
  <owner>manukh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    The number of images prefetched by the search provider on retrieving a
    successful search response.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestRequests" enum="OmniboxSuggestRequests"
    expires_after="2024-02-04">
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>cch@chromium.org</owner>
  <summary>
    Counts about the number of suggest requests the omnibox sent, invalidated,
    and replies received.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestTiles.DeletedTileIndex" units="position"
    expires_after="2024-06-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.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestTiles.DeletedTileType" enum="SuggestTileType"
    expires_after="2024-06-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.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestTiles.SelectedTileIndex" units="position"
    expires_after="2024-06-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="2024-06-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: possible recording gap between 2023/06 and 2023/08.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestTiles.TileTypeCount.{SuggestTileType}"
    units="count" expires_after="2024-06-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: possible recording gap between 2023/06 and 2023/08.
  </summary>
  <token key="SuggestTileType">
    <variant name="Search"/>
    <variant name="URL"/>
  </token>
</histogram>

<histogram name="Omnibox.TabMatchTime" units="microseconds"
    expires_after="2024-02-04">
  <owner>gangwu@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>chrome-omnibox-team@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.
  </summary>
</histogram>

<histogram name="Omnibox.TimeSpentBeforeDismissLens" units="ms"
    expires_after="2022-06-26">
  <owner>yusuyoutube@google.com</owner>
  <owner>benwgold@google.com</owner>
  <owner>fgorski@chromium.org</owner>
  <owner>wylieb@chromium.org</owner>
  <owner>lens-chrome@google.com</owner>
  <summary>
    Logs the elapsed time between the time when user enters the Google Lens and
    the time when user dismisses Lens and returns to Chrome. Only logged on
    Android.
  </summary>
</histogram>

<histogram name="Omnibox.ToggleSuggestionGroupId.Off" enum="SuggestionGroupId"
    expires_after="2023-05-14">
  <obsolete>
    Replaced with Omnibox.GroupId.ToggledOff in M114.
  </obsolete>
  <owner>mahmadi@google.com</owner>
  <owner>chrome-omnibox-team@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 proactive zero-suggest, in the omnibox UI using the
    control in the grouped suggestions' header.
  </summary>
</histogram>

<histogram name="Omnibox.ToggleSuggestionGroupId.On" enum="SuggestionGroupId"
    expires_after="2023-10-08">
  <obsolete>
    Replaced with Omnibox.GroupId.ToggledOn in M114.
  </obsolete>
  <owner>mahmadi@google.com</owner>
  <owner>chrome-omnibox-team@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 proactive zero-suggest, visible in the omnibox
    UI using the control in the grouped suggestions' header.
  </summary>
</histogram>

<histogram name="Omnibox.URLNavigationScheme" enum="NavigationScheme"
    expires_after="2024-02-11">
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-omnibox-team@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="ms"
    expires_after="2024-04-14">
  <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.
  </summary>
</histogram>

<histogram name="Omnibox.URLScoringModelExecuted.Matches" units="counts"
    expires_after="2024-04-14">
  <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.Views.PopupFirstPaint" units="ms"
    expires_after="2024-08-01">
  <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.WebUI.FirstUpdate" units="ms"
    expires_after="2024-08-01">
  <owner>orinj@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the number of milliseconds between the webui omnibox popup
    construction and its first UpdatePopupAppearance call. This measures how
    long the popup existed before first use. Since the webui begins the
    asynchronous process of initialization and remote binding immediately on
    construction, this metric can be seen as a time budget for handler
    preparation. See also Omnibox.WebUI.HandlerReadyOnFirstAccess.
  </summary>
</histogram>

<histogram name="Omnibox.WebUI.HandlerReadyOnFirstAccess" enum="Boolean"
    expires_after="2024-08-01">
  <owner>orinj@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the ready state of the webui handler when first accessed. When this
    is true, the page loaded and the handler was ready on time. When this is
    false, it indicates that OmniboxPopupPresenter::GetHandler returned nullptr
    at least once because the page wasn't loaded before the first attempt to
    communicate via the handler. Recorded once per omnibox popup presenter
    instantiation, when the webui omnibox popup page handler is first used; so,
    at most once per browser window.
  </summary>
</histogram>

<histogram name="Omnibox.ZeroPrefixFocusType" enum="OmniboxFocusType"
    expires_after="2024-02-28">
  <owner>pnoland@google.com</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    Counts the type (concept ID) of omnibox zero-prefix on-focus type requests.
    The omnibox of Chrome on Android measures use of different focus types while
    retrieving zero prefix suggestions on supported platforms, and records
    exactly once per every zero prefix suggestions request.
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggest.AllResults" units="units"
    expires_after="2024-06-28">
  <owner>pnoland@chromium.org</owner>
  <owner>chrome-omnibox-team@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.Eligible.OnFocusV2"
    enum="ZeroSuggestEligibleOnFocus" expires_after="2022-12-25">
  <obsolete>
    Obsolete as of M106.
  </obsolete>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Whether the user has settings configured so that the current page URL can be
    sent to the suggest server to request contextual suggestions. For example,
    this is only supported for users who have Google as their default search
    engine (unmodified version of Google), have search suggest enabled, are
    signed-in and syncing without a custom passphrase, and don't have an
    incognito window open. There are other criteria too. Recorded on focus in
    the omnibox if there is default search provider and we've constructed a
    suggest URL.

    Some additional guidelines: if an incognito window is open, all focus events
    will go into the &quot;generally ineligible&quot; bucket. Likewise, if the
    current page is a search results page, we don't allow contextual suggestions
    either so focus events on those pages go in the &quot;generally
    ineligible&quot; bucket. The difference between &quot;eligible&quot; and
    &quot;generally eligible but not this time&quot; depends only the properties
    of the current URL.

    Recorded regardless of whether contextual or non-contextual zero suggest is
    currently enabled on the user's platform. However, if zero suggest (in all
    forms) is entirely disabled, the user will be perpetually ineligible.

    This histogram captures all scenarios that are generally ineligible for zero
    suggest suggestions (including incognito mode), and reports eligibility for
    suggestions even if kOmniboxPopupShortcutIconsInZeroState is enabled
    (meaning: suggestions are not shown, but current URL is eligible).
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggest.QueryResults" units="units"
    expires_after="2024-06-29">
  <owner>pnoland@chromium.org</owner>
  <owner>chrome-omnibox-team@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.URLResults" units="units"
    expires_after="2024-06-29">
  <owner>pnoland@chromium.org</owner>
  <owner>chrome-omnibox-team@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.ZeroSuggestProvider.CacheMemoryUsage" units="Bytes"
    expires_after="2024-02-04">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    Emitted in ZeroSuggestCacheService, records the estimated dynamically
    allocated memory usage of the ZeroSuggestProvider cache every time the
    prefetch or the non-prefetch zero-suggest response is stored in the cache on
    eligible page load / page switch events and when the user has focused or
    cleared the omnibox but has not typed in yet, respectively. Note that the
    max number of responses stored in the cache is always capped. The cache size
    can build up as more responses are stored. The cache size can also decrease
    as responses are removed from the cache when suggestions are deleted from
    the omnibox or when the user clears the browsing data. Hence, due to the
    dynamic nature of the cache size, this histogram is recorded on every store
    event as opposed to the cache destructor.
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggestProvider.Eligibility"
    enum="ZeroSuggestEligibility" expires_after="2024-02-04">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-omnibox-team@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="ZeroSuggestProviderEvent" expires_after="2024-02-04">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-omnibox-team@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.ZeroSuggestRequests.NonPrefetch"
    enum="OmniboxZeroSuggestRequests" expires_after="2023-09-30">
  <obsolete>
    Obsolete as of M105.
  </obsolete>
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    Counts the number of non-prefetch zero suggest requests (requests for
    suggestions when the user has focused but not modified the omnibox) the
    omnibox sent, requests that were invalidated, responses that were received,
    the subset of responses that were loaded from HTTP cache, and finally the
    subset of responses that ended up updating the displayed results.
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggestRequests.NonPrefetch.RoundTripTime"
    units="ms" expires_after="2023-09-30">
  <obsolete>
    Obsolete as of M105.
  </obsolete>
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    Records the time elapsed between non-prefetch zero suggest requests
    (requests for suggestions when the user has focused but not modified the
    omnibox) sent and the responses received; whether or not the response is
    loaded from HTTP cache.
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggestRequests.Prefetch"
    enum="OmniboxZeroSuggestRequests" expires_after="2023-09-30">
  <obsolete>
    Obsolete as of M105.
  </obsolete>
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    Counts the number of prefetch zero suggest requests (requests for
    suggestions when the user opens a new tab or brings one to foreground) the
    omnibox sent, requests that were invalidated, responses that were received,
    the subset of responses that were loaded from HTTP cache, and finally the
    subset of responses that ended up updating the displayed results.
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggestRequests.Prefetch.RoundTripTime" units="ms"
    expires_after="2023-09-30">
  <obsolete>
    Obsolete as of M105.
  </obsolete>
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    Records the time elapsed between prefetch zero suggest requests (requests
    for suggestions when the user opens a new tab or brings one to foreground)
    sent and the responses received; whether or not the response is loaded from
    HTTP cache.
  </summary>
</histogram>

<histogram
    name="Omnibox.{SearchPrefetch}.ClickToNavigationIntercepted.{NavigationPrefetchOnly}"
    units="ms" expires_after="2023-10-15">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    {SearchPrefetch}

    Measures the time between the user clicks the Omnibox suggestion and the
    moment the navigation is intercepted by the Search Prefetch code.

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

<histogram name="Omnibox.{SearchPrefetch}.FetchResult.{SuggestionPrefetchOnly}"
    enum="BooleanSuccess" expires_after="2023-10-15">
  <owner>ryansturm@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    {SearchPrefetch}

    Whether a search prefetch request finished with a success status or a status
    that could be served. Recorded when prefetch requests receive headers.

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

<histogram
    name="Omnibox.{SearchPrefetch}.NavigationInterceptedToForwardingComplete"
    units="ms" expires_after="2024-02-20">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <owner>chrome-omnibox-team@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}.NavigationURLMatches.NavigationPrefetch.{NavigationPrefetchOnly}"
    enum="Boolean" expires_after="2023-10-15">
  <owner>ryansturm@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    {SearchPrefetch}

    Whether the prefetch URL and the navigation URL are an exact match including
    query params in the URL. Recorded upon navigation to a matching search term.

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

<histogram
    name="Omnibox.{SearchPrefetch}.PrefetchEligibilityReason.{NavigationOrSuggestionPrefetch}"
    enum="SearchPrefetchEligibilityReason" expires_after="2023-10-15">
  <obsolete>
    This is deprecated as of 07/2022. Please use
    Omnibox.SearchPrefetch.PrefetchEligibilityReason2.{NavigationOrSuggestionPrefetch}.
  </obsolete>
  <owner>ryansturm@chromium.org</owner>
  <owner>chrome-omnibox-team@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}.PrefetchEligibilityReason2.{NavigationOrSuggestionPrefetch}"
    enum="SearchPrefetchEligibilityReason" expires_after="2024-02-20">
  <owner>ryansturm@chromium.org</owner>
  <owner>chrome-omnibox-team@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="2024-02-20">
  <owner>ryansturm@chromium.org</owner>
  <owner>chrome-omnibox-team@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="2024-02-20">
  <owner>ryansturm@chromium.org</owner>
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-omnibox-team@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}.PrefetchServingReason{PrerenderOrNavigation}"
    enum="SearchPrefetchServingReason" expires_after="2023-10-15">
  <obsolete>
    This is deprecated as of 08/2022. Please use
    Omnibox.SearchPrefetch.PrefetchServingReason2{PrerenderOrNavigation}.
  </obsolete>
  <owner>ryansturm@chromium.org</owner>
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-omnibox-team@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}.ReceivedServableResponse.{FallbackOrInitial}.{NavigationOrSuggestionPrefetch}"
    units="ms" expires_after="2023-10-15">
  <obsolete>
    Removed since M112 in favor of
    Omnibox.{SearchPrefetch}.ReceivedServableResponse2.{FallbackOrInitial}.{NavigationOrSuggestionPrefetch}.
  </obsolete>
  <owner>ryansturm@chromium.org</owner>
  <owner>chrome-omnibox-team@google.com</owner>
  <summary>
    {SearchPrefetch}

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

    {FallbackOrInitial}

    {NavigationOrSuggestionPrefetch}
  </summary>
  <token key="SearchPrefetch" variants="SearchPrefetch"/>
  <token key="FallbackOrInitial">
    <variant name="Fallback"
        summary="Recorded for the fallback request after the prefetch fails."/>
    <variant name="Initial"
        summary="Recorded for the initial prefetch request."/>
  </token>
  <token key="NavigationOrSuggestionPrefetch"
      variants="NavigationOrSuggestionPrefetch"/>
</histogram>

<histogram
    name="Omnibox.{SearchPrefetch}.ReceivedServableResponse2.{FallbackOrInitial}.{NavigationOrSuggestionPrefetch}"
    units="ms" expires_after="2024-02-20">
  <owner>ryansturm@chromium.org</owner>
  <owner>chrome-omnibox-team@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.

    {FallbackOrInitial}

    {NavigationOrSuggestionPrefetch}
  </summary>
  <token key="SearchPrefetch" variants="SearchPrefetch"/>
  <token key="FallbackOrInitial">
    <variant name="Fallback"
        summary="Recorded for the fallback request after the prefetch fails."/>
    <variant name="Initial"
        summary="Recorded for the initial prefetch request."/>
  </token>
  <token key="NavigationOrSuggestionPrefetch"
      variants="NavigationOrSuggestionPrefetch"/>
</histogram>

<histogram name="Omnibox.{SearchPrefetch}.StartTimeV2.{NavigationPrefetchOnly}"
    units="ms" expires_after="2023-10-15">
  <owner>ryansturm@chromium.org</owner>
  <owner>curranmax@chromium.org</owner>
  <owner>chrome-search@google.com</owner>
  <summary>
    {SearchPrefetch}

    The amount of time it takes to start a prefetch request.

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

<histogram name="Realbox.CharTypedToRepaintLatency.ToPaint" units="ms"
    expires_after="2024-02-01">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the time taken between a keystroke being typed in the NTP realbox
    and the time when we're ready to render the results in the DOM. If there are
    multiple keystrokes before the results are rendered, logs the time since the
    earliest. This is comparable to Omnibox.CharTypedToRepaintLatency.ToPaint as
    it does not take into account the time the DOM change task spends in the
    message loop nor its duration.
  </summary>
</histogram>

<histogram name="Realbox.ResultChangedToRepaintLatency.ToPaint" units="ms"
    expires_after="2024-02-01">
  <owner>mahmadi@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the time taken between AutocompleteController::Observer's
    OnResultChanged is called and the time when we're ready to render the
    results in the NTP realbox. If there are multiple calls to OnResultChanged
    before the results are rendered, logs the time since the earliest. This is
    comparable to Realbox.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>

</histograms>

</histogram-configuration>
