text:
<!--
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 Android 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="ActivityType">
  <variant name=".ChromeTabbedActivity" summary="ChromeTabbedActivity"/>
  <variant name=".CustomTabActivity" summary="CustomTabActivity"/>
  <variant name=".FirstRunActivity" summary="FirstRunActivity"/>
</variants>

<variants name="AndroidDownloadTypes">
  <variant name=".Audio" summary=""/>
  <variant name=".Document" summary=""/>
  <variant name=".Image" summary=""/>
  <variant name=".OfflinePage" summary=""/>
  <variant name=".Other" summary=""/>
  <variant name=".PrefetchedOfflinePage" summary=""/>
  <variant name=".Total" summary=""/>
  <variant name=".Video" summary=""/>
</variants>

<variants name="AutofillAssistantIntents">
  <variant name="" summary="aggregated across all intents"/>
  <variant name=".BuyMovieTicket"/>
  <variant name=".FlightsCheckin"/>
  <variant name=".FoodOrdering"/>
  <variant name=".FoodOrderingDelivery"/>
  <variant name=".FoodOrderingPickup"/>
  <variant name=".NotSet"/>
  <variant name=".PasswordChange"/>
  <variant name=".RentCar"/>
  <variant name=".Shopping"/>
  <variant name=".ShoppingAssistedCheckout"/>
  <variant name=".Teleport"/>
  <variant name=".UnknownIntent"/>
</variants>

<variants name="ChildProcessConnectionMetricsBindingState">
  <variant name="ContentModerate"
      summary="Moderate binding excluding BindingManager bindings"/>
  <variant name="ContentVisible"
      summary="Visible binding excluding BindingManager bindings"/>
  <variant name="ContentWaived"
      summary="Waived binding excluding BindingManager bindings"/>
  <variant name="Moderate" summary="strongest binding of Moderate"/>
  <variant name="NotPerceptible"
      summary="strongest binding of Not Perceptible"/>
  <variant name="Strong" summary="strongest binding of Strong"/>
  <variant name="Visible" summary="strongest binding of Visible"/>
  <variant name="Waivable" summary="binding only from BindingManager"/>
  <variant name="Waived" summary="strongest binding of Waived"/>
</variants>

<variants name="JankMetricsScenarios">
  <variant name=".NewTabPage" summary="while NTP is open"/>
  <variant name=".OmniboxFocus" summary="while Omnibox is focused"/>
  <variant name=".OpenLinkInNewTab"
      summary="while opening a link in a new tab using the long press menu"/>
  <variant name=".StartSurfaceHomepage"
      summary="while the homepage on start surface is visible"/>
  <variant name=".StartSurfaceTabSwitcher"
      summary="while the tab switcher on start surface is visible"/>
  <variant name=".Startup" summary="while Chrome is starting"/>
  <variant name=".TabSwitcher" summary="while Tab switcher is open"/>
  <variant name=".Total"
      summary="while ChromeTabbedActivity is resumed. However, there's an
               unusual implementation detail: Individual frame durations are
               measured in Java, and passed over to C++ for recording once
               every 30 seconds. Thus, frames that occur near program
               termination might be dropped from the data"/>
</variants>

<variants name="MessageIdentifiers">
  <variant name=".AboutThisSite"/>
  <variant name=".AddToHomescreenIPH"/>
  <variant name=".AdsBlocked"/>
  <variant name=".ArCoreUpgrade"/>
  <variant name=".AutoDarkWebContents"/>
  <variant name=".ChromeSurvey"/>
  <variant name=".DesktopSiteGlobalDefaultOptOut"/>
  <variant name=".DesktopSiteGlobalOptIn"/>
  <variant name=".DownloadIncognitoWarning"/>
  <variant name=".DownloadProgress"/>
  <variant name=".ExternalNavigation"/>
  <variant name=".FramebustBlocked"/>
  <variant name=".GeneratedPasswordSaved"/>
  <variant name=".InstallableAmbientBadge"/>
  <variant name=".MerchantTrust"/>
  <variant name=".NearOomReduction"/>
  <variant name=".NotificationBlocked"/>
  <variant name=".OfferNotification"/>
  <variant name=".PermissionUpdate"/>
  <variant name=".PopupBlocked"/>
  <variant name=".ReaderMode"/>
  <variant name=".RestoreCustomTab"/>
  <variant name=".SafetyTip"/>
  <variant name=".SaveAddressProfile"/>
  <variant name=".SaveCard"/>
  <variant name=".SavePassword"/>
  <variant name=".SendTabToSelf"/>
  <variant name=".SharedHighlighting"/>
  <variant name=".SyncError"/>
  <variant name=".TailoredSecurityDisabled"/>
  <variant name=".TailoredSecurityEnabled"/>
  <variant name=".Translate"/>
  <variant name=".UpdatePassword"/>
  <variant name=".VrServicesUpgrade"/>
</variants>

<variants name="TaskType">
  <variant name="BackgroundSyncOneShot" summary="BackgroundSyncOneShot"/>
  <variant name="ChromeMinidumpUploading" summary="ChromeMinidumpUploading"/>
  <variant name="ComponentUpdate" summary="ComponentUpdate"/>
  <variant name="DeprecatedDownloadResumption"
      summary="DeprecatedDownloadResumption"/>
  <variant name="DeprecatedExploreSitesRefresh"
      summary="DeprecatedExploreSitesRefresh"/>
  <variant name="DownloadAutoResumption" summary="DownloadAutoResumption"/>
  <variant name="DownloadCleanup" summary="DownloadCleanup"/>
  <variant name="DownloadLater" summary="DownloadLater"/>
  <variant name="DownloadService" summary="DownloadService"/>
  <variant name="ExploreSitesRefresh" summary="ExploreSitesRefresh"/>
  <variant name="FeedRefresh" summary="FeedRefresh"/>
  <variant name="FeedV2Refresh" summary="FeedV2Refresh"/>
  <variant name="Gcm" summary="Gcm"/>
  <variant name="NotificationScheduler" summary="NotificationScheduler"/>
  <variant name="NotificationService" summary="NotificationService"/>
  <variant name="NotificationTrigger" summary="NotificationTrigger"/>
  <variant name="OfflinePages" summary="OfflinePages"/>
  <variant name="OfflinePagesPrefetch" summary="OfflinePagesPrefetch"/>
  <variant name="OfflinePagesPrefetchNotification"
      summary="OfflinePagesPrefetchNotification"/>
  <variant name="Omaha" summary="Omaha"/>
  <variant name="PeriodicBackgroundSyncChromeWakeup"
      summary="PeriodicBackgroundSyncChromeWakeup"/>
  <variant name="QueryTile" summary="QueryTile"/>
  <variant name="Test" summary="Test"/>
  <variant name="WebApkUpdate" summary="WebApkUpdate"/>
  <variant name="WebviewComponentUpdate" summary="WebviewComponentUpdate"/>
  <variant name="WebviewMinidumpUploading" summary="WebviewMinidumpUploading"/>
  <variant name="WebviewVariationsSeedFetch"
      summary="WebviewVariationsSeedFetch"/>
</variants>

<variants name="ThumbnailProvider_ClientType">
  <variant name=".DownloadHome" summary="Download home"/>
  <variant name=".NTPSnippets" summary="NTP snippets"/>
</variants>

<histogram name="Android.ActivityStop.NumberOfTabsUsed" units="count"
    expires_after="2023-03-19">
  <owner>gauravjj@google.com</owner>
  <owner>skavuluru@google.com</owner>
  <owner>clank-large-form-factors@google.com</owner>
  <summary>
    Captures the number of regular and incognito tabs used. Used tabs are
    calculated by identifying the number of tabs that were selected between
    ChromeTabbedActivity onResumeWithNative() and onStopWithNative(). This is
    recorded when onStopWithNative() is called by backgrounding the app or by
    opening another activity like SettingsActivity. If multiple instances are
    running, each instance will only track and record usage of tabs that it
    contains.
  </summary>
</histogram>

<histogram name="Android.ActivityStop.PercentageOfTabsUsed" units="%"
    expires_after="2023-04-16">
  <owner>gauravjj@google.com</owner>
  <owner>skavuluru@google.com</owner>
  <owner>clank-large-form-factors@google.com</owner>
  <summary>
    Captures the percentage of regular and incognito tabs used. This is
    calculated by finding the ratio of the number of tabs used to the total
    number of tabs available between ChromeTabbedActivity onResumedWithNative
    and onStopWithNative. Total number of tabs available is the sum of the tab
    count when CTA is resumed and any new tabs that are opened before CTA is
    stopped. This is recorded when ChromeTabbedActivity#onStopWithNative() is
    called by backgrounding the app or by opening another activity like
    SettingsActivity. If multiple instances are running, each instance will only
    track and record usage of tabs that it contains.
  </summary>
</histogram>

<histogram name="Android.AdaptiveToolbarButton.Clicked"
    enum="AdaptiveToolbarButtonVariant" expires_after="2023-04-30">
  <owner>bttk@chromium.org</owner>
  <owner>chrome-segmentation-platform@google.com</owner>
  <summary>
    Reports the variant of the optional toolbar button that was clicked. Reports
    only when the feature AdaptiveButtonInTopToolbar is active.
  </summary>
</histogram>

<histogram name="Android.AdaptiveToolbarButton.SessionVariant"
    enum="AdaptiveToolbarButtonVariant" expires_after="2023-04-30">
  <owner>bttk@chromium.org</owner>
  <owner>chrome-segmentation-platform@google.com</owner>
  <summary>
    Reports the variant of the optional toolbar button used during the session.
    Reports only when the feature AdaptiveButtonInTopToolbar is active, the
    button is placed in the toolbar, and is clickable.
  </summary>
</histogram>

<histogram name="Android.AdaptiveToolbarButton.Settings.Changed"
    enum="AdaptiveToolbarRadioButtonState" expires_after="2023-04-23">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-segmentation-platform@google.com</owner>
  <summary>
    Records the newly selected radio button option for the adaptive toolbar
    button on the toolbar shortcut settings page. Recorded only when the
    selected radio button state is changed.
  </summary>
</histogram>

<histogram name="Android.AdaptiveToolbarButton.Settings.Startup"
    enum="AdaptiveToolbarRadioButtonState" expires_after="2023-04-23">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-segmentation-platform@google.com</owner>
  <summary>
    Records the currently selected radio button option for the adaptive toolbar
    button on the toolbar shortcut settings page. Recorded on startup, only if
    AdaptiveButtonInTopToolbarCustomization feature is enabled.
  </summary>
</histogram>

<histogram name="Android.AdaptiveToolbarButton.SettingsToggle.Changed"
    enum="BooleanEnabled" expires_after="2023-04-23">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-segmentation-platform@google.com</owner>
  <summary>
    Records whether the toolbar settings toggle button is on or off on the
    toolbar shortcut settings page after the user manually changes it. Recorded
    after the user explicitly taps on the toggle button.
  </summary>
</histogram>

<histogram name="Android.AdaptiveToolbarButton.SettingsToggle.Startup"
    enum="BooleanEnabled" expires_after="2023-04-30">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-segmentation-platform@google.com</owner>
  <summary>
    Records whether the toolbar settings toggle button is on or off on the
    toolbar shortcut settings page. Recorded on startup.
  </summary>
</histogram>

<histogram name="Android.AppLaunch.BlockDrawForInitialTabAccuracy"
    enum="AppLaunchBlockDrawForInitialTabAccuracy" expires_after="2022-10-16">
  <owner>sinansahin@google.com</owner>
  <owner>twellington@chromium.org</owner>
  <owner>skym@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records the accuracy of the logic used to decide whether to block the view
    draw of the first tab, expressed as an enum. Recorded when the active tab is
    restored or an initial tab is created in ChromeTabbedActivity.
  </summary>
</histogram>

<histogram name="Android.AppLaunch.DurationDrawWasBlocked" units="ms"
    expires_after="2022-08-21">
  <obsolete>
    Removed 03/2022. Superseded by
    Android.AppLaunch.DurationDrawWasBlocked.OnInitialTab
  </obsolete>
  <owner>sinansahin@google.com</owner>
  <owner>twellington@chromium.org</owner>
  <owner>skym@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records how long the initial tab's draw was blocked, if it was. Recorded
    when the active tab is restored or an initial tab is created in
    ChromeTabbedActivity.
  </summary>
</histogram>

<histogram name="Android.AppLaunch.DurationDrawWasBlocked.OnIncognitoReauth"
    units="ms" expires_after="M115">
  <owner>roagarwal@chromium.org</owner>
  <owner>chrome-incognito@google.com</owner>
  <summary>
    Records the time (ms) we blocked the draw of the Incognito tab (if any)
    during the app restore phase to be sure the Incognito re-auth screen is
    shown. This gets recorded only when both native and tab state have been
    initialized as by then we would show the re-auth screen.

    Blocking draw on Incognito re-auth screen prevents accidental leakage of the
    Incognito tab contents. Note that, the Incognito re-auth screen is an opt-in
    feature controlled behind the Chrome Setting "Lock Incognito tabs when
    you leave Chrome" under "Privacy and Security" So, if the
    feature is turned off, we wouldn't block draw for this use-case and won't
    record this metric.
  </summary>
</histogram>

<histogram name="Android.AppLaunch.DurationDrawWasBlocked.OnInitialTab"
    units="ms" expires_after="2022-08-21">
  <owner>sinansahin@google.com</owner>
  <owner>twellington@chromium.org</owner>
  <owner>skym@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records how long the initial tab's draw was blocked, if it was. Recorded no
    more than once per cold start. Recorded when the active tab is restored or
    an initial tab is created in ChromeTabbedActivity. Recorded always except
    when the overview page is shown during startup.
  </summary>
</histogram>

<histogram name="Android.AppLaunch.DurationDrawWasBlocked.OnOverviewPage"
    units="ms" expires_after="2022-08-21">
  <owner>sinansahin@google.com</owner>
  <owner>twellington@chromium.org</owner>
  <owner>skym@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records how long the overview page's draw was blocked, if it was. Recorded
    no more than once per cold start. Recorded when the overview page state is
    initialized in ChromeTabbedActivity and only when overview page was shown
    during startup.
  </summary>
</histogram>

<histogram name="Android.AppNotificationStatus" enum="NotificationAppStatus"
    expires_after="never">
<!-- expires-never: Indicates whether Chrome has notification permission. -->

  <owner>dtrainor@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Records whether notifications are enabled for Chrome, as the Android app,
    every time metrics are logged.
  </summary>
</histogram>

<histogram name="Android.ArmCpuPart" enum="ArmCpuPart"
    expires_after="2023-04-23">
  <owner>rsesek@chromium.org</owner>
  <owner>clank-security@google.com</owner>
  <summary>
    Reports information about the ARM CPU of a device. This composes the 8-bit
    ARM implementer identifier and the 12-bit part number into a single 20-bit
    CPU identifier, ranging from [0x00000,0xFFFFF]. Depending on the CPU
    package, processor configuration, and/or kernel version, this may only
    report information about the processor on which the metric was collected.
    This can happen on heterogeneous-processor SoCs. The metric is logged once
    every startup.
  </summary>
</histogram>

<histogram
    name="Android.AutofillAssistant.Cud.AutofillProfileDeduplicatedAddress"
    enum="AutofillAssistantUserDataEntryCount" expires_after="2023-08-12">
  <owner>ozgeneren@google.com</owner>
  <owner>autofill_assistant+watch@google.com</owner>
  <summary>
    Reports the number of address profiles deduplicated by autofill assistant at
    the step of user data collection. This is recorded every time the user goes
    through CollectUserData step.
  </summary>
</histogram>

<histogram
    name="Android.AutofillAssistant.Cud.AutofillProfileDeduplicatedContact"
    enum="AutofillAssistantUserDataEntryCount" expires_after="2023-08-12">
  <owner>ozgeneren@google.com</owner>
  <owner>autofill_assistant+watch@google.com</owner>
  <summary>
    Reports the number of contact profiles deduplicated by autofill assistant at
    the step of user data collection. This is recorded every time the user goes
    through CollectUserData step.
  </summary>
</histogram>

<histogram name="Android.AutofillAssistant.CupRpcVerificationEvent"
    enum="AutofillAssistantCupRpcVerificationEvent" expires_after="2023-04-09">
  <owner>sergiovila@google.com</owner>
  <owner>autofill_assistant@google.com</owner>
  <summary>
    Reports the outcome of the CUP verification process for GetAction RPC calls.
    CUP verification is used to check whether the actions delivered to the
    client come from a trusted source. The verification event is recorded after
    the response is deserialized but before it's actually used in the client.
  </summary>
</histogram>

<histogram name="Android.AutofillAssistant.DependenciesInvalidated"
    enum="AutofillAssistantDependenciesInvalidated" expires_after="2023-05-07">
  <owner>fga@google.com</owner>
  <owner>autofill_assistant+watch@google.com</owner>
  <summary>
    Reports when the platform-specific dependencies are invalidated. For
    example: When the activity is changed on Android.
  </summary>
</histogram>

<histogram name="Android.AutofillAssistant.DropOutReason{Intent}"
    enum="AutofillAssistantDropOutReason" expires_after="2023-06-08">
  <owner>brunobraga@google.com</owner>
  <owner>vizcay@google.com</owner>
  <owner>mcarlen@chromium.org</owner>
  <summary>
    Reports the drop out reason of an Autofill Assistant script during the
    {Intent} flow. It is recorded when Autofill Assistant is shut down or
    terminated. The AA_START value is used as a baseline and counts the number
    of attempted starts of Autofill Assistant flows. The sum of all drop out
    reasons should be the same as the number of attempted starts (i.e.
    AA_START).
  </summary>
  <token key="Intent" variants="AutofillAssistantIntents"/>
</histogram>

<histogram name="Android.AutofillAssistant.FeatureModuleInstallation"
    enum="AutofillAssistantFeatureModuleInstallation"
    expires_after="2023-04-16">
  <owner>mcarlen@chromium.org</owner>
  <owner>autofill_assistant+watch@google.com</owner>
  <summary>
    Reports the installation status of the DFM, e.g. installation deferred,
    foreground installation succeeded etc. The metric cannot currently
    distinguish whether the deferred installation succeeded or not.
  </summary>
</histogram>

<histogram name="Android.AutofillAssistant.GetClientToken"
    enum="AutofillAssistantGetClientTokenResult" expires_after="2022-11-19">
  <owner>sandromaggi@google.com</owner>
  <owner>autofill_assistant@google.com</owner>
  <summary>
    Reports the result of a GetClientToken call to GMS Core. This is recorded
    every time a call is made. For each call two records are made, one that the
    call was executed and a second to record it's result status (success or
    failure). This is done to ensure all calls are properly recorded and none
    are accidentally dropped.
  </summary>
</histogram>

<histogram
    name="Android.AutofillAssistant.GuidedBrowsing.Camera.PermissionEvent"
    enum="AutofillAssistantGuidedBrowsingCameraPermissionEvent"
    expires_after="2023-08-30">
  <owner>solankivinit@google.com</owner>
  <owner>jainshashank@google.com</owner>
  <owner>autofill_assistant@google.com</owner>
  <owner>guided-browsing-eng@google.com</owner>
  <summary>
    Reports the various events carried out when checking permission for the
    camera. These events include the scenarios like the browser can prompt the
    permission, cannot prompt the permission, already had the permission, etc.
    This is recorded when the browser asks the users to scan QR code via camera
    preview.
  </summary>
</histogram>

<histogram
    name="Android.AutofillAssistant.GuidedBrowsing.ParseSingleTagXml.ActionEvent"
    enum="AutofillAssistantGuidedBrowsingParseSingleTagXmlActionEvent"
    expires_after="2023-08-30">
  <owner>solankivinit@google.com</owner>
  <owner>jainshashank@google.com</owner>
  <owner>autofill_assistant@google.com</owner>
  <owner>guided-browsing-eng@google.com</owner>
  <summary>
    Reports the various events carried out when ParseSingleTagXml action is
    executed. This is recorded when the action parses the attributes or keys of
    a single tag XML. These events include the scenarios like parsing was
    successful, a certain attribute was not found in the XML, etc.
  </summary>
</histogram>

<histogram
    name="Android.AutofillAssistant.GuidedBrowsing.ReadImages.PermissionEvent"
    enum="AutofillAssistantGuidedBrowsingReadImagesPermissionEvent"
    expires_after="2023-08-30">
  <owner>solankivinit@google.com</owner>
  <owner>jainshashank@google.com</owner>
  <owner>autofill_assistant@google.com</owner>
  <owner>guided-browsing-eng@google.com</owner>
  <summary>
    Reports the various events carried out when checking permission to read
    images. These events include the scenarios like the browser can prompt the
    permission, cannot prompt the permission, already had the permission, etc.
    This is recorded when the browser asks the users to pick an image from the
    gallery for QR Code scanning.
  </summary>
</histogram>

<histogram name="Android.AutofillAssistant.JsFlowStartedEvent"
    enum="AutofillAssistantJsFlowStartedEvent" expires_after="2023-06-05">
  <owner>fga@google.com</owner>
  <owner>autofill_assistant@google.com</owner>
  <summary>
    Reports notable events that occur before, during or after the execution of a
    Autofill Assistant JS flow. Events are reported as they happen.
    EXECUTOR_STARTED is always recorded and serves as the baseline. Afterwards
    multiple additional events can be emitted during the execution of the JS
    flow.
  </summary>
