<!--
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 Tab 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="BatteryState">
  <variant name="" summary="On battery or plugged-in"/>
  <variant name=".OnBattery"/>
  <variant name=".PluggedIn"/>
</variants>

<variants name="RecentlyClosedType">
  <variant name="Bulk" summary="RecentlyClosedBulkEvent"/>
  <variant name="Group" summary="RecentlyClosedGroup"/>
  <variant name="Tab" summary="RecentlyClosedTab"/>
  <variant name="Window" summary="RecentlyClosedWindow"/>
</variants>

<variants name="SplitTabCreatedSource">
  <variant name="BookmarkContextMenu"
      summary="created via bookmark context menu"/>
  <variant name="DragAndDropLink" summary="created via drag and drop link"/>
  <variant name="DragAndDropTab" summary="created via drag and drop tab"/>
  <variant name="DuplicateSplit" summary="created via duplicate split"/>
  <variant name="ExtensionsApi" summary="created via extensions API"/>
  <variant name="KeyboardShortcut" summary="created via keyboard shortcut"/>
  <variant name="LinkClick" summary="created via link click"/>
  <variant name="LinkContextMenu" summary="created via link context menu"/>
  <variant name="MacMenuBar" summary="created via Mac menu bar"/>
  <variant name="NewTabButton" summary="created via new tab button"/>
  <variant name="TabContextMenu" summary="created via tab context menu"/>
  <variant name="ToolbarButton" summary="created via toolbar button"/>
  <variant name="WhatsNew" summary="created via What's New page"/>
</variants>

<variants name="SplitViewMenuSource">
  <variant name="MiniToolbar" summary="The split view mini toolbar"/>
  <variant name="TabContextMenu" summary="The tab context menu"/>
  <variant name="ToolbarButton" summary="The split view toolbar button"/>
</variants>

<variants name="TabActiveState">
  <variant name="Active" summary="active"/>
  <variant name="Inactive" summary="inactive"/>
</variants>

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

<variants name="TabContextMenuCommand">
  <variant name="AddToExistingGroup"
      summary="the Add to Existing Group command"/>
  <variant name="AddToNewComparisonTable"
      summary="the Add to new comparison table command"/>
  <variant name="AddToNewGroup" summary="the Add to New Group command"/>
  <variant name="AddToNewGroupFromMenuItem"
      summary="the Add to new group from menu item command"/>
  <variant name="AddToReadLater" summary="the Add to Read Later command"/>
  <variant name="AddToSplit" summary="the Add to Split command"/>
  <variant name="ArrangeSplit" summary="the Arrange Split command"/>
  <variant name="CloseAllTabs" summary="the Close All Tabs command"/>
  <variant name="CloseOtherTabs" summary="the Close Other Tabs command"/>
  <variant name="CloseTab" summary="the Close Tab command"/>
  <variant name="CloseTabsToRight"
      summary="the Close Tabs to the Right command"/>
  <variant name="CopyURL" summary="the Copy URL command"/>
  <variant name="Duplicate" summary="the Duplicate command"/>
  <variant name="GlicCreateNewChat"
      summary="the Start New Chat with Gemini command"/>
  <variant name="GlicShare" summary="the Share with Gemini command"/>
  <variant name="GlicSwitchToRecentConversation"
      summary="the Switch to Recent Conversation command"/>
  <variant name="GlicUnshare" summary="the Unshare with Gemini command"/>
  <variant name="GoBack" summary="the Go Back command"/>
  <variant name="MoveToExistingWindow"
      summary="the Move to existing window command"/>
  <variant name="MoveToNewWindow" summary="the Move to new window command"/>
  <variant name="NewTabToRight" summary="the New Tab To Right command"/>
  <variant name="Reload" summary="the Reload command"/>
  <variant name="RemoveFromGroup" summary="the Remove from Group command"/>
  <variant name="SendTabToSelf" summary="the Send to your device command"/>
  <variant name="SwapWithActiveSplit"
      summary="the Swap with Active Split command"/>
  <variant name="ToggleGrouped" summary="the Toggle group command"/>
  <variant name="ToggleMuted" summary="the Toggle muted command"/>
  <variant name="TogglePinned" summary="the Toggle Pinned command"/>
  <variant name="ToggleVertical" summary="the Toggle Vertical tabs command"/>
</variants>

