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

<histogram base="true" name="CustomTab.SessionDuration" units="ms"
    expires_after="2020-10-18">
  <owner>ranj@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
<!-- Name completed by histogram_suffixes name="CustomTabOpenSource" -->

  <summary>
    Records the time duration in CustomTab Activity from onStart/onResume to
    onStop/onPause, if that activity is opened by Webapp/WebApk/Trusted Web
    Activity.
  </summary>
</histogram>

<histogram name="CustomTabs.AutoclosedSessionDuration" units="ms"
    expires_after="2023-08-20">
  <owner>jinsukkim@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>cct-team@google.com</owner>
  <summary>
    Android: Duration in milliseconds of a custom tab session (between onResume
    and onPause). This is logged for the sessions closed automatically without
    user intervention. Sessions closed by user input (back press/close button)
    will not be logged.

    Note that there can be user inputs that go undetected by the logic. So the
    histogram can contain false positives i.e. session closed by user but
    regarded as auto-closed.
  </summary>
</histogram>

<histogram name="CustomTabs.Branding.AppIdType"
    enum="CustomTabsBrandingAppIdType" expires_after="2024-08-24">
  <owner>jinsukkim@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    For every CCT launch, Chrome will start an async task in the background
    checking the last time branding is shown for the client app. Each client app
    is identified with a unique string. It was initially (and preferably) its
    package name but is extended to be of any text string from the intent's
    referrer if the package name is unavailable. An empty string is regarded as
    invalid id.

    Record the type of the id for a given CCT when the async task is finished.
    Record for Android CCT only.
  </summary>
</histogram>

<histogram name="CustomTabs.Branding.BrandingCheckCanceled"
    enum="BooleanCanceled" expires_after="2023-12-31">
  <owner>wenyufu@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    For every CCT launch, Chrome will start an async task in the background
    checking the last time branding is shown for the client app. Record whether
    such branding check is canceled due to timeout when it is finished. Record
    for Android CCT only.
  </summary>
</histogram>

<histogram name="CustomTabs.Branding.BrandingCheckDuration" units="ms"
    expires_after="2024-02-25">
  <owner>wenyufu@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    For every CCT launch, Chrome will start an async task in the background
    checking the last time branding is shown for the client app. Record the
    duration of this background async task when it completes, regardless whether
    it is canceled. Record for Android CCT only.
  </summary>
</histogram>

<histogram name="CustomTabs.Branding.BrandingDecision"
    enum="CustomTabsBrandingDecision" expires_after="2024-02-25">
  <owner>wenyufu@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    For every CCT launch, Chrome will start an async task in the background
    checking the last time branding is shown for the client app. When such task
    completed, a branding decision will be made based on the last time branding
    was shown, and the task completion time. (e.g. show a &quot;chrome logo +
    text&quot; combination on the toolbar). See go/clank-cct-branding-dd for
    detail.

    Record what branding decision will be used for the current CCT session when
    the branding check is finished or canceled. Record for Android CCT only.
  </summary>
</histogram>

<histogram name="CustomTabs.Branding.IsPackageNameValid" enum="BooleanValid"
    expires_after="2023-12-31">
  <owner>wenyufu@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    For every CCT launch, Chrome will start an async task in the background
    checking the last time branding is shown for the client app. Recorded
    whether the package name of CCT client app can be found on device when the
    async task is finished. Record for Android CCT only.

    If the client app is using CCT service connection, the client app package
    name will be read from CCT service; otherwise the package name will be
    parsed from the Activity#getReferrer of CustomTabsActivity.
  </summary>
</histogram>

<histogram name="CustomTabs.Branding.NumberOfClients" units="count"
    expires_after="2024-02-25">
  <owner>wenyufu@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    For every CCT launch, Chrome will start an async task in the background
    checking the last time branding is shown for the client app. Records the
    number of package names of CCT client apps that had the branding shown after
    each CCT launched. Record after the branding decision is made, on Android
    CCT only.
  </summary>
</histogram>

<histogram name="CustomTabs.ClientAppId" enum="ClientAppId"
    expires_after="2024-02-11">
  <owner>yusufo@chromium.org</owner>
  <summary>
    Android: AppId declared by the launching application in EXTRA_APPLICATION_ID
    in a custom tab. This histogram is used as a means to count the total
    instances of custom tabs created meanwhile binning them across launching
    apps that have identified themselves. Starting with M84 this is is also
    recorded for webapps/WebAPKs. Filter the platform for just CCT/TWA data.
  </summary>
