chromium/tools/metrics/histograms/metadata/omnibox/histograms.xml

<!--
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
[email protected].
-->

<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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.AnswerAction.UsageByType.{AnswerType}"
    enum="BooleanUsage" expires_after="2025-05-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For action associated with type &quot;{AnswerType}&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;{AnswerType}&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.

    Answer Actions are the Omnibox Action chips attached to an answer
    suggestion.
  </summary>
  <token key="AnswerType">
    <variant name="Currency"/>
    <variant name="Dictionary"/>
    <variant name="Finance"/>
    <variant name="Invalid"/>
    <variant name="KnowledgeGraph"/>
    <variant name="Local"/>
    <variant name="LocalTime"/>
    <variant name="PlayInstall"/>
    <variant name="Sports"/>
    <variant name="Sunrise"/>
    <variant name="Translation"/>
    <variant name="Weather"/>
    <variant name="WhenIs"/>
  </token>
</histogram>

<histogram name="Omnibox.AnswerAction.{ShownOrUsed}"
    enum="SuggestionAnswerType" expires_after="2025-05-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts how often Omnibox Answer Actions are {ShownOrUsed} and records the
    type (SuggestionAnswer::AnswerType) 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 Answers Actions where the Answer row was not shown to the
    user.

    Answer Actions are the Omnibox Action chips attached to an answer
    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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of times each omnibox suggestion answer type (e.g., weather,
    sports score) was received and parsed successfully. Can be normalized with
    the count of emits to Omnibox.SuggestRequest.Success.GoogleResponseTime,
    which counts all successful suggest responses from Google, not just those
    with answers attached. Note that GoogleResponseTime is technically off given
    that it will still count cases where we fail to extract, deserialize, or
    parse the response. But these cases are rare to non-existent.
  </summary>
</histogram>

<histogram
    name="Omnibox.AsyncAutocompletionTime2.Provider.{Provider}{Completed}"
    units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time `AutocompleteController::UpdateResult()` took.

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

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

    {Slice}

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

<histogram name="Omnibox.CalculateVisibleHint.Duration" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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-12-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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-11-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-11-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.CompanyEntityImageAblated" enum="Boolean"
    expires_after="2025-08-04">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether any company entity image was ablated. This histogram is
    logged to once per autocomplete pass when there exists a suggestion of
    entity type. Recorded after attempting to find matching domains between a
    historical URL and a company entity website URI.
  </summary>
</histogram>

<histogram name="Omnibox.CutOrCopyAllText" units="count"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of cut or copy commands on all selected text in the omnibox.
    Gathered on desktop platforms (Win, Mac, Linux, Chrome OS).
  </summary>
</histogram>

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

<histogram name="Omnibox.DocumentSuggest.ProviderAllowed"
    enum="DocumentProviderAllowedReason" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of times the document provider's `Start` method is called
    by the AutocompleteController, bucketed by the reason applied for whether or
    not the provider is allowed to run (in other words, whether the profile and
    session meets all the requirements to request document suggestions from the
    server).

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

<histogram name="Omnibox.DocumentSuggest.Requests"
    enum="DocumentSuggestRequestEvent" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of requests DocumentProvider sent, were invalidated, and
    were completed successfully.
  </summary>
</histogram>

<histogram name="Omnibox.DocumentSuggest.RequestTime" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the duration between when the provider begins (after a debouncing
    delay) and ends.

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

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

<histogram name="Omnibox.DocumentSuggest.TotalTime.NotInterrupted" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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.FocusToOpenTimeAnyPopupState3" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-04-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of times a suggestion group ID is prevented form appearing
    in the results. This is recorded when the user hides a set of grouped
    suggestions, such as trending zero-suggest, in the omnibox UI using the
    control in the grouped suggestions' header.
  </summary>
</histogram>

<histogram name="Omnibox.GroupId.ToggledOn" enum="GroupId"
    expires_after="2025-04-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.InputType" enum="OmniboxInputType"
    expires_after="2025-01-21">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether an omnibox interaction is a paste-and-search/paste-and-go action.
    (This histogram records both of these in the &quot;True&quot; bucket for
    this histogram because both of these are referred to as paste-and-go in the
    code.) These typically involve right-clicking in the omnibox and selecting
    that option from the dropdown.

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