<!-- LINT.ThenChange(//components/tabs/public/tab_context_menu_command.h:TabContextMenuCommand) -->

<variants name="TabDiscardReason">
  <variant name=".External"
      summary="from outside of TabManager (e.g. by an extension)"/>
  <variant name=".FrozenWithGrowingMemory"
      summary="due to growing memory usage while frozen"/>
  <variant name=".Proactive"
      summary="proactively by Performance Manager before the system is in a
               critical condition, such as when Memory Saver Mode discards
               the tab"/>
  <variant name=".Suggested"
      summary="suggested by the Performance Detection manager when the
               resource usage health may improve from discarding the tab"/>
  <variant name=".Urgent"
      summary="urgently by TabManager when the system is in a critical
               condition"/>
</variants>

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

<variants name="TabModelOrchestratorType">
  <variant name="Archived" summary="ArchivedTabModelOrchestrator"/>
  <variant name="Custom" summary="CustomTabsTabModelOrchestrator"/>
  <variant name="Headless" summary="HeadlessTabModelOrchestrator"/>
  <variant name="Tabbed" summary="TabbedModeTabModelOrchestrator"/>
</variants>

<!-- LINT.ThenChange(//chrome/android/java/src/org/chromium/chrome/browser/app/tabmodel/ShadowTabStoreValidator.java:TabModelOrchestratorType) -->

<variants name="TabModelSelectorType">
  <variant name="Archived" summary="The archived tab model selector"/>
  <variant name="Custom" summary="The custom tab model selector."/>
  <variant name="Headless"
      summary="Tab models that are not currently owned by an activity, but
               had previously been."/>
  <variant name="Regular" summary="The regular tab model selector."/>
</variants>

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

<variants name="TabStripAnimation">
  <variant name="Collapse" summary="Expand to Collapsed animation"/>
  <variant name="CollapseOnHover"
      summary="Expand to Collapse on hover animation"/>
  <variant name="Expand" summary="Collapse to Expand animation"/>
  <variant name="ExpandOnHover"
      summary="Collapse to Expand on hover animation"/>
</variants>

<!-- LINT.ThenChange(//chrome/browser/ui/views/animations/tab_strip_animations.cc:TabStripAnimation) -->

<variants name="TabStripMode">
  <variant name="HorizontalTabStrip"/>
  <variant name="VerticalTabStrip"/>
</variants>

<histogram name="Discarding.AttemptFastKillForDiscardResult"
    enum="AttemptFastKillForDiscardResult" expires_after="2027-01-03">
  <owner>kawasin@google.com</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Records the result of AttemptFastKillForDiscard. Emitted immediately after
    the fast shutdown for the main frame renderer process attempt.
  </summary>
</histogram>

<histogram name="Discarding.DailyDiscards{TabDiscardReason}" units="tabs"
    expires_after="2027-02-07">
  <owner>vovoy@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    The number of tabs discards since last emit. The emit interval is at least
    24 hours, see metrics::DailyEvent for more details. The discards are
    requested {TabDiscardReason}.
  </summary>
  <token key="TabDiscardReason" variants="TabDiscardReason"/>
</histogram>

<histogram name="Discarding.DailyReloads{TabDiscardReason}" units="tabs"
    expires_after="2027-02-07">
  <owner>vovoy@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    The number of tabs reloads since last emit. The emit interval is at least 24
    hours, see metrics::DailyEvent for more details. The discards corresponding
    to the reloads are requested {TabDiscardReason}.
  </summary>
  <token key="TabDiscardReason" variants="TabDiscardReason"/>
</histogram>

<histogram name="Discarding.DiscardCandidatesCount" units="tabs"
    expires_after="2027-02-14">
  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The number of tabs discard candidates. This is recorded each time Chrome
    needs to urgently discard a tab.

    Warning this historgram was expired between 2024-04-28 and 2025-01-18.
  </summary>
</histogram>

<histogram name="Discarding.DiscardFrameTree" enum="BooleanSuccess"
    expires_after="2027-01-03">
  <owner>tluk@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Records whether the FrameTree discard operation succeeded. Emitted
    immediately after the FrameTree discard operation attempt.
  </summary>
</histogram>

<histogram name="Discarding.DiscardingFocusedTab2" enum="BooleanFocusedTab"
    expires_after="2027-01-03">
  <owner>kalutes@chromium.org</owner>
  <owner>cros-core-systems-perf@google.com</owner>
  <summary>
    Logged after a tab is successfully discarded by
    PageDiscardingHelper::DiscardMultiplePages (includes urgent discards, but
    not discards by Performance Controls features such as Memory Saver or
    Performance Detection). Indicates whether the tab was focused at the time of
    discard.
  </summary>
</histogram>

<histogram name="Discarding.DiscardingProtectedTab2" enum="BooleanProtectedTab"
    expires_after="2027-01-03">
  <owner>kalutes@chromium.org</owner>
  <owner>cros-core-systems-perf@google.com</owner>
  <summary>
    Logged after a tab is successfully discarded by
    PageDiscardingHelper::DiscardMultiplePages (includes urgent discards, but
    not discards by Performance Controls features such as Memory Saver or
    Performance Detection). Indicates whether the tab was protected at the time
    of discard.
  </summary>
</histogram>

<histogram name="Discarding.DiscardLatency" units="ms"
    expires_after="2027-01-03">
  <owner>kalutes@chromium.org</owner>
  <owner>kawasin@chromium.org</owner>
  <owner>vovoy@chromium.org</owner>
  <summary>
    Reported for ChromeOS only. The latency since Chrome start handling a
    discard request and until the first tab discarding from the request
    completes. This is recorded when discarding tabs for the request completes
    in success.
  </summary>
</histogram>

<histogram name="Discarding.DiscardPageOnUIThreadOutcome2"
    enum="DiscardPageOnUIThreadOutcome" expires_after="2026-05-24">
  <owner>fdoray@chromium.org</owner>
  <owner>joenotcharles@google.com</owner>
  <summary>
    Reports the outcome of each discard tab attempt by the
    DiscardPagesOnUIThread function. Will be used to validate that the number of
    failures does not increase if DiscardAttemptMarker is retired (it was
    introduced to prevent repeated attempts to discard a non-discardable tab,
    but that shouldn't happen in practice). Use
    &quot;Discarding.DiscardTabOutcome&quot; to determine why there are samples
    in the &quot;DiscardTabFailure&quot; bucket.
  </summary>
</histogram>

<histogram name="Discarding.DiscardsDrivenByStaleSignal" units="tabs"
    expires_after="2026-11-01">
  <owner>kalutes@chromium.org</owner>
  <owner>vovoy@chromium.org</owner>
  <summary>
    Reported for ChromeOS only. The count of tab discards that were unnecessary
    given the origin time of the memory pressure reclaim target. This is
    calculated and reported when Tab Manager or Page Discarder finish discarding
    tabs in response to a reclaim target. There can be a non-trival amount of
    time between when a memory pressure reclaim target is generated and when
    Chrome actually discards tabs in response to the reclaim target. If a
    reclaim target is generated before all tabs from the previous target have
    been discarded, then the same memory shortfall can be included in all of
    those signals' reclaim targets, resulting in Chrome discarding more tabs
    than is strictly necessary.
  </summary>
</histogram>

<histogram name="Discarding.DiscardTabOutcome" enum="DiscardTabOutcome"
    expires_after="2027-02-14">
  <owner>fdoray@chromium.org</owner>
  <owner>joenotcharles@google.com</owner>
  <summary>
    Reports the outcome of each discard tab attempt by
    TabLifecycleUnit::Discard. Will be used to understand why we have samples in
    the &quot;DiscardTabFailure&quot; bucket of
    &quot;Discarding.DiscardPageOnUIThreadOutcome&quot;.
  </summary>
</histogram>

<histogram name="Discarding.ReclaimArrivalLatency" units="ms"
    expires_after="2026-11-15">
  <owner>kalutes@chromium.org</owner>
  <owner>kawasin@chromium.org</owner>
  <owner>vovoy@chromium.org</owner>
  <summary>
    Reported for ChromeOS only. The latency since a critical memory pressure
    signal is sent from resourced and until Chrome start handling the discard
    request. This is recorded when discarding tabs for the request completes in
    success.
  </summary>
</histogram>

<histogram name="Discarding.ReclaimTargetAge" units="ms"
    expires_after="2027-01-03">
  <owner>kalutes@chromium.org</owner>
  <owner>vovoy@chromium.org</owner>
  <summary>
    Reported for ChromeOS only. The age of the memory pressure signal when it is
    processed by the tab/page discarder. This is recorded when Tab Manager or
    Page Discarder reads the signal, but before any tabs are discarded as a
    result of the signal.
  </summary>
</histogram>

<histogram name="Discarding.TabLifecycleUnit.DiscardLatency" units="ms"
    expires_after="2026-10-11">
  <owner>tluk@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Records discard latency for the TabLifecycleUnit::Discard() operation.

    For the discard implementation that replaces the discarded tab's WebContents
    this is measured as the time from when a TabLifecycleUnit::Discard() is
    called for a tab, to when the Tab's WebContents is replaced. This is emitted
    immediately after the Tab's WebContents is replaced.

    For the discard implementation that retains the discarded tab's WebContents
    this is measured as the time from when a TabLifecycleUnit::Discard() is
    called for a tab, to when the Discard() operation was completed in the
    renderer and completion was acknowledged by the Browser or when the frame's
    renderer is terminated. This is emitted immediately after the
    acknowledgement of the Discard operation by the RenderFrameHost in the
    Browser or once the frame is notified its renderer has terminated.

    The retained discard implementation is behind the WebContentsDiscard flag
    and eventually the old implementation that replaces the WebContents will be
    removed.
  </summary>
</histogram>

<histogram name="Tab.AgeAtDeletion" units="ms" expires_after="2027-02-07">
  <owner>ewannpv@chromium.org</owner>
  <owner>gambard@chromium.org</owner>
  <owner>bling-team@google.com</owner>
  <summary>
    The age of a Tab when closed (Time between creation time on the current
    device and closure time).
  </summary>
</histogram>

<histogram name="Tab.Android.DiscardLatency.{DiscardReason}" units="ms"
    expires_after="2026-12-16">
  <owner>ckitagawa@chromium.org</owner>
  <owner>clank-tab-dev@chromium.org</owner>
  <summary>
    [Android] Records the latency for a tab discarded for {DiscardReason}.
    Emitted after the tab discard callback is run. Note that discard might not
    run the callback or might not have happened in the event the tab is not
    discardable.
  </summary>
  <token key="DiscardReason">
    <variant name="AppendNavigation"
        summary="Tab discarded for appending a navigation."/>
    <variant name="OnDemand" summary="Tab discarded on demand."/>
  </token>
</histogram>

<histogram name="Tab.Android.DiscardStarted" enum="DiscardReason"
    expires_after="2026-12-20">
  <owner>ckitagawa@chromium.org</owner>
  <owner>clank-tab-dev@chromium.org</owner>
  <summary>
    [Android] Records the reason for starting a tab discard. Emitted when a Tab
    discard is started.
  </summary>
</histogram>

<histogram name="Tab.Android.GracefulShutdownStatus"
    enum="GracefulShutdownStatus" expires_after="2027-02-20">
  <owner>ckitagawa@chromium.org</owner>
  <owner>clank-tab-dev@chromium.org</owner>
  <summary>
    [Android] Records lifecycle milestones and failure states of the
    GracefulShutdownService during window closure.
  </summary>
</histogram>

<histogram name="Tab.Android.MediaState" enum="AndroidTabMediaState"
    expires_after="2027-02-20">
  <owner>polardz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records the media state of the tab when it changes. If multiple
    states apply, the priority is Sharing &gt; Recording &gt; Audible/Muted &gt;
    None.
  </summary>
</histogram>

<histogram name="Tab.AndroidCrashUpload{AndroidCrashUploadTypes}"
    enum="BooleanSuccess" expires_after="M85">
  <owner>wnwen@chromium.org</owner>
  <summary>
    [Android] Count of upload success/failures by crash type.
    {AndroidCrashUploadTypes}
  </summary>
  <token key="AndroidCrashUploadTypes">
    <variant name="_Browser" summary="Measures browser crash uploads."/>
    <variant name="_GPU" summary="Measures GPU crash uploads."/>
    <variant name="_Other" summary="Measures other crash uploads."/>
    <variant name="_Renderer" summary="Measures renderer crash uploads."/>
  </token>
</histogram>

<histogram name="Tab.CloseAllTabsDialog.ClosedAllTabs.{CloseType}"
    enum="Boolean" expires_after="2027-04-12">
  <owner>ckitagawa@chromium.org</owner>
  <owner>fredmello@chromium.org</owner>
  <summary>
    Records whether the &quot;Close all tabs&quot; action was taken when the
    close all tabs confirmation dialog was shown through App Menu &gt; Close all
    tabs. This is only recorded for Android for {CloseType} close all tabs menu
    actions.
  </summary>
  <token key="CloseType">
    <variant name="Incognito"/>
    <variant name="NonIncognito"/>
  </token>
</histogram>

<histogram name="Tab.CloseUndoBar.Dismissed" enum="SnackbarIdentifier"
    expires_after="2027-07-01">
  <owner>hitarthkothari@google.com</owner>
  <owner>ckitagawa@chromium.org</owner>
  <owner>clank-tab-dev@chromium.org</owner>
  <summary>
    Records the SnackbarIdentifier of a tab-closure-related undo snackbar when
    it is dismissed without the user performing the Undo action (e.g. timeout,
    swipe, dismissed by caller, etc.).
  </summary>
</histogram>

<histogram name="Tab.CloseUndoBar.Undone" enum="SnackbarIdentifier"
    expires_after="2027-07-01">
  <owner>hitarthkothari@google.com</owner>
  <owner>ckitagawa@chromium.org</owner>
  <owner>clank-tab-dev@chromium.org</owner>
  <summary>
    Records the SnackbarIdentifier of a tab-closure-related undo snackbar when
    the user actively clicks the Undo action.
  </summary>
</histogram>

<histogram name="Tab.ContextMenu.{TabContextMenuCommand}.SelectedTabsCount"
    units="tabs" expires_after="2027-02-07">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The number of selected tabs when the user selects {TabContextMenuCommand}
    from the tab context menu.
  </summary>
  <token key="TabContextMenuCommand" variants="TabContextMenuCommand"/>
</histogram>

<histogram name="Tab.Count.Guest" units="units" expires_after="2027-01-17">
  <owner>rhalavati@chromium.org</owner>
  <owner>chrome-incognito@google.com</owner>
  <summary>
    Number of open tabs in each guest window. Recorded once a new tab in a guest
    window is opened and adds one to the bucket of number of tabs in that
    particular window (it does not count the total number of tabs in all open
    guest windows). Please note that this metric double counts the lower
    numbers, meaning that if user opens three tabs (without closing any in
    between), then buckets 1, 2, and 3 will all be incremented in turn. The
    metric also overcounts the tabs that are moved from one window to another as
    they are recorded both when they are created in the first window and when
    they are added to the second window.
  </summary>
</histogram>

<histogram name="Tab.Count.Incognito" units="units" expires_after="2027-01-17">
  <owner>rhalavati@chromium.org</owner>
  <owner>chrome-incognito@google.com</owner>
  <summary>
    Number of open incognito tabs in each window. Recorded once a new incognito
    tab is opened in a window and adds one to the bucket of number of incognito
    tabs in that particular window (it does not count the total number of
    incognito tabs in all open windows). Please note that this metric double
    counts the lower numbers, meaning that if user opens three tabs (without
    closing any in between), then buckets 1, 2, and 3 will all be incremented in
    turn. The metric also overcounts the tabs that are moved from one window to
    another as they are recorded both when they are created in the first window
    and when they are added to the second window.
  </summary>
</histogram>

<histogram name="Tab.Discarding.Reload.CausedByFocus" enum="Boolean"
    expires_after="2027-01-10">
  <owner>aattar@google.com</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Recorded when a discarded tab begins to reload. Returns true if the tab was
    focused at the moment the reload started (indicating an explicit user
    switch), and false if it was a background reload.
  </summary>
</histogram>

<histogram name="Tab.Discarding.Reload.FreedMemoryMB" units="MB"
    expires_after="2027-01-10">
  <owner>aattar@google.com</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Recorded when a discarded tab finishes reloading. Tracks the estimated
    memory (in MB) that was originally freed when this tab was discarded.
    Correlate with Reload.LoadTime to determine efficiency.
  </summary>
</histogram>

<histogram name="Tab.Discarding.Reload.LoadTime" units="ms"
    expires_after="2027-01-10">
  <owner>aattar@google.com</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Recorded when a discarded tab finishes reloading. Measures the duration from
    DidStartLoading to DidStopLoading.
  </summary>
</histogram>

<histogram name="Tab.Discarding.Reload.TimeSinceDiscard" units="ms"
    expires_after="2027-01-10">
  <owner>aattar@google.com</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Recorded when a discarded tab begins to reload. Measures the time elapsed
    since the tab was originally discarded. Short times indicate high &quot;user
    regret.&quot;
  </summary>
</histogram>

<histogram name="Tab.ExternalApplicationOpened{Cause}"
    enum="ExternalLauncherOption" expires_after="2026-04-05">
  <owner>olivierrobin@chromium.org</owner>
  <owner>bling-team@google.com</owner>
  <summary>
    [iOS] Used on External App launcher Prompt to determine how the user
    interacted with the prompt.
  </summary>
  <token key="Cause">
    <variant name=".Failed" summary="External application opening failed."/>
    <variant name=".FromIncognito" summary="Request from Incognito."/>
    <variant name=".Generic" summary="Misc request bucket."/>
    <variant name=".NoUserInteraction"
        summary="Request without user interaction."/>
    <variant name=".Repeated"
        summary="Repeated request to open external application.."/>
    <variant name=".ShortcutsURL" summary="Request to open a shortcuts URL."/>
  </token>
</histogram>

<histogram name="Tab.GroupingTransition2" enum="TabGroupingTransitionType"
    expires_after="2027-02-21">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    [Desktop] Records different types of tab grouping transition states 10
    seconds after a tab is created.

    Replaces Tab.GroupingTransition.
  </summary>
</histogram>

<histogram name="Tab.HasCustomUnderPageBackgroundColor" enum="BooleanPresent"
    expires_after="2027-02-22">
  <owner>gambard@chromium.org</owner>
  <owner>bling-team@google.com</owner>
  <summary>
    [iOS] Whether a page has a custom under page background color, recorded when
    the page is fully loaded. The default value of this color is from the
    background colors of the &quot;html&quot; and &quot;body&quot; elements and
    the background color of the web view. By default it is white, so this
    histogram only records it as custom if it is not white with no alpha.
  </summary>
</histogram>

<histogram name="Tab.HasThemeColor" enum="BooleanPresent"
    expires_after="2027-02-22">
  <owner>gambard@chromium.org</owner>
  <owner>bling-team@google.com</owner>
  <summary>
    [iOS] Whether a page has a theme-color html tag set, recorded when the page
    is fully loaded.
  </summary>
</histogram>

<histogram name="Tab.Icon.UpdateThrobber.Time" units="microseconds"
    expires_after="2027-01-24">
  <owner>gjc@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records the duration of TabIcon::UpdateThrobber calls. Recorded when the
    tab's throbber is updated. This captures fast cached cases as well as slow
    layer creation/destruction cases. This metric is only reported for clients
    with high-resolution clocks.
  </summary>
</histogram>

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

<histogram name="Tab.NewTab" enum="NewTabType" expires_after="2027-02-07">
  <owner>bsep@chromium.org</owner>
  <summary>
    Recorded when a new tab is opened. Tracks the method in which the tab was
    opened. Does not apply to opening existing links or searches in a new tab,
    only to brand new empty tabs. Note: Currently the &quot;Regular menu
    option&quot; includes some programmatic actions in addition to user actions.
  </summary>
</histogram>

<histogram name="Tab.PageLoadsSinceLastSwitchToEvictedTab" units="units"
    expires_after="2024-03-18">
  <owner>dtrainor@chromium.org</owner>
  <owner>ckitagawa@chroimum.org</owner>
  <summary>
    [Android] The number of page loads since the last switch to an evicted tab
    on Android. This was sampled each time an evicted tab was reloaded. Note
    that this data is invalid from M77 until 2023-11-22 because this histogram
    was expired. As of right now, this histogram is only emitted in iOS.
  </summary>
</histogram>

<histogram name="Tab.PerceivedRestoreTime" units="ms"
    expires_after="2027-01-05">
  <owner>ckitagawa@chromium.org</owner>
  <owner>dtrainor@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    [Android] User-perceived load time for a successful tab restore, measured
    from the first time the user sees the tab being restored until the load
    completes.

    Warning this historgram was expired between M89 and 2022-08-24.
  </summary>
</histogram>

<histogram name="Tab.PinnedDuration" units="ms" expires_after="2027-02-07">
  <owner>madhavpruthi@google.com</owner>
  <owner>ckitagawa@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android only] Records the total time for which a tab was pinned within a
    single session. The value is the duration between the tab being pinned and
    when it was unpinned.
  </summary>
</histogram>

<histogram name="Tab.Preview.TimeToStoreAfterTabSwitch" units="ms"
    expires_after="2026-12-05">
  <owner>dominicaustria@google.com</owner>
  <owner>dfried@chromium.org</owner>
  <owner>collinbaker@chromium.org</owner>
  <summary>
    On tab switch, the visible content area is captured and stored as a
    thumbnail. This measures the time between requesting the capture and storing
    it as the current thumbnail.
  </summary>
</histogram>

<histogram name="Tab.Preview.TimeToStoreFirstUsableFrameAfterStartCapture"
    units="ms" expires_after="2026-09-27">
  <owner>chazzy@chromium.org</owner>
  <owner>dfried@chromium.org</owner>
  <summary>
    When generating a preview for a background tab, this measures the time
    between starting a video capture and storing the first usable frame as the
    current thumbnail.
  </summary>
</histogram>

<histogram name="Tab.PullDownGesture" enum="PullDownGestureAction"
    expires_after="2027-04-01">
  <owner>huitingyu@google.com</owner>
  <owner>bling-pandamonium@google.com</owner>
  <summary>
    Record the action executed when the user performs a pull down gesture. This
    feature is currently iOS only.

    A pull down gesture is an action completed when the user scrolls past the
    edge of the web page and continues scrolling in the same direction revealing
    a specific UI on the header with multiple actions icons. The user can then
    choose an action by scrolling left or right and lift the finger or cancel by
    scrolling back up. This is currently an iOS specific feature. Expired
    2025-05. Revived July 2025.
  </summary>
</histogram>

<histogram name="Tab.RendererTermination.AliveRenderersCount" units="renderers"
    expires_after="2027-01-19">
  <owner>justincohen@chromium.org</owner>
  <owner>bling-fundamentals@google.com</owner>
  <summary>
    [iOS] A count of the number of alive renderers in the current window when a
    renderer termination occurs. Expired for M78-94.
  </summary>
</histogram>

<histogram name="Tab.RendererTermination.RecentlyAliveRenderersCount"
    units="renderers" expires_after="M106">
  <owner>pkl@chromium.org</owner>
  <summary>
    [iOS] The number of renderers which are either currently alive or recently
    terminated in the current window at the time of a renderer termination.
  </summary>
</histogram>

<histogram name="Tab.RendererTermination.TotalTabCount" units="tabs"
    expires_after="2027-01-26">
  <owner>justincohen@chromium.org</owner>
  <owner>thegreenfrog@chromium.org</owner>
  <summary>
    [iOS] The number of tabs of the current window at the time of a renderer
    termination.
  </summary>
</histogram>

<histogram name="Tab.StateAtRendererTermination" enum="TabForegroundState"
    expires_after="2027-01-17">
  <owner>gambard@chromium.org</owner>
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    The state (foreground/background) of a tab when its renderer is terminated.
  </summary>
</histogram>

<histogram name="Tab.StatusWhenSwitchedBackToForeground" enum="TabStatus"
    expires_after="2027-01-17">
  <owner>ckitagawa@chromium.org</owner>
  <owner>marq@chromium.org</owner>
  <summary>
    [Android and iOS] The status of a tab collected each time the user switches
    to it on mobile. That does not include tabs being created at the time the
    user switches to them, such as NTP or tabs opened to handle intents.
    However, it does include the Tab opened/restored when launching an Activity
    (on Android).

    Warning this histogram was expired between M86 and 2022-08-24.

    In M130, this metric was updated to include Custom Tabs on Android, which
    were probably unintentionally excluded.
  </summary>
</histogram>

<histogram name="Tab.SwitchedToForegroundAge" units="ms"
    expires_after="2027-01-03">
  <owner>dtrainor@chromium.org</owner>
  <owner>ckitagawa@chroimum.org</owner>
  <summary>
    [Android] Age (in ms) when the tab was switched to foreground. Note that
    this data is invalid from M85 until 2023-11-22 because this histogram was
    expired.

    In M130, this metric was updated to include Custom Tabs on Android, which
    were probably unintentionally excluded.
  </summary>
</histogram>

<histogram name="Tab.{AnimationType}.NewTabAnimationProgress"
    enum="AnimationFreezeCheckerState" expires_after="2027-01-03">
  <owner>ckitagawa@chromium.org</owner>
  <owner>polardz@google.com</owner>
  <summary>
    Records the progress of new tab animations on Android to detect freezes. The
    animation is split into multiple parts, each with its own histogram.
    {AnimationType}
  </summary>
  <token key="AnimationType">
    <variant name="BackgroundAnimation" summary="The background animation."/>
    <variant name="ForegroundCornerAnimation"
        summary="The foreground corner animation."/>
    <variant name="ForegroundExpandAnimation"
        summary="The foreground expand animation set."/>
    <variant name="ForegroundFadeAnimation"
        summary="The foreground fade out animation."/>
    <variant name="ForegroundRectAnimation"
        summary="The foreground rectangle animation."/>
  </token>
</histogram>

<histogram
    name="TabGroups.ArchivedTabGroupManualCloseOnInactiveSurface.TabGroupTabCount"
    units="tabs" expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>evanluo@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records number of tabs within an archived tab group closed by pressing the X
    button on the tab group in the inactive surface.
  </summary>
</histogram>

<histogram name="TabGroups.AutodeletePass.DurationMs" units="ms"
    expires_after="2026-11-03">
  <owner>bjfong@google.com</owner>
  <owner>wylieb@google.com</owner>
  <owner>evanluo@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records the duration of an auto-delete pass for tab groups.
  </summary>
</histogram>

<histogram name="TabGroups.CloseAllArchivedTabGroups.TabGroupCount"
    units="groups" expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>evanluo@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records when archived tab groups are closed through the &quot;Close all
    inactive tabs&quot; button in inactive pane.
  </summary>
</histogram>

<histogram name="TabGroups.CloseAllArchivedTabGroups.TabGroupTabCount"
    units="tabs" expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>evanluo@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records number of tabs within archived tab groups closed through the
    &quot;Close all inactive tabs&quot; button in inactive pane.
  </summary>
</histogram>

<histogram name="TabGroups.CloseArchivedTabsMenuItem.TabGroupCount"
    units="groups" expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>evanluo@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records when archived tab groups are closed through the &quot;Close
    tab&quot; menu item after user selects which tab groups to be closed.
  </summary>
</histogram>

<histogram name="TabGroups.CloseArchivedTabsMenuItem.TabGroupTabCount"
    units="tabs" expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>evanluo@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records number of tabs within archived tab groups closed through the
    &quot;Close tab&quot; menu item after user selects which tab groups to be
    closed.
  </summary>
</histogram>

<histogram name="TabGroups.CloseTabGroupsDeletedRemotely" units="groups"
    expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>evanluo@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records when tab groups are closed locally due to the synced tab group being
    deleted elsewhere (e.g. another device logged into same account).
  </summary>
</histogram>

<histogram name="TabGroups.CollapsedGroupCountPerLoad" units="groups"
    expires_after="2027-02-14">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The number of tabs groups that are collapsed in all browsers (counting
    app-mode windows) when a load completes.

    Prior to M-121, this was also recorded when a navigation in a non-tab
    WebContents (e.g. DevTools, extension popups) happens. Such a navigation
    would not have affected the recorded value. It would only duplicate a
    previous recording.
  </summary>
</histogram>

<histogram name="TabGroups.CountAtStartup" units="groups"
    expires_after="2027-04-01">
  <owner>huitingyu@google.com</owner>
  <owner>bling-pandamonium@google.com</owner>
  <summary>[iOS] The number of tab groups opened at cold launch.</summary>
</histogram>

<histogram name="TabGroups.Focus.EntryPoint" enum="TabGroupFocusEntryPoint"
    expires_after="2027-02-04">
  <owner>kunaldaftari@google.com</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Recorded when the user enters Tab Groups Focus Mode, categorizing the
    entrypoint used.
  </summary>
</histogram>

<histogram name="TabGroups.Focus.ExitReason" enum="TabGroupFocusExitReason"
    expires_after="2027-02-04">
  <owner>kunaldaftari@google.com</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Recorded when the user or browser exits Tab Groups Focus Mode, categorizing
    the exit reason.
  </summary>
</histogram>

<histogram name="TabGroups.Focus.PinnedTabActivatedInSession" enum="Boolean"
    expires_after="2027-02-06">
  <owner>kunaldaftari@google.com</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Recorded when the user exits Tab Groups Focus Mode. Records true if a pinned
    tab was activated at least once during the focus mode session, and false
    otherwise.
  </summary>
</histogram>

<histogram name="TabGroups.Focus.PinnedTabActivationsPerSession"
    units="activations" expires_after="2027-02-06">
  <owner>kunaldaftari@google.com</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Recorded when the user exits Tab Groups Focus Mode. Records the number of
    times a pinned tab was activated during the focus mode session.
  </summary>
</histogram>

<histogram name="TabGroups.Focus.PinnedTabExistedInSession" enum="Boolean"
    expires_after="2027-02-06">
  <owner>kunaldaftari@google.com</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Recorded when the user exits Tab Groups Focus Mode. Records true if at least
    one pinned tab existed in the tab strip at any point during the focus mode
    session, and false otherwise.
  </summary>
</histogram>

<histogram name="TabGroups.Focus.SessionDuration" units="ms"
    expires_after="2027-02-04">
  <owner>kunaldaftari@google.com</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Recorded when the user exits Tab Groups Focus Mode (or closes the window
    while in focus mode). Measures the duration the user spent in focus mode.
  </summary>
</histogram>

<histogram
    name="TabGroups.ParseSavedTabGroupDataEntries.ParseFailurePercentage"
    units="%" expires_after="2026-12-15">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records the percentage of stored entries in the saved tab group
    DataTypeStore that failed to parse as a SavedTabGroupData in the final stage
    of startup. Recorded during SavedTabGroupSyncBridge initialization after
    sucessfully passing through the migration stages.
  </summary>
</histogram>

<histogram name="TabGroups.RestoreAllArchivedTabsMenuItem.TabGroupCount"
    units="groups" expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>evanluo@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records when archived tab groups are restored through the &quot;Restore
    all&quot; option menu item.
  </summary>
</histogram>

<histogram name="TabGroups.RestoreAllArchivedTabsMenuItem.TabGroupTabCount"
    units="tabs" expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>evanluo@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records number of tabs within archived tab groups restored by the
    &quot;Restore all&quot; option menu item.
  </summary>
</histogram>

<histogram name="TabGroups.RestoreArchivedTabsMenuItem.TabGroupCount"
    units="groups" expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>evanluo@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records when archived tab groups are restored through the &quot;Restore
    tab&quot; menu option after user selects which tab groups to restore.
  </summary>
</histogram>

<histogram name="TabGroups.RestoreArchivedTabsMenuItem.TabGroupTabCount"
    units="tabs" expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>evanluo@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records number of tabs within archived tab groups restored by user selecting
    tab groups and using the &quot;Restore tab&quot; menu option.
  </summary>
</histogram>

<histogram name="TabGroups.RestoreFromTabGroupPane.TabCount" units="tabs"
    expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>evanluo@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records number of tabs within an archived tab group restored by user opening
    the synced tab group from the tab group pane.
  </summary>
</histogram>

<histogram name="TabGroups.RestoreSingleTabGroup.TabGroupTabCount" units="tabs"
    expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>evanluo@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records number of tabs within archived tab groups restored by user manually
    clicking into the tab group in the inactive surface.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupActiveCount" units="groups"
    expires_after="2027-01-24">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records per hour once the TabGroupSyncService is instantiated upon profile
    open. Tracks the total number of active groups (groups that have been
    modified within the last 30 days) saved in the profile. Nothing is recorded
    for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupAge" units="minutes"
    expires_after="2026-10-11">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records once per group per hour once the TabGroupSyncService is instantiated
    upon profile open. Tracks the age of a SavedTabGroup (since creation).
    Nothing is recorded for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupCount" units="groups"
    expires_after="2027-02-14">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records per hour once the TabGroupSyncService is instantiated upon profile
    open. Tracks the total number of groups saved in the profile. Nothing is
    recorded for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupLifespan" units="minutes"
    expires_after="2027-02-14">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records when a SavedTabGroup is deleted. Tracks the total age / lifespan of
    a SavedTabGroup (since creation) once deleted. Nothing is recorded for
    sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupOpenCount" units="groups"
    expires_after="2027-02-07">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records per hour once the TabGroupSyncService is instantiated upon profile
    open. Tracks the total number of open groups (groups that are in the
    platforms &quot;tabstrip&quot;) saved in the profile. Nothing is recorded
    for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupOpenedSubmenu"
    enum="SavedTabGroupOpenedSubmenuDesktop" expires_after="2026-12-27">
  <owner>dominicaustria@google.com</owner>
  <owner>yuhengh@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Tracks the type of tab group submenu that a user used to open a saved tab
    group.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupPinnedCount" units="groups"
    expires_after="2026-12-15">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records per hour once the TabGroupSyncService is instantiated upon profile
    open. Tracks the total number of pinned groups saved in the profile. Nothing
    is recorded for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroups.TabCountDifference.Negative"
    units="tabs" expires_after="2026-12-15">
  <owner>shaktisahu@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records the difference in the number of tabs between local tab group and its
    synced counterpart when the synced version has more tabs compared to the
    local version. Recorded on connect which happens on startup and also when
    sync is turned on from an off state.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroups.TabCountDifference.Positive"
    units="tabs" expires_after="2026-12-15">
  <owner>shaktisahu@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records the difference in the number of tabs between local tab group and its
    synced counterpart when the local version has more tabs compared to the
    synced version. Recorded on connect which happens on startup and also when
    sync is turned on from an off state.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupSyncBridge.MigrationResult"
    enum="SavedTabGroupSyncBridge.MigrationResult" expires_after="2026-09-06">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Histogram for recording various steps of the SavedTabGroupSyncBridge
    initialization, such as the migration steps and their results. Care has been
    taken to ensure that a certain step isn't recorded more than once during a
    chrome session. Recorded on startup.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupTabCount" units="tabs"
    expires_after="2026-12-20">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records once per group per hour once the TabGroupSyncService is
    instantiated. Tracks the number of tabs in a SavedTabGroup. Nothing is
    recorded for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupTabTimeSinceModification"
    units="minutes" expires_after="2026-12-15">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records once per saved tab per saved group per hour once the
    TabGroupSyncService is instantiated upon profile open. Tracks the duration
    since a saved tab's last modification. Nothing is recorded for sessions
    shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupTimeSinceModification" units="minutes"
    expires_after="2027-02-14">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records once per group per hour once the TabGroupSyncService is instantiated
    upon profile open. Tracks the duration since a saved group's last
    modification. Nothing is recorded for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupUnpinnedCount" units="groups"
    expires_after="2026-12-15">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records per hour once the TabGroupSyncService is instantiated upon profile
    open. Tracks the total number of unpinned groups saved in the profile.
    Nothing is recorded for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SelectedTabInTabGroup" enum="Boolean"
    expires_after="2027-01-24">
  <owner>ckitagawa@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Recorded on Android when a user switches tabs. Records whether the tab that
    was selected was in a tab group.
  </summary>
</histogram>

<histogram name="TabGroups.Shared.GroupDeleted" enum="Boolean"
    expires_after="2026-08-15">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    [ All platforms ] Tracks the number of times a shared tab group was deleted.

    Recorded when a shared tab group is deleted.
  </summary>
</histogram>

<histogram name="TabGroups.Shared.LastTabClosed2" enum="Boolean"
    expires_after="2026-12-15">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    [ All platforms ] Tracks the number of times the last tab was closed in a
    shared tab group.

    Recorded when the last tab is closed in a shared tab group.

    Replaces TabGroups.Shared.LastTabClosed.
  </summary>
</histogram>

<histogram name="TabGroups.Shared.LoadFromDiskResult"
    enum="SharedTabGroupDataLoadFromDiskResult" expires_after="2026-10-10">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records the result of loading a SharedTabGroupData entry from disk. Recorded
    on browser startup or profile open for each entry in the store.
  </summary>
</histogram>

<histogram name="TabGroups.Shared.Manage.Desktop"
    enum="SharedTabGroupManageTypeDesktop" expires_after="2026-08-15">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    [ Desktop ] Tracks the type of manage action a user explicitly performs on a
    shared tab group such as clicking the share / manage group button, or
    deleting a shared group. Recorded when a user triggers a manage action.
  </summary>
</histogram>

<histogram name="TabGroups.Shared.Recall.Desktop"
    enum="SharedTabGroupRecallTypeDesktop" expires_after="2026-12-16">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    [ Desktop ] Tracks the type of recall action a user explicitly performs on a
    shared tab group such as closing a group but not deleting it, or opening a
    group from the bookmarks bar. Recorded when a user triggers a recall action.
  </summary>
</histogram>

<histogram name="TabGroups.Shared.TabGroupAge2" units="minutes"
    expires_after="2026-08-15">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    [ All platforms ] Tracks the age of a SavedTabGroup (since creation). Only
    records if the data sharing feature is enabled.

    Recorded once per group on startup 10 seconds after TabGroupSyncService
    initialization.

    Replaces TabGroups.Shared.TabGroupAge.
  </summary>
</histogram>

<histogram name="TabGroups.Shared.TotalTabGroupCount2" units="groups"
    expires_after="2026-10-18">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    [ All platforms ] Tracks the number of total shared tab groups on startup
    which includes both open and closed tab groups. Only records if the data
    sharing feature is enabled.

    Recorded on startup 10 seconds after TabGroupSyncService initialization.

    Replaces TabGroups.Shared.TotalTabGroupCount.
  </summary>
</histogram>

<histogram name="TabGroups.Shared.TotalTabGroupTabCount2" units="tabs"
    expires_after="2026-08-15">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    [ All platforms ] Tracks the number of tabs in a shared tab group. Only
    records if the data sharing feature is enabled.

    Recorded once per group on startup 10 seconds after TabGroupSyncService
    initialization.

    Replaces TabGroups.Shared.TotalTabGroupTabCount.
  </summary>
</histogram>

<histogram name="TabGroups.Shared.UseUrlForTitle.{SanitizationRequestType}"
    enum="Boolean" expires_after="2026-09-29">
  <owner>qinmin@google.com</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records whether a tab in a shared tab group uses page URL as its title, if
    the page is http(s) and optimization guide is enabled to retrieve the
    alternative title. Recorded when a tab is added to a shared tab group, or
    when a tab in a shared tab group finishes a navigation, or after the
    tabgroup owning the tab was converted to a shared group. No metrics are
    recorded for tabs in non-shared tab groups. This is recorded on all
    platforms.
  </summary>
  <token key="SanitizationRequestType">
    <variant name="AddTab" summary="Add a tab"/>
    <variant name="NavigateTab" summary="Navigate a tab"/>
    <variant name="ShareTabGroup" summary="Share a tab group"/>
  </token>
</histogram>

<histogram name="TabGroups.Shortcuts" enum="TabGroupShortcut"
    expires_after="2026-12-15">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    [Desktop] Records when a keyboard shortcut for a tab group action is
    triggered. Tracks the number of times each tab group shortcut is used. Ex: -
    Creating a new tab group - Closing a tab group - Focusing the next /
    previous tab group - Adding the new tab to a tab group
  </summary>
</histogram>

<histogram name="TabGroups.SpecificsToDataMigration.ParseFailurePercentage"
    units="%" expires_after="2026-12-15">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records the percentage of stored entries in the saved tab group
    DataTypeStore that failed to parse as a SavedTabGroupSpecfics during
    migration to SavedTabGroupData. Recorded during the one-time migration. If
    the data is already migrated, this histogram is not recorded.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.ActiveTabGroupCount.{NumberOfDays}Day"
    units="groups" expires_after="2027-02-07">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Tracks the number of active tab groups on startup. A group is active iff
    there was explicit user interaction with the group in last {NumberOfDays}
    days. An explicit user interaction is currently defined as a tab addition,
    tab removal or a tab navigation inside the group.

    Recorded on startup 10 seconds after TabGroupSyncService initialization.
    Android and iOS only.
  </summary>
  <token key="NumberOfDays">
    <variant name="1" summary="1 day"/>
    <variant name="7" summary="7 day"/>
    <variant name="28" summary="28 day"/>
  </token>
</histogram>

<histogram name="TabGroups.Sync.AddedGroupIsEmptyFromSync" enum="Boolean"
    expires_after="2027-09-29">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records whether a newly saved tab group was empty or not. Recorded on all
    platforms (Android, iOS, Desktop) whenever a tab group is added to the
    SavedTabGroupModel by syncing it from another device. Note that since
    messages are not received/processed in any particular order, it should not
    be surprising if this is a large value; however, each empty group should be
    filled, so the counts should be similar to TabAddedToEmptyGroupFromSync.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.AddedGroupIsEmptyLocally" enum="Boolean"
    expires_after="2027-09-29">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records whether a newly saved tab group was empty or not. Recorded on all
    platforms (Android, iOS, Desktop) whenever a tab group is added to the
    SavedTabGroupModel by the local device.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.ClosedTabGroupCount" units="groups"
    expires_after="2026-06-28">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Tracks the number of closed tab groups on startup.

    Recorded on startup 10 seconds after TabGroupSyncService initialization.
    Android and iOS only.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.GroupClosedByUser.HasTitle"
    enum="BooleanHasTitle" expires_after="2026-12-15">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records whether a tab group that was closed by user has non-empty title.
    Recorded when the group is closed due to the user action which could be a
    deletion, ungroup or close action via UI.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.GroupOpenedByUser.HasTitle"
    enum="BooleanHasTitle" expires_after="2026-09-06">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records whether a tab group that was opened by user has non-empty title.
    Recorded when the group is opened from revisit surface.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.NumberOfGroupsDeletedOnStartup" units="groups"
    expires_after="2026-06-07">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Tracks the number of tab groups that are deleted on startup due to a forced
    cleanup. This is only enabled for a certain finch group of users who have
    network layer disabled.

    Recorded on startup after TabGroupSyncService initialization after notifying
    the observers. Android only.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.OpenTabGroupCount" units="groups"
    expires_after="2027-01-03">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Tracks the number of open tab groups on startup.

    Recorded on startup 10 seconds after TabGroupSyncService initialization.
    Android and iOS only.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.RemoteActiveTabGroupCount.{NumberOfDays}Day"
    units="groups" expires_after="2027-02-14">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Tracks the number of active tab groups on startup that were remotely
    created. A group is active iff there was explicit user interaction with the
    group in last {NumberOfDays} days. An explicit user interaction is currently
    defined as a tab addition, tab removal or a tab navigation inside the group.

    Recorded on startup 10 seconds after TabGroupSyncService initialization.
    Android and iOS only.
  </summary>
  <token key="NumberOfDays">
    <variant name="1" summary="1 day"/>
    <variant name="7" summary="7 day"/>
    <variant name="28" summary="28 day"/>
  </token>
</histogram>

<histogram name="TabGroups.Sync.RemoteTabGroupCount" units="groups"
    expires_after="2026-09-06">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Tracks the number of active tab groups on startup that were remotely
    created.

    Recorded on startup 10 seconds after TabGroupSyncService initialization.
    Android and iOS only.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.SavedTabGroupAge" units="minutes"
    expires_after="2026-01-18">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Tracks the age of a SavedTabGroup (since creation). Recorded once per group
    on startup 10 seconds after TabGroupSyncService initialization. Android and
    iOS only.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.SavedTabGroupTabCount" units="tabs"
    expires_after="2027-01-03">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Tracks the number of tabs in a SavedTabGroup.

    Recorded once per group on startup 10 seconds after TabGroupSyncService
    initialization. Android and iOS only.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.SavedTabGroupTabTimeSinceModification"
    units="minutes" expires_after="2026-08-30">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Tracks the duration since a saved tab's last modification.

    Recorded once per tab on startup 10 seconds after TabGroupSyncService
    initialization. Android and iOS only.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabAddedToEmptyGroupFromSync" enum="Boolean"
    expires_after="2027-09-29">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records whether a tab added to a saved group was the first tab or not.
    Recorded on all platforms (Android, iOS, Desktop) whenever a tab is added to
    a tab group by syncing it from another device.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabAddedToEmptyGroupLocally" enum="Boolean"
    expires_after="2027-09-29">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records whether a tab added to a saved group was the first tab or not.
    Recorded on all platforms (Android, iOS, Desktop) whenever a tab is added to
    a tab group by the local device.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.Closed.GroupCreateOrigin"
    enum="DeviceType" expires_after="2026-10-11">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when the group is closed. This includes all types of group closures
    initiated by the user such as close, ungroup or delete event on the group.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.Closed.Reason"
    enum="GroupClosingSource" expires_after="2027-01-10">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records the source from which a tab group was closed. Recorded whenever a
    group is being closed in the UI which could be due to various trigger
    sources such as manually closed by user or deletion from sync.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.Created.GroupCreateOrigin"
    enum="DeviceType" expires_after="2027-02-14">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when the group is created.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.Opened.GroupCreateOrigin"
    enum="DeviceType" expires_after="2026-10-11">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when the group is opened due to user action such as opening the
    group from revisit surface.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.Opened.Reason"
    enum="GroupOpeningSource" expires_after="2027-02-14">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records the source from which a tab group was opened. Recorded whenever a
    group is being opened in the UI which could be due to various trigger
    sources such as manually opened by user or auto-opened from sync.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.Removed.GroupCreateOrigin"
    enum="DeviceType" expires_after="2026-10-11">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when the group is removed.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.TabAdded.GroupCreateOrigin"
    enum="DeviceType" expires_after="2027-02-14">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when a tab was added to the tab group.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.TabNavigated.GroupCreateOrigin"
    enum="DeviceType" expires_after="2026-10-11">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when a tab was navigated in the tab group.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.TabRemoved.GroupCreateOrigin"
    enum="DeviceType" expires_after="2026-12-15">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when a tab was was removed from the tab group.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.TabSelected.GroupCreateOrigin"
    enum="DeviceType" expires_after="2026-12-15">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when the a tab is selected by user action. Note that this can
    happen multiple times during a user session.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.TabSelected.TabCreateOrigin"
    enum="DeviceType" expires_after="2026-12-15">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records the DeviceType of the device in which a tab was created. Recorded
    when the a tab is selected by user action. Note that this can happen
    multiple times during a user session.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.TabsReordered.GroupCreateOrigin"
    enum="DeviceType" expires_after="2026-12-15">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when the tabs are reordered inside the group.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.UserInteracted.GroupCreateOrigin"
    enum="DeviceType" expires_after="2026-12-15">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when the group is interacted with by user. Tab addition, removal
    and selection are considered as user interaction
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.UserInteracted.HasTitle"
    enum="BooleanHasTitle" expires_after="2026-12-15">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records whether a tab group that was interacted by user has non-empty title.
    Tab addition, removal and selection are considered as user interaction. Note
    that this can happen multiple times during a user session.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.VisualsChanged.GroupCreateOrigin"
    enum="DeviceType" expires_after="2026-10-11">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-multiplayer-eng@google.com</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when the group visuals (title or color) is changed.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroupLoadedEmptiness"
    enum="TabGroupLoadedEmptiness" expires_after="2026-12-15">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records whether a tab group loaded from disk was empty, not empty, or if it
    became empty after removing tabs already in a shared group. Recorded on all
    platforms (Android, iOS, Desktop) on browser startup or profile open for
    each saved or shared tab group loaded.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroupTitleLength" units="characters"
    expires_after="2026-06-07">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records the number of characters in the tab group title. Recorded when
    TabGroupSyncService::UpdateVisualData is invoked which is typically invoked
    whenever there is any change to title, color, or even when tab group dialog
    is closed.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabRemovedFromGroupWasLastTab" enum="Boolean"
    expires_after="2026-12-15">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records whether a tab removed from a saved group was the last tab or not.
    Recorded on all platforms (Android, iOS, Desktop) whenever a tab is removed
    from a tab group.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TimeSinceLastUserInteractionWithGroup"
    units="minutes" expires_after="2026-10-25">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Tracks the duration since a saved group's last user interaction which is
    typically defined as tab addition, tab removal or tab navigation.

    Recorded once per group on startup 10 seconds after TabGroupSyncService
    initialization. Android and iOS only.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TotalTabGroupCount" units="groups"
    expires_after="2027-02-14">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [ All platforms ] Tracks the number of total tab groups on startup which
    includes both open and closed tab groups.

    Recorded on startup 10 seconds after TabGroupSyncService initialization.
  </summary>
</histogram>

<histogram name="TabGroups.TabGroupAutoDeleted.TabCount" units="tabs"
    expires_after="2026-11-03">
  <owner>bjfong@google.com</owner>
  <owner>wylieb@google.com</owner>
  <owner>evanluo@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records the number of tabs within a tab group that is
    autodeleted.
  </summary>
</histogram>

<histogram name="TabGroups.TabGroupAutoDeleteEligibilityCheck.AfterNDays"
    units="days" expires_after="2026-11-03">
  <owner>bjfong@google.com</owner>
  <owner>wylieb@google.com</owner>
  <owner>evanluo@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records how old, in days, a tab group is when it's checked
    for auto-deletion eligibility. Recorded at startup when the archived tab
    model is loaded and at regular intervals after that (same cadence as tabs).
    Only recorded if tab group declutter is enabled.
  </summary>
</histogram>

<histogram name="TabGroups.TabGroupBubble.TabCount" units="tabs"
    expires_after="2027-02-14">
  <owner>sophiechang@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records the number of tabs in a group whenever a tab group editor bubble
    closes.
  </summary>
</histogram>

<histogram name="TabGroups.TabGroupDeclutter.ArchivedTabGroups" units="groups"
    expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>evanluo@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records number of tab groups that are archived due to tab group declutter.
  </summary>
</histogram>

<histogram name="TabGroups.TabGroupDeclutter.ArchivedTabGroupTabCount"
    units="tabs" expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>evanluo@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records number of tabs within each archived tab group that are archived when
    the tab group is archived.
  </summary>
</histogram>

<histogram name="TabGroups.TabsPerGroupCountAtStartup" units="tabs"
    expires_after="2027-02-14">
  <owner>huitingyu@google.com</owner>
  <owner>bling-pandamonium@google.com</owner>
  <summary>[iOS] The number of tabs per group at cold launch.</summary>
</histogram>

<histogram name="TabGroups.UnsavedTabGroupCount" units="groups"
    expires_after="2026-12-15">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records once an hour once the TabGroupSyncService is instantiated upon
    profile open. Tracks the number of unsaved TabGroups. Nothing is recorded
    for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.UnsavedTabGroupTabCount" units="tabs"
    expires_after="2026-12-15">
  <owner>dljames@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records once per group per hour once the TabGroupSyncService is
    instantiated. Tracks the number of tabs in an unsaved TabGroup. Nothing is
    recorded for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.UserCustomizedGroupCountPerLoad" units="groups"
    expires_after="2027-02-14">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The number of tabs groups with a user-set name or color open in all browsers
    (counting app-mode windows) when a load completes.

    Prior to M-121, this was also recorded when a navigation in a non-tab
    WebContents (e.g. DevTools, extension popups) happens. Such a navigation
    would not have affected the recorded value. It would only duplicate a
    previous recording.
  </summary>
</histogram>

<histogram name="TabGroups.UserGroupCount" units="groups"
    expires_after="2027-01-17">
  <owner>ckitagawa@chromium.org</owner>
  <owner>meiliang@chromium.org</owner>
  <summary>
    This histogram records the number of tab groups whenever Chrome comes to the
    foreground.
  </summary>
</histogram>

<histogram name="TabGroups.UserGroupCountPerLoad" units="groups"
    expires_after="2027-02-14">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The number of tabs groups open in all browsers (counting app-mode windows)
    when a load completes.

    Prior to M-121, this was also recorded when a navigation in a non-tab
    WebContents (e.g. DevTools, extension popups) happens. Such a navigation
    would not have affected the recorded value. It would only duplicate a
    previous recording.
  </summary>
</histogram>

<histogram name="TabGroups.UserPinnedTabCountPerLoad" units="tabs"
    expires_after="2027-02-14">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The number of pinned tabs in the tabstrip in all browser windows, when a
    page load completes.

    Prior to M-121, this was also recorded when a navigation in a non-tab
    WebContents (e.g. DevTools, extension popups) happens. Such a navigation
    would not have affected the recorded value. It would only duplicate a
    previous recording.
  </summary>
</histogram>

<histogram name="TabGroups.{ConsentLevel}.{GroupsOrTabs}" units="count"
    expires_after="2027-02-07">
  <owner>treib@chromium.org</owner>
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records the number of {GroupsOrTabs}, at the moment when the user is
    {ConsentLevel} Chrome. Android and iOS only.
  </summary>
  <token key="GroupsOrTabs">
    <variant name="ClosedTabGroupCount" summary="closed tab groups"/>
    <variant name="ClosedTabGroupTabsCount"
        summary="tabs that are part of a closed tab group"/>
    <variant name="OpenTabGroupCount" summary="open tab groups"/>
    <variant name="OpenTabGroupTabsCount"
        summary="tabs that are part of an open tab group"/>
    <variant name="TotalTabGroupCount"
        summary="all tab groups (open or closed)"/>
    <variant name="TotalTabGroupTabsCount"
        summary="all tabs that are part of a tab group (open or closed)"/>
  </token>
  <token key="ConsentLevel">
    <variant name="OnSignin" summary="signing in to"/>
    <variant name="OnSync" summary="enabling sync in"/>
  </token>
</histogram>

<histogram name="TabManager.Discarding.DiscardCount" units="Discards"
    expires_after="2027-02-14">
  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Cumulative number of tabs discarded due to low memory conditions, recorded
    once per tab discard event. For example, a user who had 3 tabs discarded
    records a count in the 1 bin, 2 bin and 3 bin. Thus each bin N is the number
    of sessions where users experienced N or more tab discard events.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.DiscardToReloadTime" units="ms"
    expires_after="2026-11-29">
  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Elapsed time between a tab getting discarded to eventually being reloaded by
    the user.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.InactiveToReloadTime" units="ms"
    expires_after="2026-12-27">
  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Elapsed time between the time a tab switched from being active to inactive
    (that eventually gets discarded) until it gets reloaded.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.ReloadCount" units="Reloads"
    expires_after="2027-01-03">
  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Cumulative number of discarded tabs that have been reloaded by the user,
    recorded once per tab discard event. For example, a user who had 3 tabs
    reloaded records a count in the 1 bin, 2 bin and 3 bin. Thus each bin N is
    the number of sessions where users experienced N or more tab reload events.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.ReloadToCloseTime" units="ms"
    expires_after="2025-06-22">
  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Elapsed time between the last time a discarded tab was reloaded and the time
    it gets closed.
  </summary>
</histogram>

<histogram name="TabRestore.{RestoreType}.TimeBetweenClosedAndRestored"
    units="ms" expires_after="2026-12-18">
  <owner>sreejakshetty@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <summary>
    Recorded when the user restores a {RestoreType}. The value is the time
    duration between the previous closing of the {RestoreType} and the
    {RestoreType} being restored.
  </summary>
  <token key="RestoreType">
    <variant name="Group" summary="tab group"/>
    <variant name="Split" summary="split view"/>
    <variant name="Tab" summary="tab"/>
    <variant name="Window" summary="window"/>
  </token>
</histogram>

<histogram name="Tabs.Active.AbsolutePosition" units="index"
    expires_after="2027-02-14">
  <owner>emshack@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    When a tab is activated, records the index of that tab in the tab strip,
    starting at 1 (1-indexed).
  </summary>
</histogram>

<histogram name="Tabs.Active.RelativePosition" units="%"
    expires_after="2027-02-14">
  <owner>emshack@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    When a tab is activated, records the index of that tab in the tab strip as a
    percentage of the total number of tabs.
  </summary>
</histogram>

<histogram name="Tabs.ActiveCountAtStartup" units="tabs"
    expires_after="2027-01-03">
  <owner>huitingyu@google.com</owner>
  <owner>bling-pandamonium@google.com</owner>
  <summary>
    [iOS] Records the number of tabs that are considered active as per the
    current tab inactivity threshold. This is recorded at cold launch.
  </summary>
</histogram>

<histogram name="Tabs.ArchivedTabRestored.TabCount" units="count"
    expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records how many tabs were restored. Recorded when a user
    restores tabs from the archived tabs dialog, selects the &quot;close all
    tabs&quot; button, or opens an archived tab.
  </summary>
</histogram>

<histogram name="Tabs.ArchivedTabs.MaxLimitReachedAt" units="count"
    expires_after="2026-12-20">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records how many tabs were archived prior to hitting the
    maximum limit for simultaneous archives.
  </summary>
</histogram>

<histogram name="Tabs.ArchivePass.DurationMs" units="ms"
    expires_after="2027-06-11">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records the duration of an archive pass, not including the
    time it takes to initialize the PersistedTabData (PTD).
  </summary>
</histogram>

<histogram name="Tabs.ArchiveSettings.ArchiveDuplicateTabsEnabled"
    enum="Boolean" expires_after="2027-01-24">
  <owner>bjfong@google.com</owner>
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records when a user toggles the settings entry for automatically archiving
    duplicate tabs on Android. The default state is enabled and is not recorded.
    This histogram tracks the new state of the toggle and is emitted each time
    it is changed. True corresponds to enabled and false corresponds to
    disabled.
  </summary>
</histogram>

<histogram name="Tabs.ArchiveSettings.AutoDeleteEnabled" enum="Boolean"
    expires_after="2027-06-11">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records when a user toggles the settings entry for automatically deleting
    inactive tabs on Android. The default state is enabled and is not recorded.
    This histogram tracks the new state of the toggle and is emitted each time
    it is changed. True corresponds to enabled and false corresponds to
    disabled.
  </summary>
</histogram>

<histogram name="Tabs.ArchiveSettings.TimeDeltaPreference" units="days"
    expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>Records when a user selects an archive time preference.</summary>
</histogram>

<histogram name="Tabs.AutoOpenSyncedTabGroupsSwitch.ToggledToState"
    enum="Boolean" expires_after="2026-10-30">
  <owner>ckitagawa@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records when a user toggles the settings entry for automatically opening
    synced tab groups on Android. The default state is enabled and is not
    recorded. This histogram tracks the new state of the toggle and is emitted
    each time it is changed. True corresponds to enabled and false corresponds
    to disabled.
  </summary>
</histogram>

<histogram name="Tabs.CloseAllArchivedTabs.TabCount" units="tabs"
    expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records the number of tabs that are currently selected when the close all
    inactive tabs button is clicked.
  </summary>
</histogram>

<histogram name="Tabs.CloseArchivedTabsMenuItem.TabCount" units="tabs"
    expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records the number of tabs that are currently selected when the close menu
    item is clicked.
  </summary>
</histogram>

<histogram name="Tabs.CountAtResume2" units="tabs" expires_after="2027-01-03">
  <owner>marq@chromium.org</owner>
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    [iOS] The number of tabs opened when the app comes out of the background.
    With a wider range than Tabs.CountAtResume (100 -&gt; 1M)
  </summary>
</histogram>

<histogram name="Tabs.CountAtStartup" units="tabs" expires_after="2027-01-03">
  <owner>marq@chromium.org</owner>
  <owner>bling-pandamonium@google.com</owner>
  <summary>
    [Android] The number of tabs opened at cold launch. iOS uses
    Tabs.CountAtStartup2
  </summary>
</histogram>

<histogram name="Tabs.CountAtStartup2" units="tabs" expires_after="2027-01-03">
  <owner>marq@chromium.org</owner>
  <owner>bling-pandamonium@google.com</owner>
  <summary>
    [iOS] The number of tabs opened at cold launch. With a wider range than
    Tabs.CountAtStartup (100 -&gt; 1M)
  </summary>
</histogram>

<histogram name="Tabs.DeleteWithPTD.DurationMs" units="ms"
    expires_after="2027-06-11">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records the duration of an auto-delete pass, including the
    time it takes to load the PersistedTabData (PTD).
  </summary>
</histogram>

<histogram name="Tabs.DeserializationResultForAppendPendingNavigation"
    enum="BooleanSuccess" expires_after="2026-10-26">
  <owner>ckitagawa@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Recorded when a tab's WebContentsState is being modified by
    freezing and appending to it. Success indicates that the previous state was
    safely deserialized and could be appended to. Failure indicates that the
    previous WebContentsState could not be read and will be clobbered.
  </summary>
</histogram>

<histogram name="Tabs.DroppedDuplicatesCountOn{Occasion}" units="tabs"
    expires_after="2026-12-01">
  <owner>huitingyu@google.com</owner>
  <owner>bling-pandamonium@google.com</owner>
  <summary>
    [iOS] The number of invalid duplicated tabs dropped {Occasion}.

    Note: This tracks invalid web states that share the same identifier. This
    metric is not to be confused with Tabs.DuplicatesCountAtStartup which counts
    valid duplicates (i.e. different web states, with different identifiers, but
    the same URL).
  </summary>
  <token key="Occasion">
    <variant name="MigrateActiveToInactive"
        summary="during Inactive Tabs migration (moving now-considered
                 inactive tabs to the inactive browser)"/>
    <variant name="MigrateInactiveToActive"
        summary="during Inactive Tabs migration (moving now-considered active
                 tabs to the active browser)"/>
    <variant name="RestoreAllInactive"
        summary="during Inactive Tabs migration (moving back all inactive
                 tabs to the active browser)."/>
    <variant name="SessionRestore"
        summary="each time a session is restored from storage"/>
    <variant name="SessionSave"
        summary="each time a session is saved to storage"/>
  </token>
