<!--
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 Permissions 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="Action">
  <variant name="Accepted"/>
  <variant name="AcceptedOnce"/>
  <variant name="Denied"/>
  <variant name="Dismissed"/>
  <variant name="Ignored"/>
</variants>

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

<variants name="AllPermissionTypes">
  <variant name="AR"/>
  <variant name="AudioAndVideoCapture"/>
  <variant name="AudioCapture"/>
  <variant name="CameraPanTiltZoom"/>
  <variant name="ClipboardReadWrite"/>
  <variant name="Geolocation"/>
  <variant name="IdleDetection"/>
  <variant name="KeyboardLock"/>
  <variant name="LocalFonts"/>
  <variant name="LocalNetwork"/>
  <variant name="LocalNetworkAccess"/>
  <variant name="LoopbackNetwork"/>
  <variant name="MidiSysEx"/>
  <variant name="MultipleDownload"/>
  <variant name="Nfc"/>
  <variant name="Notifications"/>
  <variant name="PaymentHandler"/>
  <variant name="PointerLock"/>
  <variant name="ProtectedMedia"/>
  <variant name="Quota"/>
  <variant name="RegisterProtocolHandler"/>
  <variant name="SecurityKeyAttestation"/>
  <variant name="Sensors"/>
  <variant name="StorageAccess"/>
  <variant name="TopLevelStorageAccess"/>
  <variant name="U2fApiRequest"/>
  <variant name="VideoCapture"/>
  <variant name="VR"/>
  <variant name="WindowPlacement"/>
</variants>