<histogram name="Omnibox.JustDeletedText" enum="Boolean"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.SearchTermsExtractionTimeV2"
    units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-12-24">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The length of time it takes for the corresponding URLs that would produce a
    deleted match to be queried asynchronously and deleted. Emitted when user
    deletes a local history zero-prefix suggestion.
  </summary>
</histogram>

<histogram name="Omnibox.LocalHistoryZeroSuggest.SearchTermsExtractionTimeV2"
    units="ms" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of characters visible in the omnibox. Recorded once per
    call to UrlBar.calculateVisibleHint().
  </summary>
</histogram>

<histogram name="Omnibox.NumCalculatorMatches" units="count"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    How many calculator matches where shown. Includes matches from both the
    search and calculator providers.

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

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

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

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

<histogram name="Omnibox.NumTypedTerms" units="terms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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.PaintTime" units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Emits the position of any &quot;Resume Journey&quot; omnibox actions shown
    in the popup. The position index is 0-based, so an action shown in the
    topmost match is logged as value 0, consistent with
    Omnibox.SelectedPosition.

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

<histogram name="Omnibox.ResumeJourneyShown.ClusterKeywordType"
    enum="HistoryClusterKeywordType" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Emits the type of the matched cluster keyword of any &quot;Resume
    Journey&quot; omnibox actions shown in the popup. The types indicate the
    sources from which the keywords are generated in the history clustering
    backend.

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

<histogram name="Omnibox.RichAutocompletion.Triggered"
    enum="OmniboxRichAutocompletionType" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the number of sessions for which each type of rich autocompletion
    triggered; does not measure the number of times each type of rich
    autocompletion triggered.

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

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

<histogram name="Omnibox.RichAutocompletion.Triggered.Any" enum="Boolean"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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 search engine set by Enterprise
                 policy."/>
    <variant name=".SetByEnterprisePolicy.DefaultSearchProvider"
        summary="Reported for users with search engine set by the
                 DefaultSearchProvider* Enterprise policies."/>
    <variant name=".SetByEnterprisePolicy.SiteSearchSettings"
        summary="Reported for users with search engine set by the
                 SiteSearchSettings Enterprise policy."/>
  </token>
</histogram>

<histogram
    name="Omnibox.SearchPrefetch.SearchWhatYouTypedWasAlsoSuggested.{HistoryOrSuggest}"
    enum="Boolean" expires_after="2023-05-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks whether the StreamingSearchPrefetchURLLoader::ResponseReader can
    successfully serving to prerender clients. Recorded when a
    `StreamingSearchPrefetchURLLoader::ResponseReader` is destroyed.
  </summary>
</histogram>

<histogram name="Omnibox.SearchSuggest.Requests"
    enum="SearchSuggestRequestEvent" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of requests SearchProvider sent, were invalidated, and
    were completed successfully.
  </summary>
</histogram>

<histogram name="Omnibox.Shortcuts.NumberOfDuplicatesPerShortcutIterated"
    units="matches" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logs the position of &quot;Resume Journey&quot; omnibox actions actually
    selected by the user. The position index is 0-based, so a selected action in
    the topmost match is logged as value 0, consistent with
    Omnibox.SelectedPosition.

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

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

<histogram name="Omnibox.SuggestionUsed.ResumeJourney.ClusterKeywordType"
    enum="HistoryClusterKeywordType" expires_after="2024-03-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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.ResumeJourneyCTR"
    enum="BooleanSelected" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time elapsed between the sending of a suggest request to Google until
    the time the request was returned with status==success. Ignores requests
    that were canceled before being returned.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestRequestsSent" enum="SuggestRequestType"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number and type of requests sent by the omnibox to the Suggest
    backends. These requests are emitted as the user types or in zero-suggest
    context (user has focused or cleared the omnibox but has not typed in yet).
  </summary>
</histogram>

<histogram name="Omnibox.SuggestTiles.DeletedTileIndex" units="position"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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.TemplateUrl.Reconciliation.Type"
    enum="ReconciliationType" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Captures the type of performed reconciliation (if any).

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