</histogram>

<histogram name="Tabs.DuplicatesCountAtStartup" units="tabs"
    expires_after="2027-06-28">
  <owner>huitingyu@google.com</owner>
  <owner>bling-pandamonium@google.com</owner>
  <summary>
    [iOS] The number of redundant active tabs restored at cold launch.

    Note: This metric counts each non-unique tab from the active browser as a
    redundant tab. E.g. if there are 3 active tabs with the same URL, this
    metric will represent the amount of total duplicates (i.e. two duplicates).
    Inactive tabs are not counted towards that metric.
  </summary>
</histogram>

<histogram name="Tabs.FocusMode.IsActive" enum="Boolean"
    expires_after="2027-02-06">
  <owner>kunaldaftari@google.com</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Logs whether the window's tab strip is currently in focus mode (focused on a
    tab group). Recorded every 5 minutes (the heartbeat interval) for each
    normal browser window.
  </summary>
</histogram>

<histogram name="Tabs.FreezeAndAppendPendingNavigationResult"
    enum="BooleanSuccess" expires_after="2027-01-10">
  <owner>ckitagawa@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Recorded when a tab's WebContentsState is being frozen and
    appended to. Success indicates that the append succeeded. Failure indicates
    it was not possible to freeze the tab and we had to fallback to a lazy load.
  </summary>