</histogram>

<histogram name="CustomTabs.ClientAppId.Incognito" enum="ClientAppId"
    expires_after="M120">
  <owner>roagarwal@chromium.org</owner>
  <owner>chrome-incognito@google.com</owner>
  <owner>cct-team@google.com</owner>
  <summary>
    Android: This histogram is used as a means to count the total instances of
    Incognito custom tabs created meanwhile binning them across launching first
    party apps.

    The launching first party apps are inferred by the package name they
    provided when creating a custom tab connection and if we can't infer via
    package name then as a fallback we rely on them declaring
    EXTRA_APPLICATION_ID when launching Incognito custom tabs. If both fails,
    then the launch is recorded in the Others entry.

    This metric is never recorded for 3P apps.
  </summary>
</histogram>

<histogram name="CustomTabs.CloseCause" enum="CustomTabsCloseCause"
    expires_after="2024-02-25">
  <owner>jinsukkim@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>cct-team@google.com</owner>
  <summary>
    Android: The reason a custom tab is closed. Main interest is whether a
    custom tab is triggered by user inputs like back press/close button click,
    or it is automatically closed by the app that opened it.
  </summary>
</histogram>

<histogram name="CustomTabs.ConnectionStatusOnReturn.GSA"
    enum="CustomTabsConnection" expires_after="2024-02-04">
  <owner>kgrosu@google.com</owner>
  <owner>jinsukkim@chromium.org</owner>
  <owner>cct-team@google.com</owner>
  <summary>
    Android: Recorded whenever user closes the custom tab by hitting the close
    button or back to return to the caller app. Keeps track of the connection
    status and whether the app was using a KeepAlive connection. Recorded only
    for AGSA. Starting with M84 this is is also recorded for webapps/WebAPKs.
    Filter the platform for just CCT/TWA data.
  </summary>
</histogram>

<histogram name="CustomTabs.ConnectionStatusOnReturn.NonGSA"
    enum="CustomTabsConnection" expires_after="2024-02-04">
  <owner>kgrosu@google.com</owner>
  <owner>jinsukkim@chromium.org</owner>
  <owner>cct-team@google.com</owner>
  <summary>
    Android: Recorded whenever user closes the custom tab by hitting the close
    button or back to return to the caller app. Keeps track of the connection
    status and whether the app was using a KeepAlive connection. Recorded for
    all apps other than AGSA. Starting with M84 this is is also recorded for
    webapps/WebAPKs. Filter the platform for just CCT/TWA data.
  </summary>
</histogram>

<histogram base="true" name="CustomTabs.DetachedResourceRequest.Duration"
    units="ms" expires_after="2021-10-17">
  <owner>lizeb@chromium.org</owner>
  <owner>cct-team@google.com</owner>
  <summary>
    Time between the start of a detached resource request and its completion
    (failure or success). Android only. Starting with M84 this is is also
    recorded for webapps/WebAPKs. Filter the platform for just CCT/TWA data.
  </summary>
</histogram>

<histogram name="CustomTabs.DetachedResourceRequest.FinalStatus"
    enum="NetErrorCodes" expires_after="2024-03-17">
  <owner>lizeb@chromium.org</owner>
  <owner>cct-team@google.com</owner>
  <summary>
    Reports the final status of the detached request, including success.
    Recorded once per detached resource request. Android only. Starting with M84
    this is is also recorded for webapps/WebAPKs. Filter the platform for just
    CCT/TWA data.
  </summary>
</histogram>

<histogram base="true" name="CustomTabs.DetachedResourceRequest.RedirectsCount"
    units="redirects" expires_after="M92">
  <owner>lizeb@chromium.org</owner>
  <owner>cct-team@google.com</owner>
  <summary>
    Number of redirects followed by a detached resource request until success or
    failure. Android only. Starting with M84 this is is also recorded for
    webapps/WebAPKs. Filter the platform for just CCT/TWA data.
  </summary>
</histogram>

