<!--
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 Search histograms
along with a detailed description for each histogram.

For best practices on writing histogram descriptions, see
https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md

Please follow the instructions in the OWNERS file in this directory to find a
reviewer. If no OWNERS file exists, please consider signing up at
go/reviewing-metrics (Googlers only), as all subdirectories are expected to
have an OWNERS file. As a last resort you can send the CL to
chromium-metrics-reviews@google.com.
-->

<histogram-configuration>

<histograms>

<variants name="AuxiliarySearchDataType">
  <variant name="" summary="All Requests"/>
  <variant name=".Bookmarks" summary="Bookmarks"/>
  <variant name=".Tabs" summary="Tabs"/>
</variants>

<variants name="AuxiliarySearchEntryType">
  <variant name="CustomTabs" summary="CustomTabs"/>
  <variant name="Tabs" summary="Tabs"/>
  <variant name="TopSites" summary="MostVisitedSites"/>
</variants>

<variants name="AuxiliarySearchQueryType">
  <variant name="CustomTabs" summary="CustomTabs"/>
  <variant name="Favicons" summary="Favicons"/>
  <variant name="History" summary="Tabs and CCTs"/>
  <variant name="Tabs" summary="Tabs"/>
</variants>

<variants name="ChoiceScreenContext">
  <variant name=""/>
  <variant name=".PostRestore"
      summary="Recorded alongside the base histogram when eligibility is
               checked during the session when we detect that the device has
               been restored. Histograms from this session are recorded
               before the client ID reset, under the old client ID."/>
</variants>

<variants name="ContextualSearchQuickActionCategory">
  <variant name=".Address" summary=""/>
  <variant name=".Email" summary=""/>
  <variant name=".Event" summary=""/>
  <variant name=".None" summary=""/>
  <variant name=".Phone" summary=""/>
  <variant name=".Website" summary=""/>
</variants>

<variants name="ExternalAppType">
  <variant name="PixelLauncher" summary="Pixel launcher app"/>
  <variant name="ThirdPartyLauncher" summary="Third party launcher app"/>
</variants>

<variants name="SearchEnginePromoDeviceAndOrdering">
  <variant name=""/>
  <variant name=".First.ExistingDevice"/>
  <variant name=".First.NewDevice"/>
  <variant name=".Second.ExistingDevice"/>
  <variant name=".Second.NewDevice"/>
  <variant name=".Third.ExistingDevice"/>
  <variant name=".Third.NewDevice"/>
</variants>

<variants name="SearchEnginePromoDeviceType">
  <variant name=""/>
  <variant name=".ExistingDevice"/>
  <variant name=".NewDevice"/>
</variants>

<variants name="TileUiSurface">
  <variant name="NTP." summary="Query tiles section on the new tab page"/>
  <variant name="Omnibox." summary="Query tiles suggestion on omnibox"/>
</variants>

<histogram name="Search.Ambient.Query" enum="AmbientSearchEntryPoint"
    expires_after="2027-02-07">
  <owner>juanmojica@google.com</owner>
  <owner>schechter@google.com</owner>
  <owner>stanfield@google.com</owner>
  <owner>lens-chrome-eng@google.com</owner>
  <summary>
    Records ambient search queries enumerated by the entry point used to make
    the query. This is recorded every time the user makes a query regardless of
    whether the query succeeds.
  </summary>
</histogram>

<histogram name="Search.AuxiliarySearch.Availability.Favicons" enum="Boolean"
    expires_after="2027-10-01">
  <owner>hanxi@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>clank-start@google.com</owner>
  <summary>
    Records whether a favicon is fetched successfully. The histogram is logged
    when Chrome is paused and a favicon is fetched for a Tab for the auxiliary
    search. Android-only.
  </summary>
</histogram>

<histogram name="Search.AuxiliarySearch.CustomTabFetchResults.Count"
    units="count" expires_after="2026-09-22">
  <owner>hanxi@chromium.org</owner>
  <owner>clank-start@google.com</owner>
  <summary>
    Records the number of entries returned from fetching history database which
    was initiated by a Custom Tab for auxiliary search. The histogram is logged
    when the Custom Tab is paused and the fetching from history database is
    completed. Android-only.
  </summary>
</histogram>

<histogram name="Search.AuxiliarySearch.DeleteTime{AuxiliarySearchDataType}"
    units="ms" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>Time taken for deleting contents from the auxiliary search.</summary>
  <token key="AuxiliarySearchDataType" variants="AuxiliarySearchDataType"/>
</histogram>

<histogram
    name="Search.AuxiliarySearch.DeletionFailure{AuxiliarySearchDataType}"
    units="count" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the count of failed deletions from the auxiliary search.
  </summary>
  <token key="AuxiliarySearchDataType" variants="AuxiliarySearchDataType"/>
</histogram>

<histogram
    name="Search.AuxiliarySearch.DeletionRequestStatus{AuxiliarySearchDataType}"
    enum="AuxiliarySearchRequestStatus" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the status of the request of the Auxiliary Search content deletion.
    Recorded twice for every deletion request: once to capture the request sent,
    and once to capture the consumer's response.
  </summary>
  <token key="AuxiliarySearchDataType" variants="AuxiliarySearchDataType"/>
</histogram>

<histogram name="Search.AuxiliarySearch.DonateTime" units="ms"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>Time taken for donating contents to the auxiliary search.</summary>
</histogram>

<histogram
    name="Search.AuxiliarySearch.DonationCount.{AuxiliarySearchEntryType}"
    units="count" expires_after="2027-10-01">
  <owner>hanxi@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>clank-start@google.com</owner>
  <summary>
    Records the count of contents which are sent to the auxiliary search. The
    histogram is logged when Chrome is paused and a set of data are donated to
    the auxiliary search. Android-only.
  </summary>
  <token key="AuxiliarySearchEntryType" variants="AuxiliarySearchEntryType"/>
</histogram>

<histogram
    name="Search.AuxiliarySearch.DonationFailure{AuxiliarySearchDataType}"
    units="count" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the count of failed donations from the auxiliary search.
  </summary>
  <token key="AuxiliarySearchDataType" variants="AuxiliarySearchDataType"/>
</histogram>

<histogram name="Search.AuxiliarySearch.DonationRequestStatus"
    enum="AuxiliarySearchRequestStatus" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the status of the request of the Auxiliary Search content donation.
    Recorded twice for every donation request: once to capture the request sent,
    and once to capture the consumer's response.
  </summary>
</histogram>

<histogram name="Search.AuxiliarySearch.Favicon.FirstDonateCount" units="Count"
    expires_after="2027-10-01">
  <owner>hanxi@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>clank-start@google.com</owner>
  <summary>
    Records the total count of the available favicons for the first donation.
    The histogram is logged when Chrome is paused and a small set of favicon
    fetching is completed for the auxiliary search. Android-only.
  </summary>
</histogram>

<histogram
    name="Search.AuxiliarySearch.LaunchedFromExternalApp.{ExternalAppType}.{AuxiliarySearchEntryType}"
    enum="EntryClickedPosition" expires_after="2027-10-01">
  <owner>hanxi@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>clank-start@google.com</owner>
  <summary>
    Records the type and the position of a donated data when it is clicked by
    users from the external app. The histogram is logged when Chrome is launched
    via an View Intent from the external app. Android only.
  </summary>
  <token key="ExternalAppType" variants="ExternalAppType"/>
  <token key="AuxiliarySearchEntryType" variants="AuxiliarySearchEntryType"/>
</histogram>

<histogram name="Search.AuxiliarySearch.Module.ClickInfo" enum="ClickInfo"
    expires_after="2027-10-01">
  <owner>hanxi@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>clank-start@google.com</owner>
  <summary>
    Records the type of the button that the user clicked on the auxiliary search
    module which is shown on the magic stack. The histogram is logged when the
    user clicks a button on the module. Android-only.
  </summary>
</histogram>