</histogram>

<histogram name="Android.AutofillAssistant.OnboardingFetcher.ResultStatus"
    enum="AutofillAssistantOnboardingFetcherResultStatus"
    expires_after="2023-04-30">
  <owner>sandromaggi@google.com</owner>
  <owner>mcarlen@google.com</owner>
  <summary>
    Reports the result status of the AutofillAssistantOnboardingFetcher. This
    includes general failures to get any data as well as failures to analyse or
    extract data that was received. This is recorded every time an onboarding
    definition is loaded for a user.
  </summary>
</histogram>

<histogram name="Android.AutofillAssistant.PaymentRequest.AutofillChanged"
    enum="AutofillAssistantPaymentRequestAutofillInfoChanged"
    expires_after="2023-04-16">
  <owner>arbesser@google.com</owner>
  <owner>mcarlen@chromium.org</owner>
  <summary>
    Reports whether autofill information was changed during an autofill
    assistant payment request, or not. This is recorded every time the user sees
    the autofill assistant payment request.
  </summary>
</histogram>

<histogram name="Android.AutofillAssistant.PaymentRequest.FirstNameOnly"
    enum="Boolean" expires_after="2023-02-12">
  <owner>arbesser@google.com</owner>
  <owner>mcarlen@chromium.org</owner>
  <summary>
    Reports whether the user selected a profile which does not contain separate
    first and last name. This is recorded when the user confirms the payment
    request screen in autofill assistant provided that 'name' was one of the
    requested fields.
  </summary>
</histogram>

<histogram name="Android.AutofillAssistant.PaymentRequest.MandatoryPostalCode"
    enum="AutofillAssistantPaymentRequestMandatoryPostalCode"
    expires_after="2022-06-08">
  <owner>arbesser@google.com</owner>
  <owner>mcarlen@chromium.org</owner>
  <summary>
    Reports on whether a billing postal code was required and whether the user
    ultimately succeeded or not. Also reports if the user had to change their
    profile or if the default profile already contained a billing postal code.
    This histogram is reported either when the user taps the 'continue' button
    of the autofill assistant payment request (and thus succeeds) or when
    autofill assistant closes during the action (i.e., the user aborted).
  </summary>
</histogram>

<histogram name="Android.AutofillAssistant.PaymentRequest.Prefilled"
    enum="AutofillAssistantPaymentRequestPrefilled" expires_after="2023-04-16">
  <owner>arbesser@google.com</owner>
  <owner>mcarlen@chromium.org</owner>
  <summary>
    Reports whether the autofill assistant payment request was successfully
    completed (i.e., the continue button was tapped) or not, and whether the
    payment request was initially pre-filled completely or not. This is recorded
    every time the user sees the autofill assistant payment request.
  </summary>
</histogram>

<histogram
    name="Android.AutofillAssistant.ServiceRequestSender.FailureRetryCount"
    units="count" expires_after="2023-05-11">
  <owner>sandromaggi@google.com</owner>
  <owner>autofill_assistant@google.com</owner>
  <summary>
    Reports the number of request retries until a final failure, leading to
    aborting the retries - either by running out of allowed retry attempts or
    meeting an error that's not retried. This is only recorded for requests that
    attempt a retry. Requests are retried if they fail from a network change,
    host name resolution error or 5xx. Errors like 4xx are not retried.
  </summary>
</histogram>

<histogram
    name="Android.AutofillAssistant.ServiceRequestSender.SuccessRetryCount"
    units="count" expires_after="2023-05-11">
  <owner>sandromaggi@google.com</owner>
  <owner>autofill_assistant@google.com</owner>
  <summary>
    Reports the number of request retries until a final success. This is only
    recorded for requests that attempt a retry. Requests are retried if they
    fail from a network change, host name resolution error or 5xx. Errors like
    4xx are not retried.
  </summary>
</histogram>

<histogram name="Android.AutofillAssistant.TextToSpeech.ButtonAction"
    enum="AutofillAssistantTextToSpeechButtonAction" expires_after="2022-06-08">
  <owner>jainshashank@google.com</owner>
  <owner>arbesser@google.com</owner>
  <summary>
    Reports the resultant action that happens on clicking the autofill assistant
    TTS button. This is recorded every time the TTS button is clicked.
  </summary>
</histogram>

<histogram name="Android.AutofillAssistant.TextToSpeech.EngineEvent"
    enum="AutofillAssistantTextToSpeechEngineEvent" expires_after="2022-06-08">
  <owner>jainshashank@google.com</owner>
  <owner>arbesser@google.com</owner>
  <summary>
    Reports the various TTS engine events received by the autofill assistant TTS
    controller. This is recorded every time the autofill assistant TTS
    controller receives a TTS event.
  </summary>
</histogram>

<histogram name="Android.BackgroundRestrictions.IsBackgroundRestricted"
    enum="Boolean" expires_after="2023-04-30">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-segmentation-platform@google.com</owner>
  <summary>
    Records whether user has enabled background restriction for chrome. Recorded
    after native initialization in browser process.
  </summary>
</histogram>

<histogram name="Android.BackgroundRestrictions.StandbyBucket"
    enum="StandbyBucket" expires_after="2023-04-30">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-segmentation-platform@google.com</owner>
  <summary>
    Records the standby bucket (UsageStatsManager.getAppStandbyBucket) in which
    chrome is currently placed by android. Recorded after native initialization
    in browser process.
  </summary>
</histogram>

<histogram
    name="Android.BackgroundRestrictions.StandbyBucket.WithoutUserRestriction"
    enum="StandbyBucket" expires_after="2022-10-23">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-segmentation-platform@google.com</owner>
  <summary>
    Records the standby bucket (UsageStatsManager.getAppStandbyBucket) in which
    chrome is currently placed by android, when user hasn't explicitly enabled
    background restrictions. Recorded after native initialization in browser
    process.
  </summary>
</histogram>

<histogram
    name="Android.BackgroundRestrictions.StandbyBucket.WithUserRestriction"
    enum="StandbyBucket" expires_after="2023-04-30">
  <owner>shaktisahu@chromium.org</owner>
  <owner>chrome-segmentation-platform@google.com</owner>
  <summary>
    Records the standby bucket (UsageStatsManager.getAppStandbyBucket) in which
    chrome is currently placed by android, when user has explicitly enabled
    background restrictions. Recorded after native initialization in browser
    process.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.ExactTaskCreated"
    enum="BackgroundTaskId" expires_after="2022-05-01">
  <owner>fgorski@chromium.org</owner>
  <owner>nator@chromium.org</owner>
  <owner>knollr@chromium.org</owner>
  <summary>
    Records that an exact task has been created. Recorded when the task is
    scheduled.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskCanceled"
    enum="BackgroundTaskId" expires_after="2023-03-19">
  <owner>fgorski@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <summary>Records that a specific background task has been canceled.</summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskCreated.WithExpiration"
    enum="BackgroundTaskId" expires_after="2022-05-01">
  <owner>fgorski@chromium.org</owner>
  <owner>nator@chromium.org</owner>
  <owner>knollr@chromium.org</owner>
  <summary>
    Records that a specific task has been created with an expiration deadline.
    Recorded when the task is scheduled.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskCreated.WithoutExpiration"
    enum="BackgroundTaskId" expires_after="2022-05-01">
  <owner>fgorski@chromium.org</owner>
  <owner>nator@chromium.org</owner>
  <owner>knollr@chromium.org</owner>
  <summary>
    Records that a specific task has been created without the expiration feature
    activated. Recorded when the task is scheduled.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskExpired"
    enum="BackgroundTaskId" expires_after="2023-03-19">
  <owner>fgorski@chromium.org</owner>
  <owner>nator@chromium.org</owner>
  <owner>knollr@chromium.org</owner>
  <summary>
    Records that a specific background task has expired. Recorded before the
    task is to be started.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskFinished.{TaskType}"
    units="ms" expires_after="2022-11-01">
  <owner>shaktisahu@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <summary>
    Records the time (uptimeMillis) taken by a background task of type
    {TaskType}. Recorded when the task finished callback is invoked.
  </summary>
  <token key="TaskType" variants="TaskType"/>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskLoadedNative"
    enum="BackgroundTaskId" expires_after="2023-03-19">
  <owner>fgorski@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <summary>
    Records that a task extending a NativeBackgroundTask started loading the
    native portion of Chrome (either in Reduced Mode or Full Browser Mode).
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskLoadedNative.FullBrowser"
    enum="BackgroundTaskId" expires_after="2023-02-12">
  <owner>mheikal@chromium.org</owner>
  <owner>hanxi@chromium.org</owner>
  <owner>hnakashima@chromium.org</owner>
  <summary>
    Records that a specific background task has loaded native in Full Browser
    Mode.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskLoadedNative.ReducedMode"
    enum="BackgroundTaskId" expires_after="2023-02-12">
  <owner>mheikal@chromium.org</owner>
  <owner>hanxi@chromium.org</owner>
  <owner>hnakashima@chromium.org</owner>
  <summary>
    Records that a specific background task has loaded native in Reduced Mode.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskScheduled.Failure"
    enum="BackgroundTaskId" expires_after="2023-03-19">
  <owner>fgorski@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <summary>
    Records that a specific background task has failed to be scheduled.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskScheduled.Success"
    enum="BackgroundTaskId" expires_after="2023-05-07">
  <owner>fgorski@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <summary>
    Records that a specific background task has been successfully scheduled.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskStarted"
    enum="BackgroundTaskId" expires_after="2023-03-19">
  <owner>fgorski@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <summary>Records that a specific background task has been started.</summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskStopped"
    enum="BackgroundTaskId" expires_after="2023-03-19">
  <owner>fgorski@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <summary>
    Records that a specific background task has been stopped by Background Task
    Scheduler before it was able to complete itself.
  </summary>
</histogram>

<histogram name="Android.BackPress.Intercept" enum="BackPressConsumer"
    expires_after="M114">
  <owner>lazzzis@chromium.org</owner>
  <owner>src/chrome/browser/back_press/android/OWNERS</owner>
  <summary>
    Records that a specific feature intercepted the system's back press gesture.
  </summary>
</histogram>

<histogram name="Android.BackPress.MinimizeAppAndCloseTab"
    enum="MinimizeAppAndCloseTabType" expires_after="M114">
  <owner>lazzzis@chromium.org</owner>
  <owner>src/chrome/browser/back_press/android/OWNERS</owner>
  <summary>
    Records that the back press causes the app to be minimized or the current
    tab to be closed.
  </summary>
</histogram>

<histogram name="Android.BindingManger.ConnectionsDroppedDueToMaxSize"
    units="connections" expires_after="2023-04-16">
  <owner>ckitagawa@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the total number of BindingManager bindings to
    ChildProcessConnections that were dropped due to the BindingManager reaching
    the connection limit. This value accumulates while the app is running and is
    emitted upong the app being backgrounded at which time the counter is reset.
  </summary>
</histogram>

<histogram name="Android.BiometricAuth.AuthRequester"
    enum="BiometricAuthRequester" expires_after="M112">
  <owner>ioanap@chromium.org</owner>
  <owner>fhorschig@chromium.org</owner>
  <summary>
    Recorded when a UI surface/flow in Chrome on Android chooses to re-auth the
    user via biometrics. It records that surface/flow which made the request.
  </summary>
</histogram>

<histogram name="Android.ChildMismatch.AppInfoError" enum="ChildAppInfoError"
    expires_after="2022-11-01">
  <obsolete>
    Replaced by Android.ChildMismatch.AppInfoError2; the previous implementation
    did not record the metric correctly in all cases.
  </obsolete>
  <owner>torne@chromium.org</owner>
  <owner>boliu@chromium.org</owner>
  <summary>
    Records what error (if any) was encountered verifying the child process's
    app info each time a child process is started via ChildProcessConnection.
  </summary>
</histogram>

<histogram name="Android.ChildMismatch.AppInfoError2" enum="ChildAppInfoError"
    expires_after="2023-04-16">
  <owner>torne@chromium.org</owner>
  <owner>boliu@chromium.org</owner>
  <summary>
    Records what error (if any) was encountered verifying the child process's
    app info each time a child process is started via ChildProcessConnection.
  </summary>
</histogram>

<histogram name="Android.ChildMismatch.BrowserVersionChanged"
    enum="BooleanChanged" expires_after="2022-11-01">
  <obsolete>
    Replaced by Android.ChildMismatch.BrowserVersionChanged2; the previous
    implementation did not record the metric correctly in all cases.
  </obsolete>
  <owner>torne@chromium.org</owner>
  <owner>boliu@chromium.org</owner>
  <summary>
    Records if the installed browser version appears to have changed since the
    browser process was launched. Recorded each time a child process is started
    via ChildProcessConnection, but only if the child's ApplicationInfo did not
    match (i.e. when Android.ChildMismatch.AppInfoError is recorded as something
    other than no error).
  </summary>
</histogram>

<histogram name="Android.ChildMismatch.BrowserVersionChanged2"
    enum="BooleanChanged" expires_after="2023-04-16">
  <owner>torne@chromium.org</owner>
  <owner>boliu@chromium.org</owner>
  <summary>
    Records if the installed browser version appears to have changed since the
    browser process was launched. Recorded each time a child process is started
    via ChildProcessConnection, but only if the child's ApplicationInfo did not
    match (i.e. when Android.ChildMismatch.AppInfoError is recorded as something
    other than no error).
  </summary>
</histogram>

<histogram
    name="Android.ChildProcessBinding.Percentage{ChildProcessConnectionMetricsBindingState}Connections_{TotalConnectionBucket}"
    units="%" expires_after="2023-04-16">
  <owner>ckitagawa@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the percentage of sandboxed ChildProcessConnections with a
    {ChildProcessConnectionMetricsBindingState} out of the total number of
    ChildProcessConnections where there are {TotalConnectionBucket}. This is not
    emitted if there are no live connections. Emitted at a Poisson distributed
    period with a mean of 5 minutes on Chrome on Android while in the
    foreground.
  </summary>
  <token key="ChildProcessConnectionMetricsBindingState"
      variants="ChildProcessConnectionMetricsBindingState"/>
  <token key="TotalConnectionBucket">
    <variant name="3To5Connections" summary="3 to 5 connections"/>
    <variant name="6To10Connections" summary="6 to 10 connections"/>
    <variant name="11To20Connections" summary="11 to 20 connections"/>
    <variant name="21To50Connections" summary="21 to 50 connections"/>
    <variant name="LessThan3Connections" summary="less than 3 connections"/>
    <variant name="MoreThan51Connections" summary="more than 51 connections"/>
  </token>
</histogram>

<histogram name="Android.ChildProcessBinding.TotalConnections"
    units="connections" expires_after="2023-04-16">
  <owner>ckitagawa@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the total number of sandboxed ChildProcessConnections in existence.
    This is emitted even if there are no live connections. Emitted at a Poisson
    distributed period with a mean of 5 minutes on Chrome on Android while in
    the foreground.
  </summary>
</histogram>

<histogram
    name="Android.ChildProcessBinding.{ChildProcessConnectionMetricsBindingState}Connections"
    units="connections" expires_after="2023-04-16">
  <owner>ckitagawa@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the number of sandboxed ChildProcessConnections with a
    {ChildProcessConnectionMetricsBindingState}. This is emitted even if there
    are no live connections. Emitted at a Poisson distributed period with a mean
    of 5 minutes on Chrome on Android while in the foreground.
  </summary>
  <token key="ChildProcessConnectionMetricsBindingState"
      variants="ChildProcessConnectionMetricsBindingState"/>
</histogram>

<histogram name="Android.ChildProcessStartTimeV2{type}" units="ms"
    expires_after="2023-02-22">
  <owner>cduvall@chromium.org</owner>
  <owner>boliu@chromium.org</owner>
  <summary>
    Measures time from {type} child process starts to right before main. Only
    recorded on Android N+. Zygote measurements are recorded on Q+.

    Zygote measurements capture the CPU time (thread time) spent to create the
    app zygote process, before the zygote preload starts. For other processes it
    measures the time (uptimeMillis) to create the child process service.
  </summary>
  <token key="type">
    <variant name=".All" summary="all (excluding zygote)"/>
    <variant name=".Isolated" summary="isolated"/>
    <variant name=".NotIsolated" summary="non-isolated"/>
    <variant name=".Zygote" summary="app zygote"/>
  </token>
</histogram>

<histogram name="Android.ChromeActivity.Type" enum="ChromeActivityType"
    expires_after="never">
<!-- expires-never: Used to classify UMA reports by the dashboards. -->

  <owner>peconn@chromium.org</owner>
  <owner>src/base/metrics/OWNERS</owner>
  <summary>
    Recorded at the same time as "CustomTabs.Visible", this metric
    should eventually replace that one. This additionally distinguishes between
    Trusted Web Activities, WebAPKs and Webapps.

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

<histogram name="Android.ChromeStartupDelegate.FailureReason"
    enum="ChromeStartupDelegateFailureType" expires_after="2022-12-25">
  <owner>gangwu@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records the failure reason for ChromeStartupDelegate requests. Recorded at
    most once on application startup.
  </summary>
</histogram>

<histogram name="Android.ChromeStartupDelegate.Result"
    enum="ChromeStartupDelegateResult" expires_after="2022-10-16">
  <owner>gangwu@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records the result for ChromeStartupDelegate. Recorded on application
    startup.
  </summary>
</histogram>

<histogram name="Android.ContactsPicker.ContactCount" units="Contacts"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the total number of contacts shown in the contacts picker. Measured
    once when the Contacts Picker dialog is dismissed.
  </summary>
</histogram>

<histogram name="Android.ContactsPicker.DialogAction"
    enum="ContactsPickerDialogAction" expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records which action the user takes in the ContactsPickerDialog. Measured
    once when the Contacts Picker dialog is dismissed.
  </summary>
</histogram>

<histogram name="Android.ContactsPicker.PropertiesRequested"
    enum="ContactsPickerProperties" expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The contact properties requested by the website (names, emails, telephone
    numbers). Measured once when the Contacts Picker dialog is dismissed.
  </summary>
</histogram>

<histogram name="Android.ContactsPicker.SelectCount" units="Contacts"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the total number of contacts selected in the contacts picker.
    Measured once when the Contacts Picker dialog is dismissed.
  </summary>
</histogram>

<histogram name="Android.ContactsPicker.SelectPercentage" units="%"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the percentage of contacts selected in the contacts picker.
    Measured once when the Contacts Picker dialog is dismissed.
  </summary>
</histogram>

<histogram name="Android.DarkTheme.AutoDarkMode.SettingsChangeSource{NewState}"
    enum="AndroidAutoDarkModeSettingsChangeSource" expires_after="2023-04-01">
  <owner>nemco@google.com</owner>
  <owner>wenyufu@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Source that changed the auto dark web content settings. This includes both
    changes to global theme settings as well as individual site exceptions. This
    histogram does not take into account whether the browser UI theme is dark or
    not (e.g. browser theme could be "light" and user could still
    change auto dark mode state in site settings). Recorded when the auto dark
    web content settings changes including {NewState}
  </summary>
  <token key="NewState">
    <variant name=".Disabled"
        summary="default value change to Blocked, or a site exception is
                 added."/>
    <variant name=".Enabled"
        summary="default value change to Allowed, or a site exception is
                 removed."/>
  </token>
</histogram>

<histogram name="Android.DarkTheme.EnabledReason" enum="DarkThemeEnabledReason"
    expires_after="2023-02-26">
  <owner>twellington@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records the reason why dark theme is enabled when dark theme is visible to
    user.
  </summary>
</histogram>

<histogram name="Android.DarkTheme.EnabledState" enum="BooleanEnabled"
    expires_after="2023-04-30">
  <owner>twellington@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records whether dark theme is enabled or not on cold start and when the
    enabled state changes.
  </summary>
</histogram>

<histogram name="Android.DarkTheme.Preference.State"
    enum="DarkThemePreferences" expires_after="2023-02-26">
  <owner>twellington@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records user theme preference of system default, light or dark theme on cold
    start and when the theme preference changes.
  </summary>
</histogram>

<histogram name="Android.DarkTheme.ThemeSettingsEntry"
    enum="AndroidThemeSettingsEntry" expires_after="2023-04-16">
  <owner>nemco@google.com</owner>
  <owner>wenyufu@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Entry that navigate the user into the Theme Settings. Recorded when the
    Theme settings is opened.
  </summary>
</histogram>

<histogram name="Android.DeviceSize.LargestDisplaySize" units="dp"
    expires_after="2022-05-14">
  <obsolete>
    Removed May 2022.
  </obsolete>
  <owner>twellington@chromium.org</owner>
  <owner>tedchoc@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records the largest display dimension in dp during deferred startup. The
    display size is not affected by Android N multi-window mode. Clamped at
    200dp to 1200dp.
  </summary>
</histogram>

<histogram name="Android.DeviceSize.LargestDisplaySize2" units="dp"
    expires_after="2023-04-23">
  <owner>twellington@chromium.org</owner>
  <owner>shuyng@google.com</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records the largest display dimension in dp during deferred startup. The
    display size is not affected by Android N multi-window mode. Clamped at
    200dp to 2000dp. 20dp granularity.
  </summary>
</histogram>