<histogram name="CustomTabs.FeatureUsage" enum="CustomTabsFeatureUsed"
    expires_after="2024-03-17">
  <owner>donnd@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    Records each feature of a Chrome Custom Tab when that feature is used. A
    single key feature - &quot;Sessions&quot; - is logged once per CCT Session,
    and no other feature enum may be logged more frequently. This provides a
    single large list of features and their percentage usage (one or more times
    per session) right in the UMA timeline. Recorded during a CCT Session.
    Android only.
  </summary>
</histogram>

<histogram name="CustomTabs.HadInteractionOnClose" enum="Boolean"
    expires_after="2023-06-18">
  <obsolete>
    Deprecated 2022-12. Replaced by CustomTabs.HadInteractionOnClose.Form and
    CustomTabs.HadInteractionOnClose.Navigation
  </obsolete>
  <owner>wenyufu@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    Whether current CCT has seen any interactions. &quot;Interactions&quot;
    includes any form entries for text / drop down, and whether a tab can go
    forward / back when it is closed. Recorded when CCT tab is closed.
  </summary>
</histogram>

<histogram name="CustomTabs.HadInteractionOnClose.Form" enum="Boolean"
    expires_after="2024-02-25">
  <owner>katzz@google.com</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    This histogram records true when the current CCT has seen any form
    interactions (e.g. text entry, drop down entry) throughout the session and
    false if there have been no form interactions at the time of closing the
    CCT. If the tab is restored the previous form interactions will be reset.
  </summary>
</histogram>

<histogram name="CustomTabs.HadInteractionOnClose.FormStillActive"
    enum="Boolean" expires_after="2024-03-24">
  <owner>katzz@google.com</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    This histogram records true when the current CCT has seen form interaction
    (e.g. text entry, drop down entry) on the active page, and false if there
    are no interactions in the active form, or if the interaction is reset (e.g.
    navigation, form submission) at the time of closing the CCT.
  </summary>
</histogram>

<histogram name="CustomTabs.HadInteractionOnClose.Navigation" enum="Boolean"
    expires_after="2024-02-25">
  <owner>katzz@google.com</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    This histogram records true when the current CCT has interactions with the
    web contents (e.g. touch, scroll, fling), and the active tab can go back /
    forward and false if there have not been web contents interactions or the
    tab cannot go back / forward at the time of closing the CCT. If the tab is
    restored the previous form interactions will be reset.
  </summary>
</histogram>

<histogram name="CustomTabs.ImmersiveModeConfirmationsSettingConfirmed"
    enum="Boolean" expires_after="2023-05-14">
  <obsolete>
    Deprecated 2022-12. No longer needed.
  </obsolete>
  <owner>kgrosu@google.com</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    Android only. Recorded during Partial Custom Tab creation, if it has not
    already been logged during the existing Chrome session. Returns true if the
    value for &quot;immersive_mode_confirmations&quot; from Settings.Secure is
    set to &quot;confirmed&quot;, false otherwise.

    This is trying to approximate what percentage of Chrome sessions that run
    PCCTs have already confirmed the dialog that shows up when an app enters
    immersive mode (e.g. when hiding the navigation bar buttons or status bar).
    Once the user has tapped on the dialog, it should never be displayed again.
    This metric will be used to measure the impact that hiding the navigation
    bar buttons would have. In the scenario where we hide the nav bar buttons
    only when a PCCT is being resized, this confirmation dialog shows only while
    the user is dragging the PCCT window, but disappears as soon as the finger
    is lifted from the screen, giving no time for the user to confirm that they
    are aware that they entered immersive mode.
  </summary>
</histogram>

<histogram name="CustomTabs.IncognitoCCTCallerId" enum="IncognitoCCTCallerId"
    expires_after="2024-02-04">
  <owner>roagarwal@chromium.org</owner>
  <owner>chrome-incognito@google.com</owner>
  <owner>cct-team@google.com</owner>
  <summary>
    This metrics records the caller of Incognito CCTs. For Chrome features, the
    feature name is recorded, for external calls, either Google App or
    Non-Google App categories are recorded. The metric is recorded when an
    Incognito CCT opening intent is received.
  </summary>
</histogram>

<histogram name="CustomTabs.IntentToFirstCommitNavigationTime3" units="ms"
    expires_after="2024-02-11">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Time between the intent arrival to a Custom Tab and the first navigation
    commit. Recorded for every custom tabs intent when the page has finished
    loading.
  </summary>