<histogram name="Search.AuxiliarySearch.QueryTime.{AuxiliarySearchQueryType}"
    units="ms" expires_after="2027-10-01">
  <owner>hanxi@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>clank-start@google.com</owner>
  <summary>
    Records the time taken for query contents for the auxiliary search. The
    histogram is logged when Chrome is on paused and the query of a set of data
    is completed for the auxiliary search. Android only.
  </summary>
  <token key="AuxiliarySearchQueryType" variants="AuxiliarySearchQueryType"/>
</histogram>

<histogram name="Search.AuxiliarySearch.Schedule.DelayTime" units="ms"
    expires_after="2027-10-01">
  <owner>hanxi@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>clank-start@google.com</owner>
  <summary>
    Records the duration between a background task is created and executed for
    tab donation. The histogram is logged when the background task is started,
    Android-only.
  </summary>
</histogram>

<histogram name="Search.AuxiliarySearch.Schedule.DonateTime" units="ms"
    expires_after="2027-10-01">
  <owner>hanxi@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>clank-start@google.com</owner>
  <summary>
    Records the time taken between all of the favicons are fetched and the
    donation to the auxiliary search is completed. The histogram is logged when
    the donation is completed from a scheduled background task. Android-only.
  </summary>
</histogram>

<histogram name="Search.AuxiliarySearch.Schedule.Favicon.DonateCount"
    units="count" expires_after="2027-10-01">
  <owner>hanxi@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>clank-start@google.com</owner>
  <summary>
    Records the number of favicons that a background task donated for auxiliary
    search. The histogram is logged when all of the favicons are fetched.
    Android-only.
  </summary>
</histogram>

<histogram name="Search.AuxiliarySearch.Schedule.Favicon.FetchTime" units="ms"
    expires_after="2027-10-01">
  <owner>hanxi@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>clank-start@google.com</owner>
  <summary>
    Time taken for fetching up to 100 favicons for the auxiliary search from a
    scheduled background task. The histogram is logged when all of the favicons
    are fetched. Android-only.
  </summary>
</histogram>

<histogram name="Search.AuxiliarySearch.Schedule.FaviconDonateResult"
    enum="DonateResult" expires_after="2027-10-01">
  <owner>hanxi@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>clank-start@google.com</owner>
  <summary>
    Records the result of a background task for tab donation. The histogram is
    logged when a donation is completed, or when all of the favicon fetches are
    completed but there isn't any favicon available. Android-only.
  </summary>
</histogram>

<histogram name="Search.AuxiliarySearch.ShareTabsWithOs" enum="Boolean"
    expires_after="2027-10-01">
  <owner>hanxi@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>clank-start@google.com</owner>
  <summary>
    Records the whether the sharing Tabs with OS config is enabled. The
    histogram is logged when the user changes the config on Tabs settings.
    Android-only.
  </summary>
</histogram>

<histogram name="Search.AuxiliarySearch.TimeToCreateControllerInCustomTab"
    units="ms" expires_after="2026-09-08">
  <owner>hanxi@chromium.org</owner>
  <owner>clank-start@google.com</owner>
  <summary>
    Records the time from CustomTabActivity is created until the
    AuxiliarySearchController is created in the deferred startup. The histogram
    is logged when the AuxiliarySearchController is created in the
    CustomTabActivity. Android-only.
  </summary>
</histogram>

<histogram name="Search.AuxiliarySearch.TopSites.ExpirationDuration" units="ms"
    expires_after="2027-10-01">
  <owner>hanxi@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>clank-start@google.com</owner>
  <summary>
    Records the expiration duration of the lastest fetch results of the most
    visited sites. The histogram is logged when Chrome is paused and a set of
    documents are built to donate for the auxiliary search. Android-only.
  </summary>
</histogram>

<histogram name="Search.ChoiceCompletedOnMonth.OnProfileLoad2{Profile}"
    enum="SearchEngineChoiceDate" expires_after="2027-01-10">
<!-- When bumping expiry date, also update the enum (making the enumeration in
sync with existing values). Escalate when data count exceeds 1000 entries:
https://chromium.googlesource.com/chromium/src/tools/+/HEAD/metrics/histograms/README.md#When-To-Use-Sparse-Histograms -->

  <owner>dgn@google.com</owner>
  <owner>tju@google.com</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Recorded on each profile load (tied to service construction), indicates the
    last engine choice timestamp formatted as YYYYMM integer. For convenience,
    the enum maps these to user readable `YYYY-MM` labels.

    To avoid the histogram exceeding 1000 buckets (limit for sparse histograms),
    the range is capped to [`2022-01`, `2050-12`], dates prior to 2022 being
    recorded as `1000-01`, and dates after 2050 being recorded as `3000-01`.

    The value is serialized as a sparse histogram with integer values. Since
    each client can record the same value multiple times, it might be more
    interesting to look at unique clients.

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

<histogram name="Search.ChoiceDebug.PreexistingProgramTaggedEntries"
    units="entries" expires_after="2027-02-07">
  <owner>dgn@google.com</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Recorded on Android whenever a new Play API search engine is set (e.g., via
    the EEA Choice Screen). Records the total count of pre-existing regulatory
    program tagged search engines (Android EEA) found in the
    TemplateURLService's loaded engines list and removed prior to adding the new
    engine. Identifies how many stale regulatory entries were accumulated and
    successfully cleaned up.
  </summary>
</histogram>

<histogram name="Search.ChoiceDebug.PropagatedDataOutcome"
    enum="CurrentDefaultPropagationOutcome" expires_after="2026-12-01">
  <owner>dgn@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Records the outcome of attempting to propagate the search engine choice data
    from an existing profile to a newly created one. Recorded each time a
    profile forks or creates a new profile while capturing preferences.
  </summary>
</histogram>

<histogram name="Search.ChoiceDebug.ScrollStateWithMoreButtonClick"
    enum="SearchEngineChoiceScrollState" expires_after="2026-08-19">
  <owner>dgn@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Records an enum that represents the search engine choice page scroll state
    when the &quot;More&quot; button is clicked. In some cases, the page doesn't
    scroll to the exact bottom when the button is clicked. Recorded only when
    the &quot;More&quot; button is clicked.
  </summary>
</histogram>

<histogram
    name="Search.ChoiceDebug.UnexpectedRecordDisplayStateReentryHasCompletion"
    enum="Boolean" expires_after="2026-10-18">
  <owner>dgn@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    At the moment re-entry into MaybeRecordChoiceScreenDisplayState from user
    choice moment is detected, records whether we already have valid completion
    metadata written stored in prefs.

    This is intended to monitor the ongoing prevalence of
    https://crbug.com/390272573, to allow detection if the rate increases
    significantly.
  </summary>
</histogram>

<histogram name="Search.ChoiceDebug.UnhandledChoiceStatusAtLoadTime"
    enum="SearchEngineChoiceStatus" expires_after="2026-12-20">
  <owner>dgn@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    When the &quot;static&quot; choice screen eligibility is evaluated at
    profile load time, only a subset of the choice screen status count towards
    ineligibility. This histogram is added to monitor the ignored conditions for
    which we consider the profile &quot;eligible&quot;, but that would count as
    &quot;ineligible&quot; when checked at triggering time.

    Recorded at profile load, for a subset of the statuses leading to reporting
    &quot;Eligible&quot; to the
    &quot;RegionalCapabilities.FunnelStage.Eligibility&quot; histogram.
  </summary>
</histogram>

<histogram name="Search.ChoiceDebug.UnknownCountryIdStored"
    enum="UnknownCountryIdStored" expires_after="2026-12-20">
  <owner>cschlosser@chromium.org</owner>
  <owner>chromeos-privacyhub@google.com</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Records if the pref storing the current country ID of the device is invalid.
    Through some code paths it's possible that a placeholder value could be
    persisted in the prefs. Earlier there were less checks in place for valid
    country IDs which makes it possible that old profiles still have the invalid
    values stored in prefs. As the prefs take precedence over other mechanisms
    when determining the country for the device an invalid value can lead to the
    actual country not being assigned correctly. This histogram is emitted when
    trying to read the pref for the profile and iff the pref exists.
  </summary>
</histogram>