<histogram name="Android.DeviceSize.ScreenSizeInTensOfInches"
    units="10x inches" expires_after="2023-04-23">
  <owner>twellington@chromium.org</owner>
  <owner>aishwaryarj@google.com</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records the primary display (screen) size in tens of inches with 0.2 inches
    (2 units) granularity, during deferred startup. The display size is not
    affected by Android N multi-window mode.
  </summary>
</histogram>

<histogram name="Android.DeviceSize.SmallestDisplaySize" units="dp"
    expires_after="2022-05-14">
  <obsolete>
    Removed May 2022.
  </obsolete>
  <owner>twellington@chromium.org</owner>
  <owner>tedchoc@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records the smallest display dimension in dp during deferred startup. The
    display size is not affected by Android N multi-window mode. Clamped at 0 to
    1000dp.
  </summary>
</histogram>

<histogram name="Android.DeviceSize.SmallestDisplaySize2" units="dp"
    expires_after="2023-04-23">
  <owner>twellington@chromium.org</owner>
  <owner>shuyng@google.com</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records the smallest display dimension in dp during deferred startup. The
    display size is not affected by Android N multi-window mode. Clamped at 100
    to 1000dp. 10dp granularity.
  </summary>
</histogram>

<histogram name="Android.DexFixer" enum="DexFixerReason"
    expires_after="2023-01-30">
  <obsolete>
    Removed Feb 2020.
  </obsolete>
  <owner>agrieve@chromium.org</owner>
  <owner>cduvall@chromium.org</owner>
  <summary>
    Records the number of times Chrome runs "cmd package compile" to
    fix dexopt issues, and for what reason.
  </summary>
</histogram>

<histogram name="Android.DirectAction.Perform" enum="DirectActionId"
    expires_after="2023-10-10">
  <owner>arbesser@google.com</owner>
  <owner>autofill_assistant@google.com</owner>
  <summary>
    Counts calls to Activity.onPerformDirectAction made by the system on behalf
    of the assist app and which action was performed, if any. Available starting
    with Android Q.
  </summary>
</histogram>

<histogram name="Android.Download.InfoBar.CloseButtonClicked"
    enum="DownloadInfoBarState" expires_after="M85">
  <owner>shaktisahu@chromium.org</owner>
  <summary>
    Records the state of the download infobar when the user taps on the
    infobar's close button.
  </summary>
</histogram>

<histogram name="Android.Download.InfoBar.Shown"
    enum="DownloadInfoBar.ShownState" expires_after="2020-04-26">
  <owner>shaktisahu@chromium.org</owner>
  <summary>
    Records various types of messages representing the state of the downloads as
    they are shown on the download infobar.
  </summary>
</histogram>

<histogram name="Android.Download.Rename.Dialog.Action"
    enum="Android.Download.Rename.Dialog.Action" expires_after="2021-08-09">
  <owner>hesen@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>
    Records various actions taken by the user on the rename dialog in download
    home.
  </summary>
</histogram>

<histogram name="Android.Download.Rename.Result"
    enum="Android.Download.Rename.Result" expires_after="2021-08-09">
  <owner>hesen@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>
    Records various error codes when users try to rename a download in a
    download home, recorded when backend rename callback is compeleted.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.Cancel"
    enum="Android.DownloadManager.Cancel.CancelFrom" expires_after="M85">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>Recorded when a download is cancelled from Java.</summary>
</histogram>

<histogram name="Android.DownloadManager.Filter"
    enum="AndroidDownloadFilterType" expires_after="2020-01-26">
  <owner>dtrainor@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>
    Recorded when the user selects a filter from the Chrome download manager
    navigation drawer.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.ForegroundServiceLifecycle"
    enum="DownloadNotificationForegroundLifecycle" expires_after="never">
<!-- expires-never: Download foreground notification stability metric. -->

  <owner>qinmin@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>
    Records instances where the foreground undergoes a lifecycle change (when
    the foreground starts, changes pinned notification, or stops).
  </summary>
</histogram>

<histogram
    name="Android.DownloadManager.InitialCount.Viewed{AndroidDownloadTypes}"
    units="units" expires_after="2020-10-04">
  <owner>dtrainor@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>
    The number of non-incognito download items displayed that are already viewed
    by the user at any time, recorded when the download UI is initialized.
    {AndroidDownloadTypes}
  </summary>
  <token key="AndroidDownloadTypes" variants="AndroidDownloadTypes">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Android.DownloadManager.InitialCount{AndroidDownloadTypes}"
    units="units" expires_after="2021-01-24">
  <owner>dtrainor@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>
    The number of non-incognito download items displayed when the download UI is
    initialized. {AndroidDownloadTypes}
  </summary>
  <token key="AndroidDownloadTypes" variants="AndroidDownloadTypes">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Android.DownloadManager.Item.OpenFailed"
    enum="AndroidDownloadFilterType" expires_after="M81">
  <owner>dtrainor@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>Recorded when a download fails to open.</summary>
</histogram>

<histogram name="Android.DownloadManager.Item.OpenSucceeded"
    enum="AndroidDownloadFilterType" expires_after="M85">
  <owner>dtrainor@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>Recorded when a download is opened.</summary>
</histogram>

<histogram name="Android.DownloadManager.List.View.Action"
    enum="Android.DownloadManager.List.View.Actions" expires_after="2021-01-24">
  <owner>dtrainor@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>The count of Download Home list entry actions taken.</summary>
</histogram>

<histogram name="Android.DownloadManager.Menu.Action"
    enum="Android.DownloadManager.Menu.Actions" expires_after="2022-12-25">
  <owner>dtrainor@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>The count of Download Home top level menu actions taken.</summary>
</histogram>

<histogram name="Android.DownloadManager.Menu.Delete.SelectedCount"
    units="units" expires_after="M81">
  <owner>dtrainor@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>
    The number of items selected when performing a multi-delete action.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.Menu.Share.SelectedCount"
    units="units" expires_after="M81">
  <owner>dtrainor@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>
    The number of items selected when performing a multi-share action.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.NotificationInteraction"
    enum="DownloadNotificationInteractions" expires_after="2023-01-01">
  <owner>qinmin@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>
    Records instances where a user interacts with a download notification (ie.
    clicks on, pauses, resumes, cancels).
  </summary>
</histogram>

<histogram name="Android.DownloadManager.OpenSource.Audio"
    enum="AndroidDownloadOpenSource" expires_after="2023-05-07">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>Records how users open audio download files on Android.</summary>
</histogram>

<histogram name="Android.DownloadManager.OpenSource.Other"
    enum="AndroidDownloadOpenSource" expires_after="2023-04-23">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>
    Records the entry point for users opening downloaded files on Android, that
    are not audio nor video.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.OpenSource.Video"
    enum="AndroidDownloadOpenSource" expires_after="2023-04-23">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>Records how users open video download files on Android.</summary>
</histogram>

<histogram name="Android.DownloadManager.ServiceStopped.DownloadForeground"
    enum="DownloadNotificationServiceStopped" expires_after="never">
  <owner>qinmin@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
<!-- expires-never: Download foreground notification stability metric. -->

  <summary>
    Records instances of DownloadForegroundService stops. The number of expected
    stops (stopped) and unexpected stops (task removed, low memory, etc) can be
    compared to get a sense of how often the service crashes to see how it
    handles restarts. For example, the number of times the service is stopped
    because of low memory can be compared to the number of times the service has
    been destroyed to see how frequently it occurs. Or, the number of start
    sticky's will indicate how often the service is able to restart due to an
    unexpected stop.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.Share.Count" units="units"
    expires_after="M86">
  <owner>twellington@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>The number of downloads shared at the same time.</summary>
</histogram>

<histogram name="Android.DownloadManager.Share.FileTypes"
    enum="AndroidDownloadFilterType" expires_after="2020-03-01">
  <owner>twellington@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>
    Recorded when downloads are shared through the download manager. A recorded
    value of "All" indicates that multiple types of downloads were
    shared.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.SpaceUsed" units="%"
    expires_after="M81">
  <owner>twellington@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>The percentage of total storage downloads consume.</summary>
</histogram>

<histogram
    name="Android.DownloadManager.Thumbnail.MaxRequiredStretch{AndroidDownloadTypes}"
    units="%" expires_after="2021-01-30">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>
    Records the required stretch of the smaller dimension before displaying an
    image on download home. Measured in percentage. {AndroidDownloadTypes}
  </summary>
  <token key="AndroidDownloadTypes" variants="AndroidDownloadTypes"/>
</histogram>

<histogram name="Android.DownloadPage.OpenSource"
    enum="AndroidDownloadOpenSource" expires_after="2023-04-23">
  <owner>qinmin@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>
    Records the entry point for users opening the download page on Android.
  </summary>
</histogram>

<histogram name="Android.DragDrop.FromWebContent.DropInWebContent.DistanceDip"
    units="dp" expires_after="2023-03-19">
  <owner>wenyufu@chromium.org</owner>
  <owner>clank-large-form-factors@google.com</owner>
  <summary>
    Records the distance of the drag end position from the initial drag start
    position when dragging starts and ends within ContentView containing web
    contents. Note that the distance only counts the distance of drag event
    happend on the screen; scrolling for the web content will be disabled during
    drag. Used to assist in setting proper threshold to dismiss context menu
    during drag. Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.FromWebContent.DropInWebContent.Duration"
    units="ms" expires_after="2023-03-19">
  <owner>wenyufu@chromium.org</owner>
  <owner>clank-large-form-factors@google.com</owner>
  <summary>
    Records the duration in ms of drag process when drop happend inside
    ContentView containing web contents, regardless DragEvent#getResult. Does
    not capture drag events that end outside the ContentView (Use
    Android.DragDrop.FromWebContent.Duration instead). Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.FromWebContent.Duration{DropResult}"
    units="ms" expires_after="2023-03-19">
  <owner>wenyufu@chromium.org</owner>
  <owner>clank-large-form-factors@google.com</owner>
  <summary>
    Records the duration in ms of drag process when {DropResult}. Recorded for
    the drag process starts from the web content, and drop happens outside of
    the web content. Does not capture drag events that end inside the
    ContentView containing web contents. Recorded when such a drag event ends.
    Android only.

    For more information regarding drag results, see:
    https://developer.android.com/reference/android/view/DragEvent#getResult()
  </summary>
  <token key="DropResult">
    <variant name=".Canceled" summary="DragEvent#getResult() returns false."/>
    <variant name=".Success" summary="DragEvent#getResult() returns true."/>
  </token>
</histogram>

<histogram name="Android.DragDrop.FromWebContent.TargetType"
    enum="AndroidDragTargetType" expires_after="2023-03-19">
  <owner>wenyufu@chromium.org</owner>
  <owner>clank-large-form-factors@google.com</owner>
  <summary>
    Records the type of object being dragged, for the drag process starts from
    the web content, and drop happens outside of the web content. Does not
    capture drag events that end inside the ContentView containing web contents.
    Recorded when such a drag event ends. Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Image.OpenFileTime.AllExpired" units="ms"
    expires_after="2023-03-19">
  <owner>shuyng@google.com</owner>
  <owner>clank-large-form-factors@google.com</owner>
  <summary>
    Records the duration between the URI being cleared and
    ContentProvider#openFile attempts with that expired URI. This is used to
    evaluate how long we should keep the image data. Because drop target app
    could request data multiple times with the same URI, this metric could
    record multiple times per URI, which gives us the holistic view about the
    timing when the image data associated with the URI is needed. Another metric
    Android.DragDrop.Image.OpenFileTime.FirstExpired only records at most once
    per URI, to avoid counting in retries from drop target app when Chrome
    rejects the expired URI. This metric is recorded when Chrome receives an
    expired URI to retrieve data. If the URI is not the latest expired one, the
    metric will not be recorded because we do not calculate the elapsed time for
    older URIs. Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Image.OpenFileTime.FirstAttempt" units="ms"
    expires_after="2023-03-19">
  <owner>shuyng@google.com</owner>
  <owner>clank-large-form-factors@google.com</owner>
  <summary>
    Records the duration between receiving Android Drag End event and the first
    ContentProvider#openFile attempted by the drop target app. The duration is
    calculated during the first ContentProvider#openFile for each URI. Another
    metric Android.DragDrop.Image.OpenFileTime.LastAttempt is recorded for the
    last ContentProvider#openFile. Record 0 if the duration is negative (e.g.
    ContentProvider#openFile is accessed before drag ends). Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Image.OpenFileTime.FirstExpired" units="ms"
    expires_after="2023-03-19">
  <owner>shuyng@google.com</owner>
  <owner>clank-large-form-factors@google.com</owner>
  <summary>
    Records the duration between the URI being cleared and the first
    ContentProvider#openFile attempt with that expired URI. This is used to
    evaluate how long we should keep the image data. Because drop target app may
    retry after Chrome rejects the expired URI; and the retries are not helpful
    to evaluate how long the data is needed; this metric records at most once
    per URI. Another metric Android.DragDrop.Image.OpenFileTime.AllExpired
    records multiple times per URI, to gives us the holistic view about the
    timing when the image data associated with the URI is needed. This metric is
    recorded when Chrome receives an expired URI to retrieve data. If the URI is
    not the latest expired one, the metric will not be recorded because we do
    not calculate the elapsed time for older URIs. Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Image.OpenFileTime.LastAttempt" units="ms"
    expires_after="2023-03-19">
  <owner>shuyng@google.com</owner>
  <owner>clank-large-form-factors@google.com</owner>
  <summary>
    Records the duration between receiving Android Drag End event and the last
    ContentProvider#openFile attempted by the drop target app. The duration is
    calculated when the image data expired at the designated time limit. It is
    not recorded if the image data is replaced before the time limit due to the
    start of the next image drag. Another metric
    Android.DragDrop.Image.OpenFileTime.FirstAttempt is recorded for the first
    ContentProvider#openFile. Record 0 if the duration is negative (e.g.
    ContentProvider#openFile is accessed before drag ends). Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Image.Size" units="KB"
    expires_after="2023-03-19">
  <owner>shuyng@google.com</owner>
  <owner>clank-large-form-factors@google.com</owner>
  <summary>
    Records the image size being dragged from Chrome. Recorded when start
    dragging an image from Chrome's web content, regardless of whether drop is
    handled successfully. Used to evaluate the memory consumption. Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Image.UriCreatedInterval" units="ms"
    expires_after="2023-03-19">
  <owner>shuyng@google.com</owner>
  <owner>clank-large-form-factors@google.com</owner>
  <summary>
    Records the interval between two back-to-back image drags. This is used to
    evaluate the duration to preserve the image data. Android only.
  </summary>
</histogram>

<histogram name="Android.DynamicColors.IsAvailable" enum="Boolean"
    expires_after="2023-02-02">
  <owner>skym@chromium.org</owner>
  <owner>clank-sbui-team@google.com</owner>
  <summary>
    Recorded during ChromeBaseAppCompatActivity initialization if third_party
    dynamic colors logic thinks dynamic colors are available. This is often
    based on Android version and OEM. This metric is not related to whether
    dynamic colors are desired by features/experiments.
  </summary>
</histogram>

<histogram base="true" name="Android.FeatureModules.AvailabilityStatus"
    enum="FeatureModuleAvailabilityStatus" expires_after="2023-10-16">
<!-- Name completed by histogram_suffixes
       name="AndroidFeatureModuleName" -->

  <owner>agrieve@chromium.org</owner>
  <owner>fredmello@chromium.org</owner>
  <owner>tiborg@chromium.org</owner>
  <owner>wnwen@chromium.org</owner>
  <summary>
    Availability status for each dynamic feature module. Reported once per
    Chrome start. This metric's purpose is to measure a feature module's install
    penetration over time.
  </summary>
</histogram>

<histogram base="true" name="Android.FeatureModules.CachedAwakeInstallDuration"
    units="ms" expires_after="2023-06-13">
<!-- Name completed by histogram_suffixes
       name="AndroidFeatureModuleName" -->

  <owner>agrieve@chromium.org</owner>
  <owner>fredmello@chromium.org</owner>
  <owner>tiborg@chromium.org</owner>
  <owner>wnwen@chromium.org</owner>
  <summary>
    Duration of successful installs for each dynamic feature module. Only
    contains install durations for modules first requested *before* Chrome
    started last and may therefore be installed from cache. Omits deep sleep
    time.
  </summary>
</histogram>

<histogram base="true" name="Android.FeatureModules.InstallingStatus"
    enum="FeatureModuleInstallingStatus" expires_after="2023-10-16">
<!-- Name completed by histogram_suffixes
       name="AndroidFeatureModuleName" -->

  <owner>agrieve@chromium.org</owner>
  <owner>fredmello@chromium.org</owner>
  <owner>tiborg@chromium.org</owner>
  <owner>wnwen@chromium.org</owner>
  <summary>
    Install status counter for each dynamic feature module. Recorded during
    on-demand and deferred installs.
  </summary>
</histogram>

<histogram base="true" name="Android.FeatureModules.InstallStatus"
    enum="FeatureModuleInstallStatus" expires_after="2023-06-13">
<!-- Name completed by histogram_suffixes
       name="AndroidFeatureModuleName" -->

  <owner>agrieve@chromium.org</owner>
  <owner>fredmello@chromium.org</owner>
  <owner>tiborg@chromium.org</owner>
  <owner>wnwen@chromium.org</owner>
  <summary>
    Install status for each dynamic feature module. Recorded after the
    installation has finished.
  </summary>
</histogram>

<histogram name="Android.FeatureModules.StartupTime" units="ms"
    expires_after="2023-09-18">
  <owner>agrieve@chromium.org</owner>
  <owner>fredmello@chromium.org</owner>
  <owner>tiborg@chromium.org</owner>
  <owner>wnwen@chromium.org</owner>
  <summary>
    Length of time during startup used by module framework code. This is our
    metric to improve and used to guard against regressions.
  </summary>
</histogram>

<histogram base="true"
    name="Android.FeatureModules.UncachedAwakeInstallDuration" units="ms"
    expires_after="2023-06-13">
<!-- Name completed by histogram_suffixes
       name="AndroidFeatureModuleName" -->

  <owner>agrieve@chromium.org</owner>
  <owner>fredmello@chromium.org</owner>
  <owner>tiborg@chromium.org</owner>
  <owner>wnwen@chromium.org</owner>
  <summary>
    Duration of successful installs for each dynamic feature module. Only
    contains install durations of modules first requested *after* Chrome started
    last and are therefore unlikely to be installed from cache. Omits deep sleep
    time.
  </summary>
</histogram>

<histogram name="Android.FontLookup.Blink.DLFontsLatencyFailure2"
    units="microseconds" expires_after="2023-01-15">
  <owner>drott@chromium.org</owner>
  <owner>layout-dev@chromium.org</owner>
  <summary>
    Records the latency of looking up a local font from Android downloadable
    fonts at the time of instantiating the font in the fonts backend in the
    renderer. Includes time for error checking and attempting to create the font
    from the retrieved blob, if there is one. Only records timings for
    situations in which a font could not be instantiated. This is recorded only
    on devices that support high resolution timers.
  </summary>
</histogram>

<histogram name="Android.FontLookup.Blink.DLFontsLatencySuccess2"
    units="microseconds" expires_after="2023-03-19">
  <owner>drott@chromium.org</owner>
  <owner>layout-dev@chromium.org</owner>
  <summary>
    Records the latency of looking up a local font from Android downloadable
    fonts at the time of instantiating the font in the fonts backend in the
    renderer. Includes time for error checking and attempting to create the font
    from the retrieved blob, if there is one. Only records timings for
    situations in which a font was successfully instantiated and returned. This
    is recorded only on devices that support high resolution timers.
  </summary>
</histogram>

<histogram name="Android.FontLookup.Blink.GetTableLatency" units="ms"
    expires_after="2023-04-23">
  <owner>drott@chromium.org</owner>
  <owner>cduvall@chromium.org</owner>
  <owner>layout-dev@chromium.org</owner>
  <summary>
    Records the latency of fetching the font name lookup table from the browser.
    The table is cached by the renderer so will usually only be fetched once per
    renderer startup. This is recorded when an attempt is made to fetch the
    table, typically once per renderer on the first font lookup for that
    process. If the original fetch fails, this will be recorded the next time a
    font lookup is requested.
  </summary>
</histogram>

<histogram name="Android.FontLookup.FetchAllFontFiles.Time" units="ms"
    expires_after="2023-03-19">
  <owner>twellington@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records the time taken to fetch all available font files from the GMS Core
    Android downloadable font provider.
  </summary>
</histogram>

<histogram name="Android.FontLookup.FetchFontName" enum="FetchFontName"
    expires_after="2022-09-20">
  <obsolete>
    Removed 09/2022. No longer needed.
  </obsolete>
  <owner>twellington@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records font fetch requests by font name. These results may be used to
    determine whether it remains worthwhile to preload fonts that are available
    for renderer font match requests.
  </summary>
</histogram>

<histogram name="Android.FontLookup.FetchFontResult" enum="FetchFontResult"
    expires_after="2022-09-20">
  <obsolete>
    Removed 09/2022. No longer needed.
  </obsolete>
  <owner>twellington@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records the result of font fetch requests made to the GMS Core Android
    downloadable font provider. The result may be success, or failure with a
    reason. In the case of multiple failures, only the first one encountered is
    reported. See implementation at AndroidFontLookupImpl.
  </summary>
</histogram>