</histogram>

<histogram name="CustomTabs.IntentToFirstNavigationStartTime" units="ms"
    expires_after="2024-02-11">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Time between the intent arrival to a Custom Tab and the navigation start.
    Recorded when the page has finished loading. Non-&quot;Herb&quot; mode.
  </summary>
</histogram>

<histogram name="CustomTabs.IntentToPageLoadedTime" units="ms"
    expires_after="M77">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Time between the intent arrival in Chrome and the first &quot;page
    loaded&quot; event, if the navigation is successful. Non-&quot;Herb&quot;
    mode.
  </summary>
</histogram>

<histogram name="CustomTabs.MayLaunchUrlType" enum="MayLaunchUrlType"
    expires_after="2024-03-24">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Android only. Which flavors of mayLaunchUrl() were used before a tab launch.
    Can be low and/or high confidence. Recorded at the same time as
    CustomTabs.WarmupStateOnLaunch for the buckets &quot;Session, No Warmup,
    Warmup called from another UID&quot;, &quot;Session, No Warmup&quot; and
    &quot;Session, Warmup&quot;.

    Before M118, unlike CustomTabs.WarmupStateOnLaunch, this metric was only
    recorded with a valid session.
  </summary>
</histogram>

<histogram name="CustomTabs.MinimizedFeatureAvailability"
    enum="CustomTabsMinimizedFeatureAvailability" expires_after="2024-04-01">
  <owner>sinansahin@google.com</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    Minimized Custom Tab feature availability. Recorded during startup in
    #onFinishNativeInitialization() when the availability is first checked to
    initialize the feature. Android only.
  </summary>
</histogram>

<histogram name="CustomTabs.PageInsights.Event" enum="PageInsightsEvent"
    expires_after="2024-04-01">
  <owner>jinsukkim@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    Recorded only on Android. Holds the interaction that the user has with Page
    Insights BottomSheet, such as invoking PIH manually or by being auto
    triggered, the bottom sheet's states and when it is dismissed, and
    interactions with xSurface views.
  </summary>
</histogram>

<histogram name="CustomTabs.ParallelRequestStatusOnStart"
    enum="CustomTabsParallelRequestStatusOnStart" expires_after="M120">
  <owner>lizeb@chromium.org</owner>
  <owner>cct-team@google.com</owner>
  <summary>
    Recorded only on Android. Whether a parallel request was requested by the
    calling application, and if so its initial status. Recorded once per handled
    intent, when the request is initiated. Starting with M84 this is is also
    recorded for webapps/WebAPKs. Filter the platform for just CCT/TWA data.
  </summary>
</histogram>

<histogram name="CustomTabs.PartialCustomTabType"
    enum="CustomTabsPartialCustomTabType" expires_after="2024-02-04">
  <owner>kgrosu@google.com</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    Type of the Partial Custom Tab that has been created. A new entry will be
    logged each time a PCCT is opened or when the user transitions from a type
    of PCCT to another (e.g. on screen rotation if the type changes from
    bottom-sheet to side-sheet). Multiple entries can be logged for each PCCT
    that is being displayed.
  </summary>
</histogram>

<histogram name="CustomTabs.PostMessage.OnMessage" enum="Boolean"
    expires_after="2024-08-23">
  <owner>sinansahin@google.com</owner>
  <owner>jinsukkim@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    Android only. Recorded when the tab controlled by the CustomTabsSession
    sends a postMessage. Always emits true.
  </summary>
</histogram>

<histogram name="CustomTabs.PostMessage.PostMessageFromClientApp"
    enum="Boolean" expires_after="2024-08-23">
  <owner>sinansahin@google.com</owner>
  <owner>jinsukkim@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    Android only. Recorded when the CCT client sends a postMessage request to
    the tab. Always emits true.
  </summary>
</histogram>

<histogram name="CustomTabs.PostMessage.RequestPostMessageChannel"
    enum="Boolean" expires_after="2024-08-23">
  <owner>sinansahin@google.com</owner>
  <owner>jinsukkim@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    Android only. Recorded when the CCT client calls requestPostMessageChannel
    to establish a two way postMessage channel. Emits true if the request is
    successful and false otherwise. A true value emitted here doesn't mean the
    request cannot fail later; and a false value may be the result of multiple
    things, e.g. the warmup hasn't been called.
  </summary>