<histogram name="Search.ChoicePrefsCheck.PendingChoiceScreenDisplayStateStatus"
    enum="PendingChoiceScreenDisplayStateStatus" expires_after="2026-12-20">
  <owner>dgn@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Records the outcome of attempting to upload the pending choice screen
    display state metrics. The display state data is cached when there is a
    country or program mismatch at the moment the search engine choice is
    completed (see
    &quot;Search.ChoiceScreenShowedEngineAt.CountryMismatch&quot;).

    Recorded on profile load. Until a terminal state is reached and for a fixed
    duration after the choice is made, Chrome will re-check on each profile load
    whether we still are in mismatch, and submit the
    &quot;Search.ChoiceScreenShowedEngineAt.Index*&quot; histograms if not. Once
    the data is recorded, the profile should not log this histogram again. Is it
    also not logged when the histograms can be emitted at the choice moment.
  </summary>
</histogram>

<histogram name="Search.ChoicePrefsCheck.WipeOnMissingDse" enum="Boolean"
    expires_after="2027-02-21">
  <owner>dgn@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Records whether the search engine choice preferences would be wiped due to
    the missing default search engine pref. Checked on profile load, and
    recorded when we both have choice metadata and no default search engine
    pref. The recorded value indicates whether the feature to wipe this value is
    enabled.
  </summary>
</histogram>

<histogram name="Search.ChoiceReprompt{Category}"
    enum="SearchEngineChoiceReprompt" expires_after="2027-01-03">
  <owner>droger@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Records the outcome of the search engine reprompt check, when the profile is
    opened, based on remote experiment parameters. Reported for {Category}.
  </summary>
  <token key="Category">
    <variant name="" summary="all keys"/>
    <variant name=".SpecificCountry"
        summary="specific country keys (wildcard excluded)"/>
    <variant name=".Wildcard" summary="the wildcard country key"/>
  </token>
</histogram>

<histogram name="Search.ChoiceScreenDefaultSearchEngineType2{Profile}"
    enum="OmniboxSearchEngineType" expires_after="2027-01-03">
  <owner>dgn@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Records the type of the default search engine that was chosen by the user.
    Recorded the first time a user in the EEA region changes their default
    search engine in the search engine choice screen. Unlike
    Search.ChoiceScreenDefaultSearchEngineType, it does not record choices made
    in the settings page. The enum is shared with
    Search.DefaultSearchProviderType2.

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

<histogram name="Search.ChoiceScreenDefaultSearchEngineType{Profile}"
    enum="OmniboxSearchEngineType" expires_after="2027-01-03">
  <owner>dgn@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Records the type of the default search engine that was chosen by the user.
    Recorded the first time a user in the EEA region changes their default
    search engine in the search engine choice screen or in the settings page.
    The enum is shared with Search.DefaultSearchProviderType2.

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

<histogram name="Search.ChoiceScreenEvents{Context}{Profile}"
    enum="SearchEngineChoiceScreenEvents" expires_after="2027-01-31">
  <owner>dgn@chromium.org</owner>
  <owner>samarchehade@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Records that the search engine choice screen was displayed, and whether this
    happened as part of the FRE. Also records when the user clicks/taps the 'Set
    as Default' button and if this selection was in the FRE or not. On Desktop,
    if the choice screen is shown simultaneously in multiple browsers that all
    have the same profile, the display event is only recorded once.

    {Context}

    {Profile}
  </summary>
  <token key="Context" variants="ChoiceScreenContext"/>
  <token key="Profile" variants="ProfileIndex"/>
</histogram>

<histogram name="Search.ChoiceScreenNavigationConditions{Context}{Profile}"
    enum="SearchEngineChoiceScreenConditions" expires_after="2027-01-03">
  <owner>dgn@chromium.org</owner>
  <owner>ljjlee@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Records the conditon state at page navigation for whether to display the
    search engine choice screen. This is recorded every time the eligibility
    state is being checked, which might be as often as every page navigation.
    The enum is shared with ChoiceScreenProfileInitConditions, and individual
    enum members might appear in only one histogram.

    {Context}

    {Profile}
  </summary>
  <token key="Context" variants="ChoiceScreenContext"/>
  <token key="Profile" variants="ProfileIndex"/>
</histogram>

<histogram name="Search.ChoiceScreenProfileInitConditions{Context}{Profile}"
    enum="SearchEngineChoiceScreenConditions" expires_after="2027-01-03">
  <owner>dgn@chromium.org</owner>
  <owner>ljjlee@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Records the conditon state at profile initialization for displaying the
    search engine choice screen that the profile is in. The enum is shared with
    ChoiceScreenNavigationConditions, and individual enum members might appear
    in only one histogram.

    {Context}

    {Profile}
  </summary>
  <token key="Context" variants="ChoiceScreenContext"/>
  <token key="Profile" variants="ProfileIndex"/>
</histogram>

<histogram name="Search.ChoiceScreenSelectedEngineIndex" units="index"
    expires_after="2026-12-20">
  <owner>dgn@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Records the index among the options listed on the choice screen for the
    search engine that was chosen by the user. Gets recorded when a search
    engine choice is made on the choice screen.
  </summary>
</histogram>

<histogram name="Search.ChoiceScreenShowedEngineAt.CountryMismatch"
    enum="BooleanSkipped" expires_after="2026-12-20">
  <owner>dgn@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Records whether Search.ChoiceScreenShowedEngineAt.Index{Index} had to be
    skipped due to a mismatch between the Variations/UMA country and the
    profile/choice country. If there is a mismatch, `true` (&quot;Skipped&quot;)
    is recorded, `false` (&quot;Not Skipped&quot;) otherwise.
  </summary>
</histogram>

<histogram name="Search.ChoiceScreenShowedEngineAt.Index{Index}{Profile}"
    enum="OmniboxSearchEngineType" expires_after="2027-01-03">
  <owner>dgn@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    With its other per-index variants, records information about the positions
    of all search engines on the choice screen. Specifically, this one records
    that a given search engine was shown at index {Index} of the choice screen.

    This set of histograms is recorded at the moment a choice is made, which is
    expected to happen at most once per profile. To avoid adversely impacting
    pseudonymity property of UMA logs, this will not be logged if the country
    associated with the current metrics session does not match the country used
    to determine the list of options to show on the screen.

    This metric is inteded to be consumed via raw histogram analysis instead of
    via the UMA dashboard. See
    http://go/chrome-choice-screen-positions-histogram-design for more info.

    {Profile}
  </summary>
  <token key="Index">
    <variant name="0" summary="0"/>
    <variant name="1" summary="1"/>
    <variant name="2" summary="2"/>
    <variant name="3" summary="3"/>
    <variant name="4" summary="4"/>
    <variant name="5" summary="5"/>
    <variant name="6" summary="6"/>
    <variant name="7" summary="7"/>
  </token>
  <token key="Profile" variants="ProfileIndex"/>
</histogram>

<histogram name="Search.ChoiceWipeReason" enum="SearchEngineChoiceWipeReason"
    expires_after="2026-12-20">
  <owner>droger@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Records the reason for wiping the search engine choice preferences, forcing
    a reprompt at the next startup. Recorded every time the wiping occurs.
  </summary>
</histogram>

<histogram name="Search.ContextualSearch.All.ResultsSeen" enum="Boolean"
    expires_after="never">
<!-- expires-never: dashboard metric (internal: go/cs-metrics-dashboard) -->

<!-- expires-never: part of top-line metric (internal: go/chrome-browser-nsm) -->

  <owner>ender@google.com</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records whether the user opened the panel when it was shown. Recorded for
    all gestures for all users when the UX is hidden. Implemented for Android.

    The user action Search.ContextualSearch.All.ResultsSeen.true is also logged
    in the case that true is logged to this histogram.

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

<histogram name="Search.ContextualSearch.All.Searches"
    enum="BooleanBottomSearchKind" expires_after="never">
<!-- expires-never: part of vital metric ChromeSearch.Actions -->

  <owner>ender@google.com</owner>
  <owner>related-searches-vteam@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records that a Search Result page was shown in a bottom sheet for either
    Contextual Search or Related Searches. Each entry corresponds to exactly one
    search of the indicated kind. Related Searches are recorded when the SERP is
    shown to the user, and Contextual Searches are recorded when the panel is
    closed. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearch.CardTag"
    enum="ContextualSearchCardTag" expires_after="never">