<histogram name="Android.FontLookup.GmsFontRequest.Time" units="ms"
    expires_after="2023-03-19">
  <owner>twellington@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records the time taken to make a fetchFonts font request to GMS Core via the
    Android downloadable font provider API. This metric may be used to determine
    whether it's reasonable to execute this task on the IO thread rather than
    posting to a background thread.
  </summary>
</histogram>

<histogram name="Android.FontLookup.MatchLocalFontByUniqueName.Time" units="ms"
    expires_after="2023-03-19">
  <owner>twellington@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records the time taken to respond to a request from the renderer to fetch a
    specific font file from the GMS Core Android downloadable font provider.
  </summary>
</histogram>

<histogram
    name="Android.Fonts.TimeDownloadableFontsRetrievedAfterPostInflationStartup{ActivityType}"
    units="ms" expires_after="2023-06-15">
  <owner>sinansahin@google.com</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Time it took to retrieve the downloadable fonts after post-inflation
    startup. Mutually exclusive with *BeforePostInflationStartup. Recorded when
    all downloadable fonts are retrieved. {ActivityType}
  </summary>
  <token key="ActivityType" variants="ActivityType"/>
</histogram>

<histogram
    name="Android.Fonts.TimeDownloadableFontsRetrievedBeforePostInflationStartup{ActivityType}"
    units="ms" expires_after="2023-06-15">
  <owner>sinansahin@google.com</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Amount of time the downloadable fonts were retrieved before post-inflation
    startup. Mutually exclusive with *AfterPostInflationStartup. Recorded after
    AsyncInitializationActivity#performPostInflationStartup. {ActivityType}
  </summary>
  <token key="ActivityType" variants="ActivityType"/>
</histogram>

<histogram
    name="Android.Fonts.TimeToRetrieveDownloadableFontsAfterOnCreate{ActivityType}"
    units="ms" expires_after="2023-06-15">
  <owner>sinansahin@google.com</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Time it took to retrieve the downloadable fonts after Application#OnCreate.
    Recorded when all downloadable fonts are retrieved. {ActivityType}
  </summary>
  <token key="ActivityType" variants="ActivityType"/>
</histogram>

<histogram name="Android.HistoryPage.ClearBrowsingData.PerProfileType"
    enum="BrowserProfileType" expires_after="2023-03-19">
  <owner>roagarwal@chromium.org</owner>
  <owner>chrome-incognito@google.com</owner>
  <summary>
    Records the clicks on Clear Browsing Data button at history page for each
    profile type in Android.
  </summary>
</histogram>

<histogram name="Android.HomeButton.PerProfileType" enum="BrowserProfileType"
    expires_after="2023-01-15">
  <owner>roagarwal@chromium.org</owner>
  <owner>chrome-incognito@google.com</owner>
  <summary>
    Records the clicks on Home button in Android toolbar for each profile type.
  </summary>
</histogram>

<histogram name="Android.IncognitoNotification.FileNotDeleted" enum="Boolean"
    expires_after="2023-04-23">
  <owner>roagarwal@chromium.org</owner>
  <owner>chrome-incognito@google.com</owner>
  <summary>
    Records the count of any cases when clicking on the "Close all
    Incognito tabs" notification may not delete any files which were opened
    in the Incognito session. True value denotes file was not deleted and false
    otherwise.
  </summary>
</histogram>

<histogram name="Android.IncognitoReauth.PrefToggledFromSettingPage"
    enum="IncognitoReauthToggleValueType" expires_after="M115">
  <owner>roagarwal@chromium.org</owner>
  <owner>chrome-incognito@google.com</owner>
  <summary>
    Records the count when the Incognito lock setting was either turned
    "on" or "off" from the Chrome Settings > Privacy and
    Security > Lock Incognito tabs when you leave Chrome, option. This
    setting can be in disabled state if the Android screen lock is not set-up,
    in which case we don't record this metric. This is recorded only when the
    toggle is not in disabled state and if the re-authentication checks succeeds
    which follows after the user changes the toggle. This covers only the
    interactions done from the above mentioned Incognito lock Setting page. See
    also the metric "Android.IncognitoReauth.PromoActionType" which
    records the opt-in made exclusively from promo card.
  </summary>
</histogram>

<histogram name="Android.IncognitoReauth.PromoActionType"
    enum="IncognitoReauthPromoActionType" expires_after="M115">
  <owner>roagarwal@chromium.org</owner>
  <owner>chrome-incognito@google.com</owner>
  <summary>
    Records the action type the user makes on the Incognito re-auth promo card
    which is shown inside the Incognito tab grid view. There's only two possible
    interactions possible which is either to turn on the Incognito lock or
    dismiss the promo. A "Promo accepted" entry is emitted when user
    clicks on "Turn on Incognito lock" (gated on successful
    re-authentication) and a "No thanks" value is emitted when the
    user clicks on "No thanks".
  </summary>
</histogram>

<histogram name="Android.Intent.BlockedExternalNavLastGestureTime" units="ms"
    expires_after="2023-04-23">
  <owner>mthiesse@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    When a navigation to an external protocol is blocked due to a missing
    gesture on the redirect chain, records the time in milliseconds since the
    last time the user touched the screen before the navigation. Note that this
    notion is decoupled from the last user activation in blink due to quirks
    around how the RedirectHandler works.
  </summary>
</histogram>

<histogram name="Android.Intent.IntentUriNavigationResult"
    enum="IntentUriNavigationResult" expires_after="2023-08-16">
  <owner>mthiesse@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Recorded when a navigation to an Intent URI occurs. Records the results of
    the navigation.
  </summary>
</histogram>

<histogram name="Android.Intent.IntentUriWithSelector" enum="Boolean"
    expires_after="2023-04-16">
  <owner>mthiesse@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    When a site attempts to navigate an intent: or android-app: URI, records
    whether or not the URI contained an intent selector.
  </summary>
</histogram>

<histogram name="Android.Intent.MainFrameIntentLaunch"
    enum="MainFrameIntentLaunch" expires_after="2023-08-16">
  <owner>mthiesse@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Recorded when an external app is launched as the result of a navigation.
    Records the source and scheme of the navigation.
  </summary>
</histogram>

<histogram name="Android.Intent.OpenFileType" enum="AndroidUtilsMimeTypes"
    expires_after="2023-09-18">
  <owner>twellington@chromium.org</owner>
  <owner>mthiesse@chromium.org</owner>
  <summary>
    When a user attempts to navigate a file: URI, records the mime type of the
    file.
  </summary>
</histogram>

<histogram name="Android.Intent.ShouldIgnoreNewTabResult"
    enum="NavigationInterceptResult" expires_after="2023-11-07">
  <owner>mthiesse@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the result of Navigation Interception for popup navigations from
    Tabs.
  </summary>
</histogram>

<histogram name="Android.IsLastSharedAppInfoRetrieved"
    enum="BooleanIsLastSharedAppInfoRetrieved" expires_after="M77">
  <owner>tedchoc@chromium.org</owner>
  <owner>clank-team@google.com</owner>
  <summary>
    Signifies whether the last shared app information is retrieved successfully
    or not. This is logged when configuring the direct sharing menu item.
  </summary>
</histogram>

<histogram base="true" name="Android.IsolatedSplits.ClassLoaderReplaced"
    enum="BooleanYesNo" expires_after="2023-06-26">
<!-- Name completed by histogram_suffixes name="AndroidFeatureModuleName" -->

  <owner>cduvall@chromium.org</owner>
  <owner>agrieve@chromium.org</owner>
  <summary>
    Whether a split Context has had its ClassLoader replaced due to b/172602571.
    This is recorded every time a split Context is created.
  </summary>
</histogram>

<histogram base="true" name="Android.IsolatedSplits.ContextCreateTime"
    units="ms" expires_after="2023-06-26">
<!-- Name completed by histogram_suffixes name="AndroidFeatureModuleName" -->

  <owner>cduvall@chromium.org</owner>
  <owner>agrieve@chromium.org</owner>
  <summary>
    Amount of time it takes to create a new Context for a split. This will only
    be recorded if isolated splits are enabled.
  </summary>
</histogram>

<histogram base="true" name="Android.IsolatedSplits.PreloadWaitTime" units="ms"
    expires_after="2023-06-26">
<!-- Name completed by histogram_suffixes name="AndroidFeatureModuleName" -->

  <owner>cduvall@chromium.org</owner>
  <owner>agrieve@chromium.org</owner>
  <summary>
    Amount of time spent waiting for a split preload task to finish. This will
    only be recorded if isolated splits are enabled.
  </summary>
</histogram>

<histogram name="Android.Jank.AsyncTaskGetOnUiThreadStatus"
    enum="AsyncTaskStatus" expires_after="2023-04-16">
  <owner>smaier@chromium.org</owner>
  <owner>agrieve@chromium.org</owner>
  <summary>
    The status of an AsyncTask when get() is called on the UI thread. This is
    only recorded if the AsyncTask isn't immediately available.

    Seeing the distribution of PENDING vs RUNNING tasks will give us a better
    idea for how to approach these hangs.
  </summary>
</histogram>

<histogram name="Android.Jank.FrameDuration{Scenario}" units="ms"
    expires_after="2022-06-30">
  <owner>salg@google.com</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    Amount of time it takes to draw Android UI frames on ChromeTabbedActivity as
    measured by Android's FrameMetrics API. Each frame's draw duration is stored
    individually {Scenario}.

    The samples for this metric (Along with Android.Jank.JankBursts and
    Android.Jank.MissedFrames) are manually passed from Java to C++ to be
    recorded. This is done instead of recording in real time from Java due to
    the large number of generated samples (potentially ~60 per second).
    Recording them directly from Java would result in a JNI call for each sample
    which could cause performance issues.

    FrameMetrics only reports frames with Android UI updates. An idle omnibox
    would report only 2 frames per second due to the cursor blink animation.
    Scrolling through a web page may record no frames if no Android UI (like the
    address bar) updates.
  </summary>
  <token key="Scenario" variants="JankMetricsScenarios"/>
</histogram>

<histogram name="Android.Jank.JankBursts{Scenario}" units="ms"
    expires_after="2022-06-30">
  <owner>salg@google.com</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    Recorded alongside Android.Jank.FrameDuration {Scenario}. Each sample
    represents a jank burst: the total frame duration of one or many janky
    frames drawn in quick succession. For example, the following sequence of
    frame durations: [2ms, 100ms, 100ms, 100ms, 2ms, 2ms, 2ms, 100ms, 2ms] would
    be recorded as 2 jank bursts: [300ms, 100ms].

    Jank bursts may include non-janky frames if both adjacent frames are janky,
    example: [2ms, 100ms, 100ms, 2ms, 100ms, 100ms, 2ms] would count as a single
    jank burst: [402ms].

    Jank bursts are started with a single janky frame, and end with either 2 or
    more non-janky frames or a period of inactivity between janky frames
    (>50ms). For example: [100ms, 100ms, (...500ms without new frames
    later...), 100ms] would be recorded as 2 jank bursts: [200ms, 100ms]. The
    third frame is counted separately because of the period of inactivity before
    it indicates its jankyness is caused by a different event or animation. (see
    go/clank-zero-browser-jank for more details).
  </summary>
  <token key="Scenario" variants="JankMetricsScenarios"/>
</histogram>

<histogram name="Android.Jank.MissedFrames{Scenario}" units="frames"
    expires_after="2022-06-30">
  <owner>salg@google.com</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    Number of frames that Android's FrameMetrics API skipped reporting on
    because of high main thread activity. This metric is recorded at the same
    time as Android.Jank.* histograms {Scenario}. Each sample is the number of
    frames that we didn't receive timings for, so their draw duration is not
    recorded in the respective Android.Jank.FrameDuration.* histogram, and (even
    if its duration was greater than 16ms) it is not counted in any
    Android.Jank.JankyBursts.* samples.

    A high number of missed frames would mean that we are taking too long to
    record frame metrics and that the other Android.Jank.* histograms may not be
    accurate.
  </summary>
  <token key="Scenario" variants="JankMetricsScenarios"/>
</histogram>

<histogram name="Android.KernelVersion" enum="AndroidKernelVersion"
    expires_after="2023-04-23">
  <owner>rsesek@chromium.org</owner>
  <summary>
    Reports the kernel major and minor version from the utsname.release field.
    The low 16 bits of each version are combined into a 32-bit integer. The
    range is from [0x00020006,0x0004000a] to track kernel versions 2.6 through
    4.10.
  </summary>
</histogram>

<histogram
    name="Android.MainActivity.ExplicitMainViewIntentDispatched.OnCreate"
    enum="BooleanDispatched" expires_after="2021-01-24">
  <owner>wnwen@chromium.org</owner>
  <summary>
    Whether VIEW intent sent explicitly to .Main activity was dispatched by
    onCreate().
  </summary>
</histogram>

<histogram
    name="Android.MainActivity.ExplicitMainViewIntentDispatched.OnNewIntent"
    enum="BooleanDispatched" expires_after="2020-06-28">
  <owner>wnwen@chromium.org</owner>
  <summary>
    Whether VIEW intent sent explicitly to .Main activity was dispatched by
    onNewIntent().
  </summary>
</histogram>

<histogram name="Android.MainActivity.UndispatchedExplicitMainViewIntentSource"
    enum="ClientAppId" expires_after="M85">
  <owner>wnwen@chromium.org</owner>
  <summary>
    Sources (ExternalAppId) of undispatched VIEW intents sent explicitly to
    .Main activity alias.
  </summary>
</histogram>

<histogram name="Android.ManageSpace.ActionTaken"
    enum="AndroidManageSpaceButton" expires_after="M95">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Recorded when the user presses a button in the 'Manage Space' screen for
    Chrome. Note: the 'Clear App Data' option is likely incorrect, as the result
    of that button disables UMA recording (as we factory reset the app).
  </summary>
</histogram>

<histogram name="Android.ManageSpace.ClearUnimportantTime" units="ms"
    expires_after="M95">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records the time it takes to delete all unimportant sites when the user
    initiates the 'Clear Unimportant Sites' action in the 'Manage Space' screen
    for Chrome.
  </summary>
</histogram>

<histogram name="Android.ManageSpace.TotalDiskUsageMB" units="MB"
    expires_after="M95">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Recorded when the user opens the 'Manage Space' screen for Chrome, after the
    disk usage is calculated. The disk usage value represents the accumulated
    disk usage by websites.
  </summary>
</histogram>

<histogram name="Android.ManageSpace.UnimportantDiskUsageMB" units="MB"
    expires_after="M95">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Recorded when the user opens the 'Manage Space' screen for Chrome, after the
    disk usage is calculated. The disk usage value represents the accumulated
    disk usage by websites that are not considered 'important'.
  </summary>
</histogram>

<histogram name="Android.MediaPickerShown" enum="MediaPickerShown"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Recorded once per batch of files uploaded, when Chrome has made the
    determination of what media picker to show to the user.
  </summary>
</histogram>

<histogram name="Android.MemoryPressureMonitor.GetMyMemoryState.Failed.Time"
    units="microseconds" expires_after="M77">
  <obsolete>
    Removed 09/2022. Expired and not needed anymore.
  </obsolete>
  <owner>ssid@chromium.org</owner>
  <summary>
    The duration of each failed ActivityManager.getMyMemoryState() call made by
    MemoryPressureMonitor.

    Warning: This metric may include reports from clients with low-resolution
    clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
    will cause this metric to have an abnormal distribution. When considering
    revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
    solution.
  </summary>
</histogram>

<histogram name="Android.MemoryPressureMonitor.GetMyMemoryState.Succeeded.Time"
    units="microseconds" expires_after="2020-04-26">
  <obsolete>
    Removed 09/2022. Expired and not needed anymore.
  </obsolete>
  <owner>ssid@chromium.org</owner>
  <summary>
    The duration of each successful ActivityManager.getMyMemoryState() call made
    by MemoryPressureMonitor.

    Warning: This metric may include reports from clients with low-resolution
    clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
    will cause this metric to have an abnormal distribution. When considering
    revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
    solution.
  </summary>
</histogram>

<histogram name="Android.MemoryPressureNotification{AndroidProcessType}"
    enum="Android.MemoryPressureNotification" expires_after="2021-12-05">
  <owner>ssid@chromium.org</owner>
  <summary>
    Memory pressure notifications sent by Android through ComponentCallbacks2.
    This metric was added 04/2018; for prior data for the browser process see
    MemoryAndroid.NotificationBackground and
    MemoryAndroid.NotificationForeground. {AndroidProcessType}
  </summary>
  <token key="AndroidProcessType">
    <variant name=".Browser" summary="Browser process"/>
    <variant name=".ChildService"
        summary="Child service process (renderer, GPU, etc.)"/>
  </token>
</histogram>

<histogram name="Android.Messages.Dismissed{MessageIdentifier}"
    enum="MessageDismissReason" expires_after="M115">
  <owner>lazzzis@chromium.org</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Recorded once per message when the message is dismissed to capture the
    dismissal reason (e.g. primary button tap, timeout). The histogram can be
    used for measuring user engagement with messages of different types.
  </summary>
  <token key="MessageIdentifier" variants="MessageIdentifiers"/>
</histogram>