</histogram>

<histogram name="Tabs.InactiveCountAtStartup" units="tabs"
    expires_after="2027-06-28">
  <owner>huitingyu@google.com</owner>
  <owner>bling-pandamonium@google.com</owner>
  <summary>
    [iOS] Records the number of tabs that are considered inactive as per the
    current tab inactivity threshold. This is recorded at cold launch.
  </summary>
</histogram>

<histogram name="Tabs.InitializePTD.DurationMs" units="ms"
    expires_after="2027-06-11">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records the duration of initializing all the PersistedTabData
    (PTD) from an archive pass.
  </summary>
</histogram>

<histogram name="Tabs.MaxTabsInADay{BatteryState}" units="tabs"
    expires_after="never">
<!-- expires-never: https://crbug.com/966137 -->

  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The maximum number of tabs that Chrome displays at the same time over the
    course of a day. Desktop only.

    NOTE: This metric is asynchronous, the value reported on a given day
    represents the previous day's observations (which can be from a different
    build).
  </summary>
  <token key="BatteryState" variants="BatteryState"/>
</histogram>

<histogram name="Tabs.MaxTabsPerWindowInADay{BatteryState}" units="tabs"
    expires_after="never">
<!-- expires-never: https://crbug.com/966137 -->

  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The maximum number of tabs per window that Chrome displays over the course
    of a day. Desktop Only.

    NOTE: This metric is asynchronous, the value reported on a given day
    represents the previous day's observations (which can be from a different
    build).
  </summary>
  <token key="BatteryState" variants="BatteryState"/>