<!-- expires-never: tracks key server results returned to the user. -->

  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    The type of card returned in the Search Term Resolution Response from the
    server when a search is resolved in response to a Tap gesture that uses
    surrounding text to determine the best search. This characterises what we'll
    show in the Bar. Recorded when the panel is closed. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearch.CardTagSeen"
    enum="ContextualSearchCardTag" expires_after="never">
<!-- expires-never: tracks key server results returned to the user. -->

  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    The type of card shown in the Bar when the panel has been opened. Recorded
    when the panel is closed. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearch.Counted.Event"
    enum="ContextualSearchCountedEvent" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records that a Search was done and whether the search was unintelligent or
    intelligent, and whether it was likely counted by Rasta. Recorded for all
    users when the panel is closed after being opened. Implemented for Android.
    (Expired in 2023-04-16. Revived in 2024-11-03.)

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

<histogram name="Search.ContextualSearch.Counted.Searches" enum="Boolean"
    expires_after="2027-10-01">
<!-- TODO(donnd): change expires_after to "never" once established and
         approved. -->

  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records that a Contextual Search was initiated by the user, and whether that
    search should be counted as a real user-viewed search or not.

    The true bucket is designed to match what Rasta counts in its queries(event)
    metric as a real user search.

    The false bucket includes all the other cases where the Contextual Search
    was started but not counted by Rasta because the user has not been able to
    view the Search Result Page. Usually this is because the user did not expand
    the panel beyond the peeking state, but occasionally because it did not
    render. Recorded when the panel is closed for all users. Implemented for
    Android. (Expired in 2023-04-16. Revived in 2024-11-03.)

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

<histogram name="Search.ContextualSearch.NetError" enum="NetErrorCodes"
    expires_after="2027-10-01">
  <owner>basiaz@google.com</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Network status codes recorded for each Contextual Search request after the
    url loader calls the completion callback. Recorded value is the absolute
    value of the received net::Error value.

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

<histogram name="Search.ContextualSearch.ResolveReceived" enum="Boolean"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records that a resolve response was received from the server, and whether
    that was due to a Tap gesture or not (vs longpress). Recorded when the user
    triggers the feature and the server responds. Implemented for Android.
    (Expired in M94. Revived in M120.)

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

<histogram name="Search.ContextualSearch.ResolveRequested"
    enum="ContextualSearchGestureIsTap" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records that a resolve request was sent to the server, and whether that was
    due to a Tap or not (vs longpress). Recorded when the user triggers the
    feature. Implemented for Android. (Expired in 2023-02-12. Revived in
    2024-11-03.)

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

<histogram name="Search.ContextualSearch.SelectionExpanded"
    enum="ContextualSearchGestureIsTap" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records that a resolve request from the server caused the selection to be
    expanded, and whether that original selection was due to a Tap or not (vs
    longpress). Recorded when the qualifying server response is received.
    Implemented for Android.(Expired in 2024-07-21. Revived in 2024-09-16.)

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

<histogram name="Search.ContextualSearch.SuppressedViewTooSmall" enum="Boolean"
    expires_after="2027-10-01">
  <owner>donnd@chromium.org</owner>
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records whether triggering the Touch To Search feature was suppressed due to
    the base page view being too small. This may happen in landscape mode, on
    very small phones, when a Partial Height Custom Tab is being displayed, or
    when muliwindow is in use with a small window. The intent is to capture in
    the log how many searches we lose when the gating Feature is enabled.
    Recorded when a gesture that would normally trigger TTS suppresses the
    bottom sheet from showing. Android only.

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

<histogram name="Search.ContextualSearch.Tap.ResultsSeen" enum="Boolean"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records whether the user opened the panel when it was shown in response to a
    tap gesture, for all users. Recorded when the UX is hidden. Implemented for
    Android. (Expired in M77. Revived in M120.)

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

<histogram name="Search.ContextualSearch.UnifiedConsent.PreviouslyUndecided"
    enum="Boolean" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records the previous state of the user's enabled preference to indicate
    whether they were decided or undecided about fully enabling this feature.
    Recorded during the rollout of Unified Consent when the Contextual Search
    preference is changed. Implemented for Android. (Expired after 2019-01-30.
    Revived in M120.)

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

<histogram name="Search.ContextualSearch.UnifiedConsent.ThrottledRequests"
    enum="Boolean" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records whether throttling for Unified Consent was done for all requests.
    Recorded when the user taps on text and the system would like the server to
    suggest what to search for using page context, regardless of feature-enabled
    state. Recorded multiple times for each request. Supports the rollout of
    Unified Consent for Contextual Search. Implemented for Android. (Expired
    after 2019-01-30. Revived in M120.)

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

<histogram name="Search.ContextualSearch.UnifiedConsent.ThrottleEligible"
    enum="Boolean" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Records whether this user had a request throttled or not when needed.
    Recorded when the user taps on text and the system would like the server to
    suggest what to search for using page context, and throttling is in effect
    for this user. Supports the rollout of Unified Consent for Contextual
    Search. Implemented for Android. (Expired after 2019-01-30. Revived in
    M120.)

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

<histogram name="Search.ContextualSearchContextualCardsIntegration.DataShown"
    enum="Boolean" expires_after="never">
<!-- expires-never: key metric on usefulness of Touch to Search. -->

  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Whether Contextual Cards data was shown in the Contextual Search Bar.
    Contextual Cards data is included with the search term resolution response.
    Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPreferenceState"
    enum="ContextualSearchPreferenceState" expires_after="never">
<!-- expires-never: dashboard metric (internal: go/cs-metrics-dashboard) -->

  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    The state of the Contextual Search Preference. Can be logged multiple times.
    Used to determine the population size (user view). Logged whenever the
    Chrome application is paused. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPreferenceStateChange"
    enum="ContextualSearchPreferenceState" expires_after="never">
<!-- expires-never: dashboard metric (internal: go/cs-metrics-dashboard) -->

  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    The Contextual Search preference state after a modification from the
    preference menu. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPrivacyOptInPreferenceStateChange"
    enum="BooleanOptedIn" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    The Contextual Search privacy opt-in preference state after a modification
    from the preference menu. Recorded when the opt-in switch in Settings page
    is toggled. Implemented for Android. (Expired in 2023-10-15. Revived in
    2024-11-03.)

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

<histogram name="Search.ContextualSearchPromoCardChoice" enum="BooleanOptedIn"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    The user's choice in the Contextual Search promo card. Recorded when the 'No
    thanks' or 'Turn on' button on the Contextual Search Promo Card is chosen.
    Implemented for Android. (Expired in 2023-05-07. Revived in 2024-11-03.)

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

<histogram name="Search.ContextualSearchPromoOpenCount2" units="opens"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    The total count of times that the revised promo has been shown. Once the
    user decides, this counter is no longer updated. Logged for each show of the
    promo card. Implemented for Android. (Expired in 2023-06-26. Revived in
    2024-11-03.)

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

<histogram name="Search.ContextualSearchQuickActions.Category"
    enum="ContextualSearchQuickActionCategory" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    The category of quick actions shown in the Contextual Search bar. Recorded
    when the quick action is set. Implemented for Android. (Expired in
    2023-10-22. Revived in 2024-11-03.)

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

<histogram
    name="Search.ContextualSearchQuickActions.Clicked{ContextualSearchQuickActionCategory}"
    enum="BooleanClicked" expires_after="never">
<!-- expires-never: indicates completion of a user journey. -->

  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Whether a quick action in the Contextual Search bar was clicked, which
    activates the associated intent. Recorded when Contextual Search is
    dismissed due to a click on a QuickAction in the Bar. Implemented for
    Android. {ContextualSearchQuickActionCategory}
  </summary>
  <token key="ContextualSearchQuickActionCategory"
      variants="ContextualSearchQuickActionCategory">
    <variant name=""/>
  </token>
</histogram>