<histogram name="Android.Messages.Enqueued" enum="MessageIdentifier"
    expires_after="M115">
  <owner>lazzzis@chromium.org</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the message identifier each time a message is enqueued through
    MessageDispatcher (the entry point to Chrome for Android's messages system).
    This histogram can be used for getting a count of messages broken down by
    message identifier.
  </summary>
</histogram>

<histogram name="Android.Messages.Enqueued.Hidden" enum="MessageIdentifier"
    expires_after="M115">
  <owner>lazzzis@chromium.org</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the message identifier when an enqueued message is not immediately
    displayed either because there is another message on the secreen or because
    message scope (e.g. tab) is not active. This metric is recorded along with
    Android.Messages.Enqueued.Hiding, which records identifier of currently
    visible message.
  </summary>
</histogram>

<histogram name="Android.Messages.Enqueued.Hiding" enum="MessageIdentifier"
    expires_after="M115">
  <owner>lazzzis@chromium.org</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Recorded when an enqueued message is not immediately displayed. This metric
    records message identifier of a message currently displayed on the screen
    (that prevented the enqueued message from getting displayed immediately).
    INVALID_MESSAGE is recorded when the message isn't displayed because message
    scope (e.g. tab) isn't active or when message queue is suspended.
  </summary>
</histogram>

<histogram name="Android.Messages.Enqueued.Visible" enum="MessageIdentifier"
    expires_after="M115">
  <owner>lazzzis@chromium.org</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the message identifier when a message is displayed immediately when
    it is enqueued. This includes cases when there are no other messages on the
    screen as well as cases when the new message is high priority and causes
    some other message to hide.
  </summary>
</histogram>

<histogram name="Android.Messages.Stacking" enum="StackingAnimationType"
    expires_after="M115">
  <owner>lazzzis@chromium.org</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the type of stacking animation when it is triggered. The type
    indicates the relation between current displayed messages and incoming
    messages.
  </summary>
</histogram>

<histogram name="Android.Messages.Stacking.ThreeStacked"
    enum="StackingAnimationThreeStackedType" expires_after="M115">
  <owner>lazzzis@chromium.org</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the scenario when 3 message stacking could be possible.
  </summary>
</histogram>

<histogram name="Android.Messages.Stacking.{Action}" enum="MessageIdentifier"
    expires_after="M115">
  <owner>lazzzis@chromium.org</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the message identifier when {Action} during a stacking animation.
  </summary>
  <token key="Action">
    <variant name="InsertAtBack" summary="a message is inserted at back."/>
    <variant name="InsertAtFront" summary="a message is inserted at front."/>
    <variant name="PushToBack" summary="a front message is pushed to back."/>
    <variant name="PushToFront" summary="a back message is pushed to front."/>
    <variant name="RemoveBack" summary="a back message is removed."/>
    <variant name="RemoveFront" summary="a front message is removed."/>
  </token>
</histogram>

<histogram name="Android.Messages.TimeToAction.Dismiss{MessageIdentifier}"
    units="ms" expires_after="M115">
  <owner>lazzzis@chromium.org</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the time interval the message was displayed on the screen before the
    user dismissed it with a gesture. The metric is NOT recorded when the user
    presses primary or secondary button or when the message is auto-dismissed
    based on timer. The interval includes both enter and exit animation. The
    metric can be used to analyze the time threshold for the user to give up
    waiting for autodismiss timer and dismiss the message explicitly.
  </summary>
  <token key="MessageIdentifier" variants="MessageIdentifiers"/>
</histogram>

<histogram name="Android.Messages.TimeToAction{MessageIdentifier}" units="ms"
    expires_after="M115">
  <owner>lazzzis@chromium.org</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the time interval the message was displayed on the screen before the
    user explicitly dismissed it. The metric is recorded when the user presses
    primary or secondary button, or dismisses the message with a gesture. It is
    not recorded when the message is auto-dismissed based on timer. The interval
    includes both enter and exit animation. The metric can be used to analyze
    the amount of time it takes for the user to understand the message and take
    an action (e.g. click a button, dismiss the message, etc.).
  </summary>
  <token key="MessageIdentifier" variants="MessageIdentifiers"/>
</histogram>

<histogram name="Android.ModalDialog.SecurityFilteredTouchResult"
    enum="SecurityFilteredTouchResult" expires_after="2022-04-01">
  <owner>pavely@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records the action taken on a security sensitive touch event in modal
    dialog. As of M84 it is used for site premission dialogs.
  </summary>
</histogram>

<histogram name="Android.ModerateBindingCount" units="bindings"
    expires_after="M77">
  <obsolete>
    Expired in M77. See Android.ChildProcessBinding.*
  </obsolete>
  <owner>tedchoc@chromium.org</owner>
  <owner>clank-team@google.com</owner>
  <summary>
    The number of moderate bindings which were kept while Chrome process is in
    the foreground. This is logged right before Chrome process goes into the
    background.
  </summary>
</histogram>

<histogram name="Android.MultiInstance.MaxInstanceCount" units="instances"
    expires_after="2023-05-07">
  <owner>jinsukkim@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    The maximum number of Chrome instances that ran at the same time in a
    24-hour period. Checked whenever there is an activity state change to log
    the stats once in 24 hours.
  </summary>
</histogram>

<histogram name="Android.MultiInstance.NumActivities" units="activities"
    expires_after="2023-04-30">
  <owner>jinsukkim@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records the number of running ChromeTabbedActivity's on every
    ChromeTabbedActivity startup. This includes activities that may not be
    visible on screen (i.e. it includes ChromeTabbedActivity's in the
    "stopped" state). This does not include ChromeTabbedActivity's
    that have been destroyed regardless of whether their owning Android Task may
    be retrieved in Android Recents. Applicable to Android S+ only.
  </summary>
</histogram>

<histogram name="Android.MultiInstance.NumInstances" units="instances"
    expires_after="2023-04-30">
  <owner>jinsukkim@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    The number of allocated instance IDs which corresponds to the number of
    retrievable Chrome instances (aka windows). An instance is considered
    retrievable if it has tab state data on disk irrespective of whether that
    data is currently assigned to a running ChromeTabbedActivity. These
    instances may be retrieved from Chrome's in-app window manager from Android
    Recents if they are associated with a live ChromeTabbedActivity or Android
    Task. Recorded on every ChromeTabbedActivity start-up. Applicable to Android
    S+ only.
  </summary>
</histogram>

<histogram name="Android.MultipleUserProfilesState"
    enum="MultipleUserProfilesState" expires_after="2023-03-23">
  <owner>ckitagawa@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <owner>chrome-metrics-team@google.com</owner>
  <summary>
    Records whether multiple user profiles are present in Android. This is
    recorded every time a metrics log is closed.
  </summary>
</histogram>

<histogram name="Android.MultiWindowMode.Active" enum="BooleanEnabled"
    expires_after="never">
<!-- expires-never: topline metric for monitoring multi-window mode usage on Chrome for Android. -->

  <owner>twellington@chromium.org</owner>
  <owner>tedchoc@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Records on every metrics upload whether the activity is running in Android N
    multi-window mode or not.
  </summary>
</histogram>

<histogram name="Android.MultiWindowMode.TotalDuration" units="ms"
    expires_after="2022-08-16">
  <owner>jinsukkim@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Total time spent in Android N+ multi-window (aka split-screen) mode.
    Recorded when multi-window mode is exited.
  </summary>
</histogram>

<histogram name="Android.NativeBackgroundTask.TaskFinished"
    enum="BackgroundTaskId" expires_after="2023-06-15">
  <owner>mheikal@chromium.org</owner>
  <owner>hanxi@chromium.org</owner>
  <owner>hnakashima@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records that a specific background task has finished cleanly (i.e. no
    unexpected exits because of chrome crash or OOM). This includes tasks that
    have been stopped due to timeout.
  </summary>
</histogram>

<histogram name="Android.NativeBackgroundTask.TaskFinished.FullBrowser"
    enum="BackgroundTaskId" expires_after="2023-06-15">
  <owner>mheikal@chromium.org</owner>
  <owner>hanxi@chromium.org</owner>
  <owner>hnakashima@chromium.org</owner>
  <summary>
    Records that a specific native background task started in Full Browser Mode
    has finished cleanly. See Android.NativeBackgroundTask.TaskFinished for more
    details.
  </summary>
</histogram>

<histogram name="Android.NativeBackgroundTask.TaskFinished.ReducedMode"
    enum="BackgroundTaskId" expires_after="2023-06-15">
  <owner>mheikal@chromium.org</owner>
  <owner>hanxi@chromium.org</owner>
  <owner>hnakashima@chromium.org</owner>
  <summary>
    Records that a specific native background task started in Reduced Mode has
    finished cleanly. It is possible that Full Browser has launched while the
    task was running. See Android.NativeBackgroundTask.TaskFinished for more
    details.
  </summary>
</histogram>

<histogram name="Android.NativeBackgroundTask.TaskStarted"
    enum="BackgroundTaskId" expires_after="2023-06-15">
  <owner>mheikal@chromium.org</owner>
  <owner>hanxi@chromium.org</owner>
  <owner>hnakashima@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records that a specific native background task has been started. This does
    not consider tasks that are marked as DONE or RESCHEDULED before a call to
    start native is made (regardless of whether native is already loaded).
  </summary>
</histogram>

<histogram name="Android.NativeBackgroundTask.TaskStarted.FullBrowser"
    enum="BackgroundTaskId" expires_after="2023-06-15">
  <owner>mheikal@chromium.org</owner>
  <owner>hanxi@chromium.org</owner>
  <owner>hnakashima@chromium.org</owner>
  <summary>
    Records that a specific native background task has been started in Full
    Browser Mode. See Android.NativeBackgroundTask.TaskStarted for more details.
  </summary>
</histogram>

<histogram name="Android.NativeBackgroundTask.TaskStarted.ReducedMode"
    enum="BackgroundTaskId" expires_after="2023-06-15">
  <owner>mheikal@chromium.org</owner>
  <owner>hanxi@chromium.org</owner>
  <owner>hnakashima@chromium.org</owner>
  <summary>
    Records that a specific native background task has been started in Reduced
    Mode. See Android.NativeBackgroundTask.TaskStarted for more details.
  </summary>
</histogram>

<histogram name="Android.NativeStartupBridge.LoadFullBrowser"
    enum="BooleanRequested" expires_after="2021-09-12">
  <owner>mheikal@chromium.org</owner>
  <owner>hnakashima@chromium.org</owner>
  <owner>hanxi@chromium.org</owner>
  <summary>
    The number of times full-browser mode is requested to be loaded from native
    code (running in reduced mode).
  </summary>
</histogram>

<histogram name="Android.NTP.Impression" enum="NTPImpressionType"
    expires_after="2023-05-07">
  <owner>finkm@chromium.org</owner>
  <summary>
    Counts impressions of the NTP on Android. It also counts potential
    impressions. A potential impression is a place where it would make sense to
    open the NTP instead of the current view. E.g. the no-tab view is counted as
    a potential impression since this view could be replaced with the NTP. For
    better comparison regular impressions are also counted. The no-tab view
    counting happens right after the user closed the last tab and the regular
    impression counting happens at construction time of the NTP (=whenever a new
    tab is opened).
  </summary>
</histogram>

<histogram name="Android.OfflineItems.StateAtCancel{OfflineItemsSource}"
    enum="OfflineItemsStateAtCancel" expires_after="M81">
  <owner>chili@chromium.org</owner>
  <summary>
    State of a download or offline page request at user-initiated cancel.
    {OfflineItemsSource}
  </summary>
  <token key="OfflineItemsSource">
    <variant name=".Downloads" summary="Downloads"/>
    <variant name=".OfflinePages" summary="Offline pages"/>
  </token>
</histogram>

<histogram name="Android.Omnibox.InputToNavigationControllerStart" units="ms"
    expires_after="2023-04-16">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <summary>
    Records time between the user input that triggered an Omnibox navigation on
    Android to the time the Omnibox code calls into the shared C++ navigation
    code (NavigationController).
  </summary>
</histogram>

<histogram name="Android.Omnibox.InvalidMatch" enum="MatchResult"
    expires_after="2023-04-23">
  <owner>ender@chromium.org</owner>
  <owner>tedchoc@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Recorded every time AutocompleteController.java interacts with
    autocomplete_controller_android.cc. Indicates how often matches referenced
    by Java are different from the matches referenced by C++ at any position.

    Note: Chrome M91 and before only increased this histogram for specific Match
    objects that the user interacted with. As of M92, this histogram is
    increased for every case where at least one Match referenced by Java was
    different from its corresponding C++ match at the same exact position.
  </summary>
</histogram>

<histogram name="Android.Omnibox.RefineActionUsage" enum="RefineActionUsage"
    expires_after="2023-04-16">
  <owner>ender@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Records interactions with the Search Refine button, differentiating by
    context (zero-prefix vs non-zero-prefix), including the cases where the User
    did not interact with the Refine button placed beside the Search suggestion
    at all.

    Recorded once per interaction with the Omnibox and Sugestions, when the
    Omnibox loses focus. This includes cases where the User chooses to navigate
    somewhere (both by using a suggestion or pressing Go button on keyboard), or
    abandons the Omnibox.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SetGeolocationHeadersTime" units="ms"
    expires_after="2023-04-09">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <summary>
    Records time spent setting geolocation headers when the user navigates via
    the Omnibox. This time blocks the start of the navigation and is included in
    InputToNavigationStart metrics, but not in NavigationTo* metrics.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionList.LayoutTime"
    units="microseconds" expires_after="2022-10-23">
  <obsolete>
    Retired with M103. Please refer to .CreateTime2
  </obsolete>
  <owner>ender@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Records time spent on positioning all suggestions on screen. This histogram
    is recorded every time a new suggestion list is received.

    Values recorded here should generally aim to be small, likely below 2ms
    range. Higher values are an indicator of a performance problem.

    Layout operation should take place just once when suggestion view is shown
    for the first time.

    This metric is reported for all users and uses 100microsecond granularity.

    When comparing Durations measured here, also compare Total Counts for a
    correct indication of how frequently views are laid out and how the overall
    time spent performing layout operation changed.

    This histogram is related to Android.Omnibox.SuggestionView.Reused,
    Android.Omnibox.SuggestionList.MeasureTime,
    Android.Omnibox.SuggestionView.CreateTime.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionList.LayoutTime2"
    units="microseconds" expires_after="2023-04-09">
  <owner>ender@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Records time spent on positioning all suggestions on screen. This histogram
    is recorded every time a new suggestion list is received.

    Values recorded here should generally aim to be small, likely below 2ms
    range. Higher values are an indicator of a performance problem.

    Layout operation should take place just once when suggestion view is shown
    for the first time.

    This metric is reported for all users and uses 100microsecond granularity.

    When comparing Durations measured here, also compare Total Counts for a
    correct indication of how frequently views are laid out and how the overall
    time spent performing layout operation changed.

    This histogram is related to Android.Omnibox.SuggestionView.Reused,
    Android.Omnibox.SuggestionList.MeasureTime2,
    Android.Omnibox.SuggestionView.CreateTime2.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionList.MeasureTime"
    units="microseconds" expires_after="2022-06-19">
  <obsolete>
    Retired with M103. Please refer to .MeasureTime2
  </obsolete>
  <owner>ender@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Records time spent on measuring all suggestions ahead of positioning them on
    screen. This histogram is recorded every time a new suggestion list is
    received.

    Values recorded here should generally aim to be small, likely below 2ms
    range. Higher values are an indicator of a performance problem.

    Measure operation should take place just once when suggestion view is shown
    for the first time.

    This metric is reported for all users and uses 100microsecond granularity.

    When comparing Durations measured here, also compare Total Counts for a
    correct indication of how frequently views are measured and how the overall
    time spent measuring views changed.

    This histogram is related to Android.Omnibox.SuggestionView.Reused,
    Android.Omnibox.SuggestionList.LayoutTime,
    Android.Omnibox.SuggestionView.CreateTime.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionList.MeasureTime2"
    units="microseconds" expires_after="2023-04-09">
  <owner>ender@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Records time spent on measuring all suggestions ahead of positioning them on
    screen. This histogram is recorded every time a new suggestion list is
    received.

    Values recorded here should generally aim to be small, likely below 2ms
    range. Higher values are an indicator of a performance problem.

    Measure operation should take place just once when suggestion view is shown
    for the first time.

    This metric is reported for all users and uses 100microsecond granularity.

    When comparing Durations measured here, also compare Total Counts for a
    correct indication of how frequently views are measured and how the overall
    time spent measuring views changed.

    This histogram is related to Android.Omnibox.SuggestionView.Reused,
    Android.Omnibox.SuggestionList.LayoutTime2,
    Android.Omnibox.SuggestionView.CreateTime2.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionsListScrolled.{PageClass}"
    enum="Boolean" expires_after="2023-01-31">
  <owner>ender@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    For every interaction with the Omnibox, this metric records whether the user
    scrolled the omnibox while exploring suggestions on {PageClass}.

    This is recorded once per Omnibox interaction, regardless of whether the
    User chooses to navigate somewhere or abandons the interaction.
  </summary>
  <token key="PageClass">
    <variant name="NTP" summary="the New Tab Page"/>
    <variant name="Other" summary="a website"/>
    <variant name="SRP" summary="the Search Results Page"/>
    <variant name="Widget" summary="the Widget Search Activity"/>
  </token>
</histogram>

<histogram name="Android.Omnibox.SuggestionView.CreatedType"
    enum="OmniboxSuggestionUiType" expires_after="2023-07-01">
  <owner>ender@google.com</owner>
  <owner>gangwu@chromium.org</owner>
  <owner>rongtan@chromium.org</owner>
  <summary>
    Records the type of suggestion that was reused with the help of
    RecyclerView.

    This histogram drives OmniboxSuggestionsDropdown optimization, helping us
    find the balance between the volume of suggestions and amount of memory we
    delegate to re-use the pre-constructed suggestion views.

    Along with the Android.Omnibox.SuggestionView.ReusedType, the two histograms
    paint the picture of which suggestions need to be created more often than
    others vs which suggestions have more capacity than is actually needed.
    Higher reuse means lower latency at the expense of slight increase of memory
    consumption.

    This histogram is related to Android.Omnibox.SuggestionView.ReusedType.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionView.CreateTime"
    units="microseconds" expires_after="2022-06-19">
  <obsolete>
    Retired with M103. Please refer to .CreateTime2
  </obsolete>
  <owner>ender@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Records time spent creating a single suggestion.

    Values recorded here should generally aim to be small, below 1ms range.
    Higher values may be an indicator of a performance problem.

    This metric is reported for all users and uses 100microsecond granularity.

    When comparing Durations measured here, also compare Total Counts for a
    correct indication of how frequently views are created and how the overall
    time spent creating views changed.

    This histogram is related to Android.Omnibox.SuggestionList.LayoutTime,
    Android.Omnibox.SuggestionList.MeasureTime,
    Android.Omnibox.SuggestionView.Reused.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionView.CreateTime2"
    units="microseconds" expires_after="2023-04-09">
  <owner>ender@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Records time spent creating a single suggestion.

    Values recorded here should generally aim to be small, below 1ms range.
    Higher values may be an indicator of a performance problem.

    This metric is reported for all users and uses 100microsecond granularity.

    When comparing Durations measured here, also compare Total Counts for a
    correct indication of how frequently views are created and how the overall
    time spent creating views changed.

    This histogram is related to Android.Omnibox.SuggestionList.LayoutTime2,
    Android.Omnibox.SuggestionList.MeasureTime2,
    Android.Omnibox.SuggestionView.Reused.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionView.Reused" enum="BooleanReused"
    expires_after="2023-04-02">
  <owner>ender@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Records number of times a suggestion was successfully reused.

    Values recorded here tell how efficiently View reuse algorithms operate and
    how frequently these algorithms have managed to prevent unnecessary view
    creation. Higher Reuse counts indicate better performance.

    When analysing this metric, consider checking also the Total Counts of
    Android.Omnibox.SuggestionView.CreateTime metric for a better information
    regarding how view creations and re-uses have changed:

    * If this metric increased while the Total Count of the CreateTime
    decreased, the change has positive effect.

    * If this metric increased (or decreased) and there is a similar change in
    Total Counts of CreateTime, then the effect is neutral.

    * If this metric decreased, while the Total Count increased, then the change
    has a negative effect (fewer reuses, more time spent creating views)

    This histogram is related to Android.Omnibox.SuggestionList.LayoutTime2,
    Android.Omnibox.SuggestionList.MeasureTime2,
    Android.Omnibox.SuggestionView.CreateTime2.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionView.ReusedType"
    enum="OmniboxSuggestionUiType" expires_after="2023-07-01">
  <owner>ender@google.com</owner>
  <owner>gangwu@chromium.org</owner>
  <owner>rongtan@chromium.org</owner>
  <summary>
    Records the type of suggestion that was reused with the help of
    RecyclerView.

    This histogram drives OmniboxSuggestionsDropdown optimization, helping us
    find the balance between the volume of suggestions and amount of memory we
    delegate to re-use the pre-constructed suggestion views.

    Along with the Android.Omnibox.SuggestionView.CreatedType, the two
    histograms paint the picture of which suggestions need to be created more
    often than others vs which suggestions have more capacity than is actually
    needed. Higher reuse means lower latency at the expense of slight increase
    of memory consumption.

    This histogram is related to Android.Omnibox.SuggestionView.CreatedType.
  </summary>
</histogram>

<histogram name="Android.Omnibox.UsedSuggestionFromCache" enum="Boolean"
    expires_after="2022-09-04">
  <owner>ender@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Records whether users interacted with suggestion originating from Java
    cache.

    Android presents the Cached suggestions for a brief time before the Native
    libraries become available, replacing these with a fresh content as soon as
    Autocomplete subsystem serves them. This histogram records all the events
    where the cached suggestions were shown for an extended period of time -
    long enough for the User to identify and interact with a suggestion of their
    choice.

    Recorded every time the User initiates navigation using the Omnibox or the
    Suggestions list, regardless of context.
  </summary>
</histogram>

<histogram name="Android.OmniboxFocusReason" enum="OmniboxFocusReason"
    expires_after="2023-04-02">
  <owner>mdjones@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>amaralp@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <owner>jdonnelly@chromium.org</owner>
  <summary>Records how the omnibox was focused.</summary>
</histogram>

<histogram name="Android.OpenHistoryFromMenu.PerProfileType"
    enum="BrowserProfileType" expires_after="2023-01-15">
  <owner>roagarwal@chromium.org</owner>
  <owner>chrome-incognito@google.com</owner>
  <summary>
    Records the clicks on History menu item separately for each profile type in
    Android.
  </summary>
</histogram>

<histogram name="Android.PackageStats.CacheSize" units="MB"
    expires_after="2023-03-05">
  <owner>nyquist@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the size of the user's cache at startup on Android O and above.
  </summary>
</histogram>

<histogram name="Android.PackageStats.CodeSize" units="MB"
    expires_after="2023-03-05">
  <owner>nyquist@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    At startup, records the space on disk taken by Chrome application including
    APK resources, compiled libraries, and extracted native code. Only recorded
    for Android O and above.
  </summary>
</histogram>

<histogram name="Android.PackageStats.DataSize" units="MB"
    expires_after="2023-03-05">
  <owner>nyquist@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the size of the user's data directory at startup on Android O and
    above. Does not include cache size.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.BitmapScalerTask" units="ms"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the amount of time the BitmapScaler spent scaling a bitmap.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.CacheHits" units="Hits"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the total number of images served from the high-res cache during
    the lifetime of the dialog.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DecodeRequests" units="Hits"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the total number of images sent for decoding during the lifetime of
    the dialog.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DecoderHostFailureOutOfMemory" units="%"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The percentage of out-of-memory decoding failures, per batch of photos (not
    videos) decoded. Intended to help identify if there are devices where
    decoding fails 100% of the time. Be wary at looking at other numbers in the
    histogram, as a value emitted at, say, 50% may represent one failure in a
    two-item decoding or 50 failures in a hundred-item decoding. These are
    qualitatively different experiences for a user.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DecoderHostVideoFileError" units="%"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The percentage of file error decoding failures, per batch of videos (not
    photos) decoded. Intended to help identify if there are devices where
    decoding fails 100% of the time. Be wary at looking at other numbers in the
    histogram, as a value emitted at, say, 50% may represent one failure in a
    two-item decoding or 50 failures in a hundred-item decoding. These are
    qualitatively different experiences for a user.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DecoderHostVideoIoError" units="%"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The percentage of IO error decoding failures, per batch of videos (not
    photos) decoded. Intended to help identify if there are devices where
    decoding fails 100% of the time. Be wary at looking at other numbers in the
    histogram, as a value emitted at, say, 50% may represent one failure in a
    two-item decoding or 50 failures in a hundred-item decoding. These are
    qualitatively different experiences for a user.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DecoderHostVideoRuntimeError" units="%"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The percentage of runtime error decoding failures, per batch of videos (not
    photos) decoded. Intended to help identify if there are devices where
    decoding fails 100% of the time. Be wary at looking at other numbers in the
    histogram, as a value emitted at, say, 50% may represent one failure in a
    two-item decoding or 50 failures in a hundred-item decoding. These are
    qualitatively different experiences for a user.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DecoderHostVideoUnknownError" units="%"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The percentage of unknown decoding error failures, per batch of videos (not
    photos) decoded. Intended to help identify if there are devices where
    decoding fails 100% of the time. Be wary at looking at other numbers in the
    histogram, as a value emitted at, say, 50% may represent one failure in a
    two-item decoding or 50 failures in a hundred-item decoding. These are
    qualitatively different experiences for a user.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DialogAction"
    enum="PhotoPickerDialogAction" expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records which action the user takes in the PhotoPickerDialog.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.EnumeratedFiles" units="Files"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the total number of files returned from the enumeration operation.
    Measured once at the end of the enumeration operation.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.EnumeratedRate"
    units="Files per 10th of a second" expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the enumeration rate (files per tenths of a second). Measured once
    at the end of the enumeration operation.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.EnumerationTime" units="ms"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the amount of time the BitmapScaler spent enumerating files on
    disk. Measured once at the end of the enumeration operation.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.ExifOrientation" enum="ExifOrientation"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records whether the EXIF orientation directive is present and what it is set
    to. Collected once per decoded image, but only on Android N and above (and
    when no IO error occurs).
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.ImageByteCount" units="KB"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the byte count of a decoded image. Only recorded on successful
    decodes.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.ImageDecodeTime" units="ms"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the amount of time it takes the decoder to decode one image. Only
    recorded on successful decodes.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.RequestProcessTime" units="ms"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the amount of time it takes to process one image decode request
    (not video) end to end (RPC and actual decoding of the bits by utility
    process). Recorded whether or not the RPC/decode request was successful.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.RequestProcessTimeAnimation" units="ms"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the amount of time it takes to decode all the frames needed to show
    the animation -- end to end (RPC and actual decoding of the bits by utility
    process). Recorded whether or not the RPC/decode request was successful.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.RequestProcessTimeThumbnail" units="ms"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the amount of time it takes to process one video frame request end
    to end (RPC and actual decoding of the bits by utility process). Recorded
    whether or not the RPC/decode request was successful.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.UpscaleLowResBitmap" units="ms"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the amount of time it takes to upscale a bitmap from the low-res
    cache. Recorded only when there a cache miss from the high-res bitmap but a
    cache hit from the low-res (placeholder) bitmap.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.VideoByteCount" units="KB"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the byte count of the first video thumbnail. Only recorded on
    successful decodes.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.VideoDecodeTimeAnimation" units="ms"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the amount of time it takes the decoder to decode all the frames
    needed to display an animated thumbnail. Only recorded on successful
    decodes.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.VideoDecodeTimeThumbnail" units="ms"
    expires_after="2023-06-01">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the amount of time it takes the decoder to decode the first frame
    of a video. Only recorded on successful decodes.
  </summary>