</histogram>

<histogram name="Tabs.MaxWindowsInADay{BatteryState}" units="tabs"
    expires_after="never">
<!-- expires-never: https://crbug.com/966137 -->

  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The maximum number of windows existing at the same time over the course of a
    day. Desktop only.

    NOTE: This metric is asynchronous, the value reported on a given day
    represents the previous day's observations (which can be from a different
    build).
  </summary>
  <token key="BatteryState" variants="BatteryState"/>
</histogram>

<histogram name="Tabs.Metadata.FileSizeOnRead.{TabModelSelectorType}"
    units="KB" expires_after="2027-02-07">
  <owner>skym@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records the size of the tab list metadata file that's loaded on tab model
    creation split out by client type. This is for the regular tab model, not
    the incognito. Additionally this file may be loaded more times for various
    things such as clean up and merging, these loads are all ignored. Clients
    such as headless will still report with their selector type.
  </summary>
</histogram>

<histogram name="Tabs.Metadata.SyncSave.{TabModelSelectorType}" units="count"
    expires_after="2027-08-24">
  <owner>skym@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records whether the metadata save was performed synchronously
    (only the UI thread) or asynchronous (on a background thread). Also useful
    because it captures the total number of metadata saves.
  </summary>
</histogram>

<histogram name="Tabs.MissingWebStateStorageFileOnSessionRestore"
    enum="Boolean" expires_after="2027-02-10">
  <owner>justincohen@google.com</owner>
  <owner>bling-fundamentals@google.com</owner>
  <summary>
    Records whether a web state session storage file is missing on session
    restore. Recorded when the web state is realized.
  </summary>
</histogram>

<histogram name="Tabs.NumberOfTabsOnResume{BatteryState}" units="tabs"
    expires_after="never">
<!-- expires-never: https://crbug.com/966137 -->

  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The number of tabs total at resume from sleep/hibernate. This is being
    logged on all desktop platforms.
  </summary>
  <token key="BatteryState" variants="BatteryState"/>
</histogram>

<histogram name="Tabs.OldCountAtStartup2" units="tabs"
    expires_after="2026-12-01">
  <owner>huitingyu@google.com</owner>
  <owner>bling-pandamonium@google.com</owner>
  <summary>
    [iOS] Number of tabs older than 21 days. Recorded at cold launch.
  </summary>
</histogram>

<histogram name="Tabs.PageLoad.TimeSinceActive2" units="ms"
    expires_after="2027-01-17">
  <owner>emshack@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    On page load, records the time since last active for each tab in the tab
    strip.
  </summary>
</histogram>

<histogram name="Tabs.PageLoad.TimeSinceCreated2" units="ms"
    expires_after="2027-01-17">
  <owner>emshack@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    On page load, records the time since creation for each tab in the tab strip.
  </summary>
</histogram>

<histogram name="Tabs.PersistedTabData.Storage.Exists.File"
    enum="BooleanSuccess" expires_after="2025-04-12">
  <owner>yusufo@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <owner>dtrainor@chromium.org</owner>
  <owner>davidjm@chromium.org</owner>
  <summary>
    FilePersistedTabData storage stores serialized PersistedTabData (metadata
    persisted across restarts) in a file. This metric records if a delete
    operation was found to have the file not existing.
  </summary>
</histogram>

<histogram name="Tabs.PersistedTabData.Storage.LevelDB.OrphanedDataCount"
    units="keys" expires_after="2026-09-13">
  <owner>davidjm@chromium.org</owner>
  <owner>dtrainor@chromium.org</owner>
  <summary>
    Records the number of keys that were identified to be orphaned in the
    LevelDB database for PersistedTabData. PersistedTabData stores Tab data to
    be persisted across restarts. When a Tab is closed, the data is removed,
    however, it is possible for data to become orphaned if the app crashes after
    a Tab is closed and before the cleanup is complete. This metric is recorded
    in the first callback, OnPerformMaintenance, whereby orphaned keys are
    identified and before they are deleted.
  </summary>
</histogram>

<histogram name="Tabs.PinnedCountAtStartup" units="tabs"
    expires_after="2027-01-03">
  <owner>huitingyu@google.com</owner>
  <owner>bling-pandamonium@google.com</owner>
  <summary>[iOS] The number of pinned tabs opened at cold launch.</summary>
</histogram>

<histogram name="Tabs.PinnedTabCount.{TabStripMode}" units="tabs"
    expires_after="2027-02-14">
  <owner>agale@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Counts the number of pinned tabs across each window, reported every 5
    minutes. Desktop only.
  </summary>
  <token key="TabStripMode" variants="TabStripMode"/>
</histogram>

<histogram name="Tabs.PotentialDoubleDirty.SaveQueueSize" units="tabs"
    expires_after="2025-01-12">
  <owner>skym@chromium.org</owner>
  <owner>ckitagawa@chroimum.org</owner>
  <summary>
    On Android, when a tab becomes dirty, it is queued to be saved to disk.
    Clients that make multiple modifications in a sequence to the same tab can
    cause poor performance by triggering a synchronous save from the first
    modification, and then a second one from the others. This can be manually
    worked around by notifying the TabStateAttributes, but clients that need
    this change need to be identified first. This histogram is trying to help
    identify the frequency that this situation is encountered.

    This histogram, only on Android, is specifically recorded when we go to
    queue a tab's data to be saved to persistent storage, and we notice that
    we're also currently writing the same tab to disk. This is not always a
    problem, as there could be many pending async writes happening to various
    tabs, when new fresh modifications come in.

    The value being recorded is the number of tabs in the save queue in front of
    the tab being added. If the number is zero, it's very likely because of a
    client making multiple sequential modifications. On the other hand, a larger
    number is likely just the same tab being modified asynchronously and the
    queue is backed up with other changes.
  </summary>
</histogram>

<histogram
    name="Tabs.RecentlyClosed.EntriesRestoredInPage.{RecentlyClosedType}"
    units="entries restored" expires_after="2027-02-07">
  <owner>ckitagawa@chromium.org</owner>
  <owner>fredmello@chromium.org</owner>
  <summary>
    The number of distinct entries of {RecentlyClosedType} that were restored in
    one Recent Tabs page session on Android. Entries may come from
    TabRestoreService (Tab, Group, BulkEvent) or from MultiInstanceManager
    (Window). This is recorded when destroying the Recent Tabs page if any
    entries of {RecentlyClosedType} type were shown.
  </summary>
  <token key="RecentlyClosedType" variants="RecentlyClosedType"/>
</histogram>

<histogram name="Tabs.RecentlyClosed.EntriesShownInPage.{RecentlyClosedType}"
    units="entries shown" expires_after="2027-10-04">
  <owner>ckitagawa@chromium.org</owner>
  <owner>fredmello@chromium.org</owner>
  <summary>
    The number of distinct entries of {RecentlyClosedType} shown in the Recent
    Tabs page on Android. Entries may come from TabRestoreService (Tab, Group,
    BulkEvent) or from MultiInstanceManager (Window). This is recorded when
    destroying the Recent Tabs page.
  </summary>
  <token key="RecentlyClosedType" variants="RecentlyClosedType"/>
</histogram>

<histogram name="Tabs.RecentlyClosed.HistoricalSaverCloseType"
    enum="HistoricalSaverCloseType" expires_after="2027-10-04">
  <owner>ckitagawa@chromium.org</owner>
  <owner>fredmello@chromium.org</owner>
  <summary>
    Recorded once for each tab closure event processed by HistoricalTabSaverImpl
    on Android. Enum categories correspond to the the type of closure that was
    saved to the native TabRestoreService. Tab for single tab, Group for a
    single tab group and Bulk for a combination of tabs and groups or more than
    one of either.
  </summary>
</histogram>

<histogram name="Tabs.RestoreAllArchivedTabsMenuItem.TabCount" units="tabs"
    expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records the number of tabs that are currently selected when the restore all
    menu item is clicked.
  </summary>
</histogram>

<histogram name="Tabs.RestoreArchivedTabsMenuItem.TabCount" units="tabs"
    expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records the number of tabs that are currently selected when the restore menu
    item is clicked.
  </summary>
</histogram>

<histogram name="Tabs.RestoredFromInactiveCount" units="tabs"
    expires_after="2026-12-27">
  <owner>huitingyu@google.com</owner>
  <owner>bling-pandamonium@google.com</owner>
  <summary>
    Recorded on disabling Inactive Tabs (for example in case of an unlaunch).
    The number of tabs rescued from the orphan inactive tabs browser after the
    Inactive Tabs experimental flag has been disabled.
  </summary>
</histogram>

<histogram name="Tabs.RestoreTabStateException" enum="RestoreTabStateException"
    expires_after="2027-02-07">
  <owner>ckitagawa@chromium.org</owner>
  <owner>fredmello@chromium.org</owner>
  <summary>
    [Android] TabState restoration may fail resulting in fallback restoration
    from the TabStateList or aborting restoration altogether. TabState
    restoration occurs on startup when restoring tab state from disk or when
    merging multi-instance modes together. This histogram is emitted when
    TabState restoration fails to indicate the cause of the failure.
  </summary>
</histogram>

<histogram name="Tabs.SadTab.Feedback.Event" enum="SadTabEvent"
    expires_after="2027-01-17">
  <owner>sonnyrao@chromium.org</owner>
  <owner>jamescook@chromium.org</owner>
  <summary>
    Counts of events from the style of sad tab which has a feedback button as
    its primary action. Currently, events include being displayed (actually
    visible in a window), and the actions a user can take on the page.
  </summary>
</histogram>

<histogram name="Tabs.SadTab.Reload.Event" enum="SadTabEvent"
    expires_after="2027-01-17">
  <owner>sonnyrao@chromium.org</owner>
  <owner>jamescook@chromium.org</owner>
  <summary>
    Counts of events from the style of sad tab which has a reload button as its
    primary action. Compare to Tabs.SadTab.Feedback.Event.
  </summary>
</histogram>

<histogram name="Tabs.ScrubbedInInterval.KeyPress" units="tabs"
    expires_after="2023-05-07">
  <owner>corising@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    This histogram records the number of tabs that are 'scrubbed' by key press
    during a given interval of time (i.e. ctrl+tab navigation). For this metric,
    a tab is considered 'scrubbed' if it was active for less than or equal to a
    given amount of time.
  </summary>