<histogram
    name="Search.ContextualSearchQuickActions.IntentResolution{ContextualSearchQuickActionCategory}"
    enum="ContextualSearchQuickActionIntentResolution"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Whether a Contextual Search quick action intent resolved to zero, one, or
    many apps. Recorded when the quick action intent URI is resolved.
    Implemented for Android. (Expired in M81. Revived in M120.)
    {ContextualSearchQuickActionCategory}

    Note: There is a recording gap between: 2025.11-2026.08.
  </summary>
  <token key="ContextualSearchQuickActionCategory"
      variants="ContextualSearchQuickActionCategory">
    <variant name=""/>
  </token>
</histogram>

<histogram
    name="Search.ContextualSearchQuickActions.ResultsSeen{ContextualSearchQuickActionCategory}"
    enum="ContextualSearchResultsSeen" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Whether search results were seen as part of a Contextual Search when a quick
    action was shown. Recorded when Contextual Search is dismissed. Implemented
    for Android. (Expired in M81. Revived in M120.)
    {ContextualSearchQuickActionCategory}

    Note: There is a recording gap between: 2025.11-2026.08.
  </summary>
  <token key="ContextualSearchQuickActionCategory"
      variants="ContextualSearchQuickActionCategory">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Search.ContextualSearchResultsSeen"
    enum="ContextualSearchResultsSeen" expires_after="never">
<!-- expires-never: dashboard metric (internal: go/cs-metrics-dashboard) -->

  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Whether search results were seen as part of a contextual search. Implemented
    for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchResultsSeenByGesture"
    enum="ContextualSearchSeenByGesture" expires_after="never">
<!-- expires-never: dashboard metric (internal: go/cs-metrics-dashboard) -->

  <owner>ender@google.com</owner>
  <owner>chrome-mobile-search@google.com</owner>
  <summary>
    Whether search results were seen, broken down by original triggering
    gesture. Only includes users that have enabled. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.DefaultSearchEngineMirrorCheckOutcome"
    enum="DefaultSearchEngineMirrorCheckOutcomeType" expires_after="2027-02-07">
  <owner>fikremengistu@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records the outcome of default search engine (DSE) tampering detection done
    at profile startup. The detection is done by comparing the DSE pref with its
    mirror; a mismatch indicates tampering.

    This metric is recorded exclusively on MacOS and Windows devices. It is
    recorded each time a DefaultSearchManager is created, after the default
    search engine is loaded from prefs.
  </summary>
</histogram>

<histogram name="Search.DefaultSearchEngineMirrored" enum="Boolean"
    expires_after="2027-01-10">
  <owner>davidbienvenu@chromium.org</owner>
  <owner>wfh@chromium.org</owner>
  <summary>
    True if the default search engine pref is the same as the mirrored pref,
    &quot;default_search_provider_data.mirrored_template_url_data&quot;, false
    otherwise. If the default search engine pref is changed externally, this
    would be false.

    Recorded each time a DefaultSearchManager is created, after the default
    search engine is loaded from prefs.
  </summary>
</histogram>

<histogram name="Search.DefaultSearchEngineResetNotificationShown"
    enum="BooleanShown" expires_after="2027-02-07">
  <owner>fikremengistu@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records if the Default Search Engine (DSE) reset notification dialog is
    shown to a user. It is recorded once, at the moment the notification dialog
    is created. This occurs on the first omnibox search query that a user
    performs after their DSE has been automatically reset for security. The
    dialog will NOT be shown if, following a security reset, the user changes
    the DSE before the dialog is shown.

    This metric is recorded exclusively on macOS and Windows operating systems.
  </summary>
</histogram>

<histogram name="Search.DefaultSearchProviderType2{Population}"
    enum="OmniboxSearchEngineType" expires_after="2027-02-07">
  <owner>mpearson@chromium.org</owner>
  <owner>ftirelo@chromium.org</owner>
  <summary>
    The type of the default search engine that is loaded when a regular, guest,
    or ChromeOS sign-in screen profile is opened or after a profile reset. (A
    profile reset can only happen to a regular profile.) Not logged when an
    Incognito profile is opened because that inherits the settings from its
    parent profile. As such, it's not necessary to log the Incognito profile's
    settings.

    The fact that this is logged when the ChromeOS sign-on screen profile is
    opened means this is recorded when the ChromeOS sign-in screen is initially
    shown. The value recorded is the default value for the ChromeOS install; the
    default search engine used in this profile cannot be changed. Also note that
    people cannot search / browse the web using this profile. As such, the
    default search engine setting for this profile does not have any practical
    meaning.

    {Population}
  </summary>
  <token key="Population">
    <variant name="" summary="Reported for all users."/>
    <variant name=".Fallback"
        summary="Reported for users with pre-populated DSP
                 (country/distribution channel) ."/>
    <variant name=".SetByEnterprisePolicy"
        summary="Reported for users with DSP set by Enterprise policy."/>
    <variant name=".SetByExtension"
        summary="Reported for users with DSP set by a browser extension."/>
    <variant name=".SetByUser"
        summary="Reported for users who selected their DSP."/>
  </token>
</histogram>

<histogram name="Search.Image.Camera.Open" enum="CameraOpenEntryPoint"
    expires_after="2027-02-07">
  <owner>juanmojica@google.com</owner>
  <owner>schechter@google.com</owner>
  <owner>stanfield@google.com</owner>
  <owner>lens-chrome-eng@google.com</owner>
  <summary>
    Records all intents fired to open the Lens viewfinder enumerated by entry
    point, regardless of whether the intent was successful.
  </summary>
</histogram>

<histogram name="Search.Image.Camera.Result" enum="CameraResult"
    expires_after="2024-12-08">
  <owner>juanmojica@google.com</owner>
  <owner>schechter@google.com</owner>
  <owner>stanfield@google.com</owner>
  <owner>hujasonx@google.com</owner>
  <owner>lens-chrome-eng@google.com</owner>
  <summary>
    Records camera results such as successful image capture, user exited, etc.
    This is recorded every time the user opens the Lens viewfinder camera.
  </summary>
</histogram>

<histogram name="Search.Integrity.CrossDomainSearch" enum="Boolean"
    expires_after="2026-12-20">
  <owner>yeroshkin@chromium.org</owner>
  <owner>musalmaan@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Records whether there is a site search with a URL-like keyword whose target
    URL has a different domain.
  </summary>
</histogram>

<histogram name="Search.Integrity.CrossTldSearch" enum="Boolean"
    expires_after="2026-12-20">
  <owner>yeroshkin@chromium.org</owner>
  <owner>musalmaan@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Records whether there is a site search with a URL-like keyword whose target
    URL has a different eTLD, but the same domain otherwise.
  </summary>
</histogram>

<histogram name="Search.Integrity.CustomPopulatedDefault" enum="Boolean"
    expires_after="2026-12-27">
  <owner>musalmaan@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Records whether the default search engine is a custom search engine but has
    a non-zero `prepopulate_id`. This helps identify engines that are not part
    of the standard prepopulated list but are appearing in the default search
    list.

    Recorded once per profile at startup when the search engine allowlist is
    initialized and the configuration is checked.
  </summary>
</histogram>

<histogram
    name="Search.Integrity.Enterprise.IsDefaultCustomWithMatchingPolicyEngine"
    enum="Boolean" expires_after="2026-12-20">
  <owner>musalmaan@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Records whether the user's default search engine is a custom one that is
    similar the name of an official, policy-enforced engine but uses a different
    URL on a managed profile.

    Recorded once per profile at startup when the search engine allowlist is
    initialized and the configuration is checked.
  </summary>
</histogram>

<histogram name="Search.Integrity.Enterprise.IsDefaultEnforcedWithoutPolicy"
    enum="Boolean" expires_after="2026-12-20">
  <owner>musalmaan@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Records whether the default search engine has the enforced_by_policy flag
    set to True, but the DefaultSearchProviderEnabled policy is not active for a
    managed profile. This helps detect cases where search settings might be
    incorrectly claiming policy enforcement.

    Recorded once per profile at startup when the search engine allowlist is
    initialized and the configuration is checked.
  </summary>
</histogram>