</histogram>

<histogram name="Android.PlayServices.Installed" enum="BooleanInstalled"
    expires_after="2022-12-25">
  <owner>twellington@chromium.org</owner>
  <owner>tedchoc@chromium.org</owner>
  <summary>
    Whether Google Play Services is installed on the device. Recorded during
    deferred startup.
  </summary>
</histogram>

<histogram name="Android.PlayServices.Version" units="versioncode"
    expires_after="2023-04-30">
  <owner>twellington@chromium.org</owner>
  <owner>tedchoc@chromium.org</owner>
  <summary>
    The version code for Google Play Services if it is installed on the device,
    or 0 if it is not. Recorded during deferred startup.
  </summary>
</histogram>

<histogram name="Android.PrepareMenu.OpenWebApkVisibilityCheck" units="ms"
    expires_after="2023-06-01">
  <owner>hartmanng@chromium.org</owner>
  <owner>
    src/chrome/android/java/src/org/chromium/chrome/browser/webapps/OWNERS
  </owner>
  <summary>
    Measures the amount of time spent querying for whether a WebAPK is already
    installed.
  </summary>
</histogram>

<histogram name="Android.RequestDesktopSite.Changed" enum="SiteLayout"
    expires_after="2023-04-23">
  <owner>shuyng@google.com</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records the changes of request desktop site content settings. This is
    recorded when a user manually switches the global setting between
    mobile/desktop.
  </summary>
</histogram>

<histogram name="Android.RequestDesktopSite.DomainSettingChanged"
    enum="Boolean" expires_after="2023-03-19">
  <owner>shuyng@google.com</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records the new domain level Request Desktop Setting when changed. False
    means Mobile site while true means Desktop site. This is recorded when a
    user manually edits a domain level Request Desktop Setting from the site
    settings exception list.
  </summary>
</histogram>

<histogram name="Android.RequestDesktopSite.SubDomainSettingChanged"
    enum="Boolean" expires_after="2023-03-19">
  <owner>shuyng@google.com</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records the new subdomain level Request Desktop Setting when changed. False
    means Mobile site while true means Desktop site. This is recorded when a
    user manually edits a subdomain level Request Desktop Setting from the site
    settings exception list.
  </summary>
</histogram>

<histogram name="Android.RequestDesktopSite.TabletEligible" enum="Boolean"
    expires_after="2022-04-17">
  <owner>gangwu@chromium.org</owner>
  <owner>fgorski@chromium.org</owner>
  <summary>
    Records if Chrome width is eligible for requesting desktop sites. Recorded
    only when navigating to google or google search. This is recorded when
    chrome adds X-Eligible-Tablet to the http header per request.
  </summary>
</histogram>

<histogram name="Android.RequestDesktopSite.UseDesktopUserAgent" enum="Boolean"
    expires_after="2023-04-23">
  <owner>gangwu@chromium.org</owner>
  <owner>fgorski@chromium.org</owner>
  <summary>
    Records if Chrome uses the desktop site user agent to request websites. This
    is recorded when each tab loads a new url or reloads a url.
  </summary>
</histogram>

<histogram name="Android.RequestDesktopSite.UserSwitchToDesktop" enum="Boolean"
    expires_after="2023-04-23">
  <owner>gangwu@chromium.org</owner>
  <owner>fgorski@chromium.org</owner>
  <summary>
    Records if a user switched to request desktop site from the app menu. This
    is recorded when a user manually switches sites between the desktop/mobile.
  </summary>
</histogram>

<histogram
    name="Android.RequestDesktopSite.UserSwitchToDesktop.DomainSettingAdded"
    enum="Boolean" expires_after="2023-03-19">
  <owner>shuyng@google.com</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records the new domain level Request Desktop Setting when added. False means
    Mobile site while true means Desktop site. This is recorded when a user
    manually adds a domain level Request Desktop Setting from the Add site
    dialog in Site settings.
  </summary>
</histogram>

<histogram
    name="Android.RequestDesktopSite.UserSwitchToDesktop.SubDomainSettingAdded"
    enum="Boolean" expires_after="2023-03-19">
  <owner>shuyng@google.com</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records the new subdomain level Request Desktop Setting when added. False
    means Mobile site while true means Desktop site. This is recorded when a
    user manually adds a subdomain level Request Desktop Setting from the Add
    site dialog in Site settings.
  </summary>
</histogram>

<histogram name="Android.RestoreResult" enum="AndroidRestoreResult"
    expires_after="2023-04-23">
  <owner>triploblastic@chromium.org</owner>
  <owner>chrome-signin-team@google.com</owner>
  <summary>
    Whether Chrome tried to restore its settings from a previous device or
    installation, and what happened when it did. Only recorded on first run.
  </summary>
</histogram>

<histogram name="Android.Rotation.BeginToRendererFrameActivation" units="ms"
    expires_after="2023-04-30">
  <owner>jonross@chromium.org</owner>
  <owner>graphics-dev@chromium.org</owner>
  <summary>
    Measures the amount of time from when Android begins notifying the Browser
    process of a rotation, to when the Renderer successfully submits and
    activates a frame in the new orientation.
  </summary>
</histogram>

<histogram name="Android.SearchEngineChoice.ChosenSearchEngine"
    enum="OmniboxSearchEngineType" expires_after="2023-06-01">
  <owner>fgorski@chromium.org</owner>
  <owner>wylieb@chromium.org</owner>
  <summary>
    The type of the search engine chosen by the user in Search Engine Choice
    flow.
  </summary>
</histogram>

<histogram name="Android.SearchEngineChoice.Events"
    enum="AndroidSearchEngineChoiceEvents" expires_after="2023-06-01">
  <owner>wylieb@chromium.org</owner>
  <owner>fgorski@chromium.org</owner>
  <summary>
    Counts occurences of various events related to Search Engine Choice feature.
  </summary>
</histogram>

<histogram name="Android.SearchEngineChoice.EventsV2"
    enum="AndroidSearchEngineChoiceEventsV2" expires_after="2023-06-01">
  <owner>wylieb@chromium.org</owner>
  <owner>pavely@chromium.org</owner>
  <owner>fgorski@chromium.org</owner>
  <summary>
    Counts occurences of various events related to Search Engine Choice V2
    feature.
  </summary>
</histogram>

<histogram name="Android.SearchEngineChoice.SearchEngineBeforeChoicePrompt"
    enum="OmniboxSearchEngineType" expires_after="2023-06-01">
  <owner>wylieb@chromium.org</owner>
  <owner>fgorski@chromium.org</owner>
  <summary>
    The type of the search engine used before Search Engine Choice flow was
    presented.
  </summary>
</histogram>

<histogram name="Android.SeccompStatus.PhotoPickerSandbox"
    enum="AndroidSeccompSandboxStatus" expires_after="M99">
  <owner>peter@chromium.org</owner>
  <owner>rsesek@chromium.org</owner>
  <summary>
    Reports the status of the seccomp-bpf sandbox in photo picker decoding
    processes. Anything other than "Sandbox Engaged" indicates the
    sandbox is not turned on. See https://crbug.com/477049.
  </summary>
</histogram>

<histogram name="Android.SeccompStatus.RendererSandbox"
    enum="AndroidSeccompSandboxStatus" expires_after="2023-04-23">
  <owner>rsesek@chromium.org</owner>
  <summary>
    Reports the status of the seccomp-bpf sandbox in renderer processes.
    Anything other than "Sandbox Engaged" indicates the sandbox is not
    turned on. See https://crbug.com/477049.
  </summary>
</histogram>

<histogram name="Android.SelectFileDialogContentSelected"
    enum="SelectFileDialogContent" expires_after="2023-04-23">
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Records the types of content selected for upload, focusing mostly on image
    and video types and how they were determined (asking ContentResolver for the
    MIME type or going by extension). Recorded when user uploads files to a
    website (once per item uploaded).
  </summary>
</histogram>

<histogram name="Android.SelectFileDialogImgCount" units="images"
    expires_after="2023-04-23">
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Records the number of images selected in either the new Photo Picker or the
    standard Android file picker. Note: Only recorded in situations determined
    to warrant the new Photo Picker (not, for example, if mixed content, like
    images and text files, was requested).
  </summary>
</histogram>

<histogram name="Android.SelectFileDialogScope" enum="SelectFileDialogScope"
    expires_after="2023-04-23">
  <owner>peter@chromium.org</owner>
  <owner>finnur@chromium.org</owner>
  <summary>
    Records the scope of accepted content for a select file dialog when shown by
    a Web developer.
  </summary>
</histogram>

<histogram name="Android.StrictMode.OverrideUrlLoadingTime" units="ms"
    expires_after="2023-05-07">
  <owner>yfriedman@chromium.org</owner>
  <owner>wnwen@chromium.org</owner>
  <summary>
    Measures the amount of time due to a StrictMode violation from calling out
    to Android activity manager.
  </summary>
</histogram>

<histogram name="Android.StrictMode.ThumbnailCacheDir" units="ms"
    expires_after="M85">
  <owner>wnwen@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Measures the amount of time due to a StrictMode violation from fetching for
    the thumbnail cache directory.
  </summary>
</histogram>

<histogram name="Android.Survey.DownloadAttemptsBeforeAccepted" units="units"
    expires_after="2023-04-30">
  <owner>skym@chromium.org</owner>
  <owner>wenyufu@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    The number of survey download request attempts that have been made before
    the survey is accepted. Note:

    1) The download attempt might not result in a survey download due to
    different reasons (e.g. download request failed or network failure). 2)
    Chrome may have also successfully downloaded the survey several times in
    previous sessions, but the surveys were not able to be shown for min amount
    of times. In such scenarios, the total number of attempts across all
    sessions will be recorded. 3) If the number of allowed download attempts has
    been saturated before the survey is accepted, nothing will be recorded.

    Recorded when a survey prompt is accepted. Android Only.
  </summary>
</histogram>

<histogram name="Android.Survey.DownloadRequested2" enum="BooleanRequested"
    expires_after="2023-04-23">
  <owner>twellington@chromium.org</owner>
  <owner>wenyufu@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Recorded when a survey download is requested. If the download has been
    attemped, but the download request is not sent (e.g. user is not signed-in),
    'not requested' will be recorded.
  </summary>
</histogram>

<histogram name="Android.Survey.DownloadResponseCode2"
    enum="SurveyDownloadResponseCodes2" expires_after="2023-04-23">
  <owner>skym@chromium.org</owner>
  <owner>wenyufu@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    The result of the completed survey download request. A survey download is
    initiated on ChromeTabbedActivity cold start iff the user passes a series of
    eligibility checks. Recorded when a valid survey response is received.
    Android only.
  </summary>
</histogram>

<histogram name="Android.Survey.InfoBarClosingState"
    enum="InfoBarClosingStates" expires_after="2023-04-23">
  <owner>twellington@chromium.org</owner>
  <owner>wenyufu@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    If the infobar was visible when it was closed and if it was closed directly
    or not.
  </summary>
</histogram>

<histogram name="Android.Survey.ShowSurvey" enum="BooleanSuccess"
    expires_after="2022-08-07">
  <obsolete>
    Deprecated in March 2022. Data available in Android.Survey.ShowSurveyStatus.
  </obsolete>
  <owner>twellington@chromium.org</owner>
  <owner>wenyufu@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Whether or not the survey was successfully shown after its download.
  </summary>
</histogram>

<histogram name="Android.Survey.ShowSurveyStatus"
    enum="SurveyPresentationStatusCode" expires_after="2023-04-30">
  <owner>aishwaryarj@google.com</owner>
  <owner>twellington@chromium.org</owner>
  <owner>wenyufu@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    The result of the request to show the survey after it has been downloaded.
    This request is initiated when the user accepts to take the survey on the
    survey prompt. This histogram is agnostic to the content of the survey,
    which is configured server side, and will be recorded for all surveys shown
    in Chrome. Android only.
  </summary>
</histogram>

<histogram name="Android.Survey.SurveyCompleted" enum="BooleanCompleted"
    expires_after="2022-06-01">
  <owner>skym@chromium.org</owner>
  <owner>wenyufu@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    Whether a user completed the survey after it was presented. This histogram
    is agnostic to the content of the survey, which is configured server side,
    and will be recorded for all surveys shown in Chrome. Android only.
  </summary>
</histogram>

<histogram name="Android.Survey.SurveyFilteringResults"
    enum="SurveyFilteringResult" expires_after="2023-04-09">
  <owner>twellington@chromium.org</owner>
  <owner>wenyufu@chromium.org</owner>
  <owner>clank-app-team@google.com</owner>
  <summary>
    The result of the survey filtering process. Each enum represents a different
    filter that caught the user. This is recorded on cold starts when we check
    if a user qualifies for a survey.
  </summary>
</histogram>

<histogram name="Android.SysUtilsLowEndMatches" enum="BooleanEqual"
    expires_after="2020-08-30">
  <owner>ssid@chromium.org</owner>
  <summary>
    Measures whether Chrome low-end detection logic based on RAM size matches
    the Android system utility value for isLowRamDevice(). This is recorded once
    per browser start and may be recorded in the renderer if isLowEndDevice()
    bit is checked.
  </summary>
</histogram>

<histogram name="Android.TabMultiSelectV2.SharingState"
    enum="TabSelectionEditorShareActionState" expires_after="2023-10-14">
  <owner>ckitagawa@chromium.org</owner>
  <owner>bjfong@google.com</owner>
  <owner>fredmello@chromium.org</owner>
  <summary>
    The result of the share action taken from the TabSelectionEditor. Record
    once per user attempt to share tabs in the Tab Selection Editor.
  </summary>
</histogram>

<histogram name="Android.TabMultiSelectV2.TimeSinceLastShown" units="ms"
    expires_after="2023-10-14">
  <owner>ckitagawa@chromium.org</owner>
  <owner>fredmello@chromium.org</owner>
  <summary>
    Measures the time between opening the TabSelectionEditor in milliseconds
    within a given browser activity lifespan. This is recorded when the
    TabSelectionEditor is shown with the exception of the first time it is shown
    within an activity lifespan.
  </summary>
</histogram>

<histogram name="Android.TabNavigationInterceptResult.For{ProtocolType}"
    enum="NavigationInterceptResult" expires_after="2023-03-24">
  <owner>blundell@chromium.org</owner>
  <owner>mthiesse@chromium.org</owner>
  <owner>tedchoc@chromium.org</owner>
  <summary>
    The distribution of results when running ExternalNavigationHandler for
    navigations that have an {ProtocolType}. This shows how often we send
    intents to be handled by other applications.
  </summary>
  <token key="ProtocolType">
    <variant name="ExternalProtocol" summary="external protocol"/>
    <variant name="InternalProtocol" summary="internal protocol"/>
  </token>
</histogram>

<histogram name="Android.TabStrip.TimeToSwitchTab" units="ms"
    expires_after="2023-04-16">
  <owner>gauravjj@google.com</owner>
  <owner>twellington@chromium.org</owner>
  <owner>clank-large-form-factors@google.com</owner>
  <summary>
    This captures the time taken for a user to select a tab after scrolling the
    tab strip as one measure of tab strip switching efficiency. This is recorded
    only when a tab switch event occurs within 60 seconds of the most recent tab
    strip scroll. In the event of multiple back-to-back scrolls, this metric is
    recorded so long as the sequence of scrolls occur within 60 seconds of each
    other and is capped at 3 minutes.
  </summary>
</histogram>

<histogram name="Android.TabSwitcher.CreationTime" units="ms"
    expires_after="2023-03-19">
  <owner>skavuluru@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>clank-large-form-factors@google.com</owner>
  <summary>
    Records the time taken to create the StartSurfaceCoordinator and grid tab
    switcher views. Only recorded for tablets.
  </summary>
</histogram>

<histogram name="Android.TabSwitcher.IncognitoClickedIsEmpty" enum="Boolean"
    expires_after="2023-02-02">
  <owner>roagarwal@chromium.org</owner>
  <owner>chrome-incognito@google.com</owner>
  <summary>
    Emitted every time a user uses Incognito button on Tab Switcher. Records
    whether or not there is any Incognito tab when Incognito button is clicked.
  </summary>
</histogram>

<histogram name="Android.TabSwitcher.SetupRecyclerView.Time" units="ms"
    expires_after="2023-05-14">
  <owner>skavuluru@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>clank-large-form-factors@google.com</owner>
  <summary>
    Records the time taken to create TabListCoordinator, which inflates the
    RecyclerView for the grid tab switcher, and bind views.
  </summary>
</histogram>

<histogram name="Android.ThumbnailDiskStorage.CachedBitmap.Found"
    enum="BooleanFound" expires_after="2020-01-30">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>
    Records the status of a thumbnail query from the thumbnail disk storage.
  </summary>
</histogram>

<histogram name="Android.ThumbnailDiskStorage.Size" units="KB"
    expires_after="2020-01-30">
  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>
    Measures the size of the thumbnail disk storage used. Recorded during
    initialization.
  </summary>
</histogram>

<histogram
    name="Android.ThumbnailProvider.BitmapCache.Size{ThumbnailProvider_ClientType}"
    units="KB" expires_after="2021-01-30">
<!-- Name completed by histogram_suffixes
     name="ThumbnailProvider.ClientType" -->

  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>
    Measures the size of the bitmap cache used. Recorded whenever a bitmap is
    added to the cache. {ThumbnailProvider_ClientType}
  </summary>
  <token key="ThumbnailProvider_ClientType"
      variants="ThumbnailProvider_ClientType"/>
</histogram>

<histogram
    name="Android.ThumbnailProvider.CachedBitmap.Found{ThumbnailProvider_ClientType}"
    enum="BooleanFound" expires_after="2021-01-30">
<!-- Name completed by histogram_suffixes
     name="ThumbnailProvider.ClientType" -->

  <owner>shaktisahu@chromium.org</owner>
  <owner>clank-downloads@google.com</owner>
  <summary>
    Records the status of a thumbnail query from the thumbnail provider
    in-memory cache. {ThumbnailProvider_ClientType}
  </summary>
  <token key="ThumbnailProvider_ClientType"
      variants="ThumbnailProvider_ClientType"/>
</histogram>

<histogram name="Android.Toolbar.BitmapCapture" enum="ToolbarCaptureType"
    expires_after="2023-05-11">
  <owner>skym@chromium.org</owner>
  <owner>seacow@google.com</owner>
  <summary>
    Recorded when a toolbar view draws itself to a bitmap such that it can be
    passed to the compositor and drawn by native. Performing a bitmap capture is
    somewhat expensive opperation that must be done on the UI thread. It is
    possible that high capture counts are correlated with scroll jank.
  </summary>
</histogram>

<histogram name="Android.TopToolbar.AllowCaptureReason"
    enum="TopToolbarAllowCaptureReason" expires_after="2023-05-16">
  <owner>skym@chromium.org</owner>
  <owner>seacow@google.com</owner>
  <summary>
    Recorded on #isDirty calls that return true. Because #isDirty() is used to
    control when bitmap captures happen, this histogram holds the reason that
    the capture was allowed. Note that there there's an assert that calls into
    #isDirty() from #getBitmap(), which can cause these to be double counted. If
    Canary starts running assert code, this will cause this metric to double in
    report volume.
  </summary>