</histogram>

<histogram
    name="CustomTabs.PostMessage.RequestPostMessageChannelWithTargetOrigin"
    enum="Boolean" expires_after="2024-03-22">
  <owner>elabadysayed@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    Android only. Recorded when the CCT client calls requestPostMessageChannel
    to establish a two way postMessage channel. Emits true if the request is
    with targetOrigin specified and false otherwise. That should determine if we
    can to delete the old API (Without targetOrigin) or not.
  </summary>
</histogram>

<histogram name="CustomTabs.PredictionStatus" enum="PredictionStatus"
    expires_after="2020-03-01">
  <owner>lizeb@chromium.org</owner>
  <summary>
    For Custom Tabs, records whether mayLaunchUrl() has been called, and if so,
    whether the call was later matched by a URL launch.
  </summary>
</histogram>

<histogram name="CustomTabs.PredictionToLaunch" units="ms"
    expires_after="2020-03-01">
  <owner>lizeb@chromium.org</owner>
  <summary>
    When a URL prediction succeeds, time in ms between the prediction and the
    actual launch.
  </summary>
</histogram>

<histogram name="CustomTabs.ResizeType" enum="CustomTabsResizeType"
    expires_after="2023-05-14">
  <obsolete>
    Deprecated 2022-11. Replaced by CustomTabs.ResizeType2
  </obsolete>
  <owner>kgrosu@google.com</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    When a Partial Custom Tab has been resized by the user log if it is an
    expansion or a minimization of the tab.
  </summary>
</histogram>

<histogram name="CustomTabs.ResizeType2" enum="CustomTabsResizeType2"
    expires_after="2024-02-11">
  <owner>kgrosu@google.com</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    When a bottom-sheet Partial Custom Tab has been resized by the user log if
    it is an expansion or a minimization of the tab.
  </summary>
</histogram>

<histogram
    name="CustomTabs.RetainableSessionsV2.TimeBetweenLaunch{IdentifierType}"
    units="seconds" expires_after="2024-02-20">
  <owner>wenyufu@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    When a CCT session is launched, if it is launched with same URL and has the
    same package name or the same taskId + referrer combo, record the duration
    between previous CCT closure and current CCT launch. Recorded on CCT launch.

    A CCT can be defined as retainable if 1) it is launching with the same URL
    as the most recently closed CCT; 2) it is launched from the same embedded
    app as the most recently closed CCT; 3) the most recently closed CCT had
    user interactions. See &quot;CustomTabs.HadInteractionOnClose.Form&quot; and
    &quot;CustomTabs.HadInteractionOnClose.Navigation&quot; for information on
    interactions.

    The histogram suffix identifies whether the CCT is created with the same
    intent Uri data and for the same embedded app, launching CCT with the same
    taskId and package name. The package name identifier to use will depend on
    whether the client app is using CustomTabService. If app is using the CCT
    service, the package name will be read from CCT service; otherwise the
    package name is read from the referrer of CCT activity.

    This histogram is recorded for {IdentifierType}
  </summary>
  <token key="IdentifierType">
    <variant name=".Different"
        summary="App is not launched from the same embedded app as package
                 name / referrer is different."/>
    <variant name=".Mixed"
        summary="Apps not consistently using CCT services. Referrer and
                 package are used together."/>
    <variant name=".PackageName"
        summary="Apps that provide package name. Package name is used as
                 identifier."/>
    <variant name=".Referrer"
        summary="Apps not connecting with CCT services. Activity referrer is
                 used as identifier."/>
  </token>
</histogram>