<histogram name="Search.Integrity.Enterprise.Referral.ParameterFound"
    enum="SearchReferralParam" expires_after="2026-12-27">
  <owner>musalmaan@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Records which referral parameter is found in the URL of a custom search
    engine that is not on the allowlist on a managed profile. Recorded once per
    profile at startup if a custom search engine is present on a managed
    profile.
  </summary>
</histogram>

<histogram name="Search.Integrity.ExtensionUrlSearch" enum="Boolean"
    expires_after="2026-12-20">
  <owner>yeroshkin@chromium.org</owner>
  <owner>musalmaan@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Records whether there is a site search with a URL-like keyword whose target
    is an extension.
  </summary>
</histogram>

<histogram name="Search.Integrity.HasCustomSearchEngine" enum="Boolean"
    expires_after="2026-12-20">
  <owner>musalmaan@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Records whether a custom or non-standard search engine (one not present in
    the official Chromium prepopulated list) is available in the user's
    configured search engines list.

    Recorded once per profile at startup when the prepopulated search engine
    list is initialized and the configuration is checked.
  </summary>
</histogram>

<histogram name="Search.Integrity.IsDefaultCustomWithMatchingPolicyEngine"
    enum="Boolean" expires_after="2026-12-20">
  <owner>musalmaan@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Records whether the user's default search engine is a custom one that mimics
    the name of an official, policy-enforced engine but uses a different URL.
    This is used to detect potential patterns where third-party software
    attempts to impersonate legitimate engines.

    Recorded once per profile at startup when the search engine allowlist is
    initialized and the configuration is checked. Only recorded if a custom
    engine is set as the default.
  </summary>
</histogram>

<histogram name="Search.Integrity.IsDefaultEnforcedWithoutPolicy"
    enum="Boolean" expires_after="2026-12-20">
  <owner>musalmaan@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Records whether the default search engine has the enforced_by_policy flag
    set to True, but the DefaultSearchProviderEnabled policy is not active. This
    helps detect cases where search settings might be incorrectly claiming
    policy enforcement.

    Recorded once per profile at startup when the search engine allowlist is
    initialized and the configuration is checked.
  </summary>
</histogram>

<histogram name="Search.Integrity.IsDefaultSearchEngineCustom" enum="Boolean"
    expires_after="2026-12-20">
  <owner>musalmaan@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Records whether the user's currently active default search engine is a
    custom or non-standard one (not in official Chromium prepopulated list).

    Recorded once per profile at startup when the search engine allowlist is
    initialized and the configuration is checked.
  </summary>
</histogram>

<histogram name="Search.Integrity.ObfuscatedSearchUrl" enum="Boolean"
    expires_after="2026-12-20">
  <owner>yeroshkin@chromium.org</owner>
  <owner>musalmaan@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Records whether there is a site search with a URL-like keyword whose target
    URL is obfuscated using multiple escaped characters in a row.
  </summary>
</histogram>

<histogram name="Search.Integrity.Referral.ParameterFound"
    enum="SearchReferralParam" expires_after="2026-12-20">
  <owner>musalmaan@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Records which referral parameter is found in the URL of a custom search
    engine that is not on the allowlist. This helps identify common sources of
    custom search engines. Recorded once per profile at startup if a custom
    search engine with a referral ID is present.
  </summary>
</histogram>

<histogram name="Search.Integrity{Enterprise}.DuplicateKeyword"
    enum="SearchDuplicateKeyword" expires_after="2026-12-20">
  <owner>yeroshkin@chromium.org</owner>
  <owner>musalmaan@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Records whether there are duplicate keywords among the installed search
    engines{Enterprise}

    Recorded once per profile on profile load.
  </summary>
  <token key="Enterprise">
    <variant name=""
        summary=", distinguishing between default and non-default engines."/>
    <variant name=".Enterprise"
        summary="on a managed profile, distinguishing between default and
                 non-default engines."/>
  </token>
</histogram>

<histogram name="Search.iOS.SelectDefaultSearchEngine"
    enum="OmniboxSearchEngineType" expires_after="2026-11-29">
  <owner>gambard@chromium.org</owner>
  <summary>
    When an iOS user changes the default search engine in chrome Settings,
    records the search engine's type.
  </summary>
</histogram>

<histogram name="Search.KeywordTable.HashValidationStatus"
    enum="KeywordTableHashValidationStatus" expires_after="2027-01-24">
  <owner>wfh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records the hash validation status for a row in the keywords table in the
    Web Data sqlite database. This metric is recorded for each row read from the
    keywords table for a v137 table and above, when the keywords table is
    loaded, which happens at profile load. If the validation is not successful
    for any reason, then the row will be dropped from the database.
  </summary>
</histogram>

<histogram name="Search.KeywordTable.MigrationSuccess.V152"
    enum="BooleanSuccess" expires_after="2027-01-24">
  <owner>wfh@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Records whether or not the migration of the keywords table in the Web Data
    sqlite database successfully completed without dropping any rows. This
    metric is recorded when a Web Data database before v152 is loaded, which
    happens at profile load. A failure here means one or more rows have been
    dropped, but the table was migrated to v152 anyway.
  </summary>
</histogram>

<histogram name="Search.OsDefaultsChoice.DelayFromDialogShownToFirstStatus"
    units="ms" expires_after="2027-01-03">
  <owner>dgn@chromium.org</owner>
  <owner>triploblastic@google.com</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Measures latency for the dialog that blocks Chrome usage to require the
    Android OS default apps choice to be completed. [Android only]

    This value represents the time between when we showed the dialog and when we
    received a response from the backend. The backend has the most accurate
    information about whether the dialog needs to be shown, but we may show the
    dialog based on less accurate signals to avoid surprising the user after
    some potentially long delay into the task they started with Chrome. Recorded
    for each browser session eligible to show the dialog, on startup.

    If the status is received before the dialog is shown then 0 is recorded.
  </summary>
</histogram>

<histogram name="Search.OsDefaultsChoice.DelayFromObservationToFirstStatus"
    units="ms" expires_after="2027-01-03">
  <owner>dgn@chromium.org</owner>
  <owner>triploblastic@google.com</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    This value represents the time between when Chrome starts waiting on the
    backend for a response and when the UI actually gets a response from the
    backend. [Android only]

    Recorded for each browser session that attempted to show the dialog and got
    a backend response, on startup.

    If the status is received before Chrome starts observing then 0 is recorded.
  </summary>
</histogram>

<histogram name="Search.OsDefaultsChoice.DialogShownAttempt" units="attempts"
    expires_after="2027-01-03">
  <owner>dgn@chromium.org</owner>
  <owner>triploblastic@google.com</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Records the triggering attempt number of the dialog that blocks Chrome usage
    to require the Android OS default apps choice to be completed. [Android
    only]

    This value represents for a given client how many times that dialog was
    shown and blocked a session. It is recorded when the dialog is shown, and
    the count gets cleared when Chrome gets the signal that the OS choices have
    been completed or the feature is entirely disabled. It would restart to 0 if
    a similar blocking campaign is restarted.

    Recording timing: on startups where we actually show the dialog.
  </summary>
</histogram>

<histogram name="Search.OsDefaultsChoice.DialogStatusChange"
    enum="OsDefaultsChoiceDialogStatus" expires_after="2027-01-03">
  <owner>dgn@chromium.org</owner>
  <owner>triploblastic@google.com</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    State of the dialog that blocks Chrome usage to require the Android OS
    default apps choice to be completed, logged every time it changes. [Android
    only]

    The dialog itself is triggered shortly after startup when it is determined
    that blocking the user is needed. Some status changes might be happening
    while the dialog is not visible, for example when the feature is in the
    &quot;dark launch&quot; mode. The &quot;Unknown&quot; value is logged when
    the dialog is dismissed.
  </summary>
</histogram>