</histogram>

<histogram name="Android.TopToolbar.BlockCaptureReason"
    enum="TopToolbarBlockCaptureReason" expires_after="2023-05-16">
  <owner>skym@chromium.org</owner>
  <owner>seacow@google.com</owner>
  <summary>
    Recorded on #isDirty calls that return false. Because #isDirty() is used to
    control when bitmap captures happen, this histogram holds the reason that
    the capture was not allowed.
  </summary>
</histogram>

<histogram name="Android.TopToolbar.SnapshotDifference"
    enum="ToolbarSnapshotDifference" expires_after="2023-05-16">
  <owner>skym@chromium.org</owner>
  <owner>seacow@google.com</owner>
  <summary>
    When the allow reason for a bitmap capture was that the snapshots were
    different, then this histogram is recorded with the reason that the
    snapshots were different. Often there may be multiple differences but one is
    arbitrarily and consistently picked.
  </summary>
</histogram>

<histogram name="Android.View.onDraw.30Seconds" units="count"
    expires_after="2023-05-07">
  <owner>nuskos@chromium.org</owner>
  <owner>chrometto-team@google.com</owner>
  <summary>
    Keeps a counter of each onDraw invoked on the root view and emits the count
    once every 30 seconds. Thus this is the amount of times android attempted to
    draw/update a java view in the last 30 seconds.

    NOTE: 30 second intervals with 0 draws are not reported.
  </summary>
</histogram>

<histogram name="Android.WebView.AndroidX.ApiCall" enum="AndroidXWebkitApiCall"
    expires_after="2023-10-31">
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records calls to WebView APIs from AndroidX. Some AndroidX-originating calls
    may plumb through the corresponding platform (framework) API if the device
    OS version supports the platform API. In this case the API call will be
    logged by the "Android.WebView.ApiCall" histogram instead. This is
    logged each time an AndroidX API is called through the "boundary
    interface" code path (see //android_webview/support_library/README.md
    for more details).
  </summary>
</histogram>

<histogram name="Android.WebView.ApiCall" enum="WebViewApiCall"
    expires_after="2023-10-31">
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records calls to WebView APIs through the platform (framework) APIs. This
    may include AndroidX API calls on OS versions where the AndroidX library
    just calls through the platform API (see
    "Android.WebView.AndroidX.ApiCall" for details). This is logged
    each time an API is called.

    For historical data (before M99), see "WebView.ApiCall".
  </summary>
</histogram>

<histogram name="Android.WebView.AppDataDirectory.Size" units="KiB"
    expires_after="2023-06-01">
  <owner>xiaq@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Size on disk taken by the embedding app's data directory, recorded once per
    WebView startup after a small delay.
  </summary>
</histogram>

<histogram name="Android.WebView.AppDataDirectory.TimeToComputeSize" units="ms"
    expires_after="2023-06-01">
  <owner>xiaq@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Time to compute the size on disk taken by the embedding app's data
    directory, recorded once per WebView startup after a small delay.
  </summary>
</histogram>

<histogram name="Android.WebView.Callback.Counts" enum="WebViewCallbackType"
    expires_after="2023-03-19">
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>Records the invocation count of WebView callbacks.</summary>
</histogram>

<histogram name="Android.WebView.ComponentUpdater.CPSDirectorySize" units="KB"
    expires_after="2023-02-01">
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Size on disk taken by the ComponentsProviderService serving directory. This
    is logged once per run of the update job in AwComponentUpdateService.
  </summary>
</histogram>

<histogram name="Android.WebView.ComponentUpdater.CUSDirectorySize" units="KB"
    expires_after="2023-02-01">
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Size on disk taken by the AwComponentUpdateService directory. This is logged
    once per update job in AwComponentUpdateService.
  </summary>
</histogram>

<histogram name="Android.WebView.ComponentUpdater.GetFilesDuration" units="ms"
    expires_after="2023-04-02">
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Duration of ComponentsProviderService getFilesForComponent request. This
    method retrieves FileDescriptors for an installed component. This is logged
    at the end of every request the service receives.
  </summary>
</histogram>

<histogram name="Android.WebView.ComponentUpdater.GetFilesResult"
    enum="WebViewComponentUpdaterGetFilesResult" expires_after="2023-03-19">
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Logs the result of ComponentsProviderService getFilesForComponent request.
    This method retrieves FileDescriptors for an installed component. This is
    logged once for every request the service receives.
  </summary>
</histogram>

<histogram name="Android.WebView.ComponentUpdater.SafeModeActionExecuted"
    enum="Boolean" expires_after="2023-02-01">
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Whether a SafeMode action was executed by Component Updater services. This
    is logged whenever a nonembedded Component Updater service checks whether
    SafeMode is enabled.
  </summary>
</histogram>

<histogram name="Android.WebView.ComponentUpdater.UnexpectedExit"
    enum="Boolean" expires_after="2023-04-02">
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Whether AwComponentUpdateService quit unexpectedly on the previous run. This
    might indicate a crash occurred during the previous job. This is logged once
    per run of AwComponentUpdateService.
  </summary>
</histogram>

<histogram name="Android.WebView.ComponentUpdater.UpdateJobDuration" units="ms"
    expires_after="2023-04-02">
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Duration of AwComponentUpdateService update job. This job is responsible for
    updating and installing components. This is logged once per run of the job.
  </summary>
</histogram>