<histogram name="Omnibox.TemplateUrl.Reconciliation.{ByVariant}.Result"
    enum="BooleanSuccess" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Captures the outcome of TemplateURL reconciliation whenever reconciliation
    takes place.

    This histogram captures outcome of reconciliation {ByVariant}.
  </summary>
  <token key="ByVariant">
    <variant name="ByDomainBasedKeyword" summary="by Domain-based Keyword"/>
    <variant name="ByID" summary="by ID"/>
    <variant name="ByKeyword" summary="by Keyword"/>
  </token>
</histogram>

<histogram name="Omnibox.TemplateUrl.RegulatoryExtension.SearchVariant"
    enum="RegulatoryExtensionVariant" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the type of regulatory extension used to formulate the Search URL.

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

<histogram name="Omnibox.TemplateUrl.RegulatoryExtension.SuggestVariant"
    enum="RegulatoryExtensionVariant" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the type of regulatory extension used to formulate the Suggest URL.

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

<histogram name="Omnibox.TemplateUrl.RlzPresent" enum="Boolean"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For every TemplateUrl expansion, captures whether Query has an organic
    nature (RLZ empty) or not (RLZ present).

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

<histogram name="Omnibox.TemplateUrl.SearchClientPresent" enum="Boolean"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For every TemplateUrl expansion, captures whether Query has an organic
    nature (Search client empty) or not (Search client present).

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

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

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

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

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

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

<histogram name="Omnibox.URLScoringModelExecuted.ElapsedTime"
    units="microseconds" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The amount of time it takes to execute the URL scoring model for all the
    eligible matches. Emitted when all the providers are done and there is at
    least one eligible match for model execution.

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

<histogram name="Omnibox.URLScoringModelExecuted.Matches" units="counts"
    expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of matches the URL scoring model was executed for. Emitted when
    all the providers are done and there is at least one eligible match for
    model execution.
  </summary>
</histogram>

<histogram name="Omnibox.URLScoringModelExecuted.MLScoreCache.CacheHit"
    enum="BooleanCacheHit" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether there was a cache hit when attempting to fetch the ML score
    associated with a given vector of scoring signals. This will be recorded for
    each match that is submitted to the ML scoring service. Each omnibox input
    triggers multiple autocomplete passes with each pass generating multiple
    autocomplete matches. Therefore, this metric will get logged several times
    for a single omnibox input.
  </summary>
</histogram>

<histogram name="Omnibox.URLScoringModelExecuted.MLScoreCoverage"
    units="% of matches" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the percentage of scoring-eligible autocomplete matches that were
    assigned non-null scores by the ML scoring model. This will be recorded for
    each batch that is submitted to the ML scoring service.
  </summary>
</histogram>

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

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

<histogram name="Omnibox.Views.PopupFirstPaint" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-11-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-10-06">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.ZeroSuggest.AllResults" units="units"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.QueryResults" units="units"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logs whether ZeroSuggestProvider is eligible to request and display zero-
    prefix suggestions, and if not, why not. Emitted for both
    omit_asynchronous_matches_ true (i.e, Autocomplete classifier) and false
    inputs (i.e, when the user has typed in, focused the omnibox, or cleared it
    but has not typed in yet) in ZeroSuggestProvider::Start(). Also emitted on
    applicable page load/switch events in ZeroSuggestProvider::StartPrefetch().
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggestProvider.{ResultType}.{RequestType}"
    enum="ZeroSuggestRequestEvent" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.{SearchPrefetch}.CacheAliasElapsedTimeToFallback"
    units="ms" expires_after="2025-02-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    {SearchPrefetch}

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

<histogram name="Omnibox.{SearchPrefetch}.CacheAliasFallbackReason"
    enum="SearchPrefetchCacheAliasFallbackReason" expires_after="2025-02-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    {SearchPrefetch}

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

<histogram
    name="Omnibox.{SearchPrefetch}.ClickToNavigationIntercepted.{NavigationPrefetchOnly}"
    units="ms" expires_after="2023-10-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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}.PrefetchEligibilityReason2.{NavigationOrSuggestionPrefetch}"
    enum="SearchPrefetchEligibilityReason" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    {SearchPrefetch}

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

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

<histogram
    name="Omnibox.{SearchPrefetch}.ReceivedServableResponse2.{FallbackOrInitial}.{NavigationOrSuggestionPrefetch}"
    units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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>