</histogram>

<histogram name="Tabs.ScrubbedInInterval.MousePress" units="tabs"
    expires_after="2023-07-09">
  <owner>corising@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    This histogram records the number of tabs that are 'scrubbed' by mouse press
    during a given interval of time. For this metric, a tab is considered
    'scrubbed' if it was active for less than or equal to a given amount of
    time.
  </summary>
</histogram>

<histogram name="Tabs.ScrubDistance" units="tabs" expires_after="2024-03-20">
  <owner>afakhry@chromium.org</owner>
  <owner>tclaiborne@chromium.org</owner>
  <summary>
    The distance a user multi-finger scrubbed to change tabs. Always positive
    (ignores left / right).
  </summary>
</histogram>

<histogram name="Tabs.ScrubDuration" units="ms" expires_after="2024-07-20">
  <owner>afakhry@chromium.org</owner>
  <owner>tclaiborne@chromium.org</owner>
  <summary>
    The duration a user spent doing multi-finger scrubbing to change tabs before
    a different tab than the currently active one was actually activated.
  </summary>
</histogram>

<histogram name="Tabs.Selections.Count" units="tabs" expires_after="2026-11-22">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The number of selected tabs in a tab strip. Recorded each time the tab
    selection changes.
  </summary>
</histogram>

<histogram name="Tabs.ShoppingPersistedTabData.FoundBuyableProductAnnotation"
    enum="FoundBuyableProductAnnotation" expires_after="2026-01-27">
  <owner>yusufo@chromium.org</owner>
  <owner>ayman@chromium.org</owner>
  <owner>davidjm@chromium.org</owner>
  <summary>
    (Android only) Records if we find a BuyableProductAnnotation in the response
    from our endpoint which provides page annotations to enrich the user
    experience. The endpoint is called for every Tab when we enter the Tab grid
    switcher and is cached with a time to live of 1 hour.
  </summary>
</histogram>

<histogram name="Tabs.SplitViewMenu.{SplitViewMenuSource}"
    enum="SplitViewMenuEntry" expires_after="2027-02-07">
  <owner>agale@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records the menu item selected from the split view menu anchored to
    {SplitViewMenuSource}.
  </summary>
  <token key="SplitViewMenuSource" variants="SplitViewMenuSource"/>
</histogram>

<histogram name="Tabs.Startup.PinnedTabCount.{TabModelSelectorType}.{TabType}"
    units="count" expires_after="2027-02-07">
  <owner>madhavpruthi@google.com</owner>
  <owner>ckitagawa@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records the number of {TabType} pinned Tabs loaded on startup
    per {TabModelSelectorType}.
  </summary>
  <token key="TabModelSelectorType" variants="TabModelSelectorType"/>
  <token key="TabType">
    <variant name="Incognito" summary="Incognito"/>
    <variant name="Regular" summary="Regular"/>
  </token>
</histogram>

<histogram name="Tabs.Startup.RestoreDuration.{TabModelSelectorType}"
    units="ms" expires_after="2027-01-03">
  <owner>ckitagawa@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records the realtime duration it took to restore all the tab
    states per {TabModelSelectorType}. Recorded after tab model selector
    restoration completes successfully. Android-only.
  </summary>
  <token key="TabModelSelectorType" variants="TabModelSelectorType"/>
</histogram>

<histogram name="Tabs.Startup.RestoreDurationPerTab.{TabModelSelectorType}"
    units="ms" expires_after="2027-01-03">
  <owner>ckitagawa@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records the average realtime duration it took per-tab to
    restore all the tab states. Bucketed by {TabModelSelectorType}. Recorded
    after tab model selector restoration completes successfully. Android-only.
  </summary>
  <token key="TabModelSelectorType" variants="TabModelSelectorType"/>
</histogram>

<histogram name="Tabs.Startup.TabCount.{TabType}" units="count"
    expires_after="2027-02-07">
  <owner>davidjm@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <summary>
    (Android only) Records the number of {TabType} Tabs loaded on startup.
  </summary>
  <token key="TabType">
    <variant name="Incognito" summary="Incognito"/>
    <variant name="Regular" summary="Regular"/>
  </token>
</histogram>

<histogram name="Tabs.Startup.TabCount2.{TabModelSelectorType}.DuplicateTabIds"
    units="count" expires_after="2027-09-06">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records the number of duplicate tabs in the tab metadata
    found at startup per {TabModelSelectorType}.
  </summary>
  <token key="TabModelSelectorType" variants="TabModelSelectorType"/>
</histogram>

<histogram name="Tabs.Startup.TabCount2.{TabModelSelectorType}.{TabType}"
    units="count" expires_after="2027-01-03">
  <owner>davidjm@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <summary>
    (Android only) Records the number of {TabType} Tabs loaded on startup per
    {TabModelSelectorType}.
  </summary>
  <token key="TabModelSelectorType" variants="TabModelSelectorType"/>
  <token key="TabType">
    <variant name="Incognito" summary="Incognito"/>
    <variant name="Regular" summary="Regular"/>
  </token>
</histogram>

<histogram name="Tabs.Startup.UniqueUrlCount.{TabModelSelectorType}"
    units="count" expires_after="2027-03-15">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records the number of duplicate tab URLs found at startup per
    {TabModelSelectorType}.
  </summary>
  <token key="TabModelSelectorType" variants="TabModelSelectorType"/>
</histogram>

<histogram name="Tabs.TabArchived.FoundDuplicateInRegularModel" units="count"
    expires_after="2027-03-09">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records how many tabs were found in the regular model which
    have already been archived. Recorded on each declutter pass.
  </summary>
</histogram>

<histogram name="Tabs.TabArchived.TabCount" units="tabs"
    expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records how many tabs were archived from the normal tab model
    selector during an archive pass.
  </summary>
</histogram>

<histogram name="Tabs.TabArchiveEligibilityCheck.AfterNDays" units="days"
    expires_after="2026-11-22">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records how old, in days, a tab is when it's checked for
    archive eligibility. Recorded at startup when the archived tab model is
    loaded and at regular intervals after that (default interval is 7d, but is
    configurable via finch.). Only recorded if tab declutter is enabled.
  </summary>
</histogram>

<histogram name="Tabs.TabAutoDeleted.AfterNDays" units="days"
    expires_after="2027-03-15">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records how old, in days, a tab is when it's autodeleted. Age
    is calculated based on when a tab was archived.
  </summary>
</histogram>

<histogram name="Tabs.TabAutoDeleteEligibilityCheck.AfterNDays" units="days"
    expires_after="2027-01-24">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    (Android only) Records how old, in days, a tab is when it's checked for
    auto-deletion eligibility. Recorded at startup when the archived tab model
    is loaded and at regular intervals after that (default interval is 7d, but
    is configurable via finch.). Only recorded if tab declutter is enabled.
  </summary>
</histogram>

<histogram name="Tabs.TabCount.SplitTabs" units="tabs"
    expires_after="2027-01-24">
  <owner>agale@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Counts the number of split tabs across each window, reported every 5
    minutes. Desktop only.
  </summary>
</histogram>

<histogram name="Tabs.TabCount.{TabStripMode}" units="tabs"
    expires_after="2027-01-31">
  <owner>agale@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Counts the number of tabs across each window, reported every 5 minutes.
    Desktop only.
  </summary>
  <token key="TabStripMode" variants="TabStripMode"/>
</histogram>

<histogram name="Tabs.TabCountActiveWindow" units="tabs" expires_after="never">
<!-- expires-never: usage drives tab optimization and analysis. -->

  <owner>markchang@google.com</owner>
  <summary>
    The number of tabs open in the active window when a load completes.

    Prior to M-121, this was also recorded when a navigation in a non-tab
    WebContents (e.g. DevTools, extension popups) happens. Such a navigation
    would not have affected the recorded value. It would only duplicate a
    previous recording.
  </summary>
</histogram>

<histogram name="Tabs.TabCountInGroupPerLoad" units="tabs"
    expires_after="2027-09-03">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The number of tabs in the current active group when a load completes.
    Records 0 if the active tab is not in a group.

    Prior to M-121, this was also recorded when a navigation in a non-tab
    WebContents (e.g. DevTools, extension popups) happens. Such a navigation
    would not have affected the recorded value. It would only duplicate a
    previous recording.
  </summary>
</histogram>

<histogram name="Tabs.TabCountPerLoad" units="tabs" expires_after="2027-01-17">
  <owner>mpearson@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <owner>sbirch@google.com</owner>
  <summary>
    The number of tabs open in all browsers (counting app-mode windows) when a
    load completes.

    This is basically the average number of tabs over time.

    Prior to M-121, this was also recorded when a navigation in a non-tab
    WebContents (e.g. DevTools, extension popups) happens. Such a navigation
    would not have affected the recorded value. It would only duplicate a
    previous recording.
  </summary>
</histogram>

<histogram name="Tabs.TabCountPerWindow" units="tabs"
    expires_after="2027-01-17">
  <owner>mpearson@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The number of tabs open per window (counting app-mode windows) when a load
    completes.

    This value will be recorded multiple times per load if more than one window
    is open.

    Prior to M-121, this was also recorded when a navigation in a non-tab
    WebContents (e.g. DevTools, extension popups) happens. Such a navigation
    would not have affected the recorded value. It would only duplicate a
    previous recording.
  </summary>
</histogram>

<histogram name="Tabs.TabCount{BatteryState}" units="tabs"
    expires_after="never">
<!-- expires-never: https://crbug.com/966137 -->

  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Counts the number of tabs across all windows, reported every 5 minutes.
    Desktop only.
  </summary>
  <token key="BatteryState" variants="BatteryState"/>
</histogram>

<histogram name="Tabs.TabPersistentStore.ActiveTabLoaded.{ActiveTabType}"
    units="ms" expires_after="2027-08-23">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records the time elapsed since TabModelOrchestrator initialization until the
    active {ActiveTabType} tab is loaded. Recorded upon loading the active tab.
    Android-only.
  </summary>
  <token key="ActiveTabType">
    <variant name="Incognito" summary="Incognito"/>
    <variant name="Regular" summary="Regular"/>
  </token>
</histogram>

<histogram name="Tabs.TabPersistentStore.AuthoritativeStoreType"
    enum="PersistentStoreType" expires_after="2027-08-23">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records the type of authoritative TabPersistentStore. Recorded upon creation
    of the authoritative TabPersistentStore. Android-only.
  </summary>
</histogram>

<histogram name="Tabs.TabPersistentStore.Initialized" units="ms"
    expires_after="2027-08-23">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records the time elapsed since TabModelOrchestrator initialization until the
    TabPersistentStore is initialized (metadata read). Recorded when the
    TabPersistentStore is initialized. Android-only.
  </summary>
</histogram>

<histogram name="Tabs.TabPersistentStore.ShadowStoreType"
    enum="PersistentStoreType" expires_after="2026-10-28">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records the type of a shadow store. Recorded upon creation of a shadow
    store. Android-only.
  </summary>
</histogram>

<histogram name="Tabs.TabPersistentStore.StateLoaded" units="ms"
    expires_after="2027-08-23">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records the time elapsed since TabModelOrchestrator initialization until the
    tab state is fully loaded. Recorded upon fully loading the tab state.
    Android-only.
  </summary>
</histogram>

<histogram name="Tabs.TabRestoreMethod" enum="TabRestoreMethod"
    expires_after="2027-02-07">
  <owner>davidjm@chromium.org</owner>
  <owner>dtrainor@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <summary>
    CriticalPersistedTabData is a schema based Tab restoration system which
    persists Tab metadata such as web contents and time last accessed across
    restarts. CriticalPersistedTabData will replace legacy hand-written
    TabState.

    This metric records how many Tabs are restored using
    CriticalPersistedTabData, TabState, are re-created, skipped or failed to be
    restored. As we migrate from TabState to CriticalPersistedTabData it is
    imperative we can compare the success rate of each system vs. how many Tabs
    are re-created or failed to be restored. This metric is emitted once for
    each Tab restoration on startup.
  </summary>
</histogram>