<histogram name="CustomTabs.SessionDisconnectStatus"
    enum="CustomTabsSessionDisconnectStatus" expires_after="2024-03-24">
  <owner>kgrosu@google.com</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    Recorded only for Android. Record information about the state of the client
    app, custom tab and system in the moment the connection between the client
    and the custom tab is terminated. With this, we are trying to understand how
    often a connection is terminated (the client app dies/is killed/is closed)
    while a custom tab is in foreground. Also, if the EXTRA_KEEP_ALIVE is set,
    we want to understand if it reduces the number of connections being
    terminated. The aim is that CT_FOREGROUND and CT_FOREGROUND_KEEPALIVE are
    logged as little as possible, while the rest of the states are expected ways
    in which a connection may be terminated.

    *CT_FOREGROUND*/*CT_BACKGROUND* - an enum value that contains this text
    reflects if the custom tab was in the foreground/background when the
    connection was terminated.

    *KEEP_ALIVE* - an enum value that contains this text reflects that the
    EXTRA_KEEP_ALIVE intent extra was specified and that the custom tab binds to
    the service provided by it in order to increase the priority of the client
    app to foreground.

    *LOW_MEMORY* - an enum value that contains this text reflects that the
    system was low on memory when the connection was terminated. This does not
    mean that this was indeed the reason for the connection being terminated,
    but it might be a good indicator of it.

    UNKNOWN - if this is logged then there is probably a bug in the code as we
    have a state we can be in that we don't currently account for.
  </summary>
</histogram>

<histogram name="CustomTabs.ShareOptionLocation" enum="ShareOptionLocation"
    expires_after="M120">
  <owner>sophey@chromium.org</owner>
  <owner>src/components/send_tab_to_self/OWNERS</owner>
  <summary>
    Records the location of the share option in the Custom Tab. Recorded when
    the share option is added while the Custom Tab is being constructed.
  </summary>
</histogram>

<histogram name="CustomTabs.SideSheetResizeType" enum="CustomTabsResizeType2"
    expires_after="2024-02-11">
  <owner>kgrosu@google.com</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    Resize type of the Partial Custom Tab that's either an expansion or
    minimization. Recorded when the PCCT has been maximized/minimized by the
    user.
  </summary>
</histogram>

<histogram name="CustomTabs.SpeculationStatusOnStart"
    enum="CustomTabsSpeculationStatusOnStart" expires_after="2021-02-14">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Recorded only for Android. How a speculation was started or why it was
    disallowed. This is recorded when a speculation of any kind is requested,
    with either a &quot;Speculation allowed&quot; value, or a reason why it was
    not allowed. If the speculation is allowed and is attempted to be started,
    the status on start will be counted in addition: one of
    &quot;Prefetch&quot;, &quot;Prerender&quot;, &quot;Background Tab&quot; or
    &quot;Prerender not started&quot;. The last case is when a prerender is
    abandoned during start. Starting with M84 this is is also recorded for
    webapps/WebAPKs. Filter the platform for just CCT/TWA data.
  </summary>
</histogram>

<histogram name="CustomTabs.SpeculationStatusOnSwap"
    enum="CustomTabsSpeculationStatusOnSwap" expires_after="2020-07-26">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Recorded only for Android. Recorded when a speculation is requesting to swap
    into a visible tab. Starting with M84 this is is also recorded for
    webapps/WebAPKs. Filter the platform for just CCT/TWA data.
  </summary>
</histogram>

<histogram name="CustomTabs.Startup.TimeToFirstCommitNavigation2.{suffix}"
    units="ms" expires_after="2024-08-25">
  <owner>mthiesse@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    Startup time for a Custom Tab from the earliest point in startup to the
    first navigation commit. Split by varying degrees of warmness, from cold to
    fully pre-loaded through mayLaunchUrl.

    It is recommended to limit analysis of data to Android P+ because on prior
    versions the cold start detection is less robust.

    {suffix}.
  </summary>
  <token key="suffix">
    <variant name="Cold"
        summary="Measures from process creation to first commit"/>
    <variant name="Speculated"
        summary="Measures from intent received to first commit when the
                 mayLaunchUrl speculation is used"/>
    <variant name="Warm"
        summary="Measures from intent received to first commit when
                 CustomTabsConnection#warmUp is not used"/>
    <variant name="WarmedUp"
        summary="Measures from intent received to first commit when
                 CustomTabsConnection#warmUp is used"/>
  </token>
</histogram>

<histogram name="CustomTabs.Startup.TimeToLargestContentfulPaint2.{suffix}"
    units="ms" expires_after="2024-08-25">
  <owner>mthiesse@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    Startup time for a Custom Tab from the earliest point in startup to the
    Largest Contentful Paint on the first navigation. Split by varying degrees
    of warmness, from cold to fully pre-loaded through mayLaunchUrl.

    It is recommended to limit analysis of data to Android P+ because on prior
    versions the cold start detection is less robust.

    {suffix}.
  </summary>
  <token key="suffix">
    <variant name="Cold" summary="Measures from process creation to LCP"/>
    <variant name="Speculated"
        summary="Measures from intent received to LCP when the mayLaunchUrl
                 speculation is used"/>
    <variant name="Warm"
        summary="Measures from intent received to LCP when
                 CustomTabsConnection#warmUp is not used"/>
    <variant name="WarmedUp"
        summary="Measures from intent received to LCP when
                 CustomTabsConnection#warmUp is used"/>
  </token>
</histogram>

<histogram name="CustomTabs.TabCounts.OnClosingAllTabs" units="count"
    expires_after="2023-10-08">
  <owner>wenyufu@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    Recorded only for Android. Records the number of tabs closed when closing
    all the tabs (e.g. via hitting the close button). Only recorded when closing
    is initiated by the user, so if custom tab is killed while in the background
    this will not be recorded.
  </summary>
</histogram>

<histogram name="CustomTabs.TabCounts.UniqueTabsSeen" units="count"
    expires_after="2024-02-11">
  <owner>wenyufu@chromium.org</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    Recorded only for Android. Records the number of unique tabs open in the
    current custom tab session, when a new tab is opened. The count of this
    histogram includes the initial tab being opened, and can be recorded more
    than once in the same session.

    Do not record nor increase the count when switching into the previous tab
    (e.g. create new tab, close, and land onto an existing tab).
  </summary>
</histogram>

<histogram name="CustomTabs.TimeScrollUpdateReceivedAfterScrollEnd" units="ms"
    expires_after="2024-03-24">
  <owner>sinansahin@google.com</owner>
  <owner>chrome-connective-tissue@google.com</owner>
  <summary>
    Android only. Recorded when the RealtimeEngagementSignalObserver receives a
    scroll-update signal after the scroll-end signal from the renderer. This is
    the time it took to receive the scroll-update after the scroll-end signal in
    milliseconds.
  </summary>
</histogram>

<histogram name="CustomTabs.Visible" enum="VisibleTab" expires_after="never">
<!-- expires-never: Used to classify UMA reports by the dashboards. -->

  <owner>yusufo@chromium.org</owner>
  <owner>src/base/metrics/OWNERS</owner>
  <summary>
    Recorded only for Android. Records on every metrics upload whether the
    currently visible tab is a custom tab. The custom tab is launched by a
    client app with customized UI. Some metrics like page load time will behave
    differently for these tabs since it will be possible to warm up the browser
    process and prepare resources for specific urls ahead of time via a service
    connection. This histogram can be used to cluster these metric differently.

    As of M87, this histogram is logged on a log start, rather than log end to
    tag more logs.
  </summary>
</histogram>

<histogram name="CustomTabs.WarmupStateOnLaunch" enum="WarmupStateOnLaunch"
    expires_after="2024-02-05">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Recorded only on Android. Reports whether warmup() has been called when a
    Custom Tabs Intent is received from an application, and if so, whether the
    call could be matched with a session. Starting with M84 this is is also
    recorded for webapps/WebAPKs. Filter the platform for just CCT/TWA data.
  </summary>
</histogram>

<histogram name="CustomTabs.WebContentsStateOnLaunch" enum="WebContentsState"
    expires_after="2024-03-24">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Android: When a CustomTabActivity creates its Tab, whether we use a
    prerendered WebContents, a spare renderer or create a new WebContents.
  </summary>
</histogram>

<histogram name="TrustedWebActivity.ClearDataDialogOnClearAppDataAccepted"
    enum="Boolean" expires_after="M114">
  <owner>peconn@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Emits true if the user went to site settings from the dialog that is shown
    after a Trusted Web Activity client app has had its data cleared.
  </summary>
</histogram>

<histogram name="TrustedWebActivity.ClearDataDialogOnUninstallAccepted"
    enum="Boolean" expires_after="M114">
  <owner>peconn@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Emits true if the user went to site settings from the dialog that is shown
    after a Trusted Web Activity client app has been uninstalled.
  </summary>
</histogram>

<histogram name="TrustedWebActivity.DelegatedNotificationSmallIconFallback"
    enum="TrustedWebActivityDelegatedNotificationSmallIconFallback"
    expires_after="M114">
  <owner>peconn@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Logs which kind of fallback for notification small icon was used for Trusted
    Web Activity notification delegation.
  </summary>
</histogram>

<histogram name="TrustedWebActivity.ExtraCommandSuccess.{command}"
    enum="BooleanSuccess" expires_after="2023-11-01">
  <owner>mvanouwerkerk@google.com</owner>
  <owner>peconn@chromium.org</owner>
  <owner>
    src/chrome/android/java/src/org/chromium/chrome/browser/browserservices/OWNERS
  </owner>
  <summary>
    Records whether the extra command {command} called from
    TrustedWebActivityClient resulted in success or failure.
  </summary>
  <token key="command">
    <variant name="checkNotificationPermission"/>
    <variant name="getNotificationPermissionRequestPendingIntent"/>
  </token>
</histogram>

<histogram name="TrustedWebActivity.LocationDelegationEnrolled" enum="Boolean"
    expires_after="2024-03-24">
  <owner>eirage@chromium.org</owner>
  <owner>peconn@chromium.org</owner>
  <summary>
    When a site running in Truested Web Activity is accessing geolocation,
    records whether the last tracked focused Trusted Web Activity client app
    enrolled location delegation.
  </summary>
</histogram>

<histogram name="TrustedWebActivity.LocationPermissionChanged"
    enum="TrustedWebActivityPermissionChanged" expires_after="2023-11-12">
  <owner>eirage@chromium.org</owner>
  <owner>peconn@chromium.org</owner>
  <summary>
    When a Trusted Web Activity client app's location permission is changed,
    record the previous state and new stase.
  </summary>
</histogram>

<histogram name="TrustedWebActivity.LocationPermissionRequestIsGranted"
    enum="Boolean" expires_after="2023-11-19">
  <owner>eirage@chromium.org</owner>
  <owner>peconn@chromium.org</owner>
  <summary>
    Records the boolean result (granted or not) from requesting a Trusted Web
    Activity client app's location permission.
  </summary>
</histogram>

<histogram name="TrustedWebActivity.LocationUpdateErrorCode"
    enum="TrustedWebActivityLocationErrorCode" expires_after="2022-10-23">
  <obsolete>
    Deprecated 2022-09. no longer needed.
  </obsolete>
  <owner>eirage@chromium.org</owner>
  <owner>peconn@chromium.org</owner>
  <summary>
    Records an error code when we get a new location update or location error
    from the Trusted Web Activity client app. Record
    &quot;LocationUpdateError.NONE&quot; (value = 0) if there is no error and
    the geoposition is valid.
  </summary>
</histogram>

<histogram name="TrustedWebActivity.Notification.PermissionRequestResult"
    enum="ContentSetting" expires_after="2023-11-01">
  <owner>mvanouwerkerk@chromium.org</owner>
  <owner>peconn@chromium.org</owner>
  <owner>
    src/chrome/android/java/src/org/chromium/chrome/browser/browserservices/OWNERS
  </owner>
  <summary>
    The result of a TWA notification permission request for the purpose of
    notification delegation. This is logged when the
    NotificationPermissionUpdater receives the result from the
    TrustedWebActivityClient.
  </summary>
</histogram>

<histogram name="TrustedWebActivity.ShareTargetRequest"
    enum="WebShareTargetMethod" expires_after="M114">
  <owner>peconn@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>Recorded when data is shared via a Trusted Web Activity.</summary>
</histogram>

<histogram name="TrustedWebActivity.SplashScreenShown" enum="Boolean"
    expires_after="2024-03-03">
  <owner>peconn@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Records whether or not a splash screen has been shown when launching a
    Trusted Web Activity.
  </summary>
</histogram>

<histogram name="TrustedWebActivity.TimeInVerifiedOrigin.V2" units="ms"
    expires_after="M120">
  <owner>peconn@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Time spent in a verified origin until navigating to an unverified one or
    pausing the Trusted Web Activity.
  </summary>
</histogram>

<histogram name="TrustedWebActivity.TimeOutOfVerifiedOrigin.V2" units="ms"
    expires_after="M120">
  <owner>peconn@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Time spent out of verified origins until navigating back to a verified one
    or pausing the Trusted Web Activity.
  </summary>
</histogram>

</histograms>

</histogram-configuration>