<histogram name="Search.OsDefaultsChoice.DialogStatusOnAppOpen"
    enum="OsDefaultsChoiceDialogStatus" expires_after="2027-01-03">
  <owner>dgn@chromium.org</owner>
  <owner>triploblastic@google.com</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Logs the status of the choice dialog (if it's shown) when Chrome is brought
    to the foreground. [Android only].
  </summary>
</histogram>

<histogram name="Search.OsDefaultsChoice.DialogSuppressionStatus"
    enum="OsDefaultsChoiceDialogSuppressionStatus" expires_after="2027-01-03">
  <owner>dgn@chromium.org</owner>
  <owner>triploblastic@google.com</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Outcome of the logic determining whether to suppress the dialog that blocks
    Chrome usage to require the Android OS default apps choice to be completed.
    [Android only]

    At the moment of showing the dialog on startup, some additional checks can
    suppress it, and whether these conditions are met is reported in this
    histogram. The user then does not see the dialog, and Chrome drops the
    connection to the backend until another attempt on next startup.

    Recording timing: on startup, when we attempt to show the dialog.
  </summary>
</histogram>

<histogram name="Search.OsDefaultsChoice.LaunchChoiceScreenTapHandlingStatus"
    enum="LaunchOsChoiceScreenTapHandlingStatus" expires_after="2026-11-03">
  <owner>dgn@chromium.org</owner>
  <owner>triploblastic@google.com</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Indicates how a user tap on the blocking dialog's action button was
    processed. This dialog blocks Chrome usage to require the Android OS default
    apps choice to be completed. [Android only]

    The status is recorded at the moment of the button tap. We use some
    heuristic to estimate whether the choice screen has actually been launched
    since the last button tap. This status indicates whether we identified the
    current tap as the initial one, or whether for a repeated tap we decided to
    avoid requesting the choice screen to be launched again.
  </summary>
</histogram>

<histogram name="Search.QueryTiles.{TileUiSurface}Bitmap.Available"
    enum="BooleanAvailable" expires_after="2022-10-31">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-upboarding-eng@google.com</owner>
  <summary>
    Indicates whether or not a bitmap could be shown for a tile. {TileUiSurface}
  </summary>
</histogram>

<histogram name="Search.QueryTiles.{TileUiSurface}Tile.Clicked" units="index"
    expires_after="2023-08-31">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-upboarding-eng@google.com</owner>
  <summary>
    Records the index of the tile that was clicked. The index refers to the
    position of the tile in the carousel. {TileUiSurface}
  </summary>
</histogram>

<histogram name="Search.QueryTiles.{TileUiSurface}Tile.Clicked.IsTopLevel"
    enum="BooleanIsTopLevel" expires_after="2022-04-01">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-upboarding-eng@google.com</owner>
  <summary>
    Indicates whether the tile clicked was a top level tile. {TileUiSurface}
  </summary>
</histogram>

<histogram name="Search.QueryTiles.{TileUiSurface}TileCount" units="tiles"
    expires_after="2023-08-31">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-upboarding-eng@google.com</owner>
  <summary>
    Indicates the number of tiles displayed in the UI after the backend was
    loaded. {TileUiSurface}
  </summary>
</histogram>

<histogram name="Search.RegionSearch.Lens.RegionAspectRatio"
    enum="LensRegionSearchAspectRatio" expires_after="2024-06-30">
  <owner>juanmojica@google.com</owner>
  <owner>benwgold@google.com</owner>
  <owner>stanfield@google.com</owner>
  <owner>lens-chrome-eng@google.com</owner>
  <summary>
    Records an enum representing the aspect ratio of the region selected after
    using the Lens Region Search feature.
  </summary>
</histogram>

<histogram name="Search.RegionSearch.Lens.RegionViewportProportion" units="pct"
    expires_after="2024-06-30">
  <owner>juanmojica@google.com</owner>
  <owner>benwgold@google.com</owner>
  <owner>stanfield@google.com</owner>
  <owner>lens-chrome-eng@google.com</owner>
  <summary>
    Records a percentage to represent the proportion of the selected region to
    the screen after selecting a region with the Lens Region Search feature.
  </summary>
</histogram>

<histogram name="Search.RegionSearch.Lens.Result"
    enum="LensRegionSearchCaptureResult" expires_after="2027-02-07">
  <owner>juanmojica@google.com</owner>
  <owner>benwgold@google.com</owner>
  <owner>stanfield@google.com</owner>
  <owner>lens-chrome-eng@google.com</owner>
  <summary>
    Records an enum representing the result of the capture of the region for
    Lens Region Search feature.
  </summary>
</histogram>

<histogram name="Search.RelatedSearches.AllUserPermissions"
    enum="ContextualSearchPermissions" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>related-searches-vteam@google.com</owner>
  <summary>
    Enumerates all users by the permissions needed in order to use the Related
    Searches feature. This tells us the potential user pool if we were to remove
    one of the current requirements (which are sending page content and sending
    the URL to Google). Logged whenever the Chrome application is paused. NOTE:
    Use the Count unique clients option to count users since multiple events are
    logged for each user. Implemented for Android. (Expired in 2022-12-11.
    Revived in 2024-11-03.)
  </summary>
</histogram>

<histogram name="Search.RelatedSearches.CarouselLastVisibleItemPosition"
    units="position" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>related-searches-vteam@google.com</owner>
  <summary>
    The last visible position index for a chip in the carousel. the index is 0
    based. Ex. There are 10 chips, and only 2 chips are shown completely, and 1
    chip is shown half, in this case, 2 will be reported. Recorded every time
    the carousel is shown, or the carousel content is updated. Implemented for
    Android.

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

<histogram name="Search.RelatedSearches.CarouselScrollAndClick"
    enum="ScrollAndClickStatus" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>related-searches-vteam@google.com</owner>
  <summary>
    Records whether and how the user interacted with the carousel. Recorded when
    the presentation UI is dismissed while the carousel is shown. Implemented
    for Android.

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

<histogram name="Search.RelatedSearches.CarouselScrolled" enum="Boolean"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>related-searches-vteam@google.com</owner>
  <summary>
    Records whether the user scrolled the carousel when it was shown, this can
    help us to find users who discover carousel scroll gesture. Recorded when
    the presentation UI is dismissed while the carousel is shown. Implemented
    for Android.

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

<histogram name="Search.RelatedSearches.CTR" enum="BooleanClicked"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>related-searches-vteam@google.com</owner>
  <summary>
    Records the click through rate for Related Searches. This is the rate that
    at least one suggestion was chosen by the user when any were shown. Records
    false whenever Related Searches suggestions were shown to the user but none
    were selected, and true whenever the user has clicked on any suggestion to
    view the suggested query. Only records one entry per botton-sheet session.
    Recorded when the presentation UI is dismissed. Implemented for Android.
    (Expired in 2022-08-07. Revived in 2024-11-03.)

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

<histogram name="Search.RelatedSearches.NumberOfSuggestionsClicked2"
    units="selected" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>related-searches-vteam@google.com</owner>
  <summary>
    The number of suggestions that were chosen by the user in a bottom-sheet
    session when the user chose any Related Searches. Written when the
    suggestions UI is closed. Implemented for Android.

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

<histogram name="Search.RelatedSearches.QualifiedUsers" enum="Boolean"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>related-searches-vteam@google.com</owner>
  <summary>
    Records true for every user that is qualified for the Related Searches
    experiment regardless of whether that feature is enabled or not. Never logs
    false. Used to validate that population sizes are relatively equal (since
    only a subset is actually qualified). Logged whenever a user triggers
    Contextual Search in way that could activate Related Searches (i.e. sends
    context). NOTE: Use the Count unique clients option to count users since
    multiple events are logged for each user. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.RelatedSearches.SelectedCarouselIndex" units="position"
    expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>related-searches-vteam@google.com</owner>
  <summary>
    The display position index for a chip in the carousel when it was selected
    by the user. Written when a Related Searches suggestion chip is clicked.
    Implemented for Android. (Expired in 2023-10-22. Revived in 2024-11-03.)

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

<histogram name="Search.RelatedSearches.SelectedSuggestionIndex"
    units="position" expires_after="2027-10-01">
  <owner>ender@google.com</owner>
  <owner>related-searches-vteam@google.com</owner>
  <summary>
    The display position index for a suggestion when it was selected by the
    user. The suggestion at location 0 is always the default selection search,
    which may not be a possible position in some implementations. All indecies
    from 1 on are true Related Searches suggestions. Written when a Related
    Searches suggestion in the UI is selected. Implemented for Android. (Expired
    in 2023-02-12. Revived in 2024-11-03.)

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

<histogram name="Search.SaveGuestModeSelection" enum="BooleanYesNo"
    expires_after="2026-08-19">
  <owner>dullweber@chromium.org</owner>
  <owner>dgn@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    Records whether users chose to save the Guest search engine. Recorded for
    profiles that are eligible for saving the guest search engine when the
    search engine choice dialog is confirmed.
  </summary>
</histogram>

<histogram name="Search.SearchEngineChangedSnackbar.SettingsTapped"
    enum="Boolean" expires_after="2027-08-19">
  <owner>triploblastic@chromium.org</owner>
  <owner>dgn@chromium.org</owner>
  <owner>chrome-regionalcapabilities@google.com</owner>
  <summary>
    When users change search engine in os settings and come back to Chrome a
    snackbar is shown with a button to take them to the chrome settings page.
    This histogram is recorded when users click on that button.

    The snackbar is only shown if Chrome was in the background during the search
    engine update in os settings and then Chrome is foregrounded again. Because
    we depend on broadcast events to show the snackbar. On cold starts we simply
    import the settings from os on Chrome update and don't show the snackbar.

    Android only.
  </summary>
</histogram>

<histogram name="Search.SearchEngineCountryDelegate.Connection{Result}Time"
    units="ms" expires_after="2027-08-19">
  <owner>triploblastic@chromium.org</owner>
  <owner>dgn@chromium.org</owner>
  <summary>
    Time taken to connect to the country code providing Play Service. Only
    includes {Result} connection attempts.

    Recorded every time Chrome tries to obtain the country code for the search
    choice screen, which happens on every startup.

    Android only.
  </summary>
  <token key="Result">
    <variant name="Failure" summary="failed"/>
    <variant name="Success" summary="successful"/>
  </token>
</histogram>

<histogram name="Search.SearchEngineCountryDelegate.Fetch{Result}Time"
    units="ms" expires_after="2027-08-19">
  <owner>triploblastic@chromium.org</owner>
  <owner>dgn@chromium.org</owner>
  <summary>
    Time taken to fetch the country code from the country code providing Play
    Service. Only includes {Result} fetch attempts.

    Recorded every time Chrome tries to obtain the country code for the search
    choice screen after successfully connecting to the Play Service, which
    happens on every startup.

    Android only.
  </summary>
  <token key="Result">
    <variant name="Failure" summary="failed"/>
    <variant name="Success" summary="successful"/>
  </token>
</histogram>

<histogram name="Search.SearchEngineCountryDelegate.ServiceBindStatus"
    enum="BooleanStartedCompleted" expires_after="2027-08-19">
  <owner>triploblastic@chromium.org</owner>
  <owner>dgn@chromium.org</owner>
  <summary>
    Boolean status marking the beginning of connection request to country code
    provider service from Play and also the completion of the request.

    Recorded every time Chrome tries to obtain the country code for the search
    choice screen, which happens on every startup.

    Android only.
  </summary>
</histogram>

<histogram
    name="Search.SearchEngineListedInPromoDialog{SearchEnginePromoDeviceAndOrdering}"
    enum="OmniboxSearchEngineType" expires_after="2027-08-19">
  <owner>yusufo@chromium.org</owner>
  <owner>dgn@chromium.org</owner>
  <summary>
    The search engines listed in the options for search engine promo. This is an
    Android specific dialog prompting the user to pick a default search engine.
    The dialog was shown on a device that had Chrome before it was first
    introduced.

    Warning: this histogram was expired from M81 to M124; data may be missing.
    {SearchEnginePromoDeviceAndOrdering}
  </summary>
</histogram>

<histogram
    name="Search.SearchEngineSelectionInPromoDialog{SearchEnginePromoDeviceType}"
    enum="OmniboxSearchEngineType" expires_after="2027-08-19">
  <owner>yusufo@chromium.org</owner>
  <owner>dgn@chromium.org</owner>
  <summary>
    The search engine selected by the user from the search engine promo. This is
    an Android specific dialog prompting the user to pick a default search
    engine. The dialog was shown on a device that had Chrome before it was first
    introduced.

    Warning: this histogram was expired from M81 to M124; data may be missing.
    {SearchEnginePromoDeviceType}
  </summary>
</histogram>

<histogram name="Search.SearchPromotion.DefaultBrowserState"
    enum="DefaultBrowserState" expires_after="2027-05-22">
  <owner>qlucyk@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records the user's default browser state. Recorded when the user visits a
    Google Search URL and is evaluated for the search promotion. Recorded
    asynchronously to avoid blocking the UI thread. Only recorded on Windows.
  </summary>
</histogram>

<histogram
    name="Search.SearchPromotion.DefaultBrowserType.{Interaction}.{Action}"
    enum="SearchPromotionDefaultBrowserType" expires_after="2027-05-22">
  <owner>qlucyk@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records the user's default browser type (Chrome, Edge, Safari, Firefox,
    etc.). Recorded when the user {Interaction} the search promotion IPH for
    {Action}. Recorded asynchronously on a background task thread. Only recorded
    on Windows.
  </summary>
  <token key="Interaction">
    <variant name="Accepted" summary="accepted"/>
    <variant name="Dismissed" summary="dismissed or closed"/>
  </token>
  <token key="Action">
    <variant name="Install" summary="install action (install extension)"/>
    <variant name="Open" summary="open action (open store url)"/>
  </token>