<histogram name="Tabs.TabRestoreUrlMatch" enum="Boolean"
    expires_after="2027-03-27">
  <owner>ckitagawa@chromium.org</owner>
  <owner>dtrainor@chromium.org</owner>
  <summary>
    Records whether the URL in the tab state file and the tab state metadata
    list match when each tab is restored. Android-only.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.BubbleWidgetInitializationTime" units="ms"
    expires_after="2026-09-09">
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI is shown in a bubble anchored to an
    element of the UI in the browser window.

    This metric measures the time it takes for the Tab Search bubble widget to
    be initialized.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.ButtonPressedToNextFramePresented" units="ms"
    expires_after="2026-09-09">
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI is shown in a bubble anchored to an
    element of the UI in the browser window.

    This metric is intended to measure the time from when the Tab Search button
    is pressed to the next visual update of the bubble widget (which may or may
    not already be visible). It is recorded on successful presentation of the
    bubble's next compositor frame.

    We also have metrics measuring time for widget construction. Please refer to
    Tabs.TabSearch.WindowTimeToShowUncachedWebView and
    Tabs.TabSearch.WindowTimeToShowCachedWebView.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.CloseAction2" enum="TabSearchCloseAction"
    expires_after="2027-02-06">
  <owner>agale@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Tracks the action taken by the user within the Tab Search dialog bubble.
    Recorded when the Tab Search bubble UI is closed.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.IsPinned" enum="Boolean"
    expires_after="2027-01-17">
  <owner>estalin@chromium.org</owner>
  <owner>emshack@chromium.org</owner>
  <summary>
    This logs whether the tab search button is pinned to the tab strip. This
    histogram recorded daily for each profile.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.Mojo.SwitchToTab" units="ms"
    expires_after="2027-01-17">
  <owner>kerenzhu@chromium.org</owner>
  <owner>romanarora@chromium.org</owner>
  <owner>yuhengh@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    The time taken to switch tab. This is measured as the time from when the
    user clicks a tab in Tab Search to when the browser finishes switching tab.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.Mojo.SwitchToTab.IsOverlap" enum="Boolean"
    expires_after="2026-12-27">
  <owner>kerenzhu@chromium.org</owner>
  <owner>romanarora@chromium.org</owner>
  <owner>yuhengh@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Records whether there's a pending Tabs.TabSearch.Mojo.SwitchToTab
    measurement when a new measurement is requested.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.Mojo.TabUpdated" units="ms"
    expires_after="2026-09-09">
  <owner>kerenzhu@chromium.org</owner>
  <owner>romanarora@chromium.org</owner>
  <owner>yuhengh@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    The time taken for Tab Search to update its tab list when the browser's tab
    strip model changes. This is measured as the time from when the browser
    emits a notification to when the WebUI updates its state.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.Mojo.TabUpdated.IsOverlap" enum="Boolean"
    expires_after="2026-09-09">
  <owner>kerenzhu@chromium.org</owner>
  <owner>romanarora@chromium.org</owner>
  <owner>yuhengh@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Records whether there's a pending Tabs.TabSearch.Mojo.TabUpdated measurement
    when a new measurement is requested.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.NumTabsClosedPerInstance" units="tabs"
    expires_after="2026-09-09">
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Tab Search is a feature that allows users to better search their browsers
    for their desired tabs and close any currently open tabs. This records the
    number of tabs closed from a single instance of the UI (the number of tabs
    closed from within Tab Search in the time between when the UI is open and
    when it is closed).
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.NumTabsOnOpen" units="tabs"
    expires_after="2027-01-17">
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Tab Search is a feature that allows users to better search their browsers
    for their desired tabs. It can be opened and closed. This records the number
    of tabs there are in the payload Tab Search is sent when it is first opened.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.NumWindowsOnOpen" units="windows"
    expires_after="2027-02-14">
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Tab Search is a feature that allows users to better search their browsers
    for their desired tabs. It can be opened and closed. This records the number
    of windows there are in the payload Tab Search is sent when it is first
    opened.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.OpenAction" enum="TabSearchOpenActions"
    expires_after="2027-01-17">
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI is shown in a bubble anchored to an
    element of the UI in the browser window.

    The bubble can be invoked via a number of different means including mouse
    click, keyboard navigation, keyboard shortcut or touch gesture. This metric
    tracks the kind of action the user took to invoke the Tab Search bubble UI.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.PageHandlerConstructionDelay" units="ms"
    expires_after="2026-09-09">
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <owner>yuhengh@chromium.org</owner>
  <owner>romanarora@chromium.org</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI is shown in a bubble anchored to an
    element of the UI in the browser window.

    When the WebUIController is first created it waits for the WebUI code in the
    renderer process to request the creation of the TabSearchPageHandler. This
    metric tracks the time between when the WebUIController was constructed to
    when the TabSearchPageHandler begins construction. This metric is emitted
    right before the TabSearchPageHandler's constructor is called.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.RecentlyClosedSectionToggleAction"
    enum="TabSearchRecentlyClosedToggleActions" expires_after="2026-09-09">
  <owner>romanarora@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>yuhengh@chromium.org</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI displays both open and recently closed
    tabs under different list sections. The recently closed section can be
    expanded or collapsed by the user by clicking a button.

    This metric tracks the recently closed section being expandeded or collapsed
    via the toggle button.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.RecentlyClosedSectionToggleStateOnOpen"
    enum="TabSearchRecentlyClosedToggleActions" expires_after="2026-09-09">
  <owner>romanarora@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>yuhengh@chromium.org</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI displays both open and recently closed
    tabs under different list sections. The recently closed section can be
    expanded or collapsed by the user by clicking a button.

    This metric tracks if the recently closed section is in an expanded or
    collapsed state at the time of opening the Tab Search dialog.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.TimeToClose" units="ms"
    expires_after="2027-01-10">
  <owner>emshack@chromium.org</owner>
  <owner>shibalik@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI is shown in a bubble anchored to an
    element of the UI in the browser window.

    This metric measures the length of time the Tab Search bubble widget was
    open, recorded on close.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.TimeToShow.{WarmUpLevel}" units="ms"
    expires_after="2027-02-07">
  <owner>kerenzhu@chromium.org</owner>
  <owner>dayeung@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    This tracks the time between when the Tab Search WebUI bubble widget is
    first created and when it is first shown to users as reported by the bubble
    widget's ui compositor. This metric is only logged for the specific warm-up
    level. The warm-up level indicates the readiness of the browser when it was
    about to show this WebUI.

    This metric is emitted when the bubble window is first revealed.
  </summary>
  <token key="WarmUpLevel">
    <variant name="DedicatedRenderer"
        summary="Uses a renderer that already hosts other top chrome WebUIs"/>
    <variant name="NoRenderer" summary="No renderer can be used"/>
    <variant name="PreloadedWebContents"
        summary="Uses a preloaded WebContents."/>
    <variant name="RedirectedWebContents"
        summary="Uses a redirected preloaded WebContents that was on a
                 different WebUI."/>
    <variant name="ReshowingWebContents"
        summary="Reshowing a WebContents that has already navigated to this
                 WebUI"/>
    <variant name="SpareRenderer" summary="Uses a spare renderer"/>
  </token>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.Action" enum="TabSearchWebUIAction"
    expires_after="2027-06-24">
  <owner>agale@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records actions performed by the user within the Tab Search WebUI. Emitted
    when a user switches to a tab, closes a tab, or opens a recently closed
    tab/group, from either the filtered (searched) or unfiltered list.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.IndexOf{Action}In{State}List"
    units="tabs" expires_after="2027-02-07">
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <owner>yuhengh@chromium.org</owner>
  <owner>romanarora@chromium.org</owner>
  <summary>
    Tab Search is a feature that allows users to better search their browsers
    for their desired tabs and close any currently open tabs.

    This records the index at which a {Action} has been performed on a tab in
    Tab Search's tab list in a {State} state.
  </summary>
  <token key="Action">
    <variant name="CloseTab"/>
    <variant name="OpenRecentlyClosedEntry"/>
    <variant name="SwitchTab"/>
  </token>
  <token key="State">
    <variant name="Filtered" summary="Filtered by user search query."/>
    <variant name="Unfiltered" summary="Unfiltered by user search query."/>
  </token>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.LoadCompletedTime" units="ms"
    expires_after="2027-01-17">
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    The amount of time between the RenderFrameHost StartProvisionalLoad event
    and the RenderFrameHost DocumentOnLoadCompleted event for the Tab Search
    WebUI page.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.LoadDocumentTime" units="ms"
    expires_after="2026-11-15">
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    The amount of time between the RenderFrameHost StartProvisionalLoad and
    DidFinishDocumentLoad events for the Tab Search WebUI page.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.RecentlyClosed{Item}OpenAction"
    enum="TabSearchRecentlyClosedItemOpenAction" expires_after="2027-01-03">
  <owner>tluk@chromium.org</owner>
  <owner>chrome-cros@chromium.org</owner>
  <summary>
    Tab Search is a feature that allows users to better search their browsers
    for their desired tabs or recently closed tabs and tab groups. This records
    whether the user used Tab Search to open a recently closed {Item} from a
    filtered search results list or the default unfiltered list.
  </summary>
  <token key="Item">
    <variant name="Group"/>
    <variant name="Tab"/>
  </token>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.SearchAlgorithmDuration" units="ms"
    expires_after="2026-12-27">
  <owner>yuhengh@chromium.org</owner>
  <owner>chrome-cros@chromium.org</owner>
  <summary>
    The time taken to run the search algorithm. The algorithm takes an
    unfiltered list of items and user search query as inputs, then generate a
    list of filtered items as output. Recorded after the measurement ends.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.SearchUpdateDuration" units="ms"
    expires_after="2027-01-03">
  <owner>behery@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The time taken to perform a search filter update on the Tab Search WebUI
    page. This measures the complete duration of the updateFilteredTabs_
    pipeline, starting when a tab state update or search query input change is
    received and ending after the media tabs, open tabs, and recently closed
    lists are filtered (i.e. the WebUI list component has completed rendering
    the results in the DOM). Recorded every time the search result list in the
    Tab Search bubble is updated (e.g., on keystroke, tab update/close, or
    section expand/collapse).
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.TabListDataReceived2" units="ms"
    expires_after="2026-09-09">
  <owner>kerenzhu@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <owner>yuhengh@chromium.org</owner>
  <owner>kerenzhu@chromium.org</owner>
  <summary>
    The time taken for the WebUI in the renderer to receive the full list of
    tabs for the current user profile. This is measured as the time from when
    the data was first requested by the WebUI to when the data was received by
    the WebUI.

    This metric is recorded by MetricsReporter.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.TabListDataReceived2.IsOverlap"
    enum="Boolean" expires_after="2026-12-27">
  <owner>kerenzhu@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <owner>yuhengh@chromium.org</owner>
  <owner>kerenzhu@chromium.org</owner>
  <summary>
    Records whether there's a pending Tabs.TabSearch.WebUI.TabListDataReceived2
    measurement when a new measurement is requested.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.TabSwitchAction"
    enum="TabSearchTabSwitchAction" expires_after="2027-01-17">
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Tab Search is a feature that allows users to better search their browsers
    for and switch to their desired tabs. This records whether the user used Tab
    Search to switch to a tab from a filtered search results list or the default
    unfiltered list.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.TimeTo{Action}In{State}List" units="ms"
    expires_after="2027-01-03">
  <owner>yuhengh@chromium.org</owner>
  <owner>chrome-cros@chromium.org</owner>
  <summary>
    The time taken between the tab search bubble is open and user switches to a
    tab or opens a recently closed tab, with or without search query. Recorded
    after the measurement ends.
  </summary>
  <token key="Action">
    <variant name="OpenRecentlyClosedEntry"/>
    <variant name="SwitchTab"/>
  </token>
  <token key="State">
    <variant name="Filtered" summary="Filtered by user search query."/>
    <variant name="Unfiltered" summary="Unfiltered by user search query."/>
  </token>
</histogram>

<histogram name="Tabs.TabSearch.WindowDisplayedDuration3" units="ms"
    expires_after="2026-09-09">
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Tab Search is a feature that allows users to better search their browsers
    for their desired tabs. It can be opened and closed. This records the amount
    of time between when a Tab Search bubble is opened and when it is closed. It
    does so by recording the difference in time between when the the hosting
    WebUIBubbleDialogView's Widget is first created and when the widget is
    destroyed.

    The Tab Search UI is a bubble anchored to an element within a browser window
    and is closed if the user switches to a tab, presses the escape key or
    performs an action to return focus to the hosting window. The Tab Search UI
    bubble will also close if the hosting browser window is closed or crashes.

    Users may leave the bubble open for long periods of time without directly
    interacting with the UI which could result in a long tail of displayed
    durations.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WindowTimeToShowCachedWebView2" units="ms"
    expires_after="2026-09-09">
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <owner>yuhengh@chromium.org</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI is shown in a bubble anchored to an
    element of the UI in the browser window.

    This tracks the time between when the Tab Search WebUI bubble widget is
    first created and when it is first shown to users as reported by the bubble
    widget's ui compositor. This metric is only logged if a previously cached
    WebView is used for the construction of the bubble widget. This metric is
    emitted when the bubble window is first revealed.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WindowTimeToShowUncachedWebView2" units="ms"
    expires_after="2027-01-17">
  <owner>tluk@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <owner>yuhengh@chromium.org</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI is shown in a bubble anchored to an
    element of the UI in the browser window.

    This tracks the time between when the Tab Search WebUI bubble widget is
    first created and when it is first shown to users as reported by the bubble
    widget's ui compositor. This metric is only logged if a new WebView was
    created for the construction of the bubble widget. This metric is emitted
    when the bubble window is first revealed.
  </summary>
</histogram>

<histogram name="Tabs.TabState.FlatBufferDeserializeResult"
    enum="TabStateFlatBufferDeserializeResult" expires_after="2026-12-28">
  <owner>davidjm@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    TabState (Tab metadata persistence system on Chrome for Android) is being
    migrated from a hand-written schema to a FlatBuffer based schema. This
    metric records the number of successful and unsuccessful FlatBuffer
    deserializations and where known what the reason for unsuccessful
    deserialization was.
  </summary>
</histogram>

<histogram name="Tabs.TabState.LoadTime" units="ms" expires_after="2026-09-06">
  <owner>yusufo@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <owner>dtrainor@chromium.org</owner>
  <owner>davidjm@chromium.org</owner>
  <summary>
    Time taken to load a TabState file in the event that it exists.
  </summary>
</histogram>

<histogram name="Tabs.TabState.MigrationStatus" enum="TabStateMigrationStatus"
    expires_after="2026-11-15">
  <owner>davidjm@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    TabState (Tab metadata persistence system on Chrome for Android) has being
    migrated from a hand-written schema to a FlatBuffer based schema. Part of
    the cleanup is removing legacy hand-written FlatBuffer files. This metric
    records if the TabState is fully migrated (FlatBuffer file exists and no
    legacy file exists), is partially migrated (both FlatBuffer file and legacy
    file exist) or is unmigrated (only legacy file exists). This metric is
    recorded when a Tab is restored.
  </summary>
</histogram>

<histogram name="Tabs.TabState.RestoreMethod" enum="TabStateRestoreMethod"
    expires_after="2026-09-13">
  <owner>davidjm@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    TabState (Tab metadata persistence system on Chrome for Android) is being
    migrated from a hand-written schema to a FlatBuffer based schema. This
    metric records the whether a TabState was restored using the FlatBuffer
    schema, legacy TabState schema (e.g. if a FlatBuffer file hasn't been saved
    for the Tab yet) or if TabState was failed to be restored (e.g. both the
    FlatBuffer and legacy TabState file are corrupt). Recorded once per TabState
    restoration (i.e. once per tab) at cold startup.
  </summary>
</histogram>

<histogram name="Tabs.TabState.SaveTime{Schema}" units="ms"
    expires_after="2026-08-30">
  <owner>nyquist@chromium.org</owner>
  <owner>dtrainor@chromium.org</owner>
  <owner>davidjm@chromium.org</owner>
  <summary>
    Time taken to save a TabState file in the event of a successful save.
    Includes differentiation between the original legacy based format and
    FlatBuffer based format.
  </summary>
  <token key="Schema">
    <variant name="" summary="Original metric, kept for continuity."/>
    <variant name=".FlatBuffer" summary="Using FlatBuffer based format."/>
    <variant name=".Legacy" summary="Using legacy Pickle based format."/>
  </token>
</histogram>

<histogram name="Tabs.TabStateCleanupAbortedByArchive" enum="Boolean"
    expires_after="2027-06-11">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records when a tab is marked as not ready for cleanup because it could
    possibly be an archived tab. This enum tracks the case specifically for tab
    state cleanup.
  </summary>
</histogram>

<histogram name="Tabs.TabStateStore.FilteredTabCount" units="tabs"
    expires_after="2026-12-27">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records the number of tabs we purposefully did not restore during
    the restoration process. Recorded when the restoration process in
    TabRestorer has concluded.
  </summary>
</histogram>

<histogram name="Tabs.TabStateStore.GroupCountDelta.Negative" units="groups"
    expires_after="2027-01-03">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records the decrease in stored tab group count in TabStateStore
    when shadow store catch-up completes. Recorded when both models have
    finished loading.
  </summary>
</histogram>

<histogram name="Tabs.TabStateStore.GroupCountDelta.Positive" units="groups"
    expires_after="2027-01-03">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records the increase in stored tab group count in TabStateStore
    when shadow store catch-up completes. Recorded when both models have
    finished loading.
  </summary>
</histogram>

<histogram name="Tabs.TabStateStore.InternalTabCountDelta.CounterHigher"
    units="tabs" expires_after="2026-12-27">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Recorded when the number of tabs restored from the internal tab
    count tracker is higher than the number of tabs loaded from the database.
    The value recorded is the difference.
  </summary>
</histogram>

<histogram name="Tabs.TabStateStore.InternalTabCountDelta.DatabaseHigher"
    units="tabs" expires_after="2026-12-27">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Recorded when the number of tabs loaded from the database is
    higher than the number of tabs restored from the internal tab count tracker.
    The value recorded is the difference.
  </summary>
</histogram>

<histogram name="Tabs.TabStateStore.LoadAllTabsDuration" units="ms"
    expires_after="2026-12-27">
  <owner>skym@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records the duration of reading all tab state information from
    disk via the TabStateStorageService and creating Java representations of
    them. This does not include creating full tabs. Recorded when all tab states
    have been loaded from the service.
  </summary>
</histogram>

<histogram name="Tabs.TabStateStore.LoadWarning" enum="StorageLoadWarningCode"
    expires_after="2026-12-27">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records warnings that occur during TabStateStore tab state data
    loads. This is logged when there is an error during data loading, and
    contains context about the error. Recorded when loading the tab state data
    from the service.
  </summary>
</histogram>

<histogram name="Tabs.TabStateStore.LoadWarningCount" units="count"
    expires_after="2026-12-27">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records the number of warnings that occur when loading
    TabStateStore tab state data. Recorded after tab state data has been loaded.
  </summary>
</histogram>

<histogram name="Tabs.TabStateStore.PinnedTabCountDelta.Negative" units="tabs"
    expires_after="2027-01-03">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records the decrease in stored pinned tab count in TabStateStore
    when shadow store catch-up completes. Recorded when both models have
    finished loading.
  </summary>
</histogram>

<histogram name="Tabs.TabStateStore.PinnedTabCountDelta.Positive" units="tabs"
    expires_after="2027-01-03">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records the increase in stored pinned tab count in TabStateStore
    when shadow store catch-up completes. Recorded when both models have
    finished loading.
  </summary>
</histogram>

<histogram name="Tabs.TabStateStore.RegularFallbackTabCount" units="tabs"
    expires_after="2026-12-27">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records the number of tabs we restored via the Tab List Metadata
    File's fallback URL during the restoration process. Recorded when the
    restoration process in TabRestorer has concluded.
  </summary>