<histogram name="Android.WebView.ComponentUpdater.UpdateJobFilesChanged"
    units="count" expires_after="2023-02-01">
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    How many components were updated by AwComponentUpdateService update job.
    This is logged once per run of the job, and is capped at 1000.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.ForceDarkBehavior"
    enum="WebViewForceDarkBehavior" expires_after="2023-06-01">
  <owner>michaelbai@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records WebView force dark behavior settings on each main frame navigation
    entry committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.ForceDarkMode"
    enum="WebViewForceDarkMode2" expires_after="2023-06-01">
  <owner>michaelbai@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records WebView force dark mode settings on each main frame navigation entry
    committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.InDarkMode" enum="Boolean"
    expires_after="2023-06-01">
  <owner>michaelbai@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if WebView applies the algorithmic darkening on each main frame
    navigation entry committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.InDarkModeVsLightTheme"
    enum="WebViewInDarkModeVsLightTheme" expires_after="2023-06-01">
  <owner>michaelbai@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if the application has light theme and if WebView applies the
    algorithmic darkening on each main frame navigation entry committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.InDarkModeVsNightMode"
    enum="WebViewInDarkModeVsNightMode" expires_after="2023-06-01">
  <owner>michaelbai@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if the application is in the night mode and if WebView applies the
    algorithmic darkening on each main frame navigation entry committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.LightTheme" enum="LightTheme"
    expires_after="2023-06-01">
  <owner>michaelbai@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if the application has light theme on each main frame navigation
    entry committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.NightMode" enum="NightMode"
    expires_after="2023-06-01">
  <owner>michaelbai@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records application's night mode bit related to
    android.content.res.Configuration.UI_MODE_NIGHT_MASK on each main frame
    navigation entry committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.NightModeVsLightTheme"
    enum="WebViewNightModeVsLightTheme" expires_after="2023-06-01">
  <owner>michaelbai@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if application is in night mode and if it has light theme on each
    main frame navigation entry committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.PageDarkenedAccordingToAppTheme"
    enum="Boolean" expires_after="2023-06-01">
  <owner>michaelbai@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records WebView is darkened or not when the prefers-color-scheme is set to
    dark according to the app theme not FORCE_DARK_AUTO setting. This histogram
    is recorded on main frame's color scheme inferred for every committed
    navigation.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.PrefersDarkFromTheme"
    enum="BooleanYesNo" expires_after="2023-06-01">
  <owner>michaelbai@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if WebView shall set prefers-color-scheme to dark according to app's
    theme after FORCE_DARK_AUTO fails. It is recorded on each main frame
    navigation entry committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.PrimaryTextLuminanceVsLightTheme"
    enum="WebViewPrimaryTextLuminanceVsLightTheme" expires_after="2023-06-01">
  <owner>michaelbai@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if the application has light theme and if its theme's
    textColorPrimary attribute is light on each main frame navigation entry
    committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.PrimaryTextLuminanceVsNightMode"
    enum="WebViewPrimaryTextLuminanceVsNightMode" expires_after="2023-06-01">
  <owner>michaelbai@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if the application is in night mode and if its theme's
    textColorPrimary attribute is light on each main frame navigation entry
    committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.AppLaunch" enum="Boolean"
    expires_after="2022-12-14">
  <owner>ntfschr@chromium.org</owner>
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of times the developer UI app was launched. This only
    ever logs the value "true" because we only care about the total
    count. This is logged in the developer UI app during Activity#onCreate.
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.CrashList.CollectionState"
    enum="AndroidWebViewCrashCollectionState" expires_after="2022-12-14">
  <owner>ntfschr@chromium.org</owner>
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the state of crash collection, as seen by the developer UI. This is
    recorded when launching the crash UI, but only if the UI is not already
    showing an error message for another problem (ex. WebView package error).
    This only logs the first state we detect: ex. if the user has enabled crash
    reporting by opting in and also with the flag UI, this only logs the flag UI
    case.
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.CrashList.CrashInteraction"
    enum="AndroidWebViewCrashInteraction" expires_after="2022-12-14">
  <owner>ntfschr@chromium.org</owner>
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the user's interaction with crashes in the developer UI's crash
    list. Specifically, this tracks how the user interacts with the "hide
    crash", "upload this crash report" or the "file bug
    report" buttons and possible subsequent dialogs. Since the latter two
    buttons are connected (the user must upload a crash before they can file a
    bug report), we track interaction with both in the same histogram. This is
    recorded for each button press in the crash list and is not recorded if the
    user does not interact with any crashes.
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.CrashList.NumberShown"
    units="crash reports" expires_after="2022-12-14">
  <owner>ntfschr@chromium.org</owner>
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of crashes shown in the developer UI. This is logged each
    time the crash UI is launched and each time its list is refreshed. The UI
    currently limits the number of crashes at 20, so clients logging the maximum
    may have more logs sitting on disk.
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.DeveloperModeBlockingTime" units="ms"
    expires_after="2022-12-14">
  <owner>ntfschr@chromium.org</owner>
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the time spent blocking WebView startup to check for developer mode
    (see "Android.WebView.DevUi.DeveloperModeEnabled"). This is
    recorded once during WebView startup, regardless of whether developer mode
    is enabled.
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.DeveloperModeEnabled"
    enum="BooleanEnabled" expires_after="2022-12-14">
  <owner>ntfschr@chromium.org</owner>
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether or not WebView is starting up in "developer mode."
    This is a mode where the user has enabled debugging features through the
    WebView developer UI. This is recorded once during startup.
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.FlagLoadingBlockingTime" units="ms"
    expires_after="2022-12-14">
  <owner>ntfschr@chromium.org</owner>
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the time spent blocking WebView startup to load flags from the
    developer UI. This is recorded only once during WebView startup, and only if
    we've already detected developer mode is enabled (see
    "Android.WebView.DevUi.DeveloperModeEnabled").
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.FlagsUi.ToggledFromSearch"
    enum="Boolean" expires_after="2022-12-14">
  <owner>ntfschr@chromium.org</owner>
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    This is recorded each time a user toggles a flag in the developer UI
    (changing a flag's state), and logs whether the user found this flag with
    the search bar ("true" means there was a non-empty search query).
    This is only recorded when the user toggles an individual flag through the
    Spinner dialog, not when they press the "reset all flags" button.
  </summary>
</histogram>

<histogram
    name="Android.WebView.DevUi.FragmentNavigation{Android_WebView_DevUi_NavType}"
    enum="AndroidWebViewDevUiFragments" expires_after="2022-12-14">
<!-- Name completed by histogram_suffixes
     name="Android.WebView.DevUi.NavType" -->

  <owner>ntfschr@chromium.org</owner>
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the user's navigation to a Fragment. "FromIntent" tracks
    navigations triggered by an Intent (ex. navigating to HomeFragment on
    launch) and "NavBar" tracks user interaction with the bottom
    navigation bar. "AnyMethod" should be the sum of the other two.
    {Android_WebView_DevUi_NavType}
  </summary>
  <token key="Android_WebView_DevUi_NavType">
    <variant name=".AnyMethod" summary="User navigation through any means"/>
    <variant name=".FromIntent"
        summary="User navigation through the bottom navigation bar"/>
    <variant name=".NavBar" summary="User navigation in response to an Intent"/>
  </token>
</histogram>

<histogram name="Android.WebView.DevUi.MenuSelection"
    enum="AndroidWebViewDevUiMenu" expires_after="2022-12-14">
  <owner>ntfschr@chromium.org</owner>
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the user's selection in the developer UI overflow menu or action
    bar, recorded after each selection.
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.MonochromeIconStateToggled"
    enum="BooleanEnabled" expires_after="2022-12-14">
  <owner>ntfschr@chromium.org</owner>
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records how the developer UI launcher icon for Monochrome was toggled: was
    it enabled or disabled? This can be recorded either from WebView's
    non-embedded processes or Chrome's browser process whenever either changes
    the icon state (nothing is logged if we don't need to change the icon
    state). This is only recorded in Monochrome (Android Nougat, Oreo, and Pie),
    since this logic is only relevant in that case.
  </summary>
</histogram>

<histogram base="true" name="Android.WebView.DevUi.SessionDuration2" units="ms"
    expires_after="2022-12-14">
<!-- Name completed by histogram_suffixes
     name="AndroidWebViewFragments" -->

  <owner>ntfschr@chromium.org</owner>
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the time spent using a specific tool, from creation to destruction.
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.ToggledFlagCount" units="flags"
    expires_after="2022-12-14">
  <owner>ntfschr@chromium.org</owner>
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of flags we will toggle for this run of WebView. This is
    recorded only once during WebView startup, and only if we've already
    detected developer mode is enabled (see
    "Android.WebView.DevUi.DeveloperModeEnabled"). If developer mode
    is disabled, we will not toggle any flags through this mechanism.
  </summary>
</histogram>

<histogram name="Android.WebView.ForceDarkBehavior"
    enum="WebViewForceDarkBehavior" expires_after="2023-06-01">
  <owner>peter@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records strategy to be used by force dark in WebView when
    setForceDarkBehavior API is called by the embedding application.
  </summary>
</histogram>

<histogram name="Android.WebView.ForceDarkMode" enum="WebViewForceDarkMode"
    expires_after="2023-06-01">
  <owner>peter@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records WebView's force dark setting and the UI's night mode when
    setForceDark API is called by the embedding application.
  </summary>
</histogram>

<histogram name="Android.WebView.Gfx.HardwareDrawType"
    enum="WebViewDrawAndSubmissionType" expires_after="2023-03-19">
  <owner>vasilyt@chromium.org</owner>
  <owner>boliu@chromium.org</owner>
  <summary>
    Tracks invalidate and frame submission status for WebView hardware draw.
    Result is enum that represent three flags: did we called invalidate this
    frame, did renderer submitted compositor frame and whether DrawParams from
    Android HWUI changed. This is logged once per WebView draw functor call.
  </summary>
</histogram>

<histogram name="Android.WebView.InputStreamTime" units="ms"
    expires_after="2023-03-19">
  <owner>jam@chromium.org</owner>
  <owner>cduvall@chromium.org</owner>
  <summary>
    Measures how long InputStreams take from creation to completion. This is
    emitted for all streams whether they succeed or fail.
  </summary>
</histogram>

<histogram name="Android.WebView.LoadUrl.UrlScheme" enum="WebViewUrlScheme"
    expires_after="2023-04-19">
  <owner>ntfschr@chromium.org</owner>
  <owner>torne@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the scheme for the URL loaded by a browser-initiated navigation.
    Specifically, this is the scheme of the URL passed to loadUrl() (and its
    overloads), postUrl(), and loadData() (this is implicitly
    "data:"). also records if this value is "empty", which
    means either null or "about:blank". This intentionally excludes
    loadDataWithBaseURL().
  </summary>
</histogram>

<histogram name="Android.WebView.Metrics.PackagesAllowList.ParseStatus"
    enum="AppPackageNameAllowlistParseStatus" expires_after="2023-02-01">
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the result of parsing the apps package names allowlist used to
    populate the "app_package_name" field in UMA metrics logs. This is
    recorded when the AwAppsPackageNamesAllowlistComponentLoaderPolicy is
    successfully loaded by EmbeddedComponentLoader, i.e when ComponentLoaded is
    called by the loader.
  </summary>
</histogram>

<histogram name="Android.WebView.Metrics.PackagesAllowList.RecordStatus"
    enum="AppPackageNameLoggingRuleStatus" expires_after="2023-03-19">
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the status of the apps package names allowlist used to populate the
    "app_package_name" field in UMA metrics log. The status tracks if
    a new version is loaded, a cached one is used or if loading the allowlist
    has failed. It's recorded everytime the app package name is queried when a
    new metrics log is created.
  </summary>
</histogram>

<histogram
    name="Android.WebView.Metrics.PackagesAllowList.ResultReceivingDelay"
    units="ms" expires_after="2023-03-19">
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the time delta between creating a AwMetricsServiceClient instance
    during WebView startup and the time when the app package names allowlist is
    loaded and looked up. This only records when a new version of the allowlist
    is loaded successfully. i.e it's not recorded if the loading the allowlist
    fails or if a cached version is used.
  </summary>
</histogram>

<histogram name="Android.WebView.Metrics.PackagesAllowList.ThrottleStatus"
    enum="Boolean" expires_after="2023-02-01">
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Whether requests to query the app package names allowlist component is
    throttled or not.
  </summary>
</histogram>

<histogram name="Android.WebView.Metrics.PackagesAllowList.TimeToExpire"
    units="hours" expires_after="2023-03-01">
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    How long before the app package names allowlist record cached in the client
    expires. This is only recorded from Apps that are in the app package names
    allowlist. Recorded every time a metrics log is being created.
  </summary>
</histogram>

<histogram name="Android.WebView.MixedContent.Mode"
    enum="WebViewMixedContentMode" expires_after="2023-08-25">
  <owner>ntfschr@chromium.org</owner>
  <owner>carlosil@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the mixed content mode set when an app uses the
    WebSettings.setMixedContentMode API.
  </summary>
</histogram>

<histogram name="Android.WebView.Nonembedded.FirstServiceInProcess"
    enum="WebViewNonembeddedService" expires_after="2022-12-11">
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the first nonembedded WebView Service to run in the nonembedded
    ":webview_service" process. This excludes ContentProviders because
    they are always created during the process startup. This is recorded when
    the service is created (when `onCreate` is called). Also see
    "Android.WebView.Nonembedded.IsFreshServiceProcessLaunched".
  </summary>
</histogram>

<histogram name="Android.WebView.Nonembedded.IsFreshServiceProcessLaunched"
    enum="Boolean" expires_after="2022-12-11">
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Captures if the service is the first service to be created in the process or
    not. It helps to see how often the nonembedded ":webview_service"
    process is reused for multiple services. This excludes ContentProviders
    because they are always created during the process startup. This is recorded
    when any nonembedded service is created (when `onCreate` is called). Also
    see "Android.WebView.Nonembedded.FirstServiceInProcess".
  </summary>
</histogram>

<histogram name="Android.WebView.NonEmbeddedMetrics.HistogramRecordAge"
    units="minutes" expires_after="2023-04-16">
  <owner>hazems@chromium.org</owner>
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the time interval between when a histogram is recorded in a
    non-embedded WebView process and when it's actually sent to the UMA API in
    an embedded WebView. This is recorded during WebView startup for each
    histogram retrieved and replayed successfully from WebView non-embedded
    metrics service.
  </summary>
</histogram>

<histogram name="Android.WebView.NonEmbeddedMetrics.NumHistograms"
    units="histograms" expires_after="2023-04-16">
  <owner>ntfschr@chromium.org</owner>
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of histograms received from WebView's non-embedded
    histogram service. This is recorded once during WebView startup, after
    retrieving histograms from the service (if the proto can be parsed).
  </summary>
</histogram>

<histogram name="Android.WebView.NonEmbeddedMetrics.ParsingLogResult"
    enum="AndroidWebViewNonEmbeddedMetricsParsingLogResult"
    expires_after="2023-04-16">
  <owner>hazems@chromium.org</owner>
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether metrics parsing from file in non-embedded histogram service
    was successful. It's recorded during service startup by adding it to records
    list. It captures the most recent file parsing result for the last service
    launch before the client connects to the service.
  </summary>
</histogram>

<histogram name="Android.WebView.NonEmbeddedMetrics.RetrieveMetricsTaskStatus"
    enum="AndroidWebViewNonEmbeddedMetricsRetrieveMetricsTaskStatus"
    expires_after="2023-07-01">
  <owner>hazems@chromium.org</owner>
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Recorded by the non-embedded histogram service if it's unable to return
    histograms. This is always recorded when a client connects to retrieve
    histograms.
  </summary>
</histogram>

<histogram name="Android.WebView.NonEmbeddedMetrics.TransmissionResult"
    enum="AndroidWebViewDevUiMetricsTransmission" expires_after="2023-05-07">
  <owner>ntfschr@chromium.org</owner>
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether metrics transmission from the non-embedded histogram service
    was successful. This is recorded once during WebView startup, after
    retrieving histograms from the service.
  </summary>
</histogram>

<histogram name="Android.WebView.onReceivedError.ErrorCode"
    enum="WebViewClientErrorCode" expires_after="2022-05-10">
  <obsolete>
    Deprecated in April 2022 (milestone M103).
  </obsolete>
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    The WebViewClient error code as returned by the onReceivedError callback
    This is recorded regardless of whether the network service is enabled or
    disabled.
  </summary>
</histogram>

<histogram name="Android.WebView.onReceivedHttpError.StatusCode"
    enum="HttpResponseCode" expires_after="2023-04-19">
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    The WebViewClient HTTP response status code as returned by the
    onReceivedHttpError callback. This callback is only called for HTTP errors,
    so this does not include any successful HTTP responses (code 200).
  </summary>
</histogram>

<histogram name="Android.WebView.OnRenderProcessGoneResult"
    enum="AndroidWebViewRenderProcessGoneResult" expires_after="2023-06-30">
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    This captures two pieces of information about renderer crashes: did the app
    developer handle the renderer crash to recover and what type of crash was
    this? This is recorded once each time the renderer process dies
    unexpectedly, and is logged after we have notified the app via the
    onRenderProcessGone() callback.

    Prior to M99, this histogram did not distinguish between crashes vs. kills
    if the renderer crash was handled by the app.
  </summary>
</histogram>

<histogram name="Android.WebView.OptionallyBlockableMixedContentLoaded.Mode"
    enum="WebViewMixedContentMode" expires_after="2023-08-25">
  <owner>ntfschr@chromium.org</owner>
  <owner>carlosil@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the mixed content mode set when an app loads optionally blockable
    mixed content (images, audio, or video). This histogram is logged on page
    load, once per subresource (i.e. a single page load can cause multiple
    records if the page contains multiple mixed content subresources).
  </summary>
</histogram>

<histogram name="Android.WebView.OriginsVisited" units="origins"
    expires_after="2023-02-15">
  <owner>mvanouwerkerk@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Measures the count of distinct http and https origins visited per day in
    WebView. The purpose of this metric is to slice it by package name to help
    characterize the usage of that package.
  </summary>
</histogram>

<histogram name="Android.WebView.PageTimeSpent2.{Scheme}{Party}" units="ms"
    expires_after="2022-07-01">
  <obsolete>
    Deprecated in March 2022.
  </obsolete>
  <owner>mvanouwerkerk@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Time spent on a page with a {Scheme} scheme. This is measured from
    navigation commit to the start of the next navigation. For http and https
    schemes it is additionally recorded whether it is a first or third party
    page. This uses an optional key, in this case the value is
    "{Party}".
  </summary>
  <token key="Scheme">
    <variant name="App"/>
    <variant name="Blob"/>
    <variant name="Chrome"/>
    <variant name="ChromeNative"/>
    <variant name="Content"/>
    <variant name="CustomTab"/>
    <variant name="Data"/>
    <variant name="Devtools"/>
    <variant name="Document"/>
    <variant name="File"/>
    <variant name="Filesystem"/>
    <variant name="Ftp"/>
    <variant name="Http"/>
    <variant name="Https"/>
    <variant name="Inline"/>
    <variant name="Intent"/>
    <variant name="Jar"/>
    <variant name="JavaScript"/>
    <variant name="Other"/>
    <variant name="Sms"/>
    <variant name="Tel"/>
  </token>
  <token key="Party">
    <variant name=""/>
    <variant name=".FirstParty"/>
    <variant name=".ThirdParty"/>
  </token>
</histogram>

<histogram name="Android.WebView.RequestedWithHeader.CommittedHeaderMode"
    enum="CommittedRequestedWithHeaderMode" expires_after="2023-07-01">
  <owner>pbirk@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the type of X-Requested-With HTTP header that is set on request from
    WebView. This enum is recorded by
    |InterceptedRequest::InterceptResponseReceived| for all requests. It may
    differ from the user settings, as it also captures if the header has been
    set explicitly on the request by other means, such as javascript or
    embedding code.
  </summary>
</histogram>

<histogram name="Android.WebView.RequestedWithHeader.OnNavigationHeaderMode"
    enum="WebViewRequestedWithHeaderMode" expires_after="2023-01-01">
  <obsolete>
    Replaced before launch by
    Android.WebView.RequestedWithHeader.OnNavigationRequestedWithHeaderAllowListSize
  </obsolete>
  <owner>pbirk@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the XRequestedWithHeaderMode that was configured to be used on page
    navigation to decide how to set the X-Requested-With HTTP header. This is
    recorded on navigation committed, and records the configured setting. It may
    be the case that javascript or the embedder has overwritten the header,
    which will not be reflected by this histogram.
  </summary>
</histogram>

<histogram
    name="Android.WebView.RequestedWithHeader.OnNavigationRequestedWithHeaderAllowListSize"
    units="entries" expires_after="2023-07-01">
  <owner>pbirk@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the size of the XRequestedWithHeaderAllowList that was used on page
    navigation. This is recorded to gain insight into the distribution of size
    when used, which will give an idea of the impact to the ecosystem.
  </summary>
</histogram>

<histogram
    name="Android.WebView.RequestedWithHeader.SetRequestedWithHeaderMode"
    enum="WebViewRequestedWithHeaderMode" expires_after="2023-01-01">
  <obsolete>
    Replaced before launch by
    Android.WebView.RequestedWithHeader.SetRequestedWithHeaderModeAllowListSize
  </obsolete>
  <owner>pbirk@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the parameter passed to WebSettingsCompat#setRequestedWithHeaderMode
    when called by the embedding app. This reflects explict configuration of the
    X-Requested-With HTTP header by the app for WebViews.
  </summary>
</histogram>

<histogram
    name="Android.WebView.RequestedWithHeader.SetRequestedWithHeaderModeAllowListSize"
    units="entries" expires_after="2023-07-01">
  <owner>pbirk@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the size of the allow-list passed to
    WebSettingsCompat#setRequestedWithHeaderOriginAllowList when called by the
    embedding app.
  </summary>
</histogram>

<histogram
    name="Android.WebView.RequestedWithHeader.SetServiceWorkerRequestedWithHeaderMode"
    enum="WebViewRequestedWithHeaderMode" expires_after="2023-01-01">
  <obsolete>
    Replaced before launch by
    Android.WebView.RequestedWithHeader.SetServiceWorkerRequestedWithHeaderModeAllowListSize
  </obsolete>
  <owner>pbirk@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the parameter passed to
    ServiceWorkerWebSettingsCompat#setRequestedWithHeaderMode when called by the
    embedding app. This reflects explict configuration of the X-Requested-With
    HTTP header by the app for WebView service workers.
  </summary>
</histogram>

<histogram
    name="Android.WebView.RequestedWithHeader.SetServiceWorkerRequestedWithHeaderModeAllowListSize"
    units="entries" expires_after="2023-07-01">
  <owner>pbirk@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the size of the allow-list passed to
    ServiceWorkerWebSettingsCompat#setRequestedWithHeaderOriginAllowList when
    called by the embedding app.
  </summary>
</histogram>

<histogram name="Android.WebView.SafeMode.ActionsCount"
    units="SafeMode actions" expires_after="2023-04-28">
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of SafeMode actions WebView received from the
    SafeModeService. This is only recorded once during startup if SafeMode is
    enabled (see "Android.WebView.SafeMode.SafeModeEnabled"),
    otherwise this is not recorded at all (because there were no SafeMode
    actions to execute). This is recorded before executing any SafeMode actions.
  </summary>
</histogram>

<histogram name="Android.WebView.SafeMode.CheckStateBlockingTime" units="ms"
    expires_after="2023-04-28">
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the time spent blocking WebView startup to check for SafeMode (see
    "Android.WebView.SafeMode.SafeModeEnabled"). This is recorded once
    during WebView startup, regardless of whether SafeMode is enabled.
  </summary>
</histogram>

<histogram name="Android.WebView.SafeMode.ExecutionResult"
    enum="AndroidWebViewSafeModeResult" expires_after="2023-04-28">
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether SafeMode was able to execute all the specified SafeMode
    actions or if it encountered an error. This is recorded once during WebView
    startup and only if SafeMode is enabled (see
    "Android.WebView.SafeMode.SafeModeEnabled").
  </summary>
</histogram>

<histogram name="Android.WebView.SafeMode.QueryAndExecuteBlockingTime"
    units="ms" expires_after="2023-04-28">
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the time spent blocking WebView startup to both retrieve the list of
    SafeMode actions from the SafeModeService and to execute those actions. This
    is recorded once during startup only if SafeMode is enabled (see
    "Android.WebView.SafeMode.SafeModeEnabled"). This can be
    interpreted as the additional startup cost caused by enabling SafeMode.
  </summary>
</histogram>

<histogram name="Android.WebView.SafeMode.SafeModeEnabled"
    enum="BooleanEnabled" expires_after="2023-04-16">
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether or not WebView is starting up in SafeMode. This is a mode
    where WebView takes extra steps during startup to reduce the risk of
    starting in a bad state. This is recorded once during WebView startup,
    regardless of whether SafeMode is enabled.
  </summary>
</histogram>

<histogram name="Android.WebView.SecureCookieAction" enum="SecureCookieAction"
    expires_after="2023-03-19">
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the action WebView took (if any) to "fix up" secure
    cookies for backwards compatibility.
  </summary>
</histogram>

<histogram name="Android.WebView.ShouldInterceptRequest.InterceptionType"
    enum="InterceptionType" expires_after="2022-05-10">
  <obsolete>
    Deprecated in M102. This histogram had a bug which caused it to under-count
    when the request was not intercepted. This has been fixed in the
    "Android.WebView.ShouldInterceptRequest.InterceptionType2"
    histogram.
  </obsolete>
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Whether the request was intercepted by the embedder of Android WebView, and
    if so which url scheme was used. Intercepted request are requests for which
    the shouldInterceptRequest() callback returned a non-null response.
  </summary>
</histogram>

<histogram name="Android.WebView.ShouldInterceptRequest.InterceptionType2"
    enum="InterceptionType" expires_after="2023-03-29">
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Whether the network request was intercepted by the embedder of Android
    WebView, and if so which URL scheme was used for the request. Intercepted
    requests are requests for which the shouldInterceptRequest() callback
    returned a non-null response. This is logged each the
    shouldInterceptRequest() callback API is invoked by WebView, which
    corresponds to every network request.

    This histogram was added in M102. Prior milestones logged
    "Android.WebView.ShouldInterceptRequest.InterceptionType", however
    that histogram had a bug which caused the "Not intercepted" bucket
    to be under-reported and for all other buckets to be over-reported.
  </summary>
</histogram>

<histogram name="Android.WebView.SingleOrMultiProcess"
    enum="AndroidWebViewSingleOrMultiProcess" expires_after="never">
  <owner>alexmitra@chromium.org</owner>
  <owner>nator@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether WebView is being run in a single process or multi-process.
    This is recorded each time logs are uploaded. This is used as a dashboard
    filter.
  </summary>
</histogram>

<histogram name="Android.WebView.SitesVisitedWeekly" units="sites"
    expires_after="2023-02-15">
  <owner>bewise@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Measures the count of distinct sites visited per week in WebView. This is
    recorded at the time of a navigation when stored hashed site navigations are
    older than a week. The purpose of this metric is to slice it by package name
    to help characterize the usage of that package. This histogram uses eTLD+1
    as the definition of a site.
  </summary>
</histogram>

<histogram name="Android.WebView.Startup.CreationTime.Stage1.FactoryInit"
    units="ms" expires_after="2023-12-31">
  <owner>torne@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    How long it takes to initialize a WebViewChromiumFactoryProvider. This is
    the first major phase of the WebViewChromium construction.
  </summary>
</histogram>

<histogram name="Android.WebView.Startup.CreationTime.Stage2.ProviderInit.Cold"
    units="ms" expires_after="2023-12-31">
  <owner>torne@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    How long it takes to initialize a WebViewProvider, the first time that one
    is initialized. WebViewProvider initialization is the second major phase of
    WebViewChromium construction. The first initialization is recorded
    separately because it is usually much slower than subsequent ones.
  </summary>
</histogram>

<histogram name="Android.WebView.Startup.CreationTime.Stage2.ProviderInit.Warm"
    units="ms" expires_after="2023-12-31">
  <owner>torne@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    How long it takes to initialize a WebViewProvider, the first time that one
    is initialized. WebViewProvider initialization is the second major phase of
    WebViewChromium construction. When it is not the first time, it is faster
    and thus recorded separately.
  </summary>
</histogram>

<histogram name="Android.WebView.Startup.CreationTime.StartChromiumLocked"
    units="ms" expires_after="2023-12-31">
  <owner>torne@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>How long it takes to run startChromiumLocked.</summary>
</histogram>

<histogram name="Android.WebView.Startup.CreationTime.TotalFactoryInitTime"
    units="ms" expires_after="2023-12-31">
  <owner>torne@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    The total time to initialize WebViewChromiumFactoryProvider.

    This measurement is different from Stage1.FactoryInit as it takes into
    accout time spent in framework.
  </summary>
</histogram>

<histogram
    name="Android.WebView.Startup.NonblockingServiceConnectionDelay.{ServiceName}"
    units="ms" expires_after="2023-02-01">
  <owner>hazems@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the delay between calling Context#bindService until the
    ServiceConnection#onServiceConnected is called. This should give an idea of
    how long it takes for nonembedded service connections to be established and
    capture any regressions in this. In the case when a service connection is
    dropped and then reconnected by the system, the histogram is only recorded
    for the first connection.
  </summary>
  <token key="ServiceName">
    <variant name="MetricsBridgeService"/>
    <variant name="VariationsSeedServer"/>
  </token>
</histogram>

<histogram name="Android.WebView.SupportLibrary.ClientIsCompat"
    enum="WebViewClientTypeEnum" expires_after="2023-08-23">
  <owner>pbirk@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether the WebViewClient provided by the app is an instance of
    WebViewClientCompat (and therefore exposes AndroidX callbacks). This is
    recorded each time the app sets a new WebViewClient via
    WebView#setWebViewClient().
  </summary>
</histogram>

<histogram name="Android.WebView.TargetSdkVersion" enum="AndroidApiLevel"
    expires_after="2023-06-30">
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    The version of the target SDK of the app WebView is running in. This is
    recorded once during startup.
  </summary>
</histogram>

<histogram
    name="Android.WebView.UniversalAccess.OriginUrlMismatchInHistoryUtil"
    enum="BooleanAllowed" expires_after="2023-03-19">
  <owner>torne@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records when we allow a cross origin push state from a file URL solely
    because AllowUniversalAccessFromFileURLs is enabled. This is logged from the
    implementation of history.
  </summary>
</histogram>

<histogram
    name="Android.WebView.UniversalAccess.OriginUrlMismatchInRenderFrame"
    enum="BooleanAllowed" expires_after="2023-01-15">
  <owner>torne@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records when we allow a cross origin push state from a file URL solely
    because AllowUniversalAccessFromFileURLs is enabled. This is logged from the
    implementation of the frame renderer.
  </summary>
</histogram>

<histogram name="Android.WebView.VariationsHeaderLength" units="bytes"
    expires_after="2023-07-22">
  <owner>cduvall@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the length of the WebView variations header. Recorded every time
    WebViewCompat.getVariationsHeader() is called.
  </summary>
</histogram>

<histogram name="Android.WebView.Visibility.Global" enum="WebViewVisibility"
    expires_after="2023-04-19">
  <owner>idries@google.com</owner>
  <owner>mvanouwerkerk@chromium.org</owner>
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the global visibility state of WebView in seconds, updated with
    every Metrics upload. The Visible bucket counts total seconds that any
    WebView was visible (the view itself was visible, and was attached to the
    view hierarchy of a visible window). The NotVisible bucket counts time since
    WebView initialization for which no WebView was considered visible, or no
    WebView existed. The total of these two buckets reflects the amount of time
    covered by metrics collection.
  </summary>
</histogram>

<histogram name="Android.WebView.Visibility.PerWebView"
    enum="WebViewVisibility" expires_after="2023-04-19">
  <owner>idries@google.com</owner>
  <owner>mvanouwerkerk@chromium.org</owner>
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records per-WebView visibility duration in seconds, updated with every
    Metrics upload. The Visible bucket counts the total time in seconds that
    each WebView was considered visible (the view itself was visible, and was
    attached to the view hierarchy of a visible window). If more than one
    WebView is considered visible, then each WebView contributes independently.
    The NotVisible bucket counts the duration that each WebView exists but not
    in a visible state. As with the Visible bucket, each WebView contributes
    independently, and thus this bucket is not incremented when no WebViews
    exist.
  </summary>
</histogram>

<histogram name="Android.WebView.VisibleScheme.Global" enum="WebViewUrlScheme"
    expires_after="2023-03-15">
  <owner>mvanouwerkerk@chromium.org</owner>
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of seconds any WebView was visible (the view itself was
    visible, and was attached to the view hierarchy of a visible window) with a
    particular URL scheme in the primary main frame. Updated with every Metrics
    upload. Note that the seconds are logged as the count for the scheme enum
    values.
  </summary>
</histogram>

<histogram name="Android.WebView.VisibleScheme.PerWebView"
    enum="WebViewUrlScheme" expires_after="2023-03-15">
  <owner>mvanouwerkerk@chromium.org</owner>
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of seconds each WebView was visible (the view itself was
    visible, and was attached to the view hierarchy of a visible window) with a
    particular URL scheme in the primary main frame. Updated with every Metrics
    upload. Note that the seconds are logged as the count for the scheme enum
    values.
  </summary>
</histogram>

<histogram name="Android.WebView.VisibleScreenCoverage.Global" units="%"
    expires_after="2023-02-25">
  <owner>mvanouwerkerk@google.com</owner>
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of seconds any WebView was visible (the view itself was
    visible, and was attached to the view hierarchy of a visible window) by
    screen coverage percentage. The screen coverage of all WebViews is merged so
    overlaps do not count more than once and do not increase the percentage.
    Updated with every Metrics upload. Not recorded when there is no visible
    WebView. Fractional percentages are rounded down. Note that the seconds are
    logged as the count for the percentages.
  </summary>
</histogram>

<histogram name="Android.WebView.VisibleScreenCoverage.PerWebView" units="%"
    expires_after="2023-02-25">
  <owner>mvanouwerkerk@google.com</owner>
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of seconds each WebView was visible (the view itself was
    visible, and was attached to the view hierarchy of a visible window) by
    screen coverage percentage. The screen coverage of these WebViews is not
    merged. Updated with every Metrics upload. Not recorded when there is no
    visible WebView. Fractional percentages are rounded down. Note that the
    seconds are logged as the count for the percentages.
  </summary>
</histogram>

<histogram name="Android.WebView.VisibleScreenCoverage.PerWebView.{scheme}"
    units="%" expires_after="2023-02-25">
  <owner>mvanouwerkerk@google.com</owner>
  <owner>ntfschr@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of seconds each WebView was visible (the view itself was
    visible, and was attached to the view hierarchy of a visible window) with a
    {scheme} scheme in the primary main frame by screen coverage percentage. The
    screen coverage of these WebViews is not merged. Updated with every Metrics
    upload. Not recorded when there is no visible WebView. Fractional
    percentages are rounded down. Note that the seconds are logged as the count
    for the percentages.
  </summary>
  <token key="scheme">
    <variant name="about"/>
    <variant name="blob"/>
    <variant name="chrome"/>
    <variant name="content"/>
    <variant name="data"/>
    <variant name="empty"/>
    <variant name="file"/>
    <variant name="ftp"/>
    <variant name="http"/>
    <variant name="https"/>
    <variant name="intent"/>
    <variant name="javascript"/>
    <variant name="unknown"/>
  </token>
</histogram>

<histogram name="Android.WebView.WebViewOpenWebVisible.ScreenPortion2"
    enum="WebViewOpenWebScreenPortion" expires_after="2022-08-01">
  <obsolete>
    Deprecated in March 2022.
  </obsolete>
  <owner>idries@google.com</owner>
  <owner>ntfschr@chromium.org</owner>
  <owner>peconn@chromium.org</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of seconds that WebView is displaying Open Web Content
    for each bucket of screen proportion, updated with every Metrics upload. For
    the purposes of bucketing this is rounded down. A separate bucket is used
    when the screen coverage is exactly zero.
  </summary>
</histogram>

<histogram name="AndroidSearchEngineLogo.Events"
    enum="AndroidSearchEngineLogoEvents" expires_after="2023-06-01">
  <owner>wylieb@chromium.org</owner>
  <owner>fgorski@chromium.org</owner>
  <summary>
    Counts occurences of various events related to the Search Engine Logo
    feature. When enabled, the feature will show the logo of the default search
    engine in the omnibox. These events record the performance of fetching
    non-Google logos.
  </summary>
</histogram>

<histogram name="SingleWebsitePreferences.NavigatedFromToReset"
    enum="SettingsNavigationSources" expires_after="M114">
  <owner>peconn@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Logs which way had the user navigated into settings screens when they press
    "Clear and Reset" button in settings of a single website.
  </summary>
</histogram>

</histograms>

</histogram-configuration>