<!-- LINT.ThenChange(//tools/metrics/histograms/metadata/settings/histograms.xml:AllPermissionTypes) -->

<variants name="ContentSettingSource">
  <variant name="FromAllowlist"/>
  <variant name="FromExtension"/>
  <variant name="FromInstalledWebApp"/>
  <variant name="FromNone"/>
  <variant name="FromOsJavascriptOptimizer"/>
  <variant name="FromPolicy"/>
  <variant name="FromSupervised"/>
  <variant name="FromUser"/>
</variants>

<variants name="CpssSupportedTypes">
  <variant name="Geolocation"/>
  <variant name="Notifications"/>
</variants>

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

<variants name="OsScreen">
  <variant name="OsPrompt"/>
  <variant name="OsSystemSettings"/>
</variants>

<!-- LINT.ThenChange(//components/permissions/permission_uma_util.h:OsScreen) -->

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

<variants name="OsScreenAction">
  <variant name="DismissedScrim"/>
  <variant name="DismissedXButton"/>
  <variant name="OsPromptAllowed"/>
  <variant name="OsPromptDenied"/>
  <variant name="SystemSettings"/>
</variants>

<!-- LINT.ThenChange(//tools/metrics/histograms/metadata/permissions/enums.xml:OsScreenAction) -->

<variants name="OTPCountPermissionAction">
  <variant name="Deny" summary="deny"/>
  <variant name="Dismiss" summary="dismiss"/>
  <variant name="Grant" summary="permanent grant"/>
  <variant name="Ignore" summary="ignore"/>
</variants>

<variants name="OTPSupportedPermissionType">
  <variant name="AudioCapture"/>
  <variant name="Geolocation"/>
  <variant name="VideoCapture"/>
</variants>

<variants name="PermissionRequestGesture">
  <variant name=".Gesture" summary="With user gesture"/>
  <variant name=".NoGesture" summary="Without user gesture"/>
</variants>

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

<variants name="PermissionRequestTypes">
  <variant name=".AR" summary="AR permission"/>
  <variant name=".AudioAndVideoCapture" summary="Mic+Camera permission"/>
  <variant name=".AudioCapture" summary="Microphone permission"/>
  <variant name=".CameraPanTiltZoom" summary="Camera movements permission"/>
  <variant name=".CapturedSurfaceControl"
      summary="Captured Surface Control permission"/>
  <variant name=".ClipboardReadWrite" summary="Clipboard permission"/>
  <variant name=".FileSystemAccess" summary="File System Access permission"/>
  <variant name=".Geolocation" summary="Geolocation permission"/>
  <variant name=".GeolocationApproximate"
      summary="Geolocation permission (approximate only permission prompt)"/>
  <variant name=".GeolocationApproximateOrPrecise"
      summary="Geolocation permission (permission prompt with
               approximate/precise option)"/>
  <variant name=".GeolocationUpgrade"
      summary="Geolocation permission (upgrade permission prompt from
               approximate to precise)"/>
  <variant name=".HandTracking" summary="Hand tracking permission"/>
  <variant name=".IdentityProvider" summary="Identity Provider permission"/>
  <variant name=".IdleDetection" summary="Idle detection permission"/>
  <variant name=".KeyboardAndPointerLock"
      summary="Keyboard and pointer lock permission"/>
  <variant name=".KeyboardLock" summary="Keyboard lock permission"/>
  <variant name=".LocalFonts" summary="Local fonts permission"/>
  <variant name=".LocalNetwork" summary="Local network permission"/>
  <variant name=".LoopbackNetwork" summary="Loopback network permission"/>
  <variant name=".MidiSysEx" summary="Midi SysEx permission"/>
  <variant name=".MultipleDownload" summary="Multiple downloads permission"/>
  <variant name=".Nfc" summary="NFC permission"/>
  <variant name=".Notifications" summary="Notification permission"/>
  <variant name=".PaymentHandler" summary="Payment Handler permission"/>
  <variant name=".PointerLock" summary="Pointer lock permission"/>
  <variant name=".ProtectedMedia" summary="Protected media permission"/>
  <variant name=".Quota" summary="Quota permission"/>
  <variant name=".RegisterProtocolHandler"
      summary="registerProtocolHandler permission"/>
  <variant name=".Sensors" summary="Sensors permission"/>
  <variant name=".SmartCard" summary="Smart card connection permission"/>
  <variant name=".StorageAccess" summary="Storage Access API permission"/>
  <variant name=".TopLevelStorageAccess"
      summary="Top-level Storage Access API permission"/>
  <variant name=".VideoCapture" summary="Camera permission"/>
  <variant name=".VR" summary="VR permission"/>
  <variant name=".WebAppInstallation"
      summary="Web app installation permission"/>
  <variant name=".WebPrinting" summary="Web Printing permission"/>
  <variant name=".WindowManagement" summary="Window Management permission"/>
</variants>

<!-- LINT.ThenChange(//components/permissions/permission_uma_util.h:RequestTypeForUma) -->

<variants name="PermissionTypeForElementAnchoredBubble">
  <variant name="AR"/>
  <variant name="AudioAndVideoCapture"/>
  <variant name="AudioCapture"/>
  <variant name="Geolocation"/>
  <variant name="VideoCapture"/>
</variants>

<variants name="PermissionTypes">
  <variant name=".AR" summary="AR permission actions"/>
  <variant name=".AudioCapture" summary="Microphone permission actions"/>
  <variant name=".CameraPanTiltZoom"
      summary="Camera movements permission actions"/>
  <variant name=".ClipboardReadWrite" summary="Clipboard permission actions"/>
  <variant name=".DisplayCapture" summary="Display capture permission actions"/>
  <variant name=".Geolocation" summary="Geolocation permission actions"/>
  <variant name=".IdleDetection" summary="Idle detection permission actions"/>
  <variant name=".KeyboardAndPointerLock"
      summary="Keyboard and pointer lock permission"/>
  <variant name=".KeyboardLock" summary="Keyboard lock permission"/>
  <variant name=".LocalFonts" summary="Local fonts permission actions"/>
  <variant name=".LocalNetwork" summary="Local network permission actions"/>
  <variant name=".LocalNetworkAccess"
      summary="Local network access permission actions"/>
  <variant name=".LoopbackNetwork"
      summary="Loopback network permission actions"/>
  <variant name=".MidiSysEx" summary="Midi SysEx permsision actions"/>
  <variant name=".Nfc" summary="Nfc permsision actions"/>
  <variant name=".Notifications" summary="Notification permission actions"/>
  <variant name=".PaymentHandler" summary="Payment Handler permission actions"/>
  <variant name=".PointerLock" summary="Pointer lock permission"/>
  <variant name=".ProtectedMedia" summary="Protected media permission actions"/>
  <variant name=".PushMessaging" summary="Push messaging permission actions"/>
  <variant name=".Sensors" summary="Sensors permission actions"/>
  <variant name=".StorageAccess"
      summary="Storage Access API permission actions"/>
  <variant name=".TopLevelStorageAccess"
      summary="Top-level Storage Access API permission actions"/>
  <variant name=".VideoCapture" summary="Camera permission actions"/>
  <variant name=".VR" summary="VR permission actions"/>
  <variant name=".WebAppInstallation"
      summary="Web app installation permission actions"/>
  <variant name=".WindowPlacement"
      summary="Window Management permission actions"/>
</variants>

<variants name="PermissionTypesSupportPermissionsPolicy">
  <variant name="AR"/>
  <variant name="AudioCapture"/>
  <variant name="ClipboardReadWrite"/>
  <variant name="ClipboardSanitizedWrite"/>
  <variant name="DisplayCapture"/>
  <variant name="Geolocation"/>
  <variant name="IdleDetection"/>
  <variant name="LocalFonts"/>
  <variant name="Midi"/>
  <variant name="MidiSysEx"/>
  <variant name="ProtectedMedia"/>
  <variant name="StorageAccess"/>
  <variant name="TopLevelStorageAccess"/>
  <variant name="VideoCapture"/>
  <variant name="VR"/>
  <variant name="WakeLockScreen"/>
  <variant name="WindowPlacement"/>
</variants>

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

<variants name="PredictionModels">
  <variant name="AIv4"/>
  <variant name="OnDevicePredictionService"/>
  <variant name="PredictionService"/>
</variants>

<!-- LINT.ThenChange(//components/permissions/permission_request_enums.h:PredictionModelType) -->

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

<variants name="PromptDisposition">
  <variant name="AnchoredBubble"/>
  <variant name="CustomModalDialog"/>
  <variant name="ElementAnchoredBubble"/>
  <variant name="LocationBarLeftChipAutoBubble"/>
  <variant name="LocationBarLeftQuietAbusiveChip"/>
  <variant name="LocationBarLeftQuietChip"/>
  <variant name="LocationBarLeftQuietIcon"/>
  <variant name="LocationBarRightAnimatedIcon"/>
  <variant name="LocationBarRightStaticIcon"/>
  <variant name="MacOsPrompt"/>
  <variant name="MessageUI"/>
  <variant name="MessageUILoud"/>
  <variant name="MiniInfobar"/>
  <variant name="ModalDialog"/>
  <variant name="NoneVisible"/>
  <variant name="NotApplicable"/>
</variants>

<!-- LINT.ThenChange(//components/permissions/permission_uma_util.h:PermissionPromptDisposition) -->

<variants name="RelevanceOutputPredictionModels">
  <variant name="AIv4"/>
</variants>

<variants name="RenderedTextBasedPredictionModels">
  <variant name="AIv4"/>
</variants>

<variants name="SnapshotBasedPredictionModels">
  <variant name="AIv4"/>
</variants>

<histogram name="BrowserDialogs.ExternalProtocol.BlockState"
    enum="BlockStateMetric" expires_after="2027-08-30">
  <owner>rsesek@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    The observance of external protocol schemes that are denied or allowed by
    default built-in lists, enterprise policy, or user preference.

    The kAllowedDefaultNews and kNewsNotDefault values are influenced by the
    PromptForExternalNewsSchemes feature. When enabled, kNewsNotDefault will be
    emtited with another histogram value to indicate whether it was allowed by
    policy, preference, or prompt. When disabled, the kAllowedDefaultNews sample
    will not be emitted.
  </summary>
</histogram>

<histogram name="BrowserDialogs.ExternalProtocol.HandleState"
    enum="HandleStateType" expires_after="2023-05-01">
  <owner>engedy@chromium.org</owner>
  <owner>ravjit@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <owner>meacer@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Whether or not the user checked the option in the external protocol dialog
    to remember their choice of opening or not opening the specified app.
    Recorded each time the user interacts with the External Protocol Dialog,
    when making a decision.
  </summary>
</histogram>

<histogram name="BrowserDialogs.ExternalProtocol.Scheme"
    enum="ExternalProtocolScheme" expires_after="2026-09-20">
  <owner>drubery@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records the scheme of an external protocol request. Only logs schemes listed
    among the enum ExternalProtocolScheme. This is logged once for each request
    to open an external protocol.
  </summary>
</histogram>

<histogram name="Permissions.Action.WithDisposition.{DispositionType}"
    enum="PermissionAction" expires_after="2027-01-10">
  <owner>andypaicu@chromium.org</owner>
  <owner>engedy@chromium.org</owner>
  <owner>hkamila@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Tracks the action that a user had taken per permission prompt UI
    disposition. Suffixed by the UI disposition that the prompt used. Recorded
    when a permission prompt has been resolved.
  </summary>
  <token key="DispositionType" variants="PromptDisposition"/>
</histogram>

<histogram name="Permissions.Action.{PermissionType}.CrossOriginFrame"
    enum="PermissionAction" expires_after="2026-11-29">
  <owner>tungnh@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded when a permission prompt has been resolved and the permission
    request was made from a cross-origin iframe. Records the action that a user
    had taken.
  </summary>
  <token key="PermissionType" variants="AllPermissionTypes"/>
</histogram>

<histogram
    name="Permissions.Action.{PermissionType}.CrossOriginFrame.TopLevelHeaderPolicy"
    enum="PermissionsPolicyConfiguration" expires_after="2027-08-30">
  <owner>tungnh@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded whenever a permission prompt is shown to the user which was
    triggered by a request made from a cross-origin frame. Records what type of
    type of permission header policy the top-level document defined for the
    accessed feature.

    Warning: this histogram was expired from 2025-01-09 to 2025-06-27; data may
    be missing.
  </summary>
  <token key="PermissionType"
      variants="PermissionTypesSupportPermissionsPolicy"/>
</histogram>

<histogram name="Permissions.Action{PermissionTypes}" enum="PermissionAction"
    expires_after="never">
<!-- expires-never: Primary metrics for monitoring capability usage and trends. -->

  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Tracks user interactions on permission prompts, aggregated across all UI
    dispositions, including quiet permission prompts due to CPSS or Crowd Deny.

    One sample is recorded each time a permission request triggers a prompt,
    even if the prompt UI is never seen by the user. This histogram does not
    include permission requests that are granted/denied because the user had
    previously made a decision; nor requests that are denied by Permission
    Policy, per-site permission embargo, or are cancelled while queued.

    The suffix of the histogram indicates which particular permission.
    {PermissionTypes}
  </summary>
  <token key="PermissionTypes" variants="PermissionTypes">
    <variant name=""/>
  </token>
</histogram>

<histogram
    name="Permissions.ActivityIndicator.{Disposition}.{PermissionType}.{Action}"
    enum="ActivityIndicatorState" expires_after="2027-07-20">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded when a permission activity indicator has been shown from in the
    location bar. Records the indicator's state.
  </summary>
  <token key="PermissionType">
    <variant name="AudioAndVideoCapture"/>
    <variant name="AudioCapture"/>
    <variant name="VideoCapture"/>
  </token>
  <token key="Disposition">
    <variant name="LHS"/>
  </token>
  <token key="Action">
    <variant name="Click"/>
    <variant name="Show"/>
  </token>
</histogram>

<histogram name="Permissions.AIv4.ComputeEmbeddingsDuration" units="ms"
    expires_after="2027-02-14">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the time it took for the permissions prediction service to inquire
    the passage embeddings model during the AIv4 model execution workflow.
    Recorded for pages in English on which rendered text could be acquired with
    success and the text is considered suitable as input for the AIv4 model
    (i.e. it's long enough).
  </summary>
</histogram>

<histogram name="Permissions.AIv4.ComputeEmbeddingsStatus"
    enum="ComputeEmbeddingsStatus" expires_after="2027-02-14">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the status of passage embeddings model computation for rendered_text
    required during the AIv4 model execution flow. Recorded for pages in English
    on which rendered text could be acquired with success and the text is
    considered suitable as input for the AIv4 model (i.e. it's long enough).
  </summary>
</histogram>

<histogram name="Permissions.AIv4.EmbedderMetadataValid" enum="BooleanValid"
    expires_after="2027-02-14">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether the passage embedder metadata was valid when the AIv4
    workflow was initiated. Recorded when the PassageEmbedderDelegate attempts
    to retrieve the passage embedder.
  </summary>
</histogram>

<histogram name="Permissions.AIv4.FinishedPassageEmbeddingsTaskOutdated"
    enum="BooleanSuccess" expires_after="2027-02-14">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether a returning passage embeddings task was outdated, i.e. a new
    passage embeddings task was started in the meantime. This should not happen
    as we try-cancel the task, but we want to be sure. Recorded for pages in
    English on which rendered text could be acquired with success and the text
    is considered suitable as input for the AIv4 model (i.e. it's long enough).
  </summary>
</histogram>

<histogram name="Permissions.AIv4.LanguageDetectionStatus"
    enum="LanguageDetectionStatus" expires_after="2027-02-14">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the status of asynchronous language detection required during the
    AIv4 model execution flow. Recorded for all Aiv4 workflows, as detecting the
    pages language is the very first step.
  </summary>
</histogram>

<histogram name="Permissions.AIv4.PassageEmbeddingsComputationTimeout"
    enum="Boolean" expires_after="2027-02-14">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether a passage embeddings computation task ran into the timeout.
    Recorded for pages in English on which rendered text could be acquired with
    success and the text is considered suitable as input for the AIv4 model
    (i.e. it's long enough).
  </summary>
</histogram>

<histogram name="Permissions.AIv4.TryCancelPreviousEmbeddingsModelExecution"
    enum="BooleanSuccess" expires_after="2027-02-14">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether there still is an ongoing execution of the passage
    embeddings model when we try to call it again. Recorded for pages in English
    on which rendered text could be acquired with success and the text is
    considered suitable as input for the AIv4 model (i.e. it's long enough).
  </summary>
</histogram>

<histogram name="Permissions.AIv4.UseHardcodedPredictionThresholds"
    enum="Boolean" expires_after="2027-01-24">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether the prediction service used hardcoded thresholds (true) or
    model metadata thresholds (false) for the AIv4 model. Recorded when the
    threshold values are set in the executor.
  </summary>
</histogram>

<histogram
    name="Permissions.AndroidSystemLevel.{SystemPermissionType}.Prompt.Shown"
    enum="Boolean" expires_after="2027-02-07">
  <owner>ravjit@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    This histogram is logged whenever the Android system level permission prompt
    for {SystemPermissionType} is shown after a site requesting Chrome level
    permissions. Records whether the system level permission was granted or
    denied. Permissions.Prompt.Shown is the baseline metric for this histogram.
    Android only.

    Beware that this histogram is only logged if the Android system level
    permission prompt is shown in the context of a site requesting a permission.
    In the case e.g. of notifications, Chrome also triggers an Android level
    permission prompt at startup, and in that case this histogram is not logged.
  </summary>
  <token key="SystemPermissionType">
    <variant name="Camera"/>
    <variant name="Location"/>
    <variant name="Mic"/>
    <variant name="Notification"/>
  </token>
</histogram>

<histogram name="Permissions.AutoBlocker.EmbargoPromptSuppression"
    enum="PermissionEmbargoStatus" expires_after="2027-01-17">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    For every permission request that would show a prompt to the user, this
    metric tracks whether the request is suppressed by embargo (and the source
    of that embargo), or whether there is no embargo and the prompt is shown.
    This is the proportion of permission prompts that the user would have seen
    that have been blocked due to embargo.

    If the (origin, permission) pair was previously placed under embargo, no
    prompt is displayed and the reason for embargo is recorded. Otherwise, the
    prompt is shown and a no embargo reason is recorded.

    Warning: this histogram was expired from 2025-01-24 to 2025-07-02; data may
    be missing.
  </summary>
</histogram>

<histogram name="Permissions.AutoBlocker.EmbargoStatus"
    enum="PermissionEmbargoStatus" expires_after="2027-01-03">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Tracks the reason that an (origin, permission) pair has been placed under
    embargo (blocked from making requests for that permission for a period of
    time). This is triggered when a permission is placed under embargo for
    blacklisting (once Safe Browsing has returned a result), when a permission
    prompt has been shown and it is placed under embargo for repeated
    dismissals, or when a permission prompt is shown and not embargoed.
  </summary>
</histogram>

<histogram name="Permissions.ClapperLoud.MessageUI.Allow" enum="Boolean"
    expires_after="2027-01-24">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the allow action whenever the user clicks on the Allow button in the
    message UI for the loud notification permission prompt. This action will
    accept the current notifications permission prompt.
  </summary>
</histogram>

<histogram name="Permissions.ClapperLoud.MessageUI.Deny" enum="Boolean"
    expires_after="2026-12-09">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the deny action whenever the user clicks on the Don't Allow menu
    item in the message UI for the loud notification permission prompt. This
    action will deny the current notifications permission prompt.
  </summary>
</histogram>

<histogram name="Permissions.ClapperLoud.MessageUI.Dismiss" enum="Boolean"
    expires_after="2027-01-24">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the dismiss action whenever a loud notification permission prompt in
    the form of the message UI is dismissed by the user. This action is
    processed as the deny action, hence this histogram is used to track the
    dismiss action.
  </summary>
</histogram>

<histogram name="Permissions.ClapperLoud.MessageUI.Manage" enum="Boolean"
    expires_after="2027-01-24">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records when the user clicks on the Manage menu item in the message UI for
    the loud notification permission prompt. This action redirects the user to
    the PageInfo Permissions subpage where the user can grant or deny the
    permission prompt.
  </summary>
</histogram>

<histogram name="Permissions.ClapperLoud.PageInfo.Closed" enum="Boolean"
    expires_after="2027-01-24">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the close action whenever the user closes the PageInfo Permissions
    subpage after having seen the notification permission prompt. This action is
    processed as the deny action, hence this histogram is used to track the
    close action.
  </summary>
</histogram>

<histogram name="Permissions.ClapperLoud.PageInfo.OsPromptResolved"
    enum="Boolean" expires_after="2026-12-06">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether the OS-level notification permission prompt was granted or
    denied when the user clicked on the Subscribe button in the PageInfo
    Permissions subpage or on the Allow button in the message UI.
  </summary>
</histogram>

<histogram name="Permissions.ClapperLoud.PageInfo.Reset" enum="Boolean"
    expires_after="2027-01-24">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the reset action whenever the user clicks the Reset permission
    button in the PageInfo Permissions subpage after having seen the
    notification permission prompt. The permission request is resolved as
    Dismissed.
  </summary>
</histogram>

<histogram name="Permissions.ClapperLoud.PageInfo.Subscribed" enum="Boolean"
    expires_after="2027-01-24">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the accept action whenever the user taps on the subscrube button in
    the notification permission row from the PageInfo Permissions subpage.
  </summary>
</histogram>

<histogram name="Permissions.CPSS.SiteSettingsChanged.{Flavor}"
    enum="ContentType" expires_after="2026-11-29">
  <owner>lyf@chromium.org</owner>
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Record when CPSS setting is changed by users in the site settings page, what
    user preference is and whether user preference is related to UI changes.
  </summary>
  <token key="Flavor">
    <variant name="CPSS" summary="Collapse unwanted requests."/>
    <variant name="Loud" summary="Expand all requests"/>
    <variant name="Quiet" summary="Collapse all requests in the address bar."/>
  </token>
</histogram>

<histogram name="Permissions.CrowdDeny.DidHoldbackQuietUi" enum="Boolean"
    expires_after="2027-01-17">
  <owner>andypaicu@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Whenever a notification permission prompt is to be displayed, crowd deny
    might trigger based on site reputation which will result in a quiet
    permission prompt UI to be used. Whenever this happens, there is a small
    chance that the normal UI will still be used. This records, when a quiet UI
    is supposed to be shown, whether it has been randomly selected into the
    hold-back group. In this case the normal UI will be displayed unless
    overriden by the user Prefences.
  </summary>
</histogram>

<histogram name="Permissions.CrowdDeny.PreloadData.DelayedPushNotification"
    units="ms" expires_after="2026-10-21">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Record, for each incoming push notification, a delay caused by loading Crowd
    Deny component during abusive an origin verification. It's recorded only for
    non-abusive origins and only if the Crowd Deny request was made while the
    preload data is in the process of being loaded. Timing starts at requesting
    CrowdDenyPreloadData::GetReputationDataForSiteAsync, and timing ends after
    Crowd Deny returns result to
    AbusiveOriginPermissionRevocationRequest::OnSiteReputationReady.
  </summary>
</histogram>

<histogram name="Permissions.CrowdDeny.PreloadData.NotificationUxQuality"
    enum="CrowdDenyNotificationUxQuality" expires_after="2027-01-03">
  <owner>andypaicu@chromium.org</owner>
  <owner>engedy@chromium.org</owner>
  <owner>hkamila@chromium.org</owner>
  <summary>
    Records, each time a notification permission prompt is about to be shown,
    the NotificationUxQuality result for the requesting origin.
  </summary>
</histogram>

<histogram name="Permissions.CrowdDeny.PreloadData.VersionAtAbuseCheckTime"
    units="date" expires_after="2027-07-29">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records, each time abusive origin verification is performed, the version of
    the Crowd Deny preload data on disk (not necessarily loaded).
  </summary>
</histogram>

<histogram name="Permissions.CrowdDeny.SafeBrowsing.RequestDuration" units="ms"
    expires_after="2026-09-22">
  <owner>andypaicu@chromium.org</owner>
  <owner>engedy@chromium.org</owner>
  <owner>hkamila@chromium.org</owner>
  <summary>
    Records, each time a Safe Browsing request is made in response to a website
    requesting the notification permission, how long that Safe Browsing request
    took. This also includes all delays introduced by thread hopping.
  </summary>
</histogram>

<histogram name="Permissions.CrowdDeny.SafeBrowsing.Verdict"
    enum="CrowdDenySafeBrowsingVerdict" expires_after="2027-02-07">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records, each time a Safe Browsing request is made in response to a website
    requesting the notification permission, the Safe Browsing verdict regarding
    the notification prompt experience on that site.
  </summary>
</histogram>

<histogram name="Permissions.DSE.EffectiveSetting.Geolocation.Accuracy"
    enum="GeolocationAccuracy" expires_after="2027-01-03">
  <owner>antoniosartori@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded whenever &quot;Permissions.DSE.EffectiveSetting.Geolocation&quot;
    is recorded with value ALLOW. Tracks the Geolocation Accuracy granted to the
    Default Search Engine origin.
  </summary>
</histogram>

<histogram name="Permissions.DSE.EffectiveSetting{PermissionTypes}"
    enum="ContentSetting" expires_after="2027-02-07">
  <owner>andypaicu@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded at initialization and when the Default Search Engine origin is
    changed. Tracks the setting for the Default Search Engine origin. Suffixed
    by `PermissionTypes` to provide information per permission type. Only
    recorded for Android as that is the only platform where the DSE permissions
    were enabled. {PermissionTypes}
  </summary>
  <token key="PermissionTypes" variants="PermissionTypes">
    <variant name=""/>
  </token>
</histogram>

<histogram
    name="Permissions.Experimental.PrimaryMainNavigationFinished.{PermissionType}.TopLevelHeaderPolicy"
    enum="PermissionsPolicyConfiguration" expires_after="2027-08-30">
  <owner>tungnh@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded whenever a navigation finished in a primary main frame. Records
    what type of permission header policy the top-level document defined for the
    feature corresponding to {PermissionType} .
  </summary>
  <token key="PermissionType">
    <variant name="AudioCapture"/>
    <variant name="Geolocation"/>
    <variant name="VideoCapture"/>
  </token>
</histogram>

<histogram
    name="Permissions.Experimental.Usage.{PermissionType}.CrossOriginFrame.TopLevelHeaderPolicy"
    enum="PermissionsPolicyConfiguration" expires_after="2027-08-30">
  <owner>tungnh@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded whenever a permission is used in a cross-origin frame. Records what
    type of permission header policy the top-level document defined for the
    accessed feature.

    Warning: this histogram was expired from 2025-03-09 to 2025-06-27; data may
    be missing.
  </summary>
  <token key="PermissionType"
      variants="PermissionTypesSupportPermissionsPolicy"/>
</histogram>

<histogram
    name="Permissions.Experimental.Usage.{PermissionType}.IsBlockedDueToActuation"
    enum="Boolean" expires_after="2026-11-26">
  <owner>michelleabreo@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded on each permission status check for a user-prompted permission
    type, but only when the kGlicActorPermissionsAutoReject feature is enabled.
    Records whether an actor was active, causing the permission to be blocked
    (true), or if no agent was active (false). This allows for calculating the
    rate at which the agent denies permission checks.
  </summary>
  <token key="PermissionType" variants="AllPermissionTypes"/>
</histogram>

<histogram
    name="Permissions.Experimental.Usage.{PermissionType}.IsCrossOriginFrame"
    enum="Boolean" expires_after="2027-08-30">
  <owner>tungnh@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded whenever a permission is used. Records whether the permission is
    used in a cross origin frame.
  </summary>
  <token key="PermissionType" variants="AllPermissionTypes"/>
</histogram>

<histogram name="Permissions.GetLastCommittedOriginAsURL.IsFileURL"
    enum="Boolean" expires_after="2027-01-24">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded whenever a RenderFrameHost is used to fetch an origin for
    permission verification on Android. This histogram is needed to verify if
    the file url override rule is still needed.

    Warning: this histogram was expired from 2024-10-03 to 2024-11-22; data may
    be missing.
  </summary>
</histogram>

<histogram name="Permissions.MissingOSLevelPermission.Action{PermissionTypes}"
    enum="PermissionAction" expires_after="2027-09-06">
  <owner>andypaicu@chromium.org</owner>
  <owner>engedy@chromium.org</owner>
  <owner>hkamila@chromium.org</owner>
  <summary>
    Recorded when the &quot;Chrome needs permission...&quot; infobar is
    resolved. Records the resulting action that was taken. Suffixed by
    `PermissionTypes` to provide information per permission type.
    {PermissionTypes}
  </summary>
  <token key="PermissionTypes" variants="PermissionTypes">
    <variant name=""/>
  </token>
</histogram>

<histogram
    name="Permissions.MissingOSLevelPermission.ShouldShow{PermissionTypes}"
    enum="Boolean" expires_after="2027-02-07">
  <owner>andypaicu@chromium.org</owner>
  <owner>engedy@chromium.org</owner>
  <owner>hkamila@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded when the &quot;Chrome needs permission...&quot; infobar might be
    displayed to the user because a site already has the permission but Chrome
    does not. Records whether the infobar should be displayed or not. Ignores
    situations when the infobar cannot be displayed (for example because there
    is no appropriate web contents) as in those cases no decision is actually
    made. Suffixed by `PermissionTypes` to provide information per permission
    type. {PermissionTypes}
  </summary>
  <token key="PermissionTypes" variants="PermissionTypes">
    <variant name=""/>
  </token>
</histogram>

<histogram
    name="Permissions.OneTimePermission.Android.NegativeButtonOutOfScreen"
    enum="Boolean" expires_after="2027-02-07">
  <owner>tungnh@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded whenever the negative button is shown on one time permission prompt
    Records whether the button is out of screen or not. Android only.
  </summary>
</histogram>

<histogram name="Permissions.OneTimePermission.{PermissionType}.Event"
    enum="OneTimePermissionEvent" expires_after="2026-09-20">
  <owner>fjacky@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Logs granting, revocation, and expiry behaviors of one time permissions.
    Starting with M116, the lifetime limit is enforced actively instead of
    lazily, and expiration is accurately captured in &quot;Expired after maximum
    lifetime&quot;. M116 also added the functionality to expire on suspend. This
    event is also captured in the new enum value &quot;Expired because the
    device was suspended&quot;. Note that these buckets are only recorded for
    clients &gt;= M116.

    Warning: &quot;Revoked one time grant manually&quot; is only recorded
    correctly for clients &gt;= M116 (and should be ignored for previous major
    versions)
  </summary>
  <token key="PermissionType" variants="OTPSupportedPermissionType"/>
</histogram>

<histogram name="Permissions.OneTimePermission.{PermissionType}.OneTimeGrant"
    units="count" expires_after="2027-09-15">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the number of times a one-time permission has been granted for a
    site. Each count represents an additional one-time grant for the same site.
  </summary>
  <token key="PermissionType" variants="OTPSupportedPermissionType"/>
</histogram>

<histogram
    name="Permissions.OneTimePermission.{PermissionType}.{OTPCountPermissionAction}OTPCount"
    units="count" expires_after="2026-10-15">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the number of times a one-time permission was granted for a site
    before a {OTPCountPermissionAction} action was taken.
  </summary>
  <token key="PermissionType" variants="OTPSupportedPermissionType"/>
  <token key="OTPCountPermissionAction" variants="OTPCountPermissionAction"/>
</histogram>

<histogram
    name="Permissions.PageInfo.Changed.{PermissionType}.OnStatusChangeListener"
    enum="BooleanDetected" expires_after="2027-02-07">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    This metric measures how often users change permissions state via PageInfo
    and if the page is subscribed to the permission status change listener.
    Recorded when users changes permissions state or clicks the &quot;Reset
    permission&quot; button in PageInfo.
  </summary>
  <token key="PermissionType">
    <variant name="AudioCapture"/>
    <variant name="Geolocation"/>
    <variant name="Notifications"/>
    <variant name="VideoCapture"/>
  </token>
</histogram>

<histogram
    name="Permissions.PageInfo.Changed.{PermissionType}.Reallowed.Outcome"
    enum="PermissionChangeInfo" expires_after="2027-02-07">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records if a user manually reallowed permission state via PageInfo. Recorded
    when the user closes a tab, makes cross-origin navigation, or if permission
    is used by an origin. Grouped by whether permission was used, the page was
    reloaded and a &quot;Reload this page&quot; infobar was shown.
  </summary>
  <token key="PermissionType" variants="AllPermissionTypes"/>
</histogram>

<histogram name="Permissions.PageInfo.ChangedWithin1m.{PermissionType}"
    enum="PermissionChangeAction" expires_after="2026-10-07">
  <owner>fjacky@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    This metric measures how often and in what way users change their mind
    within the first minute of making an active permission decision, i.e. any
    PermissionAction that is any action that is not ignore, dismiss or an
    automated revoke event.
  </summary>
  <token key="PermissionType" variants="AllPermissionTypes"/>
</histogram>

<histogram
    name="Permissions.PageInfo.OnChanged.{PermissionType}.{ReloadInfoBar}"
    enum="PermissionChangeAction" expires_after="2026-10-12">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    This metric measures how often and in what way users change permissions
    state via PageInfo and if we show a &quot;Reload this page&quot; info bar.
    Recorded when users changes permissions state or clicks the &quot;Reset
    permission&quot; button in PageInfo.
  </summary>
  <token key="PermissionType">
    <variant name="AudioCapture"/>
    <variant name="VideoCapture"/>
  </token>
  <token key="ReloadInfoBar">
    <variant name="ReloadInfobarNotShown"/>
    <variant name="ReloadInfobarShown"/>
  </token>
</histogram>

<histogram
    name="Permissions.PredictionService.Action.{PermissionType}.{Likelihood}.{Prominence}"
    enum="PermissionAction" expires_after="2026-11-29">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the user action on a permission prompt when the prediction service
    determined the grant likelihood to be unlikely or very unlikely.
  </summary>
  <token key="Prominence">
    <variant name="Loud"/>
    <variant name="Quiet"/>
  </token>
  <token key="Likelihood">
    <variant name="Unlikely"/>
    <variant name="VeryUnlikely"/>
  </token>
  <token key="PermissionType" variants="CpssSupportedTypes"/>
</histogram>

<histogram
    name="Permissions.PredictionService.Action.{PermissionType}{Gesture}.{Prominence}"
    enum="PermissionAction" expires_after="2027-01-31">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the user action on a permission prompt based on user gesture and
    prominence.
  </summary>
  <token key="Prominence">
    <variant name="Loud"/>
    <variant name="Quiet"/>
  </token>
  <token key="PermissionType" variants="CpssSupportedTypes"/>
  <token key="Gesture" variants="PermissionRequestGesture"/>
</histogram>

<histogram name="Permissions.PredictionService.ConcurrentRequests"
    enum="PermissionPredictionSupportedType" expires_after="2026-11-13">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded whenever a notifications or geolocation permission is sent to the
    prediction service. Records whether there is a concurrent request.
  </summary>
</histogram>

<histogram name="Permissions.PredictionService.MSBB" enum="BooleanEnabled"
    expires_after="2027-02-07">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded whenever a notifications or geolocation permission is sent to the
    prediction service. Records whether the user has Make Searches and Browsing
    Better enabled.
  </summary>
</histogram>

<histogram
    name="Permissions.PredictionService.NoMSBB.{PermissionType}{Gesture}"
    enum="PermissionRequestLikelihood" expires_after="2026-09-30">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the prediction service's likelihood prediction for a permission
    prompt, for users with disabled MSBB. This is recorded when a permission
    prompt is resolved.
  </summary>
  <token key="PermissionType" variants="CpssSupportedTypes"/>
  <token key="Gesture" variants="PermissionRequestGesture"/>
</histogram>

<histogram name="Permissions.PredictionService.SignatureModel.Mismatch"
    enum="Boolean" expires_after="2027-01-17">
  <owner>ravjit@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded when the client does the on-device permission prediction using the
    signature runner. The histogram records whether the model that is downloaded
    is compatible with the signature runner or not. A value of true means its a
    mismatch, i.e. the model is not the signature runner model. False means
    otherwise.
  </summary>
</histogram>

<histogram name="Permissions.PredictionService.Timeout" enum="BooleanTimedOut"
    expires_after="2027-02-14">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded when the overall timeout for the prediction service is reached.
    This indicates that the entire process of selecting a permission UI took
    longer than the allowed time. This is not recorded when the request is
    cancelled.
  </summary>
</histogram>

<histogram
    name="Permissions.PredictionService.{PermissionType}.OnStatusChangeListener"
    enum="BooleanDetected" expires_after="2027-02-07">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded whenever a quiet permission prompt was granted. Records whether the
    page subscribed to a permisson status change event.
  </summary>
  <token key="PermissionType" variants="CpssSupportedTypes"/>
</histogram>

<histogram
    name="Permissions.PredictionService.{PermissionType}.PostPromptSessionDuration"
    units="ms" expires_after="2027-01-03">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the duration of the browsing session up to 1 hour on a given origin
    after a Notifications or Geolocation permission prompt has been displayed
    and until the tab is closed or a cross-origin navigation occurs.
  </summary>
  <token key="PermissionType" variants="CpssSupportedTypes"/>
</histogram>

<histogram
    name="Permissions.PredictionService.{PermissionType}.PostPromptSessionDuration10m"
    units="ms" expires_after="2027-01-03">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the duration of the browsing session between 5 minutes and 10
    minutes on a given origin after a Notifications or Geolocation permission
    prompt has been displayed and until the tab is closed or a cross-origin
    navigation occurs.
  </summary>
  <token key="PermissionType" variants="CpssSupportedTypes"/>
</histogram>

<histogram
    name="Permissions.PredictionService.{PermissionType}.PostPromptSessionDuration10s"
    units="ms" expires_after="2027-01-03">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the duration of the browsing session up to 10 seconds on a given
    origin after a Notifications or Geolocation permission prompt has been
    displayed and until the tab is closed or a cross-origin navigation occurs.
  </summary>
  <token key="PermissionType" variants="CpssSupportedTypes"/>
</histogram>

<histogram
    name="Permissions.PredictionService.{PermissionType}.PostPromptSessionDuration1m"
    units="ms" expires_after="2027-01-03">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the duration of the browsing session between 11 seconds and 1 minute
    on a given origin after a Notifications or Geolocation permission prompt has
    been displayed and until the tab is closed or a cross-origin navigation
    occurs.
  </summary>
  <token key="PermissionType" variants="CpssSupportedTypes"/>
</histogram>

<histogram
    name="Permissions.PredictionService.{PermissionType}.PostPromptSessionDuration30m"
    units="ms" expires_after="2027-01-03">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the duration of the browsing session between 10 minutes and 30
    minutes on a given origin after a Notifications or Geolocation permission
    prompt has been displayed and until the tab is closed or a cross-origin
    navigation occurs.
  </summary>
  <token key="PermissionType" variants="CpssSupportedTypes"/>
</histogram>

<histogram
    name="Permissions.PredictionService.{PermissionType}.PostPromptSessionDuration5m"
    units="ms" expires_after="2027-01-03">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the duration of the browsing session between 1 minute and 5 minutes
    on a given origin after a Notifications or Geolocation permission prompt has
    been displayed and until the tab is closed or a cross-origin navigation
    occurs.
  </summary>
  <token key="PermissionType" variants="CpssSupportedTypes"/>
</histogram>

<histogram
    name="Permissions.PredictionService.{PermissionType}.PrePromptSessionDuration1h"
    units="ms" expires_after="2027-01-03">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the duration of the browsing session between 5 minutes and up to 1
    hour on a given origin before a Notifications or Geolocation permission
    prompt has been displayed.
  </summary>
  <token key="PermissionType" variants="CpssSupportedTypes"/>
</histogram>

<histogram
    name="Permissions.PredictionService.{PermissionType}.PrePromptSessionDuration1m"
    units="ms" expires_after="2027-01-03">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the duration of the browsing session up to 1 minute on a given
    origin before a Notifications or Geolocation permission prompt has been
    displayed.
  </summary>
  <token key="PermissionType" variants="CpssSupportedTypes"/>
</histogram>

<histogram
    name="Permissions.PredictionService.{PermissionType}.PrePromptSessionDuration5m"
    units="ms" expires_after="2027-01-03">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the duration of the browsing session between 1 minute and up to 5
    minutes on a given origin before a Notifications or Geolocation permission
    prompt has been displayed.
  </summary>
  <token key="PermissionType" variants="CpssSupportedTypes"/>
</histogram>

<histogram name="Permissions.PredictionService.{PermissionType}{Gesture}"
    enum="PermissionRequestLikelihood" expires_after="2026-11-29">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the grant likelihood of a permission request based on whether a
    gesture was associated with it,for users with enabled MSBB. This is recorded
    by the prediction service for Notifications and Geolocation permissions.
  </summary>
  <token key="PermissionType" variants="CpssSupportedTypes"/>
  <token key="Gesture" variants="PermissionRequestGesture"/>
</histogram>

<histogram name="Permissions.PredictionServiceSource.{PermissionType}"
    enum="PermissionPredictionSource" expires_after="2027-02-07">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded whenever a permission is sent to the prediction service. Records
    which prediction service was used to generate the prediction.
  </summary>
  <token key="PermissionType" variants="CpssSupportedTypes"/>
</histogram>

<histogram
    name="Permissions.Prompt.Accepted.PriorDismissCount2{PermissionTypes}"
    units="units" expires_after="2026-10-07">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    This metric, recorded at the time of a permission prompt accept, records the
    total number of prompt dismissal events for this origin since the last time
    the user explicitly set the permission state or cleared history / site data
    and prior to the accept. The suffix of the histogram indicates which
    particular permission. {PermissionTypes}

    Warning: this histogram was expired from 2025-01-25 to 2025-06-27; data may
    be missing.
  </summary>
  <token key="PermissionTypes" variants="PermissionTypes">
    <variant name=""/>
  </token>
</histogram>

<histogram
    name="Permissions.Prompt.Accepted.PriorIgnoreCount2{PermissionTypes}"
    units="units" expires_after="2026-11-26">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    This metric, recorded at the time of a permission prompt accept, records the
    total number of prompt ignore events for this origin since the last time the
    user explicitly set the permission state or cleared history / site data and
    prior to the accept. The suffix of the histogram indicates which particular
    permission.

    Warning: this histogram was expired from 2024-10-31 to 2024-11-22; data may
    be missing. {PermissionTypes}
  </summary>
  <token key="PermissionTypes" variants="PermissionTypes">
    <variant name=""/>
  </token>
</histogram>

<histogram
    name="Permissions.Prompt.AcceptedOnce.PriorDismissCount2{PermissionTypes}"
    units="units" expires_after="2026-10-07">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    This metric, recorded at the time of a permission prompt one-time accept,
    records the total number of prompt dismissal events for this origin since
    the last time the user explicitly set the permission state or cleared
    history / site data and prior to the accept. The suffix of the histogram
    indicates which particular permission.

    Warning: this histogram was expired from 2024-10-31 to 2024-11-22; data may
    be missing. {PermissionTypes}
  </summary>
  <token key="PermissionTypes" variants="PermissionTypes">
    <variant name=""/>
  </token>
</histogram>

<histogram
    name="Permissions.Prompt.AcceptedOnce.PriorIgnoreCount2{PermissionTypes}"
    units="units" expires_after="2026-10-21">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    This metric, recorded at the time of a permission prompt one-time accept,
    records the total number of prompt ignore events for this origin since the
    last time the user explicitly set the permission state or cleared history /
    site data and prior to the accept. The suffix of the histogram indicates
    which particular permission.

    Warning: this histogram was expired from 2024-10-31 to 2024-11-22 and from
    2026-04-20 to 2026-04-21; data may be missing. {PermissionTypes}
  </summary>
  <token key="PermissionTypes" variants="PermissionTypes">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Permissions.Prompt.AcceptedOnce{PermissionRequestGesture}"
    enum="PermissionRequestType" expires_after="2026-12-09">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded when the user clicks on the one-time allow button of the permission
    prompt. Tracks the permission bubbles (merged and non-merged) that are
    accepted once. Merged bubbles are considered accepted if all permissions are
    allowed.

    Warning: this histogram was expired from 2024-10-31 to 2024-11-22; data may
    be missing. {PermissionRequestGesture}
  </summary>
  <token key="PermissionRequestGesture" variants="PermissionRequestGesture">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Permissions.Prompt.Accepted{PermissionRequestGesture}"
    enum="PermissionRequestType" expires_after="2027-01-10">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Tracks the permission bubbles (merged and non-merged) that are accepted.
    Merged bubbles are considered accepted if all permissions are allowed.
    {PermissionRequestGesture}
  </summary>
  <token key="PermissionRequestGesture" variants="PermissionRequestGesture">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Permissions.Prompt.Denied.PriorDismissCount2{PermissionTypes}"
    units="units" expires_after="2026-10-07">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    This metric, recorded at the time of a permission prompt deny, records the
    total number of prompt dismissal events for this origin since the last time
    the user explicitly set the permission state or cleared history / site data
    and prior to the accept. The suffix of the histogram indicates which
    particular permission.

    Warning: this histogram was expired from 2024-10-31 to 2024-11-22; data may
    be missing. {PermissionTypes}
  </summary>
  <token key="PermissionTypes" variants="PermissionTypes">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Permissions.Prompt.Denied.PriorIgnoreCount2{PermissionTypes}"
    units="units" expires_after="2026-11-26">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    This metric, recorded at the time of a permission prompt deny, records the
    total number of prompt ignore events for this origin since the last time the
    user explicitly set the permission state or cleared history / site data and
    prior to the accept. The suffix of the histogram indicates which particular
    permission.

    Warning: this histogram was expired from 2024-10-31 to 2024-11-22; data may
    be missing. {PermissionTypes}
  </summary>
  <token key="PermissionTypes" variants="PermissionTypes">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Permissions.Prompt.Denied{PermissionRequestGesture}"
    enum="PermissionRequestType" expires_after="2027-01-03">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Tracks the permission bubbles (merged and non-merged) that are denied.
    Merged bubbles are considered denied if any permission is denied.
    {PermissionRequestGesture}
  </summary>
  <token key="PermissionRequestGesture" variants="PermissionRequestGesture">
    <variant name=""/>
  </token>
</histogram>

<histogram
    name="Permissions.Prompt.Dismissed.PriorDismissCount2{PermissionTypes}"
    units="units" expires_after="2026-11-13">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    This metric, recorded at the time of a permission prompt dismiss, records
    the total number of prompt dismissal events for this origin since the last
    time the user explicitly set the permission state or cleared history / site
    data and prior to the dismiss. The suffix of the histogram indicates which
    particular permission.

    Warning: this histogram was expired from 2024-07-09 to 2024-11-22; data may
    be missing. {PermissionTypes}
  </summary>
  <token key="PermissionTypes" variants="PermissionTypes">
    <variant name=""/>
  </token>
</histogram>

<histogram
    name="Permissions.Prompt.Dismissed.PriorIgnoreCount2{PermissionTypes}"
    units="units" expires_after="2027-02-07">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    This metric, recorded at the time of a permission prompt dismiss, records
    the total number of prompt ignore events for this origin since the last time
    the user explicitly set the permission state or cleared history / site data
    and prior to the dismiss. The suffix of the histogram indicates which
    particular permission.

    Warning: this histogram was expired from 2024-10-31 to 2024-11-22; data may
    be missing. {PermissionTypes}
  </summary>
  <token key="PermissionTypes" variants="PermissionTypes">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Permissions.Prompt.Geolocation.{Action}.Accuracy"
    enum="GeolocationAccuracy" expires_after="2027-02-14">
  <owner>tommasin@chromium.org</owner>
  <owner>antoniosartori@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded when a geolocation permission prompt is resolved. This tracks
    whether the user granted precise or approximate location.

    Only recorded when the feature flag kApproximateGeolocationPermission is
    enabled.
  </summary>
  <token key="Action" variants="Action"/>
</histogram>

<histogram name="Permissions.Prompt.Has{FaviconType}Favicon" enum="Boolean"
    expires_after="2024-08-30">
  <owner>dullweber@chromium.org</owner>
  <owner>fsenra@chromium.org</owner>
  <summary>
    Records whether a permission prompt for a two origin scoped permission (e.g.
    StorageAccess) has successfully loaded a favicon. Recorded when a permission
    prompt with favicons is shown.
  </summary>
  <token key="FaviconType">
    <variant name="Embedding"/>
    <variant name="Requesting"/>
  </token>
</histogram>

<histogram
    name="Permissions.Prompt.Ignored.PriorDismissCount2{PermissionTypes}"
    units="units" expires_after="2026-10-07">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    This metric, recorded at the time of a permission prompt ignore, records the
    total number of prompt dismissal events for this origin since the last time
    the user explicitly set the permission state or cleared history / site data
    and prior to the ignore. The suffix of the histogram indicates which
    particular permission.

    Warning: this histogram was expired from 2024-10-31 to 2024-11-22; data may
    be missing. {PermissionTypes}
  </summary>
  <token key="PermissionTypes" variants="PermissionTypes">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Permissions.Prompt.Ignored.PriorIgnoreCount2{PermissionTypes}"
    units="units" expires_after="2026-10-07">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    This metric, recorded at the time of a permission prompt ignore, records the
    total number of prompt ignore events for this origin since the last time the
    user explicitly set the permission state or cleared history / site data and
    prior to the ignore. The suffix of the histogram indicates which particular
    permission.

    Warning: this histogram was expired from 2024-10-31 to 2024-11-22; data may
    be missing. {PermissionTypes}
  </summary>
  <token key="PermissionTypes" variants="PermissionTypes">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Permissions.Prompt.Notifications.EnabledAppLevel"
    enum="Boolean" expires_after="2026-11-12">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether chrome has notifications already enabled at the app level or
    at least is allowed to request for app level permission. When none of these
    conditions are true, site level notification permissions are blocked.
    Recorded when a site attempts to prompt the user for notifications
    permission. Android only.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.Shown{PermissionRequestGesture}"
    enum="PermissionRequestType" expires_after="2027-01-10">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Tracks how many times permission prompts are shown to users.
    {PermissionRequestGesture}
  </summary>
  <token key="PermissionRequestGesture" variants="PermissionRequestGesture">
    <variant name=""/>
  </token>
</histogram>

<histogram
    name="Permissions.Prompt.{PermissionType}.BrowserAlwaysActiveWhileShowing"
    enum="Boolean" expires_after="2026-09-22">
  <owner>tungnh@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether the browser was always active while the {PermissionType}
    prompt was displayed. Recorded when a permission prompt was destroyed.
  </summary>
  <token key="PermissionType" variants="AllPermissionTypes"/>
</histogram>

<histogram
    name="Permissions.Prompt.{PermissionType}.ElementAnchoredBubble.BrowserAlwaysActiveWhileShowing"
    enum="Boolean" expires_after="2026-09-20">
  <owner>tungnh@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether the browser was always active while the {PermissionType}
    prompt was displayed. Recorded when an ElementAnchoredBubble prompt was
    destroyed.
  </summary>
  <token key="PermissionType"
      variants="PermissionTypeForElementAnchoredBubble"/>
</histogram>

<histogram
    name="Permissions.Prompt.{PermissionType}.ElementAnchoredBubble.DismissedReason"
    enum="DismissedReason" expires_after="2026-11-26">
  <owner>hkamila@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Tracks how a {PermissionType} prompt was dismissed by the user. Tracked when
    the user dimisses an ElementAnchoredBubble prompt.
  </summary>
  <token key="PermissionType"
      variants="PermissionTypeForElementAnchoredBubble"/>
</histogram>

<histogram
    name="Permissions.Prompt.{PermissionType}.ElementAnchoredBubble.ShownInActiveBrowser"
    enum="Boolean" expires_after="2026-09-20">
  <owner>tungnh@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether the browser was active at the time the {PermissionType}
    prompt was displayed. Recorded when an ElementAnchoredBubble prompt started
    displaying.
  </summary>
  <token key="PermissionType"
      variants="PermissionTypeForElementAnchoredBubble"/>
</histogram>

<histogram
    name="Permissions.Prompt.{PermissionType}.ElementAnchoredBubble.Variant"
    enum="ElementAnchoredBubbleVariant" expires_after="2027-02-07">
  <owner>hkamila@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records which screen was shown to the user as part of an
    ElementAnchoredBubble permission prompt. Multiple screens can be shown
    sequentially as part of the same prompt. Is recorded when the screen is
    shown.
  </summary>
  <token key="PermissionType"
      variants="PermissionTypeForElementAnchoredBubble"/>
</histogram>

<histogram
    name="Permissions.Prompt.{PermissionType}.ElementAnchoredBubble.{OsScreen}.OsScreenAction"
    enum="OsScreenAction" expires_after="2027-07-28">
  <owner>hkamila@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Tracks the action taken on a {PermissionType} screen that informs the user
    about state of the OS settings. Recorded when the user interacts with this
    screen.
  </summary>
  <token key="PermissionType"
      variants="PermissionTypeForElementAnchoredBubble"/>
  <token key="OsScreen" variants="OsScreen"/>
</histogram>

<histogram
    name="Permissions.Prompt.{PermissionType}.ElementAnchoredBubble.{OsScreen}.{OsScreenAction}.TimeToAction"
    units="ms" expires_after="2027-09-01">
  <owner>hkamila@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Tracks the time until an action is taken on a {PermissionType} screen that
    informs the user about state of the OS settings. Recorded whenever the user
    takes an action that results in closing the screen.
  </summary>
  <token key="PermissionType"
      variants="PermissionTypeForElementAnchoredBubble"/>
  <token key="OsScreen" variants="OsScreen"/>
  <token key="OsScreenAction" variants="OsScreenAction"/>
</histogram>

<histogram name="Permissions.Prompt.{PermissionType}.ShownInActiveBrowser"
    enum="Boolean" expires_after="2027-02-07">
  <owner>tungnh@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether the browser was active at the time the {PermissionType}
    prompt was displayed. Recorded when a permission prompt started displaying.
  </summary>
  <token key="PermissionType" variants="AllPermissionTypes"/>
</histogram>

<histogram name="Permissions.Prompt.{PermissionType}.{Action}.WithBrowser"
    enum="BooleanBrowserAlwaysActive" expires_after="2027-02-07">
  <owner>tungnh@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded when the user resolves the {PermissionType} permission prompt.
    Records whether the browser was always active before interacting with the
    prompt.
  </summary>
  <token key="PermissionType" variants="AllPermissionTypes"/>
  <token key="Action">
    <variant name="Accepted"/>
    <variant name="AcceptedOnce"/>
    <variant name="Denied"/>
    <variant name="Dismissed"/>
  </token>
</histogram>

<histogram name="Permissions.Prompt.{PermissionType}.{Disposition}.Action"
    enum="PermissionAction" expires_after="2027-01-31">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Tracks the action that a user had taken for a {PermissionType} permission
    prompt with disposition of type {Disposition}. Recorded when a permission
    prompt has been resolved.
  </summary>
  <token key="Disposition" variants="PromptDisposition"/>
  <token key="PermissionType">
    <variant name="AR"/>
    <variant name="AudioAndVideoCapture"/>
    <variant name="AudioCapture"/>
    <variant name="ClipboardReadWrite"/>
    <variant name="Geolocation"/>
    <variant name="IdleDetection"/>
    <variant name="MidiSysEx"/>
    <variant name="Notifications"/>
    <variant name="RegisterProtocolHandler"/>
    <variant name="VideoCapture"/>
    <variant name="VR"/>
  </token>
</histogram>

<histogram
    name="Permissions.Prompt.{PermissionType}.{Disposition}.Dismissed.Method"
    enum="PermissionPromptDismissMethod" expires_after="2026-11-29">
  <owner>fjacky@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Tracks how the user dismissed the {PermissionType} permission prompt with
    disposition of type {Disposition}. Recorded when a permission prompt has
    been resolved. Currently only implemented and reported for Clank.
  </summary>
  <token key="Disposition" variants="PromptDisposition"/>
  <token key="PermissionType" variants="AllPermissionTypes"/>
</histogram>

<histogram
    name="Permissions.Prompt.{PermissionType}.{Disposition}.Ignored.DidShowBubble"
    enum="Boolean" expires_after="2026-11-12">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records if a permission prompt bubble of type {PermissionType} was displayed
    as a result of a user having clicked on a chip with disposition
    {Disposition} that was subsequently ignored. Chip framework is only
    available on Desktop.
  </summary>
  <token key="Disposition">
    <variant name="LocationBarLeftChipAutoBubble"/>
    <variant name="LocationBarLeftQuietAbusiveChip"/>
    <variant name="LocationBarLeftQuietChip"/>
  </token>
  <token key="PermissionType">
    <variant name="AR"/>
    <variant name="AudioAndVideoCapture"/>
    <variant name="AudioCapture"/>
    <variant name="ClipboardReadWrite"/>
    <variant name="Geolocation"/>
    <variant name="IdleDetection"/>
    <variant name="MidiSysEx"/>
    <variant name="Notifications"/>
    <variant name="VideoCapture"/>
    <variant name="VR"/>
  </token>
</histogram>

<histogram
    name="Permissions.Prompt.{PermissionType}.{Disposition}.IgnoredReason"
    enum="PermissionRequestIgnoredReason" expires_after="2027-02-07">
  <owner>fjacky@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Permission requests are categorized as ignored when the user failed to take
    action. This metric captures more detailed information on why a permission
    request was ignored.

    Warning: this histogram was expired from 2024-02-20 to 2024-09-06; data may
    be missing.
  </summary>
  <token key="PermissionType" variants="AllPermissionTypes"/>
  <token key="Disposition" variants="PromptDisposition"/>
</histogram>

<histogram
    name="Permissions.Prompt.{PermissionType}.{Disposition}.{Action}.TimeToAction"
    units="ms" expires_after="2027-02-07">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records how long it takes for the user to take the {Action} action on a
    prompt of type {PermissionType} with {Disposition} disposition. The Ignored
    state will be recorded if the user closes the tab or a permission chip gets
    expired.
  </summary>
  <token key="Action" variants="Action"/>
  <token key="Disposition" variants="PromptDisposition"/>
  <token key="PermissionType">
    <variant name="AR"/>
    <variant name="AudioAndVideoCapture"/>
    <variant name="AudioCapture"/>
    <variant name="ClipboardReadWrite"/>
    <variant name="Geolocation"/>
    <variant name="IdleDetection"/>
    <variant name="MidiSysEx"/>
    <variant name="Notifications"/>
    <variant name="RegisterProtocolHandler"/>
    <variant name="VideoCapture"/>
    <variant name="VR"/>
  </token>
</histogram>

<histogram
    name="Permissions.Prompt.{PermissionType}.{Disposition}.{Action}.{ButtonClick}"
    enum="Boolean" expires_after="2027-09-13">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records {ButtonClick} if a user clicked on &quot;Learn More&quot; or
    &quot;Manage&quot; buttons on the quiet chip of type {PermissionType} with
    {Disposition} disposition. Recorded when the permission prompt gets resolved
    with {Action} action and only for the quiet chip.

    Warning: this histogram was expired from 2024-10-31 to 2024-11-22; data may
    be missing.
  </summary>
  <token key="ButtonClick">
    <variant name="DidClickLearnMore"/>
    <variant name="DidClickManage"/>
  </token>
  <token key="Action" variants="Action"/>
  <token key="Disposition">
    <variant name="LocationBarLeftQuietAbusiveChip"/>
    <variant name="LocationBarLeftQuietChip"/>
    <variant name="MessageUI"/>
    <variant name="MiniInfobar"/>
  </token>
  <token key="PermissionType">
    <variant name="Geolocation"/>
    <variant name="Notifications"/>
  </token>
</histogram>

<histogram name="Permissions.Prompt.{PermissionType}.{Gesture}.Attempt"
    enum="Boolean" expires_after="2027-01-03">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded when a permission prompt creation is in progress.

    Note: The meaning of this metric's boolean value flipped for M-136, starting
    from 07.03.2025 (see crbug.com/400381904). Updated meaning: if this
    evaluates to true this means that the prompt could be displayed.
  </summary>
  <token key="PermissionType" variants="AllPermissionTypes"/>
  <token key="Gesture">
    <variant name="Gesture"/>
    <variant name="NoGesture"/>
    <variant name="Unknown"/>
  </token>
</histogram>

<histogram name="Permissions.Query.TopLevelStorageAccess" enum="BooleanEnabled"
    expires_after="2027-01-17">
  <owner>selya@google.com</owner>
  <owner>mtaylor@chromium.org</owner>
  <summary>
    Records if the permission being queried is
    &quot;top-level-storage-access&quot; permission.
  </summary>
</histogram>

<histogram
    name="Permissions.QuietNotificationPrompts.EnabledStateInPrefsChangedTo"
    enum="BooleanEnabled" expires_after="2026-09-20">
  <owner>andypaicu@chromium.org</owner>
  <owner>engedy@chromium.org</owner>
  <owner>hkamila@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records when the quiet notification permission UI state changes, that is, it
    either gets enabled or disabled, in preferences.
  </summary>
</histogram>

<histogram
    name="Permissions.QuietNotificationPrompts.{RegularProfileFiltered}IsEnabledInPrefs"
    enum="BooleanEnabled" expires_after="2027-01-13">
  <owner>andypaicu@chromium.org</owner>
  <owner>engedy@chromium.org</owner>
  <owner>hkamila@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether the quiet notification permission UI is enabled in
    preferences at profile creation. No sample recorded when notifications are
    set to be blocked completely.
  </summary>
  <token key="RegularProfileFiltered">
    <variant name="RegularProfile."
        summary="from version M-110. It is recorded only for regular profiles"/>
  </token>
</histogram>

<histogram name="Permissions.QuietPrompt.Preignore" enum="PermissionType"
    expires_after="2026-12-27">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records when a permission request was preignored because it will be shown as
    a quiet chip.
  </summary>
</histogram>

<histogram name="Permissions.QuietPrompt.Preignore.PageReloadInfoBar"
    enum="BooleanShown" expires_after="2027-02-07">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records when the 'Reload this page' info bar is shown after a quiet
    permission prompt has been resolved with a grant action. This happens when
    the page is not aware of the grant and needs to be reloaded to reflect the
    new permission state. Recorded on desktop platforms only.
  </summary>
</histogram>

<histogram name="Permissions.Request.CrossOrigin" enum="PermissionType"
    expires_after="2026-10-25">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded whenever a permission request is made by a cross-origin site, and
    before it is decided whether the request should be displayed to the user.
    Records the permission type of the request.
  </summary>
</histogram>

<histogram name="Permissions.Request.SameOrigin.{FrameLevel}"
    enum="PermissionType" expires_after="2026-11-29">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded whenever a permission request is made by a same-origin site, and
    before it is decided whether the request should be displayed to the user.
    Records the permission type of the request, and is grouped by whether the
    requesting frame is the main frame or a sub frame.
  </summary>
  <token key="FrameLevel">
    <variant name="MainFrame"/>
    <variant name="SubFrame"/>
  </token>
</histogram>

<histogram name="Permissions.Revocation.ElapsedTimeSinceGrant{PermissionTypes}"
    units="seconds" expires_after="2026-10-07">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the time elapsed since the grant of the permission until it's
    revoked. {PermissionTypes}
  </summary>
</histogram>

<histogram name="Permissions.Revocation.Notifications.DidRecordUkm"
    enum="Boolean" expires_after="2027-09-13">
  <owner>engedy@chromium.org</owner>
  <owner>willxu@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records, each time when the notification permission is revoked, whether a
    UKM event was recorded as well.
  </summary>
</histogram>

<histogram name="Permissions.Revocation.Notifications.SourceUI"
    enum="PermissionSourceUI" expires_after="2027-01-24">
  <owner>engedy@chromium.org</owner>
  <owner>willxu@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    When revoking the notification from a website for push messaging, this
    records the PermissionSourceUI where it occurred.
  </summary>
</histogram>

<histogram name="Permissions.Serial.ChooserClosed" enum="SerialChooserOutcome"
    expires_after="never">
<!-- expires-never: Used to monitor user interaction with the Web Serial API. -->

  <owner>reillyg@chromium.org</owner>
  <owner>src/content/browser/serial/OWNERS</owner>
  <summary>
    Records the reason why the Serial API chooser, triggered by a call to
    navigator.serial.requestPort(), was closed.
  </summary>
</histogram>

<histogram name="Permissions.Serial.Revoked" enum="SerialPermissionRevoked"
    expires_after="never">
<!-- expires-never: Used to monitor user interaction with the Web Serial API. -->

  <owner>reillyg@chromium.org</owner>
  <owner>src/content/browser/serial/OWNERS</owner>
  <summary>Records when permission to access a serial port is revoked.</summary>
</histogram>

<histogram name="Permissions.SiteSettingsChanged" enum="ContentType"
    expires_after="2026-12-06">
  <owner>lyf@chromium.org</owner>
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records when and what content setting is changed in the site setting's page.
    Data recorded earlier than M135 is recorded directly with
    `ContentSettingsType` in
    `components/content_settings/core/common/content_settings_types.mojom`,
    which means they are probably in the wrong buckets and need to be viewed
    with cautious.
  </summary>
</histogram>

<histogram name="Permissions.SiteSettingsChanged.{ContentSettingType}"
    enum="ContentType" expires_after="2026-12-06">
  <owner>lyf@chromium.org</owner>
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records which content setting value a user has selected for a particular
    content setting type in the site settings page. For example, this may be
    `Allow` for the `Notifications` permission setting or `Block` for the
    `Camera` permission setting.
  </summary>
  <token key="ContentSettingType">
    <variant name="Allow"/>
    <variant name="Ask"/>
    <variant name="Block"/>
    <variant name="Default"/>
    <variant name="SessionOnly"/>
  </token>
</histogram>

<histogram name="Permissions.Status.Notifications.EnabledAppLevel"
    enum="Boolean" expires_after="2027-01-03">
  <owner>antoniosartori@chromium.org</owner>
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether chrome has notifications already enabled at the app level or
    at least is allowed to request for app level permission. When none of these
    conditions are true, site level notification permissions are blocked.
    Recorded whenever notification permission is queried. Android only.
  </summary>
</histogram>

<histogram
    name="Permissions.Usage.ElapsedTimeSinceGrant.{PermissionType}.{Source}"
    units="seconds" expires_after="2026-12-20">
  <owner>fjacky@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the time elapsed since the grant of the permission until it's latest
    usage for a particular content setting source. This histogram will be
    recorded only for the first usage of a given permission after the site has
    loaded.

    Warning: this histogram was expired from 2026-04-20 to 2026-04-21; data may
    be missing.
  </summary>
  <token key="PermissionType" variants="AllPermissionTypes"/>
  <token key="Source" variants="ContentSettingSource"/>
</histogram>

<histogram name="Permissions.Usage.ElapsedTimeSinceGrant{PermissionTypes}"
    units="seconds" expires_after="2027-07-28">
  <owner>engedy@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the time elapsed since the grant of the permission until it's latest
    usage. This histogram will be recorded only for the first usage of a given
    permission after the site has loaded. {PermissionTypes}
  </summary>
</histogram>

<histogram name="Permissions.Usage.ElapsedTimeSinceLastUsage.{PermissionType}"
    units="ms" expires_after="2027-07-21">
  <owner>lyf@chromium.org</owner>
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Record each time when a site uses PermissionType. Duration represents
    buckets of time between two adjacent permission usages.
  </summary>
  <token key="PermissionType">
    <variant name="AudioCapture"/>
    <variant name="Geolocation"/>
    <variant name="VideoCapture"/>
  </token>
</histogram>

<histogram name="Permissions.Usage.Notifications.DidRecordUkm" enum="Boolean"
    expires_after="2026-10-21">
  <owner>engedy@chromium.org</owner>
  <owner>willxu@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records, each time when the notification permission is used, whether a UKM
    event was recorded as well.
  </summary>
</histogram>

<histogram name="Permissions.WebHid.ChooserClosed" enum="WebHidChooserClosed"
    expires_after="never">
<!-- expires-never: Used to monitor user interaction with the WebHID API. -->

  <owner>mattreynolds@chromium.org</owner>
  <owner>deviceapi-team@google.com</owner>
  <summary>
    Records the reason why the WebHID device chooser was closed.
  </summary>
</histogram>

<histogram name="Permissions.WindowManagementApi.Android.Allowed"
    enum="BooleanAllowed" expires_after="2027-01-03">
  <owner>renkens@google.com</owner>
  <owner>lt-web-apps-team@google.com</owner>
  <summary>
    Reports whether a usage of the Window Management API on Android was allowed
    or blocked (when AndroidWindowManagementWebApi feature flag is enabled).
    Recorded once per call to Window Management API for Chrome on Android and
    Android WebView. If sites can ask to manage windows on all users' displays,
    the decision about allowing or blocking usage is determined by the user when
    the site first wants to use the Window Mangement. After that decision, all
    other usages on this site will use the same decision. If sites cannot ask to
    manage windows on all users' displays, it will be blocked automatically.
  </summary>
</histogram>

<histogram name="Permissions.{PredictionModel}.InquiryDuration" units="ms"
    expires_after="2027-02-07">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the time it took for the permissions prediction service to inquire
    the {PredictionModel} and await its response for a permission request.
  </summary>
  <token key="PredictionModel" variants="PredictionModels"/>
</histogram>

<histogram name="Permissions.{PredictionModel}.ModelExecutionAlreadyInProgress"
    enum="BooleanSuccess" expires_after="2027-02-07">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether the {PredictionModel} model execution is already in progress
    when ExecuteModel is called. This should not happen, but we want to verify
    this.
  </summary>
  <token key="PredictionModel" variants="SnapshotBasedPredictionModels"/>
</histogram>

<histogram name="Permissions.{PredictionModel}.ModelExecutionTimeout"
    enum="BooleanSuccess" expires_after="2027-01-24">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether the {PredictionModel} model execution took longer than the
    timeout, hence the execution was terminated.
  </summary>
  <token key="PredictionModel" variants="SnapshotBasedPredictionModels"/>
</histogram>

<histogram name="Permissions.{PredictionModel}.RenderedTextAcquireSuccess"
    enum="BooleanSuccess" expires_after="2027-01-17">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether the rendered text was fetched successfully and was suitable
    as input for model execution. Specifically, we require it to be longer than
    10 characters to be used as input for the {PredictionModel} model.
  </summary>
  <token key="PredictionModel" variants="RenderedTextBasedPredictionModels"/>
</histogram>

<histogram name="Permissions.{PredictionModel}.Response.{PermissionType}"
    enum="BooleanIgnored" expires_after="2027-02-07">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>ravjit@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded whenever a {PredictionModel} responds to a {PermissionType}
    permission request. Records whether its response was ignored or not.
  </summary>
  <token key="PredictionModel" variants="PredictionModels"/>
  <token key="PermissionType" variants="CpssSupportedTypes"/>
</histogram>

<histogram name="Permissions.{PredictionModel}.SnapshotTaken"
    enum="BooleanSuccess" expires_after="2027-02-14">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether the snapshot needed as input for the {PredictionModel} model
    was taken successfully. This could go wrong if the current render view was
    occluded (in the background) during the snapshot was taken.
  </summary>
  <token key="PredictionModel" variants="SnapshotBasedPredictionModels"/>
</histogram>

<histogram name="Permissions.{PredictionModel}.SnapshotTakenDuration"
    units="ms" expires_after="2027-02-14">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the time it took for the permissions prediction service to fetch the
    snapshot needed as the input for the {PredictionModel} model.
  </summary>
  <token key="PredictionModel" variants="SnapshotBasedPredictionModels"/>
</histogram>

<histogram
    name="Permissions.{PredictionModel}.{PermissionType}.PermissionRequestRelevance"
    enum="PermissionRequestRelevance" expires_after="2027-02-07">
  <owner>elklm@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the generated relevance signal after a successful execution of the
    available model.
  </summary>
  <token key="PredictionModel" variants="RelevanceOutputPredictionModels"/>
  <token key="PermissionType">
    <variant name="Geolocation"/>
    <variant name="Notifications"/>
  </token>
</histogram>

<histogram
    name="Permissions.{PredictionModel}.{PermissionType}.RenderedTextSize"
    units="characters" expires_after="2027-02-14">
  <owner>elklm@chromium.org</owner>
  <owner>hempjudith@google.com</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the size of the rendered text when it was fetched successfully and
    was suitable as input for model execution. Specifically, we require it to be
    longer than 10 characters to be used as input for the {PredictionModel}
    model.
  </summary>
  <token key="PredictionModel" variants="RenderedTextBasedPredictionModels"/>
  <token key="PermissionType" variants="CpssSupportedTypes"/>
</histogram>

<histogram name="SiteEngagementService.EngagementScore" units="units"
    expires_after="2027-02-14">
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    Distribution of the engagement scores accumulated by a user, recorded at
    startup per non-incognito profile, and then upon the first
    engagement-increasing event every hour thereafter.
  </summary>
</histogram>

<histogram name="SiteEngagementService.EngagementType"
    enum="SiteEngagementServiceEngagementType" expires_after="2027-02-14">
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    The type of engagement (navigation, user input, etc.) which led to an
    accumulation in site engagement.
  </summary>
</histogram>

<histogram name="SiteEngagementService.MeanEngagement" units="units"
    expires_after="2027-02-14">
  <owner>jdeblasio@chromium.org</owner>
  <owner>chrome-secure-web-and-net@chromium.org</owner>
  <summary>
    The mean site engagement per origin accumulated by this profile, recorded at
    startup per non-incognito profile, and then upon the first
    engagement-increasing event every hour thereafter.

    Warning: this histogram was expired from 2022-03-12 to 2024-10-22; data may
    be missing.
  </summary>
</histogram>

<histogram name="SiteEngagementService.MedianEngagement" units="units"
    expires_after="2027-02-14">
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    The median site engagement per origin accumulated by this profile, recorded
    at startup per non-incognito profile, and then upon the first
    engagement-increasing event every hour thereafter.
  </summary>
</histogram>

<histogram name="SiteEngagementService.OriginsEngaged" units="units"
    expires_after="2027-02-14">
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    The total number of origins with a non-zero site engagement score for this
    profile, recorded at startup per non-incognito profile, and then upon the
    first engagement-increasing event every hour thereafter.
  </summary>
</histogram>

<histogram name="WebsiteSettings.Action" enum="WebsiteSettingsAction"
    expires_after="2027-02-07">
  <owner>estark@chromium.org</owner>
  <owner>dullweber@chromium.org</owner>
  <summary>
    Tracks actions with the website setting (a.k.a. page info / origin info)
    bubble, such as opening it up or clicking on the Connection tab.
  </summary>
</histogram>

<histogram name="WebsiteSettings.AllSitesAction2"
    enum="WebSiteSettingsAllSitesAction2" expires_after="2026-10-05">
  <owner>sauski@google.com</owner>
  <owner>alimariam@google.com</owner>
  <summary>
    Tracks actions with the &quot;All Sites&quot; page in website settings
    starting in M82. No data available for M94, was temporarily expired. Values
    7 and 8 were added with M96.
  </summary>
</histogram>

<histogram name="WebsiteSettings.OriginInfo.PermissionChanged"
    enum="ContentType" expires_after="2026-12-09">
  <owner>andypaicu@chromium.org</owner>
  <owner>engedy@chromium.org</owner>
  <owner>hkamila@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Count of how often a specific content type (permission) is changed using the
    Origin Info dialog.

    Note: The values of this metric collected for Chrome 49 (early 2016) are
    innacurate and should not be trusted. crbug.com/589255.
  </summary>
</histogram>

<histogram name="WebsiteSettings.OriginInfo.PermissionChanged.Allowed"
    enum="ContentType" expires_after="2027-07-20">
  <owner>andypaicu@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Count of how often a specific content type (permission) is set to 'Allowed'
    using the Origin Info dialog.

    Note: The values of this metric collected for Chrome 49 (early 2016) are
    innacurate and should not be trusted. crbug.com/589255.
  </summary>
</histogram>

<histogram name="WebsiteSettings.OriginInfo.PermissionChanged.Blocked"
    enum="ContentType" expires_after="2027-06-16">
  <owner>andypaicu@chromium.org</owner>
  <owner>engedy@chromium.org</owner>
  <owner>hkamila@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Count of how often a specific content type (permission) is set to 'Blocked'
    using the Origin Info dialog.

    Note: The values of this metric collected for Chrome 49 (early 2016) are
    innacurate and should not be trusted. crbug.com/589255.
  </summary>
</histogram>

</histograms>

</histogram-configuration>