</histogram>

<histogram name="Tabs.TabStateStore.ShadowStoreCaughtUp" enum="Boolean"
    expires_after="2026-10-28">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records when the shadow store has caught up to the authoritative
    store. This is a prerequisite for the shadow store to become the
    authoritative store during the migration process.
  </summary>
</histogram>

<histogram
    name="Tabs.TabStateStore.TabCountDelta.AuthoritativeHigher.{TabModelOrchestratorType}"
    units="tabs" expires_after="2027-01-03">
  <owner>skym@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records the delta in tab count between the authoritative and
    shadow tab models when the authoritative model has more tabs. Recorded when
    both models have finished loading. This is recorded for the
    {TabModelOrchestratorType} tab model orchestrator.
  </summary>
  <token key="TabModelOrchestratorType" variants="TabModelOrchestratorType"/>
</histogram>

<histogram
    name="Tabs.TabStateStore.TabCountDelta.Equal.{TabModelOrchestratorType}"
    units="Boolean" expires_after="2027-01-03">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records the tab count when the authoritative and shadow tab models
    have the same number of tabs. Recorded when both models have finished
    loading. This is recorded for the {TabModelOrchestratorType} tab model
    orchestrator.
  </summary>
  <token key="TabModelOrchestratorType" variants="TabModelOrchestratorType"/>
</histogram>

<histogram name="Tabs.TabStateStore.TabCountDelta.Negative" units="tabs"
    expires_after="2027-01-03">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records the decrease in stored total tab count in TabStateStore
    when shadow store catch-up completes. Recorded when both models have
    finished loading.
  </summary>
</histogram>

<histogram name="Tabs.TabStateStore.TabCountDelta.Positive" units="tabs"
    expires_after="2027-01-03">
  <owner>mfiaz@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records the increase in stored total tab count in TabStateStore
    when shadow store catch-up completes. Recorded when both models have
    finished loading.
  </summary>
</histogram>

<histogram
    name="Tabs.TabStateStore.TabCountDelta.ShadowHigher.{TabModelOrchestratorType}"
    units="tabs" expires_after="2027-01-03">
  <owner>skym@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records the delta in tab count between the authoritative and
    shadow tab models when the shadow model has more tabs. Recorded when both
    models have finished loading. This is recorded for the
    {TabModelOrchestratorType} tab model orchestrator.
  </summary>
  <token key="TabModelOrchestratorType" variants="TabModelOrchestratorType"/>
</histogram>

<histogram
    name="Tabs.TabStateStore.TimeDeltaOnMismatch.AuthoritativeNewer.{TabModelOrchestratorType}"
    units="ms" expires_after="2027-01-03">
  <owner>skym@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records the time delta when a URL mismatch occurs between the
    authoritative and shadow tab models, and the authoritative tab is newer.
    Recorded when both models have finished loading and a URL mismatch is
    detected. This is recorded for the {TabModelOrchestratorType} tab model
    orchestrator.
  </summary>
  <token key="TabModelOrchestratorType" variants="TabModelOrchestratorType"/>
</histogram>

<histogram
    name="Tabs.TabStateStore.TimeDeltaOnMismatch.ShadowNewer.{TabModelOrchestratorType}"
    units="ms" expires_after="2027-01-03">
  <owner>skym@chromium.org</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    [Android] Records the time delta when a URL mismatch occurs between the
    authoritative and shadow tab models, and the shadow tab is newer. Recorded
    when both models have finished loading and a URL mismatch is detected. This
    is recorded for the {TabModelOrchestratorType} tab model orchestrator.
  </summary>
  <token key="TabModelOrchestratorType" variants="TabModelOrchestratorType"/>
</histogram>

<histogram name="Tabs.TabThumbnailCleanupAbortedByArchive" enum="Boolean"
    expires_after="2027-06-11">
  <owner>wylieb@google.com</owner>
  <owner>clank-tab-dev@google.com</owner>
  <summary>
    Records when a tab is marked as not ready for cleanup because it could
    possibly be an archived tab. This enum tracks the case specifically for tab
    thumbnail cleanup.
  </summary>
</histogram>

<histogram name="Tabs.TimeSinceCreationAtStartup" enum="IOSAllOpenTabsAge"
    expires_after="2026-11-01">
  <owner>huitingyu@google.com</owner>
  <owner>bling-pandamonium@google.com</owner>
  <summary>
    [iOS] The age of tabs opened at cold launch. The age of a tab is the time
    elapsed since its creation.
  </summary>
</histogram>

<histogram name="Tabs.UnusedCountAtStartup2" units="tabs"
    expires_after="2026-12-12">
  <owner>huitingyu@google.com</owner>
  <owner>bling-pandamonium@google.com</owner>
  <summary>
    [iOS] The number of old/unused tabs opened at cold launch. Inactive tab is a
    tab that has been not interacted with for more than 7 days.
  </summary>
</histogram>

<histogram name="Tabs.VerticalTabs.CollapseState"
    enum="VerticalTabStripCollapseState" expires_after="2027-03-01">
  <owner>agale@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Logs whether the vertical tab strip is collapsed or expanded. This is
    recorded every 5 minutes (the heartbeat interval) for each window that has
    the vertical tab strip enabled. Desktop only.
  </summary>
</histogram>

<histogram name="Tabs.VerticalTabs.EnabledAtSessionStart" enum="BooleanEnabled"
    expires_after="2027-03-01">
  <owner>charlesmeng@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Whether vertical tabs is enabled for a profile. Logged whenever a new user
    education session starts for each profile in the browser.
  </summary>
</histogram>

<histogram name="Tabs.VerticalTabs.ExpandOnHover.ShowDuration" units="ms"
    expires_after="2027-03-01">
  <owner>agale@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records how long the Vertical Tabstrip was expanded for (capped at 1 hour)
    starting when the expand on hover is triggered. Note this might be different
    than when the Tabstrip is fully expanded due to animation delays. Recorded
    when the request is made to collapse the panel.
  </summary>
</histogram>

<histogram name="Tabs.VerticalTabs.State" enum="VerticalTabsState"
    expires_after="2027-03-01">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The state of vertical tabs across all profiles. Logged by the metric
    provider for UMA filtering.
  </summary>
</histogram>

<histogram name="Tabs.VerticalTabs.TabStripSize" units="DIPs"
    expires_after="2027-03-01">
  <owner>charlesmeng@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    When the user finishes dragging to resize the vertical tabstrip, this metric
    is logged to record the requested size of the tabstrip by the user.
  </summary>
</histogram>

<histogram name="Tabs.WindowCount{BatteryState}" units="windows"
    expires_after="never">
<!-- expires-never: https://crbug.com/966137 -->

  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Counts the number of Chrome windows, reported every 5 minutes. Desktop only.
  </summary>
  <token key="BatteryState" variants="BatteryState"/>
</histogram>

<histogram name="Tabs.WindowWidth" units="DIPs" expires_after="2027-01-17">
  <owner>collinbaker@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The width of each open browser window, in DIPs, reported every 5 minutes.
    Desktop only.
  </summary>
</histogram>

<histogram name="Tabs.WindowWidth2" units="DIPs" expires_after="2026-11-12">
  <owner>agale@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The width of each open browser window, in DIPs, reported once per UMA log.
    Desktop only.
  </summary>
</histogram>

<histogram name="Tabs.{DuplicateType}.{MetricType}.{WindowType}" units="tabs"
    expires_after="2027-02-07">
  <owner>emshack@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Every 5 minutes, records the {MetricType} of duplicate tabs in {WindowType}.
    If there are 3 tabs with matching URLs, 2 count as duplicates. URL match is
    determined by {DuplicateType}. Desktop only.
  </summary>
  <token key="DuplicateType">
    <variant name="Duplicates" summary="exact string comparison"/>
    <variant name="DuplicatesExcludingFragments"
        summary="string comparison after excluding fragments"/>
  </token>
  <token key="WindowType">
    <variant name="AllProfileWindows"
        summary="each open profile, across all windows for that profile."/>
    <variant name="SingleWindow" summary="each browser window"/>
  </token>
  <token key="MetricType">
    <variant name="Count" summary="count"/>
    <variant name="Percentage" summary="percentage"/>
  </token>
</histogram>

<histogram name="Tabs.{TabActiveState}TabWidth" units="px"
    expires_after="2027-06-01">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    [Desktop] The size in pixels of the {TabActiveState} tab logged when a tab
    is added. Used to collect size data for scrolling tabs.
  </summary>
  <token key="TabActiveState" variants="TabActiveState"/>
</histogram>

<histogram name="TabStrip.Horizontal.IsScrollable" enum="Boolean"
    expires_after="2027-08-21">
  <owner>dominicaustria@google.com</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Recorded periodically every 5 minutes for the horizontal tab strip,
    indicating whether the unpinned tabs container is overflowing and
    scrollable.
  </summary>
</histogram>

<histogram name="TabStrip.Horizontal.ScrollSource"
    enum="HorizontalTabStripScrollSource" expires_after="2027-08-21">
  <owner>dominicaustria@google.com</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Recorded when the unpinned horizontal tab strip is scrolled, indicating
    whether the scroll was initiated by the scroll buttons or via touchpad /
    mouse wheel interaction.
  </summary>
</histogram>

<histogram name="TabStrip.SplitView.Created" enum="SplitTabCreatedSource"
    expires_after="2027-01-31">
  <owner>agale@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    When a split tab is created, records the method through which it was
    created.
  </summary>
</histogram>

<histogram name="TabStrip.SplitView.OrientationOnCreation"
    enum="SplitTabLayout" expires_after="2026-12-27">
  <owner>kunaldaftari@google.com</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Recorded when a split view is created, capturing the initial layout
    orientation (stacked or side-by-side).
  </summary>
</histogram>

<histogram name="TabStrip.SplitView.{Source}.OrientationOnCreation"
    enum="SplitTabLayout" expires_after="2026-12-27">
  <owner>agale@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Recorded when a split view is created via a specific source, capturing the
    initial layout orientation (stacked or side-by-side).
  </summary>
  <token key="Source" variants="SplitTabCreatedSource"/>
</histogram>

<histogram name="TabStrip.Tab.ContextMenuReloadCount" units="tabs"
    expires_after="2026-12-22">
  <owner>agale@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    When the user reloads a tab using the tab context menu, records the number
    of tabs being reloaded.
  </summary>
</histogram>

<histogram name="TabStrip.Tab.HotkeyClosedCount" units="tabs"
    expires_after="2027-01-03">
  <owner>atharvmaan@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    When the user closes tab(s) using hotkey, records the number of tabs being
    closed.
  </summary>
</histogram>

<histogram name="TabStrip.Tab.KeyboardTabSwitchMode"
    enum="KeyboardTabSwitchMode" expires_after="2027-04-28">
  <owner>markchang@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The keyboard tab switch mode (Standard vs MRU) for each profile. This is
    recorded once per day for each loaded profile that has at least one tab
    open. Recorded only for non-Android desktop clients.
  </summary>
</histogram>

<histogram name="TabStrip.Tab.ReloadCount" units="tabs"
    expires_after="2027-02-07">
  <owner>agale@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    When the user reloads a tab using the toolbar button, hotkey, or contents
    context menu, records the number of tabs being reloaded.
  </summary>
</histogram>

<histogram name="TabStrip.Tab.{Framework}.ActivationAction"
    enum="TabActivationTypes" expires_after="2027-02-07">
  <owner>yuhengh@chromium.org</owner>
  <owner>tluk@chromium.org</owner>
  <owner>romanarora@chromium.org</owner>
  <summary>
    Tab activation triggered by click or touch on a tab. This is used to measure
    tab activation count of tab strip vs WebUI tab strip.
  </summary>
  <token key="Framework">
    <variant name="Views"/>
    <variant name="WebUI"/>
  </token>
</histogram>

<histogram name="TabStrip.TabCountOnPageLoad" units="tabs"
    expires_after="2027-01-17">
  <owner>yusufo@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <summary>
    This histogram records the number of tabs within the group during page load.

    If the loading happens in a tab that does not belong to a group, we log 0.
    Else, we log a positive number &gt;= 2.
  </summary>
</histogram>

<histogram name="TabStrip.TimeToCreateNewTabFromPress" units="ms"
    expires_after="2027-01-17">
  <owner>robliao@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The amount of time from receiving a new tab button pressed to creating the
    elements necessary to represent a new tab.
  </summary>
</histogram>

<histogram name="TabStrip.TimeToSwitch" units="ms" expires_after="2027-02-07">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The amount of time from cursor entering the tabstrip to first click on a tab
    to switch.

    This will exclude some kinds of switching (hotkeys, between windows) where
    it would be difficult to define a start time. Entering the tabstrip is an
    approximation which will vary between users, but should still be useful for
    A/B comparison.
  </summary>
</histogram>

<histogram name="TabStrip.Vertical.TimeToSwitch" units="ms"
    expires_after="2027-02-07">
  <owner>agale@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The amount of time from cursor entering the vertical tabstrip to first click
    on a tab to switch. This is only logged when the user is in vertical
    tabstrip mode.

    This will exclude some kinds of switching (hotkeys, between windows) where
    it would be difficult to define a start time. Entering the tabstrip is an
    approximation which will vary between users, but should still be useful for
    A/B comparison.
  </summary>
</histogram>

<histogram name="TabStrip.Vertical.{TabStripAnimation}.AnimationFPS"
    units="fps" expires_after="2027-02-07">
  <owner>estalin@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records the frames per second for the tab strip animation. This is recorded
    after each tab strip animation is completed when the tab strip expands or
    collapses.
  </summary>
  <token key="TabStripAnimation" variants="TabStripAnimation"/>
</histogram>

<histogram
    name="TabStrip.Vertical.{TabStripAnimation}.TimeOfLongestAnimationStep"
    units="ms" expires_after="2026-10-04">
  <owner>estalin@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records the length of the longest frame in a tab strip animation. This is
    recorded after each tab strip animation is completed when the tab strip
    expands or collapses.
  </summary>
  <token key="TabStripAnimation" variants="TabStripAnimation"/>
</histogram>

<histogram name="TabStrip.{Mode}.EnteredMode" enum="VerticalTabStripEntryPoint"
    expires_after="2027-02-20">
  <owner>agale@chromium.org</owner>
  <owner>chrome-vertical-tabs-team@google.com</owner>
  <summary>
    Recorded when the user switches to {Mode} tab strip mode. The value
    indicates the entry point from which the user initiated the switch.
  </summary>
  <token key="Mode">
    <variant name="Horizontal"/>
    <variant name="Vertical"/>
  </token>
</histogram>

<histogram name="TabStrip.{TabStripMode}.TabDragDestination"
    enum="TabDragDestination" expires_after="2027-01-31">
  <owner>kunaldaftari@google.com</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The destination of a tab drag operation for either vertical or horizontal
    tabs.

    It will either be in the same window, a new window, an existing distinct
    window, or abandoned.

    Currently, users cannot drag between tab strips of different types. If that
    becomes possible, then this metric needs to be updated accordingly to
    distinguish between those behaviors.
  </summary>
  <token key="TabStripMode" variants="TabStripMode"/>
</histogram>

<histogram name="TabStrip.{TabStripMode}.TabDragDuration" units="ms"
    expires_after="2027-01-31">
  <owner>kunaldaftari@google.com</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The duration of a completed tab drag operation for either vertical or
    horizontal tabs.

    Currently, users cannot drag between tab strips of different types. If that
    becomes possible, then this metric needs to be updated accordingly to
    distinguish between those behaviors.
  </summary>
  <token key="TabStripMode" variants="TabStripMode"/>
</histogram>

<histogram name="TabStrip.{TabStripMode}.TabDragPinnedness"
    enum="TabDragPinnedness" expires_after="2027-02-14">
  <owner>agale@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The pinnedness of dragged tabs in a successful tab drag operation.

    It tracks whether the dragged tabs are all unpinned, all pinned, or mixed.
  </summary>
  <token key="TabStripMode" variants="TabStripMode"/>
</histogram>

</histograms>

</histogram-configuration>