</histogram>

<histogram name="Search.SearchPromotion.DelegatedTaskExitCode"
    enum="SearchPromotionExitCode" expires_after="2027-07-27">
  <owner>qlucyk@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <summary>
    Records the task-specific exit code returned by Platform Experience Helper
    when executing the RegisterSearchPromotion delegated task. Recorded when the
    delegated task finishes execution and returns its result to Chrome. Only
    recorded on Windows.
  </summary>
</histogram>

<histogram name="Search.SearchPromotion.Duration.{Outcome}" units="ms"
    expires_after="2027-07-27">
  <owner>qlucyk@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <summary>
    Records the roundtrip execution duration taken for the
    RegisterSearchPromotion delegated task when the outcome is {Outcome}.
    Recorded when the delegated task finishes execution and returns a
    task-specific exit code to Chrome. Only recorded on Windows.
  </summary>
  <token key="Outcome">
    <variant name="ForegroundFallbackLaunchFailed"
        summary="foreground fallback launch failed"/>
    <variant name="InvalidExtensionId"
        summary="extension ID validation failed"/>
    <variant name="InvalidPostInstallUrl"
        summary="post-install URL validation failed"/>
    <variant name="RegistryWriteFailed" summary="registry write failed"/>
    <variant name="SuccessBackground" summary="background execution succeeded"/>
    <variant name="SuccessWithForegroundFallback"
        summary="execution succeeded with fallback"/>
    <variant name="Timeout" summary="task timed out"/>
    <variant name="UrlLaunchFailed" summary="URL launch failed"/>
    <variant name="UrlLaunchSuccess" summary="URL launch succeeded"/>
  </token>
</histogram>

<histogram name="Search.SearchPromotion.Evaluated" enum="Boolean"
    expires_after="2027-05-22">
  <owner>qlucyk@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records when a user visits a Google Search URL and is evaluated for the
    search promotion feature, across all active experiment arms and the control
    group. Recorded on navigation to a target URL. Only recorded on Windows.
  </summary>
</histogram>

<histogram name="Search.SearchProviderOverrideStatus"
    enum="SearchProviderOverrideStatus" expires_after="2027-01-17">
  <owner>dgn@chromium.org</owner>
  <owner>droger@chromium.org</owner>
  <summary>
    The status of the preference where the search engine overrides provided by
    the Chrome distribution channel are loaded. It is recorded every time we put
    together a list of built-in search engines providers, which can happen
    multiple times per run, when initially loading search engines for the
    omnibox, showing a search engine choice screen or settings screen, etc.
  </summary>
</histogram>

</histograms>

</histogram-configuration>
