<!--
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 Password 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="AccessorySheetType">
  <variant name="Addresses"/>
  <variant name="Passwords"/>
  <variant name="Payments"/>
</variants>

<variants name="CustomPassphraseStatus">
  <variant name=""/>
  <variant name=".WithCustomPassphrase"
      summary="encrypted with custom passphrase"/>
  <variant name=".WithoutCustomPassphrase" summary="regularly encrypted"/>
</variants>

<variants name="PasswordAccountStorageUsageLevel">
  <variant name=""/>
  <variant name=".NotUsingAccountStorage"
      summary="The user is not using the account-scoped password storage.
               Either they're not signed in, or they haven't opted in to the
               account storage."/>
  <variant name=".Syncing"
      summary="The user has enabled Sync, so the account-scoped password
               storage is not being used."/>
  <variant name=".UsingAccountStorage"
      summary="The user is signed in and has opted in to the account storage."/>
</variants>

<variants name="PasswordCheckupOperation">
  <variant name="GetBreachedCredentialsCount"
      summary="get breached credentials count"/>
  <variant name="GetIntent" summary="get password checkup UI intent"/>
  <variant name="GetReusedCredentialsCount"
      summary="get reused credentials count"/>
  <variant name="GetWeakCredentialsCount" summary="get weak credentials count"/>
  <variant name="RunPasswordCheckup" summary="run password checkup"/>
</variants>

<variants name="PasswordDropdownRequestTypeSuffix">
  <variant name=".NonWebAuthnRequest"
      summary="The password dropdown was shown for a regular password form."/>
  <variant name=".WebAuthnRequest"
      summary="The password dropdown was shown for a WebAuthn conditional UI
               request (e.g. passkey autofill)."/>
</variants>

<variants name="PasswordManagerSetting">
  <variant name="AutoSignIn" summary="auto sign in preference"/>
  <variant name="OfferToSavePasswords"
      summary="offer to save passwords preference"/>
</variants>

<variants name="PasswordManagerSettingAccessorFunction">
  <variant name="GetSettingValue" summary="retrieve the current value"/>
  <variant name="SetSettingValue" summary="set a new value"/>
</variants>

<variants name="PasswordProtectionTriggerType">
  <variant name="AnyPasswordEntry" summary="password reuse event"/>
  <variant name="PasswordFieldOnFocus" summary="on focus event"/>
</variants>

<variants name="PasswordStoreAndroidBackendType">
  <variant name="Account" summary="account store"/>
  <variant name="Local" summary="local store"/>
</variants>

<variants name="PasswordStoreBackendFunction">
  <variant name="AddLoginAsync" summary="AddLoginAsync()"/>
  <variant name="DisableAutoSignInForOriginsAsync"
      summary="DisableAutoSignInForOriginsAsync()"/>
  <variant name="FillMatchingLoginsAsync" summary="FillMatchingLoginsAsync()"/>
  <variant name="GetAllLoginsAsync" summary="GetAllLoginsAsync()"/>
  <variant name="GetAllLoginsWithBrandingInfoAsync"
      summary="GetAllLoginsWithBrandingInfoAsync()"/>
  <variant name="GetAutofillableLoginsAsync"
      summary="GetAutofillableLoginsAsync()"/>
  <variant name="GetGroupedMatchingLoginsAsync"
      summary="GetGroupedMatchingLoginsAsync()"/>
  <variant name="GetLoginsAsync" summary="GetLoginsAsync()"/>
  <variant name="RemoveLoginAsync" summary="RemoveLoginAsync()"/>
  <variant name="RemoveLoginsCreatedBetweenAsync"
      summary="RemoveLoginsCreatedBetweenAsync()"/>
  <variant name="UpdateLoginAsync" summary="UpdateLoginAsync()"/>
</variants>

<variants name="PasswordType">
  <variant name="AutoGenerated" summary="automatically generated"/>
  <variant name="ImportedViaCredentialExchange"
      summary="imported via credential exchange"/>
  <variant name="Overall" summary="generated or created or shared"/>
  <variant name="ReceivedViaSharing"
      summary="received via sharing from other users"/>
  <variant name="UserCreated" summary="created by the user"/>
</variants>

<variants name="ProfileType">
  <variant name="Account"/>
  <variant name="LocalProfile"/>
</variants>

<variants name="RetriedOperation">
  <variant name=""/>
  <variant name=".GetAllLoginsAsync" summary="GetAllLoginsAsync"/>
  <variant name=".GetAutofillableLoginsAsync"
      summary="GetAutofillableLoginsAsync"/>
</variants>

<variants name="Scheme">
  <variant name=""/>
  <variant name=".Android" summary="The password is for an Android app."/>
  <variant name=".Ftp" summary="The scheme of the origin is FTP."/>
  <variant name=".Http" summary="The scheme of the origin is HTTP."/>
  <variant name=".Https" summary="The scheme of the origin is HTTPS."/>
  <variant name=".Other" summary="The scheme of the origin is something else."/>
</variants>

<variants name="Store">
  <variant name="AccountStore." summary="for account-scoped store"/>
  <variant name="ProfileStore." summary="for profile-scoped store"/>
</variants>

<variants name="StoreErrorStatus">
  <variant name=""/>
  <variant name=".ExcludingStoreErrors"
      summary="errors returned from the underlying store are not reported."/>
</variants>

<variants name="UserSyncingType">
  <variant name="" summary="all users."/>
  <variant name=".SignedInAccountStoreUser"
      summary="signed-in user, opted in to the account storage, and saving
               passwords to the account storage."/>
  <variant name=".SignedInUser"
      summary="signed-in user, not opted in to the account storage (but will
               save passwords to the account storage by default)."/>
  <variant name=".SignedOutUser"
      summary="signed-out user (and no account storage opt-in exists)."/>
  <variant name=".SyncUser" summary="syncing user."/>
</variants>

<histogram name="KeyboardAccessory.AccessoryActionImpression"
    enum="AccessoryAction" expires_after="2026-12-27">
  <owner>friedrichh@chromium.org</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Android only. Records whenever users faces an action in the accessory bar or
    one of its sheets.
  </summary>
</histogram>

<histogram name="KeyboardAccessory.AccessoryActionSelected2"
    enum="AccessoryAction" expires_after="2026-12-27">
  <owner>friedrichh@chromium.org</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Android only. Records whenever users select an action in the accessory bar
    or one of its sheets. Actions include autofill suggestions from bar and
    accessory sheets.
  </summary>
</histogram>

<histogram
    name="KeyboardAccessory.AccessoryActionSelectedForNonCredentialFieldWithoutSuggestions"
    enum="BooleanYesNo" expires_after="2027-02-07">
  <owner>luchenpeng@google.com</owner>
  <owner>piotrkotynia@google.com</owner>
  <summary>
    Android only. Records if user selected a suggestion or action from manual
    fallback sheet, and the field is not a username or password field and the
    field has no autofill suggestions. This is used to analyze how many
    interactions we would miss by suppressing KA on large form factors for non
    credential fields and fields without autofill suggestions.
  </summary>
</histogram>

<histogram name="KeyboardAccessory.AccessorySheetTriggered{AccessorySheetType}"
    enum="AccessorySheetTrigger" expires_after="2027-01-10">
  <owner>friedrichh@chromium.org</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Android only. Records how often the bottom sheet was opened or closed by a
    user and the overall count of closures. Closing buckets may be logged up to
    one time per trigger. There are suffixes for each specific sheet type.
    {AccessorySheetType}
  </summary>
  <token key="AccessorySheetType">
    <variant name=""/>
    <variant name=".Addresses" summary="Address suggestions."/>
    <variant name=".CreditCards" summary="Payment suggestions."/>
    <variant name=".Passwords" summary="Password suggestions and generation."/>
  </token>
</histogram>

<histogram name="KeyboardAccessory.AccessoryToggleClicked"
    enum="AccessoryToggleType" expires_after="2027-02-07">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    Android only. Records how often the user clicks on a certain toggle when
    opening an accessory sheet together with the state the toggle was in before
    clicking.
  </summary>
</histogram>

<histogram name="KeyboardAccessory.AccessoryToggleImpression"
    enum="AccessoryToggleType" expires_after="2026-11-29">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    Android only. Records how often the user sees a certain toggle when opening
    an accessory sheet together with the state the toggle was in.
  </summary>
</histogram>

<histogram name="KeyboardAccessory.DisabledSavingAccessoryImpressions"
    enum="BooleanShown" expires_after="2026-12-27">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    Android only. Records the number of times that the keyboard accessory was
    shown on a form for which saving is disabled (with a crossed-out key icon).
    Recorded when the user focuses the password field.

    Note: Only the &quot;Shown&quot; bucket should contain samples.
  </summary>
</histogram>

<histogram name="KeyboardAccessory.GenerationDialogChoice.{GenerationType}"
    enum="GenerationDialogChoice" expires_after="2027-01-03">
  <owner>ioanap@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Android only. Records the interactions with the password generation sheet
    for {GenerationType} triggered from the keyboard accessory. Recorded when
    the user taps a button in the sheet or dismsses it.
  </summary>
  <token key="GenerationType">
    <variant name="Automatic" summary="automatic generation"/>
    <variant name="Manual" summary="manual generation"/>
  </token>
</histogram>

<histogram name="KeyboardAccessory.SuggestionSelected.{AccessorySheetType}"
    enum="AccessorySuggestionTypeV2" expires_after="2027-01-10">
  <owner>friedrichh@chromium.org</owner>
  <owner>tchudakov@google.com</owner>
  <owner>chrome-autofill-alerts@google.com</owner>
  <summary>
    Android only. Records which type of suggestion that was selected from the
    Keyboard Accessory manual filling sheet.
  </summary>
  <token key="AccessorySheetType" variants="AccessorySheetType"/>
</histogram>

<histogram name="KeyboardAccessory.TouchEventFiltered" enum="BooleanYesNo"
    expires_after="2025-04-22">
  <owner>tchudakov@google.com</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    Android only. Records if the Keyboard Accessory filtered at least one touch
    event because the Chrome window was fully or partially obscured. The metric
    is logged immediately if the Keyboard Accessory receives a filtered event.
    Otherwise, the metric is logged when the Keyboard Accessory if dismissed
    only if it received at least 1 touch event.
  </summary>
</histogram>

<histogram name="Passkeys.IOSMigration" enum="PasskeysMigrationStatus"
    expires_after="2027-02-07">
  <owner>sugoi@chromium.org</owner>
  <owner>tmartino@chromium.org</owner>
  <summary>
    Records if passkeys migrated from the CPE were either created, updated or
    invalid during Chrome's passkey migration process.
  </summary>
</histogram>

<histogram name="PasswordBubble.BiometricAuthenticationPromo.AcceptClicked"
    enum="BooleanSuccess" expires_after="M165">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records whether user clicked accept button on the Biometric Authentication
    before filling promo dialog. Recorded when the dialog is closed.
  </summary>
</histogram>

<histogram name="PasswordBubble.DisplayDisposition"
    enum="PasswordBubbleDisplayDisposition" expires_after="2026-12-20">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    When the password management bubble opened, what state was it in?
  </summary>
</histogram>

<histogram
    name="PasswordBubble.RelaunchChromeBubble.RestartButtonInBubbleClicked"
    enum="BooleanYesNo" expires_after="2026-12-27">
  <owner>sygiet@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Whether the user restarted Chrome from the RelaunchChrome bubble to fix the
    keychain issue.
  </summary>
</histogram>

<histogram
    name="PasswordGeneration.EditsInGeneratedPassword.AlteredLengthIncreased"
    enum="GeneratedPasswordAlteredLengthIncreased" expires_after="2027-01-03">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Measures difference in length between generated password and submitted
    password. False if length decreased, true if length increased. Uploaded once
    per modified generated password submission.
  </summary>
</histogram>

<histogram name="PasswordGeneration.EditsInGeneratedPassword.AttributesMask"
    enum="EditsInGeneratedPasswordMask" expires_after="2027-01-03">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Measures types of user editing of generated passwords. Mask tracks if there
    are several types of changes simultaneously happening on generated password.
    Uploaded once per modified generated password submission.
  </summary>
</histogram>

<histogram name="PasswordGeneration.EditsInGeneratedPassword.{CharacterClass}"
    enum="CharacterClassPresenceChange" expires_after="2027-02-07">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Measures difference in {CharacterClass} between generated password and
    submitted password. Uploaded once per modified generated password
    submission.
  </summary>
  <token key="CharacterClass">
    <variant name="Letters"/>
    <variant name="Lowercase"/>
    <variant name="Numerics"/>
    <variant name="Symbols"/>
    <variant name="Uppercase"/>
  </token>
</histogram>

<histogram name="PasswordGeneration.Event" enum="PasswordGenerationEvent"
    expires_after="2027-01-03">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Measures the frequency of various password generation events.

    Note that this histogram is logged from the renderer process, and
    consequently the numbers should not be directly compared to the other
    PasswordGeneration.* histograms, which are logged from the browser process.
    Histograms logged in different processes are lost at different rates, which
    introduces systematic bias between histograms logged in the renderer process
    vs. those logged in the browser process.
  </summary>
</histogram>

<histogram name="PasswordGeneration.GeneratedPasswordWasEdited"
    enum="BooleanGeneratedPasswordWasEdited" expires_after="2026-11-29">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Measures the frequency of user editing of generated passwords. Uploaded once
    per generated password save. Applicable to automatic and manual generations.
  </summary>
</histogram>

<histogram name="PasswordGeneration.iOS.AcceptedGeneratedPasswordIsEmpty"
    enum="Boolean" expires_after="2026-12-06">
  <owner>vincb@google.com</owner>
  <owner>noemies@google.com</owner>
  <owner>bling-transactions@google.com</owner>
  <summary>
    Records true when the accepted generated password is empty, false otherwise.
    Recorded when the user accepts a generated password from the password
    generation sheet regardless of the trigger for the sheet (e.g. the keyboard
    accessory chip).
  </summary>
</histogram>

<histogram name="PasswordGeneration.iOS.AcceptedGeneratedPasswordSource"
    enum="AcceptedGeneratedPasswordSourceType" expires_after="2027-01-31">
  <owner>cloutierc@google.com</owner>
  <owner>vincb@google.com</owner>
  <owner>bling-transactions@google.com</owner>
  <summary>
    Records the source of the generated password which was accepted by the user.
    Recorded when they accept a suggestion from a password generation bottom
    sheet, which was either presented proactively or it was triggered by the
    keyboard accessory.
  </summary>
</histogram>

<histogram name="PasswordGeneration.iOS.GeneratedPasswordIsEmpty.BeforeParsing"
    enum="Boolean" expires_after="2026-12-06">
  <owner>vincb@google.com</owner>
  <owner>noemies@google.com</owner>
  <owner>bling-transactions@google.com</owner>
  <summary>
    Records true when the generated password is empty, false otherwise. Recorded
    right after the password is generated but before parsing it to a NSString.
  </summary>
</histogram>

<histogram name="PasswordGeneration.iOS.ProactiveBottomSheetStateTransition"
    enum="ProactivePasswordGenerationBottomSheetTransitionType"
    expires_after="2026-11-22">
  <owner>vincb@google.com</owner>
  <owner>bling-transactions@google.com</owner>
  <summary>
    Records state transitions of the proactive password generation bottom sheet.
    For example getting from an active state to a silenced/inactive state will
    be recorded as a &quot;silence&quot; transition. Recorded when the state
    changes (e.g. when it is silenced because it reached too many strikes).
  </summary>
</histogram>

<histogram name="PasswordGeneration.PopupShown"
    enum="PasswordGenerationPopupShown" expires_after="2027-01-03">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>Records an entry if (and only if) a popup was shown.</summary>
</histogram>

<histogram name="PasswordGeneration.SubmissionEvent"
    enum="PasswordSubmissionEvent" expires_after="2027-02-07">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Measures the frequency of submission events for generated passwords. This is
    similar to PasswordManager.ActionsTakenWithPsl but only tracks events which
    are interesting for generated passwords.
  </summary>
</histogram>

<histogram name="PasswordGeneration.UserDecision"
    enum="PasswordGenerationUserEvent" expires_after="2027-01-03">
  <owner>ioanap@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records user-triggered events related to a generated password. Only the last
    occurring event is logged. The recording takes place when the password form
    is destroyed.
  </summary>
</histogram>

<histogram name="PasswordManager.AbleToSavePasswordsOnSuccessfulLogin"
    enum="BooleanSuccess" expires_after="2027-01-17">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records attempts to prompt user to save a password when password store is
    not ready for saving passwords due to an initialization error. Recorded once
    per form submission.
  </summary>
</histogram>

<histogram name="PasswordManager.AcceptedSaveUpdateSubmissionIndicatorEvent"
    enum="SubmissionIndicatorEvent" expires_after="2026-12-16">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The type of event that the Password Manager used for detecting a password
    form submission when saving or updating a password. Recorded each time a
    user accepts a password save/update prompt.
  </summary>
</histogram>

<histogram name="PasswordManager.AccessPasswordInSettings"
    enum="AccessPasswordInSettingsEvent" expires_after="2027-01-24">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Recorded whenever the user accesses the passwords in the settings page.
  </summary>
</histogram>

<histogram
    name="PasswordManager.AccountStorage.MoveToAccountStoreFlowAccepted2"
    enum="PasswordManager.MoveToAccountStoreTrigger" expires_after="2027-01-24">
  <owner>treib@chromium.org</owner>
  <owner>mamir@chromium.org</owner>
  <summary>
    When the user accepts to move a password from the profile store to the
    account store, this records what user action caused the moving flow to be
    offered. If the flow is offered but rejected by the user, the histogram is
    not recorded. Recorded only in Win/Mac/Linux/iOS and only once during bulk
    move from settings.
  </summary>
</histogram>

<histogram name="PasswordManager.AccountStorage.MoveToAccountStoreFlowOffered"
    enum="PasswordManager.MoveToAccountStoreTrigger" expires_after="2027-01-24">
  <owner>treib@chromium.org</owner>
  <owner>mamir@chromium.org</owner>
  <summary>
    When the user is offered to move a password from the profile store to the
    account store, this records what user action caused the moving flow to be
    offered. Recorded only in Win/Mac/Linux/iOS.
  </summary>
</histogram>

<histogram
    name="PasswordManager.AccountStorageUserStateDuration{UserSyncingType}"
    units="ms" expires_after="2027-09-20">
  <owner>mamir@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    The amount of active browsing time that was spent in different user states
    related to the PasswordManager's account-scoped storage.

    This time is measured from when the user starts interacting with the browser
    until either they stopped interacting with the browser (as determined by
    DesktopSessionDurationTracker) or their user state changes. These end-points
    are when the metric is emitted.

    Because a duration can end either because the user became inactive or
    because their status changed, the distribution of individual durations
    measured are unlikely to be helpful. Instead, please compare total
    durations.

    This metric is only recorded on Win/Mac/Linux/iOS/Android (iOS from M113,
    Android from M128).

    Note: As part of crbug/1223007, we discovered that histogram
    PasswordManager.AccountStorageUserStateDuration.SignedOutUser was recorded
    for Guest and System profiles which wasn't intentional. This was fixed in
    M93.

    One caveat with this metric is that if the user has multiple profiles open
    at the same time, their session activity will be logged from all the
    profiles, instead of only from the profile that the user is using at that
    moment.

    Recorded for {UserSyncingType}
  </summary>
  <token key="UserSyncingType" variants="UserSyncingType"/>
</histogram>

<histogram name="PasswordManager.AccountStoreVsProfileStore4.{DifferenceType}"
    units="accounts" expires_after="2027-02-07">
  <owner>mamir@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    The number of accounts {DifferenceType}. Recorded soon after startup at most
    one per day for regular profiles and only if user opted in to the
    account-scoped storage.
  </summary>
  <token key="DifferenceType">
    <variant name="Additional"
        summary="stored in the password manager's account-scoped store that
                 don't exist in the profile-scoped store"/>
    <variant name="Conflicting"
        summary="stored in the password manager with a conflicting password
                 between the account-scoped store and profile-scoped store
                 (i.e. the signon realm and username match, but the password
                 does not)"/>
    <variant name="Identical"
        summary="stored in both the password manager's account-scoped store
                 and profile-scoped store"/>
    <variant name="Missing"
        summary="stored in the password manager's profile-scoped store that
                 don't exist in the account-scoped store"/>
  </token>
</histogram>

<histogram
    name="PasswordManager.AcknowledgeGroupedAffiliationsWarning.ConfirmationResult"
    enum="AcknowledgeGroupedCredentialSheetBridgeDismissReason"
    expires_after="2026-12-20">
  <owner>atsvirchkova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Tracks the result of user interaction with the grouped affiliated credential
    filling warning (it's shown when user fills the password saved for another
    web site or Android app, but related to the current web site). It is logged
    when the warning is being dismissed. Warning: this histogram was expired
    from 2025-10-19 to 2026-04-08; data may be missing.
  </summary>
</histogram>

<histogram name="PasswordManager.ActorLogin.AttemptLogin.Result"
    enum="ActorLoginAttemptLoginResult" expires_after="2027-02-14">
  <owner>milicau@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the result of invoking the
    actor_login::ActorLoginService::AttemptLogin API. Recorded for each call.
  </summary>
</histogram>

<histogram
    name="PasswordManager.ActorLogin.DuplicatePermissionCleaner.FederatedDeleted"
    units="count" expires_after="2027-04-17">
  <owner>ioanap@chromium.org</owner>
  <owner>otara@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the number of conflicting federated permissions deletions requested
    by the conflicting permissions cleaner. It doesn't take into account whether
    the deletions were successful or not. This histogram helps gauge how many
    conflicting permissions existed.
  </summary>
</histogram>

<histogram
    name="PasswordManager.ActorLogin.DuplicatePermissionCleaner.Invocations"
    enum="Boolean" expires_after="2027-04-17">
  <owner>ioanap@chromium.org</owner>
  <owner>otara@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records that the conflicting permissions cleaner was invoked. Recorded when
    the cleaner starts.
  </summary>
</histogram>

<histogram
    name="PasswordManager.ActorLogin.DuplicatePermissionCleaner.PasswordsDeleted"
    units="count" expires_after="2027-04-17">
  <owner>ioanap@chromium.org</owner>
  <owner>otara@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the number of password permissions deletions requested from both
    password stores. It doesn't take into account whether the deletions were
    successful or not. Used to gauge how many conflicting permissions existed.
  </summary>
</histogram>

<histogram name="PasswordManager.ActorLogin.GetCredentials.Result"
    enum="ActorLoginGetCredentialsResult" expires_after="2027-01-17">
  <owner>milicau@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the result of invoking the
    actor_login::ActorLoginService::GetCredentials API. Recorded for each call.
  </summary>
</histogram>

<histogram name="PasswordManager.ActorLogin.GetPermissions.Latency" units="ms"
    expires_after="2026-12-04">
  <owner>ioanap@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the overall time elapsed between calling
    ActorLoginPermissionsManager::GetAllPermissions and when all permissions
    (both passwords and federated) have been retrieved.
  </summary>
</histogram>

<histogram name="PasswordManager.ActorLogin.TimeFromAttemptToSuccess"
    units="ms" expires_after="2026-12-06">
  <owner>otara@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the time elapsed between the creation of an Actor Login attempt and
    the successful submission of the login form. Recorded when the login is
    detected as successful.
  </summary>
</histogram>

<histogram name="PasswordManager.ActorLogin.TimeToPasswordFilled" units="ms"
    expires_after="2026-12-16">
  <owner>otara@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the time elapsed between the ActorLogin attempt start and the
    successful filling of the password field.
  </summary>
</histogram>

<histogram name="PasswordManager.ActorLogin.TimeToUsernameAndPasswordFilled"
    units="ms" expires_after="2027-02-14">
  <owner>otara@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the time elapsed between the ActorLogin attempt start and the moment
    when both username and password fields have been successfully filled. This
    records the time of the later of the two filling events.
  </summary>
</histogram>

<histogram name="PasswordManager.ActorLogin.TimeToUsernameFilled" units="ms"
    expires_after="2026-12-16">
  <owner>otara@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the time elapsed between the ActorLogin attempt start and the
    successful filling of the username field.
  </summary>
</histogram>

<histogram name="PasswordManager.AddCredentialFromSettings.UserAction2"
    enum="AddCredentialFromSettingsUserInteractions" expires_after="2027-01-25">
  <owner>vidhanj@google.com</owner>
  <summary>
    Records the user actions performed when a new credential is added from
    Settings. Only applicable to Desktop and iOS platforms.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationBackend.FetchSize" units="facets"
    expires_after="2027-02-14">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The number of facets for which affiliation information was requested in a
    network fetch. Recorded for each network fetch. Warning: this histogram was
    expired from M90 to M92; data may be missing.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationDatabase.DatabaseSize" units="KB"
    expires_after="2026-12-27">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The size of the AffiliationDatabase database file. Recorded when
    AffiliationDatabase is constructed successfully.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationDatabase.Error"
    enum="SqliteLoggedResultCode" expires_after="M160">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Errors reported by SQLite while using the affiliation database database.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationDatabase.StoreResult"
    enum="StoreAffiliationResult" expires_after="M165">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>The result of AffiliationDatabase::Store call.</summary>
</histogram>

<histogram name="PasswordManager.AffiliationFetcher.FailedToParseResponse"
    enum="Boolean" expires_after="M165">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Recorded only when serialized response from the Affiliation Service can't be
    parsed.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationFetcher.FetchErrorCode"
    enum="NetErrorCodes" expires_after="M160">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The network error code, as reported by the underlying URLFetcher. Recorded
    only for each network fetch that failed due to network/server errors.
    Warning: this histogram was expired from M90 to M92; data may be missing.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationFetcher.FetchHttpResponseCode"
    enum="HttpResponseCode" expires_after="M160">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The HTTP response code, as reported by the underlying URLFetcher. Recorded
    only for each network fetch that failed due to network/server errors.
    Warning: this histogram was expired from M90 to M92; data may be missing.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationFetcher.FetchResult"
    enum="AffiliationFetchResult" expires_after="2027-01-03">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Whether the network fetch succeeded, failed due to network/server errors, or
    contained malformed data. Recorded for each network fetch.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationFetcher.FetchTime.{Status}"
    units="ms" expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The time elapsed between sending a request to AffiliationService and
    receiving a response. Recorded only when request {Status}.
  </summary>
  <token key="Status">
    <variant name="Failure" summary="failed"/>
    <variant name="Malformed" summary="was malformed"/>
    <variant name="Success" summary="succeeded"/>
  </token>
</histogram>

<histogram name="PasswordManager.AffiliationFetcher.ResponseSize.{Status}"
    units="bytes" expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The size of an affiliation service hash lookup response in bytes. Recorded
    only when request {Status}.
  </summary>
  <token key="Status">
    <variant name="Malformed" summary="was malformed"/>
    <variant name="Success" summary="succeeded"/>
  </token>
</histogram>

<histogram name="PasswordManager.AffiliationService.GetChangePasswordUsage"
    enum="GetChangePasswordUrlMetric" expires_after="2027-01-03">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Usage and timing of the Affiliation Service GetChangePasswordUrl call.
  </summary>
</histogram>

<histogram name="PasswordManager.ApplySyncChanges.AddLoginSyncError"
    enum="PasswordAddLoginSyncError" expires_after="2026-12-29">
  <owner>mamir@chromium.org</owner>
  <owner>mastiz@chromium.org</owner>
  <summary>
    Records different results upon adding a remote password to the password
    manager. It is recorded every time after receiving remote password
    incremental updates from the server.
  </summary>
</histogram>

<histogram name="PasswordManager.ApplySyncChanges.UpdateLoginSyncError"
    enum="PasswordUpdateLoginSyncError" expires_after="2027-09-20">
  <owner>mamir@chromium.org</owner>
  <owner>mastiz@chromium.org</owner>
  <summary>
    Records different results upon updating a remote password to the password
    manager. It is recorded every time after receiving remote password
    incremental updates from the server. Warning: this histogram was expired
    from 2021-07-31 to 2022-11-17; data may be missing.
  </summary>
</histogram>

<histogram name="PasswordManager.ApplySyncChangesState"
    enum="PasswordApplyIncrementalSyncChangesState" expires_after="2026-10-25">
  <owner>mamir@chromium.org</owner>
  <owner>mastiz@chromium.org</owner>
  <summary>
    Records different states upon applying remote sync changes to the password
    manager. It recorded every time after receiving remote password incremental
    updates from the server. Warning: this histogram was expired from 2021-07-31
    to 2022-11-17; data may be missing.
  </summary>
</histogram>

<histogram name="PasswordManager.AuthenticationAsyncOpFailureReson"
    enum="Hresult" expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    HRESULTs associated with errors happened in the RequestVerificationAsync
    API. Recorded after the authentication fails.
  </summary>
</histogram>

<histogram name="PasswordManager.AuthenticationStateWin"
    enum="AuthenticationStateWin" expires_after="2027-02-14">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The state of the windows hello authentication. Recorded before prompting the
    OS dialog, and after result is received.
  </summary>
</histogram>

<histogram name="PasswordManager.AutomaticChange.AcceptanceWithoutAutoButton"
    enum="PasswordCheckResolutionAction" expires_after="2025-05-04">
  <owner>ioanap@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Resolution action to fix a compromised credential when there is no
    &quot;Change password automatically&quot; button. Starting with M110, no
    credential will have a button to change the password automatically anymore
    so this is recorded for all compromised credentials.
  </summary>
</histogram>

<histogram name="PasswordManager.AutoSignin" enum="BooleanEnabled"
    expires_after="2026-09-08">
  <owner>mamir@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The state of the Auto Sign-in setting in the profile. Recorded 30 seconds
    after PasswordStore is created at most once per day for regular profiles.
  </summary>
</histogram>

<histogram name="PasswordManager.AutoSigninFirstRunDialog"
    enum="AutoSigninFirstRun" expires_after="2026-12-31">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The dismissal reason of the auto-signin first run experience.
  </summary>
</histogram>

<histogram name="PasswordManager.BiometricAuthBeforeFillingEnabled2"
    enum="BooleanEnabled" expires_after="2027-02-14">
  <owner>kazinova@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Indicates whether biometric authentication before filling is enabled.
    Recorded 30 seconds after PasswordStore is created which happens at most
    once per day for regular profiles.
  </summary>
</histogram>

<histogram name="PasswordManager.BiometricAuthPwdFill.AuthResult"
    enum="DeviceAuthFinalResult" expires_after="2026-09-30">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    Records the result of the attempt to re-auth the user via biometrics when
    filling a password or signing in from the account chooser dialog. From M97,
    CancelledByChrome is recorded when the auth is cancelled and before the auth
    result actually returns. Warning: this histogram was expired from 2024-10-28
    to 2025-01-16; data may be missing.
  </summary>
</histogram>

<histogram
    name="PasswordManager.BiometricAuthPwdFillAndroid.CanAuthenticateWithBiometricOrScreenLock"
    enum="Boolean" expires_after="2026-09-13">
  <owner>ioanap@chromium.org</owner>
  <owner>atsvirchkova@google.com</owner>
  <summary>
    Logs whether authentication either with biometrics or the screen lock is
    possible. Recorded before credentials filling during the check whether
    biometric reauth is required.
  </summary>
</histogram>

<histogram name="PasswordManager.BiometricAvailabilityChromeOS"
    enum="BiometricsStatusChromeOS" expires_after="M165">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Recorded any time a client of AuthenticatorChromeOS requests to check
    biometric availability.
  </summary>
</histogram>

<histogram name="PasswordManager.BiometricAvailabilityWin"
    enum="BiometricAuthenticationStatusWin" expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Recorded any time a client of AuthenticatorWin requests to check biometric
    availability. If availability can't be checked, it records that immediately.
    If it can be checked, it records the status when the callback for
    OnAvailabilityReceived is invoked.
  </summary>
</histogram>

<histogram name="PasswordManager.BrowserAssistedLogin.Type"
    enum="BrowserAssistedLoginType" expires_after="2027-01-17">
  <owner>yigu@chromium.org</owner>
  <owner>kenrb@chromium.org</owner>
  <owner>markusheintz@google.com</owner>
  <owner>derinel@google.com</owner>
  <summary>
    Records the type of logins assisted by the browser. e.g. via passwords,
    passkeys or federation. Recorded once per user logging into a website. Note:
    1. Successful logins have different definition based on the credential
    types. For password, it means a successful password form submission. For
    Federation and passkeys, the flow is considered successful after the browser
    returning the login credentials to a website. It's possible that the website
    requires more steps for login afterwards but that is out of scope for this
    histogram. 2. Login in this histogram refers to both sign-up and sign-in. 3.
    Some categories (e.g. password filling, OAuth logins etc.) are based on
    heuristics so there may be false positves. Logins detected by web APIs (e.g.
    WebAuthn, FedCM) are deterministic.
  </summary>
</histogram>

<histogram name="PasswordManager.BubbleSuppression.AccountsInStatisticsTable2"
    units="accounts" expires_after="2027-02-14">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The number of accounts stored in password_manager::StatisticsTable. These
    are accounts for which the user ignored the save bubble at least once. The
    count is recorded once per browser start-up for regular profiles. (In case
    of multiple profiles, the counts are for the profile that first has a
    WebContents created.)
  </summary>
</histogram>

<histogram name="PasswordManager.BulkCheck.CheckedCredentials"
    units="credentials" expires_after="2027-01-17">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Count of credentials analyzed when the password bulk check completed
    successfully. Note that this counts unique username+password pairs, so in
    the case of password reuse, this does not correspond to the number of
    user-visible credentials.
  </summary>
</histogram>

<histogram
    name="PasswordManager.BulkCheck.CompromisedCredentialsCountAfterCheckAndroid"
    units="credentials" expires_after="2024-09-01">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    Count of compromised credentials shown in the UI, recorded whenever a bulk
    leak check finished successfully. As opposed to 'BulkCheck.LeaksFound', this
    metric includes duplicates (i.e. same username+password pair saved for
    multiple domains), and it also includes other types of compromised
    credentials (e.g. phished).
  </summary>
</histogram>

<histogram name="PasswordManager.BulkCheck.InsecureCredentials.Count"
    units="credentials" expires_after="2026-05-03">
  <owner>eic@google.com</owner>
  <owner>noemies@google.com</owner>
  <summary>
    Count of unique pairs of username-password present in a compromised, weak or
    reused credential warning. Recorded after every successful password check.
  </summary>
</histogram>

<histogram name="PasswordManager.BulkCheck.InsecureCredentials.Unmuted.Count"
    units="credentials" expires_after="2026-07-06">
  <owner>eic@google.com</owner>
  <owner>noemies@google.com</owner>
  <summary>
    Count of unique pairs of username-password present in a compromised, weak or
    reused credential warning not muted by the user. Recorded after every
    successful password check.
  </summary>
</histogram>

<histogram name="PasswordManager.BulkCheck.LeaksFound" units="credentials"
    expires_after="2027-05-03">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Count of leaked credentials found when the password bulk check completed
    successfully. Note that this counts unique username+password pairs, so in
    the case of password reuse, this does not correspond to the number of
    user-visible credentials.
  </summary>
</histogram>

<histogram name="PasswordManager.BulkCheck.PasswordCheckReferrer"
    enum="PasswordCheckReferrer" expires_after="2027-01-17">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Referrer of a navigation to the Password Check page. Recorded when the user
    visits the Password Check settings page, either via native or Web UI.
  </summary>
</histogram>

<histogram name="PasswordManager.BulkCheck.Time" units="ms"
    expires_after="2027-01-03">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The time it took for the password bulk check to complete successfully.
  </summary>
</histogram>

<histogram name="PasswordManager.BulkCheck.UserAction"
    enum="PasswordCheckInteraction" expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    User actions performed on the Password Check settings page. Replaced on IOS
    by PasswordManager.BulkCheck.UserAction.IOS.* in M114.
  </summary>
</histogram>

<histogram name="PasswordManager.BulkCheck.UserAction.IOS.General"
    enum="PasswordCheckInteractionIOSWithoutContext" expires_after="2026-07-05">
  <owner>eic@google.com</owner>
  <owner>noemies@google.com</owner>
  <summary>
    User actions performed on the Password Check UI inside the Password Manager.
    After M114, the Password Check UI on iOS was divided into multiple views to
    display each type of password check warning: compromised passwords, reused
    passwords, and weak passwords. User actions taken in the Password Check UI
    while viewing a specific type of warning are logged in
    PasswordManager.BulkCheck.UserAction.IOS{Context}. The actions logged are
    done from Password Check UI not specific to a type of warning.
  </summary>
</histogram>

<histogram name="PasswordManager.BulkCheck.UserAction.IOS{Context}"
    enum="PasswordCheckInteractionIOS" expires_after="2027-02-07">
  <owner>eic@google.com</owner>
  <owner>noemies@google.com</owner>
  <summary>
    User actions performed on the Password Check UI inside the Password Manager.
    After M114, the Password Check UI on iOS was divided into multiple views to
    display each type of password check warning: compromised passwords, reused
    passwords, and weak passwords. This histogram represents actions taken in
    the Password Check UI while viewing a specific type of warning. See
    PasswordManager.BulkCheck.UserAction.IOS.General for actions not specific to
    a type of warning.
  </summary>
  <token key="Context">
    <variant name="" summary="Aggregated across all breakdowns"/>
    <variant name=".Compromised"/>
    <variant name=".MutedCompromised"/>
    <variant name=".Reused"/>
    <variant name=".Weak"/>
  </token>
</histogram>

<histogram name="PasswordManager.BulkCheck.UserActionAndroid"
    enum="PasswordCheckUIUserActionAndroid" expires_after="2025-06-22">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichhg@chromium.org</owner>
  <summary>User actions performed on the Password Check settings view.</summary>
</histogram>

<histogram name="PasswordManager.CanUseBiometricsMac" enum="BooleanSuccess"
    expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>kazinova@google.com</owner>
  <owner>sygiet@google.com</owner>
  <summary>
    If user have enabled biometric authentication on their device. It is
    recorded whenever DeviceAuthenticatorMac::CanAuthenticate is called.
  </summary>
</histogram>

<histogram name="PasswordManager.CctFormSubmissionToActivityStopTime"
    units="ms" expires_after="2025-11-09">
  <owner>ioanap@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the time elapsed between a form submission that should result in a
    save prompt being shown and the CCT ctivity stopping as a result of a
    redirect to another app. Only recorded if there was no password save prompt
    shown in the meantime.
  </summary>
</histogram>

<histogram name="PasswordManager.CctFormSubmissionToRedirectTime" units="ms"
    expires_after="2025-11-09">
  <owner>ioanap@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the time elapsed between a form submission that should result in a
    save prompt being shown and a redirect from the CCT to another app. Only
    recorded if there was no save prompt shown in the meantime.
  </summary>
</histogram>

<histogram name="PasswordManager.CctRedirectToActivityStopTime" units="ms"
    expires_after="2025-07-06">
  <owner>ioanap@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the time elapsed between external navigation and the CCT activity
    stopping. Only recorded after a form submission that should result in a save
    prompt being shown, but only if the save prompt didn't actually show.
  </summary>
</histogram>

<histogram name="PasswordManager.ChangePasswordFormDetected" enum="Boolean"
    expires_after="2026-12-20">
  <owner>atsvirchkova@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records whether the password change form was detected during the password
    change flow. The metric is recorded either on the password form parsed
    notification or on the timeout.
  </summary>
</histogram>

<histogram name="PasswordManager.ChangePasswordFormDetectionTime" units="ms"
    expires_after="2026-12-20">
  <owner>atsvirchkova@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    The time in milliseconds passed between starting to open the password change
    tab and detecting the change password form. The metric is only reported on
    successful change password form detection.
  </summary>
</histogram>

<histogram name="PasswordManager.ChangePasswordFormFinderError"
    enum="ChangePasswordFormFinderError" expires_after="2026-12-14">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the error ChangePasswordFormFinder encountered while looking for a
    change password form.
  </summary>
</histogram>

<histogram name="PasswordManager.ChangePasswordFormSubmissionError"
    enum="ChangePasswordFormSubmissionError" expires_after="2026-12-14">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the error ChangePasswordFormFillingSubmissionHelper encountered
    while filling and submitting a change password form.
  </summary>
</histogram>

<histogram
    name="PasswordManager.ClassificationCorrectness.ConfirmationPassword"
    enum="PasswordManagerClassificationCorrectness" expires_after="2027-01-03">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    This metric records the correctness of a confirmation password field
    classification produced on the page load.

    Is recorded for successfully submitted password forms containing a
    confirmation password field. The classification is considered correct iff
    values in the new and in the confirmation password fields match.

    Recorded on the corresponding form manager destruction.
  </summary>
</histogram>

<histogram name="PasswordManager.ClassificationCorrectness.CurrentPassword"
    enum="PasswordManagerClassificationCorrectness" expires_after="2026-12-27">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    This metric records the correctness of a current password field
    classification produced on the page load.

    Is recorded for successfully submitted password forms containing a current
    password field, for which the user had saved passwords. The classification
    is considered correct, if the field contained a previously saved password at
    the moment of submisison, and incorrect, if any other fields in the form
    contained a previosuly saved password.

    Recorded on the corresponding form manager destruction.
  </summary>
</histogram>

<histogram name="PasswordManager.ClassificationCorrectness.NewPassword"
    enum="PasswordManagerClassificationCorrectness" expires_after="2027-01-03">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    This metric records the correctness of a new password field classification
    produced on the page load.

    Is recorded for successfully submitted password forms containing a new
    password field. The correctness is estimated based on previosuly saved
    credentials (if the field value was saved before, it's not a new password),
    and on whether the confirmation password field is present and validates form
    classification.

    Recorded on the corresponding form manager destruction.
  </summary>
</histogram>

<histogram name="PasswordManager.ClassificationCorrectness.Username"
    enum="PasswordManagerClassificationCorrectness" expires_after="2027-01-03">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    This metric records the correctness of a username field classification
    produced on the page load.

    Is recorded for successfully submitted password forms containing a username
    field, for which the user had saved usernames. The classification is
    considered correct, if the field contained a previously saved username at
    the moment of submisison, and incorrect, if any other fields in the form
    contained a previosuly saved username.

    Recorded on the corresponding form manager destruction.
  </summary>
</histogram>

<histogram name="PasswordManager.CoarseFinalPasswordChangeStatus"
    enum="CoarseFinalPasswordChangeState" expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>otara@google.com</owner>
  <summary>
    Records a coarse state at which the password change flow was interrupted
    (success or failed state if the flow completed fully). This is a coarser
    version of PasswordManager.FinalPasswordChangeStatus The metric is logged
    when password change delegate is being destroyed.
  </summary>
</histogram>

<histogram name="PasswordManager.CompromisedCredentials3.{Issue}"
    units="credentials" expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Count of known {Issue}. Recorded at most once per day for regular profiles.
  </summary>
  <token key="Issue">
    <variant name="CountLeaked" summary="leaked credentials in the database"/>
    <variant name="CountPhished" summary="phished credentials in the database"/>
  </token>
</histogram>

<histogram
    name="PasswordManager.CredentialManager.{ProfileType}.GetIntent.APIError"
    enum="PasswordStoreAndroidBackendAPIError" expires_after="2027-09-13">
  <owner>ioanap@chromium.org</owner>
  <owner>izuzic@google.com</owner>
  <summary>
    Records the API error code encountered while attempting to fetch the
    Credential Manager launch intent from Google Play Services for the
    {ProfileType}. This is recorded after the asynchronous call comes back with
    an error. Only recorded for exceptions of type ApiException.
  </summary>
  <token key="ProfileType" variants="ProfileType"/>
</histogram>

<histogram
    name="PasswordManager.CredentialManager.{ProfileType}.GetIntent.APIError.ConnectionResultCode"
    enum="PasswordStoreAndroidBackendConnectionResultCode"
    expires_after="2026-03-06">
  <owner>ioanap@chromium.org</owner>
  <owner>izuzic@google.com</owner>
  <summary>
    Records the API error code encountered while attempting to fetch the
    Credential Manager launch intent from Google Play Services for the
    {ProfileType}. This is recorded after the asynchronous call comes back with
    an error only if ConnectionResult was set on the returned error.
  </summary>
  <token key="ProfileType" variants="ProfileType"/>
</histogram>

<histogram
    name="PasswordManager.CredentialManager.{ProfileType}.GetIntent.Error"
    enum="CredentialManagerError" expires_after="2027-08-17">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    Records the error encountered while attempting to fetch the Credential
    Manager launch intent from Google Play Services for the {ProfileType}. This
    is recorded either before making the actual request (if the preconditions
    are not met) or after the asynchronous call comes back with an error.
  </summary>
  <token key="ProfileType" variants="ProfileType"/>
</histogram>

<histogram
    name="PasswordManager.CredentialManager.{ProfileType}.GetIntent.Latency"
    units="ms" expires_after="2027-08-17">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    Records the time(ms) elapsed between asking Google Play Services for the
    intent used to open the Credential Manager for the {ProfileType} and
    receiving it. It includes synchronous calls made to get the
    CredentialManagerClient. Recorded when the asynchronous call comes back and
    only on success.
  </summary>
  <token key="ProfileType" variants="ProfileType"/>
</histogram>

<histogram
    name="PasswordManager.CredentialManager.{ProfileType}.GetIntent.Success"
    enum="BooleanSuccess" expires_after="2027-08-10">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    Records whether fetching the Credential Manager launch intent from Google
    Play Services for the {ProfileType} was successful or not. Recorded when the
    asynchronous call comes back.
  </summary>
  <token key="ProfileType" variants="ProfileType"/>
</histogram>

<histogram
    name="PasswordManager.CredentialManager.{ProfileType}.Launch.Success"
    enum="BooleanSuccess" expires_after="2027-06-21">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    Records whether the provided intent to launch the Credential Manager for the
    {ProfileType} could be used successfully. This is recorded right after
    calling send() on the intent which happens when the async call to get the
    intent from Google Play Services returns. Metric will not be reported when
    the Loading dialog is cancelled by user or timed out.
  </summary>
  <token key="ProfileType" variants="ProfileType"/>
</histogram>

<histogram name="PasswordManager.CredentialRequest.Get.Success"
    enum="BooleanSuccess" expires_after="2027-01-03">
  <owner>izuzic@google.com</owner>
  <owner>anki-team@google.com</owner>
  <summary>
    Log the result of the call to the Credential Manager API when getting a
    credential. This is an aggregated histogram for first and third party calls.
    Success means that all works as intended and not necessarily that the
    password store or Android API was queried. We sometimes immediately return
    an empty credential, for example in incognito mode, so the success rate
    could be higher than the actual usage of the password store or the API.
  </summary>
</histogram>

<histogram name="PasswordManager.CredentialRequest.ThirdParty.Get2"
    enum="CredentialManagerAndroidGetResult" expires_after="2026-12-27">
  <owner>izuzic@google.com</owner>
  <owner>anki-team@google.com</owner>
  <summary>
    Log the result of the call to the Credential Manager API on Android when
    getting a credential. Logged only on Android when Chrome uses platform
    Autofill.
  </summary>
</histogram>

<histogram name="PasswordManager.CredentialRequest.ThirdParty.Store2"
    enum="CredentialManagerStoreResult" expires_after="2026-02-09">
  <owner>izuzic@google.com</owner>
  <owner>anki-team@google.com</owner>
  <summary>
    Log the result of the call to the Credential Manager API on Android when
    storing a credential. Logged only on Android when Chrome uses platform
    Autofill.
  </summary>
</histogram>

<histogram name="PasswordManager.CredentialsWithDuplicates3" units="units"
    expires_after="2026-09-20">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The number of stored (non-blacklisted) credentials for which
    &quot;duplicates&quot; exist. A duplicate is a credential with the same
    signon realm, username, and password - i.e. indistinguishable from the
    user's point of view. This records the number of *sets* of duplicated
    credentials; the number of credentials in each set of duplicates is not
    recorded. Recorded at most once per day for regular profiles.
  </summary>
</histogram>

<histogram name="PasswordManager.CredentialsWithMismatchedDuplicates3"
    units="units" expires_after="2027-02-07">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The number of stored (non-blacklisted) credentials for which
    &quot;mismatched duplicates&quot; exist. A mismatched duplicate is a
    credential with the same signon realm and username, but different password.
    This records the number of *sets* of duplicated credentials; the number of
    credentials in each set of duplicates is not recorded. Recorded at most once
    per day for regular profiles.
  </summary>
</histogram>

<histogram name="PasswordManager.CredMan.PasswordFormSubmissionTriggered"
    enum="Boolean" expires_after="2026-10-04">
  <owner>derinel@google.com</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    Records whether the password form is submitted right after being filled by
    Android Credential Manager UI. The filled username and password are coming
    from Android Credential Manager UI. This histogram is emitted only if
    Android Credential Manager is enabled and displayed. Recorded when the user
    selects a password from the Android Credential Manager UI.
  </summary>
</histogram>

<histogram name="PasswordManager.DeleteUndecryptableLoginsReturnValue"
    enum="DeleteCorruptedPasswordsResult" expires_after="2027-01-17">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the return value of the DeleteUndecryptableLogins method in the
    LoginDatabase class. Called for sync user and for each profile when merging
    logins from Sync and local database.
  </summary>
</histogram>

<histogram name="PasswordManager.DynamicFormChanges" units="units"
    expires_after="2026-10-04">
  <owner>kazinova@google.com</owner>
  <owner>battre@chromium.org</owner>
  <summary>
    Records a bitmask of password form changes after the first time this form is
    seen by Password Manager. Recorded once per a form when the form is removed
    from DOM. Bit 0 - changes in number of fields, bit 1 - changes in fields
    renderer ids, bit 2 - changes in autocomplete attributes, bit 3 - changes in
    form control types, bit 4 - changes in field names, bit 5 - changes in field
    focusability.
  </summary>
</histogram>

<histogram name="PasswordManager.EditsInSaveBubble"
    enum="PasswordManagerEditsInSaveBubbleEnum" expires_after="2026-12-06">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Indication whether users change the credentials (username and password) in
    the save bubble of the password manager, considering only cases where the
    user saves a new credential or updates a credential.
  </summary>
</histogram>

<histogram name="PasswordManager.EnableState" enum="PasswordManagerEnableState"
    expires_after="2027-02-07">
  <owner>markusheintz@google.com</owner>
  <owner>mamir@chromium.org</owner>
  <summary>
    Indicates whether the password manager is enabled or disabled and by why
    e.g. by the user, policy, extension ... . Recorded 30 seconds after
    PasswordStore is created at most once per day for regular profiles.
  </summary>
</histogram>

<histogram
    name="PasswordManager.ErrorMessageDismissalReason.{ErrorMessageType}"
    enum="MessageDismissReason" expires_after="2027-03-22">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Records the reason that caused the {ErrorMessageType} on Android to be
    dismissed. It's recorded when the user dismisses the message by clicking the
    button or when the message is autodismissed because of the timeout.
  </summary>
  <token key="ErrorMessageType">
    <variant name="AuthErrorResolvable" summary="resolvable auth error"/>
    <variant name="AuthErrorUnresolvable" summary="unresolvable auth error"/>
    <variant name="EmptySecurityDomain"
        summary="error shown for trusted vault users when the security domain
                 is empty"/>
    <variant name="IrretrievableSecurityDomain"
        summary="error shown for trusted vault users when the security domain
                 is irretrievable"/>
    <variant name="KeyRetrievalRequired"
        summary="error shown because key retrieval is required"/>
  </token>
</histogram>

<histogram name="PasswordManager.ErrorMessageDisplayReason"
    enum="PasswordStoreBackendErrorType" expires_after="2027-03-22">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Records the reason that caused the Password Manager error message to be
    displayed. It's recorded as soon as the message is created and the recorded
    reason is the error type. Currently only used on Android.
  </summary>
</histogram>

<histogram name="PasswordManager.ExportAndroid.CreateDirectoryError"
    enum="PlatformFileError" expires_after="2025-03-30">
  <owner>ioanap@chromium.org</owner>
  <owner>atsvirchkova@google.com</owner>
  <summary>
    Records the error encountered when trying to create a temporary directory
    during a user-initiated password export. Android only.
  </summary>
</histogram>

<histogram name="PasswordManager.ExportAndroid.CreateTempFileError"
    enum="PlatformFileError" expires_after="2025-03-30">
  <owner>ioanap@chromium.org</owner>
  <owner>atsvirchkova@google.com</owner>
  <summary>
    Records the error encountered when trying to create a temporary file during
    a user-initiated password export. Android only.
  </summary>
</histogram>

<histogram name="PasswordManager.ExportAndroid.WriteToTempFileError"
    enum="PlatformFileError" expires_after="2025-03-30">
  <owner>ioanap@chromium.org</owner>
  <owner>atsvirchkova@google.com</owner>
  <summary>
    Records the error encountered when trying to write CSV-formatted passwords
    to a temporary file during a user-initiated password export. Android only.
  </summary>
</histogram>

<histogram name="PasswordManager.FailedLoginDetected" enum="BooleanIgnored"
    expires_after="2027-02-14">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Recorded when the failed login signal is detected. The recorded value
    represents whether Password Manager ignored the signal or not. When Password
    Manager takes the signal into account the Save/Update bubbles won't show up.
  </summary>
</histogram>

<histogram name="PasswordManager.FederatedLogin.SavePromptPrevented"
    enum="BooleanYesNo" expires_after="2027-02-07">
  <owner>atsvirchkova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records whether a submitted form manager was available when the notification
    about a non-password login was detected. If it's true, it means that the
    show of the save/update password bubble was potentially prevented. Note:
    even if a submitted form manager was available it's not guaranteed that the
    save/update bubble would be shown as there are some exceptions: e. g. if the
    password was generated.
  </summary>
</histogram>

<histogram name="PasswordManager.FilledCredentialWasFromAndroidApp2"
    enum="PasswordManagerFilledAndroidCredentials" expires_after="M165">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    When a credential is filled automatically or from the dropdown, whether it
    was saved from an Android app. The histogram isn't collected on Android/iOS.
  </summary>
</histogram>

<histogram name="PasswordManager.FillingAssistanceForSingleUsername"
    enum="SingleUsernameFillingAssistance" expires_after="2027-01-31">
  <owner>vincb@google.com</owner>
  <owner>eic@google.com</owner>
  <owner>bling-transactions@google.com</owner>
  <summary>
    Records the user experience with regards to username filling in the single
    username form in username first flows (UFF).

    Recorded for every single username field the user has filled (automatically
    or manually), when the form is submitted and the corresponding form manager
    is destroyed.
  </summary>
</histogram>

<histogram
    name="PasswordManager.FillingAssistance{PasswordAccountStorageUsageLevelOrSecurityOrigin}{Profile}"
    enum="PasswordManagerFillingAssistance" expires_after="2027-02-14">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    This metric records the user experience with regards to passwords filling.
    It is only recorded on password form submissions that are considered to be
    successful.

    The first 4 buckets (0..3) are ranging from the best filling behavior
    (automatic filling on page load without user interaction necessary) to the
    worst (the user had to manually type a password that was already saved).

    The following buckets (4..5) indicate cases when it was impossible to fill
    credentials because unknown credentials were submitted, meaning that the
    submitted password was not saved before.

    The last bucket (6) corresponds to the strange cases, where the submitted
    form has neither user input nor autofilled data in password fields. This
    might indicate third-party password manager use, or might be a
    measurement/submission classification error.
    {PasswordAccountStorageUsageLevelOrSecurityOrigin}

    {Profile}
  </summary>
  <token key="PasswordAccountStorageUsageLevelOrSecurityOrigin"
      variants="PasswordAccountStorageUsageLevel">
    <variant name=".InsecureOrigin"
        summary="The recording took place on an insecure origin."/>
    <variant name=".MixedForm"
        summary="The recording took place on a secure origin, but the form
                 action was an insecure origin."/>
    <variant name=".SecureOrigin"
        summary="The recording took place on a secure origin."/>
  </token>
  <token key="Profile" variants="ProfileIndex"/>
</histogram>

<histogram name="PasswordManager.FillingAutomationRate" units="%"
    expires_after="2027-01-17">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the percentage of input text field characters that were autofilled.
    This function measures text input as a number of UTF-16 code points.

    Recorded when the password form is submitted and the corresponding form
    manager is destroyed.
  </summary>
</histogram>

<histogram name="PasswordManager.FillingSource"
    enum="PasswordManagerFillingSource" expires_after="2027-02-07">
  <owner>mamir@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    This metric records the source of filled passwords: The profile-scoped
    store, the account-scoped store, both of them, or none of them (if the user
    typed the password manually). It is only recorded on password form
    submissions that are considered to be successful.
  </summary>
</histogram>

<histogram name="PasswordManager.FillingSuccessIOS" enum="BooleanSuccess"
    expires_after="2027-01-17">
  <owner>kazinova@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    This metric records whether filling was successful or not on IOS. The metric
    is recorded when filling upon suggestion click or on page load.
  </summary>
</histogram>

<histogram name="PasswordManager.FillSuggestionsGroupedMatchAccepted"
    enum="Boolean" expires_after="2026-12-27">
  <owner>atsvirchkova@google.com</owner>
  <owner>src/components/password_manager/OWNERS</owner>
  <summary>
    This metric tracks if the grouped match suggestion was accepted. It is only
    recorded at the moment the filling occurs and if at least one grouped match
    was available for filling to the user.
  </summary>
</histogram>

<histogram name="PasswordManager.FillSuggestionsHasGroupedMatch" enum="Boolean"
    expires_after="2027-01-24">
  <owner>atsvirchkova@google.com</owner>
  <owner>src/components/password_manager/OWNERS</owner>
  <summary>
    This metric tracks if there is at least one fill suggestion that is coming
    from grouped affiliation. It is only recorded on password form being parsed
    for filling case and if there is at least one fill suggestion.
  </summary>
</histogram>

<histogram name="PasswordManager.FillSuggestionsIncludeAndroidAppCredentials"
    enum="PasswordManagerOfferedAndroidCredentials" expires_after="2027-02-28">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    When offering to fill the username and password, whether at least one of the
    credentials in the dropdown comes from an Android app.
  </summary>
</histogram>

<histogram name="PasswordManager.FinalPasswordChangeStatus"
    enum="PasswordChangeFlowState" expires_after="2027-02-14">
  <owner>vsemeniuk@google.com</owner>
  <owner>atsvirchkova@google.com</owner>
  <summary>
    Records the state at which the password change flow was interrupted (success
    or failed state if the flow completed fully). The metric is logged when
    password change delegate is being destroyed.
  </summary>
</histogram>

<histogram name="PasswordManager.FirstRendererFillingResult"
    enum="PasswordManagerFirstRendererFillingResult" expires_after="2027-02-07">
  <owner>kazinova@google.com</owner>
  <owner>battre@chromium.org</owner>
  <summary>
    Records whether the PasswordAutofillAgent in the renderer manages to fill
    credentials as instructed by the browser or records a failure reason
    otherwise. Only the outcome of the first attempt to fill is recorded.

    This is replicated as PasswordForm.Fill.FirstFillingResultInRenderer in UKM.
  </summary>
</histogram>

<histogram name="PasswordManager.FirstWaitForUsernameReason"
    enum="PasswordManagerFirstWaitForUsernameReason" expires_after="2027-01-17">
  <owner>kazinova@google.com</owner>
  <owner>battre@chromium.org</owner>
  <summary>
    This metric records why the browser instructs the renderer not to fill the
    credentials on page load but to wait for the user to confirm the credential
    to be filled. Only the value of the first decision to fill is recorded.

    This is replicated as PasswordForm.Fill.FirstWaitForUsernameReason in UKM.
  </summary>
</histogram>

<histogram name="PasswordManager.FormVisited.PerProfileType"
    enum="BrowserProfileType" expires_after="2027-01-17">
  <owner>rhalavati@chromium.org</owner>
  <owner>chrome-privacy-core@google.com</owner>
  <summary>
    This histogram records the browser profile type when a password form is
    visited. This is recorded once for each frame.
  </summary>
</histogram>

<histogram name="PasswordManager.GeneratedFormHasNoFormManager"
    enum="BooleanFormManager" expires_after="2026-11-15">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    When the generation state of a password was changed, records whether an
    existing form corresponding to the password was found.
  </summary>
</histogram>

<histogram name="PasswordManager.HasPasswordChangeUrl" enum="Boolean"
    expires_after="2026-12-16">
  <owner>atsvirchkova@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records whether the password change flow is supported for the current site.
    The metric is recorded when the leak check notification is triggered.
  </summary>
</histogram>

<histogram name="PasswordManager.HttpCredentials2"
    enum="PasswordManagerHttpCredentialType" expires_after="2026-12-31">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Breakdown of HTTP credentials with regard to the existence of a HTTPS
    credential with the same username and whether the corresponding website has
    HSTS enabled. Recorded once for each HTTP credential on regular profile
    open.
  </summary>
</histogram>

<histogram name="PasswordManager.HttpPasswordMigrationCount2"
    units="saved credentials" expires_after="2026-12-31">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Number of HTTP saved passwords that were migrated to HTTPS. Recorded for the
    regular profiles on HTTPS password form load when there are no credentials
    saved.
  </summary>
</histogram>

<histogram name="PasswordManager.HttpPasswordMigrationMode2"
    enum="HttpPasswordMigrationMode" expires_after="2026-12-31">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The mode of migration applied to HTTP passwords migrating to HTTPS. Recorded
    for the regular profiles on HTTPS password form load when there are no
    credentials saved.
  </summary>
</histogram>

<histogram name="PasswordManager.Import.PerFile.ConflictsResolved"
    units="saved credentials" expires_after="2026-12-27">
  <owner>natiahlyi@google.com</owner>
  <owner>markusheintz@google.com</owner>
  <summary>
    Records number of passwords that were resolved in Passwords Import -
    Conflict resolution. Basically the number of conflicting passwords that were
    selected to be imported. Recorded during the passwords import process
    triggered from settings, after the user clicks on the Repalce button.
  </summary>
</histogram>

<histogram name="PasswordManager.Import.PerFile.Notes.{Type}" units="units"
    expires_after="2026-12-16">
  <owner>natiahlyi@google.com</owner>
  <owner>markusheintz@google.com</owner>
  <summary>
    Tracks the number of {Type} per one imported CSV file with Google Password
    Manager in Settings UI. Recorded during the passwords import process
    triggered from settings, after parsing the input file.
  </summary>
  <token key="Type">
    <variant name="Concatenations"
        summary="imported notes that were concatenated with local notes of
                 the same credential"/>
    <variant name="Duplicates"
        summary="imported notes that are duplicates of local notes of the
                 same credential"/>
    <variant name="Substrings"
        summary="imported notes that are substrings of local notes of the
                 same credential"/>
    <variant name="TotalCount"
        summary="valid notes (note's length is not greater than 1000
                 characters)"/>
  </token>
</histogram>

<histogram name="PasswordManager.Import.PerFile.{ErrorType}" units="units"
    expires_after="2027-08-23">
  <owner>natiahlyi@google.com</owner>
  <owner>markusheintz@google.com</owner>
  <summary>
    Tracks the number of rows with {ErrorType} per one imported CSV file with
    Google Password Manager in Settings UI. Recorded during the passwords import
    process triggered from settings, after parsing the input file.
  </summary>
  <token key="ErrorType">
    <variant name="AllLoginFieldsEmtpy"
        summary="empty login fields (URL, username, password)"/>
    <variant name="AnyErrors"
        summary="errors of any type (missing password, too long username,
                 ivalid URL, etc.)"/>
    <variant name="Conflicts"
        summary="conflicts (imported credential, is already stored locally
                 with different password)"/>
    <variant name="Duplicates"
        summary="duplicates (imported credential, is already stored locally)"/>
    <variant name="OnlyPasswordMissing"
        summary="empty password field (URL and username fields are non-empty)"/>
    <variant name="PasswordAndUsernameMissing"
        summary="empty password and username fields (URL is non-empty)"/>
  </token>
</histogram>

<histogram name="PasswordManager.ImportedPasswordsPerUserInCSV" units="units"
    expires_after="2027-02-07">
  <owner>natiahlyi@google.com</owner>
  <owner>src/components/password_manager/OWNERS</owner>
  <summary>
    The number of passwords imported in CSV format per user. Recorded when the
    user imports passwords within the password settings.
  </summary>
</histogram>

<histogram name="PasswordManager.ImportEntryStatus"
    enum="PasswordManagerImportEntryStatus" expires_after="2027-08-23">
  <owner>natiahlyi@google.com</owner>
  <owner>markusheintz@google.com</owner>
  <summary>
    Tracks the individual status of a single password entry from the provided
    CSV File after it has been processed in the Passwords Import flow in
    settings UI. Recorded when a single entry has been processed and checked for
    errors or missing fields. Recording occurs within password settings.
  </summary>
</histogram>

<histogram name="PasswordManager.ImportFileSize2" units="bytes"
    expires_after="2026-10-25">
  <owner>natiahlyi@google.com</owner>
  <owner>markusheintz@google.com</owner>
  <summary>
    The size of the CSV file (to import passwords from) selected by a user in
    bytes. Recorded when the user tries to import passwords from a CSV file. The
    user has chosen the file, but the file hasn't been read yet.
  </summary>
</histogram>

<histogram name="PasswordManager.ImportResultsStatus2"
    enum="PasswordManagerImportResultsStatus" expires_after="2027-08-23">
  <owner>natiahlyi@google.com</owner>
  <owner>markusheintz@google.com</owner>
  <summary>
    Tracks the final outcome status of importing a CSV File to Chrome Password
    Manager in settings UI. Recorded when the import flow finishes within
    password settings. This can be either successfuly or due to an error.
  </summary>
</histogram>

<histogram name="PasswordManager.iOS.FillDataRetrievalStatus"
    enum="FillDataRetrievalStatusIOS" expires_after="2027-01-24">
  <owner>vincb@google.com</owner>
  <owner>bling-transactions@google.com</owner>
  <summary>
    Tracks the status of retrieving fill data for filling. Recorded when filling
    a suggestion from the KA or the bottom sheet.
  </summary>
</histogram>

<histogram name="PasswordManager.iOS.FormSubmission.BlockedReason"
    enum="SubmissionBlockedReasonIOS" expires_after="2026-11-29">
  <owner>sugoi@chromium.org</owner>
  <owner>bling-transactions@google.com</owner>
  <summary>
    Records the reason why a form submission was blocked or ignored by Password
    Manager on iOS. Recorded when the browser process decides to ignore a form
    submission.
  </summary>
</histogram>

<histogram name="PasswordManager.iOS.HandleFormSubmitEvent"
    enum="HandleSubmittedFormStatus" expires_after="2026-09-06">
  <owner>vincb@google.com</owner>
  <owner>bling-transactions@google.com</owner>
  <summary>
    Tracks the status of handling password form submissions triggered by
    password form buttons that aren't an input element of type
    &quot;submit&quot;. Recorded on form submit button click.
  </summary>
</histogram>

<histogram name="PasswordManager.iOS.InfoBar.PasswordSave" enum="Boolean"
    expires_after="2025-08-10">
  <owner>tmartino@chromium.org</owner>
  <summary>
    This metric counts how many times the Save Password infobar is shown.
  </summary>
</histogram>

<histogram name="PasswordManager.iOS.InfoBar.{Type}Duration.{Moment}"
    units="ms" expires_after="2026-11-29">
  <owner>vincb@google.com</owner>
  <owner>eic@google.com</owner>
  <owner>bling-transactions@google.com</owner>
  <summary>
    Records the duration of the password save/update infobar that is presented
    after using new credentials. Recorded when the password infobar banner is
    dismissed.
  </summary>
  <token key="Type">
    <variant name="Save" summary="the save infobar"/>
    <variant name="Update" summary="the update infobar"/>
  </token>
  <token key="Moment">
    <variant name="All" summary="all moments"/>
    <variant name="OnDeletion" summary="when deleting the infobar delegate"/>
    <variant name="OnDismiss" summary="when dismissing the infobar"/>
  </token>
</histogram>

<histogram name="PasswordManager.iOS.ReauthenticationUI.Event"
    enum="ReauthenticationEvent" expires_after="2027-01-03">
  <owner>eic@google.com</owner>
  <owner>tmartino@chromium.com</owner>
  <summary>
    Tracks the results and attempts of reauthentication when trying to open the
    Password Manager on iOS.
  </summary>
</histogram>

<histogram name="PasswordManager.iOS.SurfaceVisit"
    enum="PasswordManager.SurfaceVisit" expires_after="2026-02-22">
  <owner>eic@google.com</owner>
  <owner>bling-transactions@google.com</owner>
  <summary>
    This metric counts how many times each Password Manager surface is visited
    on iOS. Recorded when the user opens the Password Manager surface after
    successful Local Authentication (if authentication is required). Replaced
    PasswordManager.iOS.PasswordManagerVisit on M121.
  </summary>
</histogram>

<histogram name="PasswordManager.IsPasswordProtected2" enum="Boolean"
    expires_after="2025-06-08">
  <owner>skrakowi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    This metric reports whether a saved password is protected by Phishguard. The
    current minimum password length for protection is 8, so this can help us
    figure out the proportion of passwords that we are currently not protecting
    because its length is shorter than 8 characters. This gets recorded 30
    seconds after PasswordStore is created, which happens once per profile and
    at most once per day.
  </summary>
</histogram>

<histogram name="PasswordManager.IsSyncPasswordHashSaved"
    enum="IsSyncPasswordHashSaved" expires_after="2027-01-17">
<!-- Note to owner: This histogram can be renewed 1 full year if it is still
useful for Chirp alerts (go/crca-alerts). -->

  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    This metric reports whether a sync password hash is saved. Recorded shortly
    after Chrome startup.
  </summary>
</histogram>

<histogram name="PasswordManager.ItemSelected.OffTheRecord" units="units"
    expires_after="2026-09-14">
  <owner>arabm@chromium.org</owner>
  <owner>chrome-privacy-team@google.com</owner>
  <summary>
    Records selection of password manager suggestions in regular and
    off-the-record modes.
  </summary>
</histogram>

<histogram name="PasswordManager.JavaScriptOnlyValueInSubmittedForm"
    enum="JavaScriptOnlyValueInPasswordForm" expires_after="2027-02-28">
  <owner>kazinova@google.com</owner>
  <owner>battre@chromium.org</owner>
  <summary>
    Records whether a successfully submitted password form has only values that
    came from JavaScript.
  </summary>
</histogram>

<histogram name="PasswordManager.LeakDetection.AnalyzeSingleLeakResponseResult"
    enum="PasswordAnalyzeLeakResponseResult" expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>Result of analyzing a single leak response.</summary>
</histogram>

<histogram
    name="PasswordManager.LeakDetection.DialogDismissalReason{DialogType}"
    enum="PasswordLeakDetectionDialogDismissalReason"
    expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Reason of the dismissal of the leak detection dialog. Recorded when a leaked
    credential is detected and the dialog is shown. {DialogType}
  </summary>
  <token key="DialogType">
    <variant name=""/>
    <variant name=".Change"
        summary="The user is asked to change their password"/>
    <variant name=".ChangeAutomatically"
        summary="The user is asked to let Chrome automatically change their
                 password for the current site."/>
    <variant name=".Checkup"
        summary="The user is asked to visit the Password Checkup"/>
    <variant name=".CheckupAndChange"
        summary="The user is asked to visit the Password Checkup and change
                 their password"/>
  </token>
</histogram>

<histogram name="PasswordManager.LeakDetection.Error"
    enum="PasswordLeakDetectionError" expires_after="2026-12-27">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Shows the error that happened in password leak detection on sign-in.
  </summary>
</histogram>

<histogram name="PasswordManager.LeakDetection.HttpResponseCode"
    enum="HttpResponseCode" expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    HTTP response code of a leak lookup request. Only recoded for each network
    fetch that failed due to network/server errors.
  </summary>
</histogram>

<histogram name="PasswordManager.LeakDetection.LeakedCredentialsUrlType"
    enum="PasswordLeakDetectionUrlType" expires_after="2027-02-01">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the URL type/scheme (HTTPS, localhost, HTTP, private/intranet IP,
    Android app, or other) of a leaked credential when a leak is detected.
    Recorded in LeakDetectionDelegate when a single leak check finishes with a
    positive leak result.
  </summary>
</histogram>

<histogram name="PasswordManager.LeakDetection.LookupSingleLeakResponseResult"
    enum="PasswordLeakLookupResponseResult" expires_after="2027-01-17">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Whether the network fetch succeeded, failed due to network/server errors, or
    contained malformed data. Recorded for each leak lookup.
  </summary>
</histogram>

<histogram name="PasswordManager.LeakDetection.NotifyIsLeakedTime" units="ms"
    expires_after="2026-11-22">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The time it took from starting a leak check to notifying the user about a
    leak.
  </summary>
</histogram>

<histogram name="PasswordManager.LeakDetection.ObtainAccessTokenTime"
    units="ms" expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The time it took to obtain an access token for an authenticated leak lookup
    request.
  </summary>
</histogram>

<histogram name="PasswordManager.LeakDetection.ReceiveSingleLeakResponseTime"
    units="ms" expires_after="2027-08-23">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The time it took to receive a server response after issuing a request for a
    single leak lookup.
  </summary>
</histogram>

<histogram name="PasswordManager.LeakDetection.SingleLeakResponsePrefixes"
    units="prefixes" expires_after="M165">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The number of matched prefixes in a single leak lookup response. Only
    recorded if the network response was wellformed.
  </summary>
</histogram>

<histogram name="PasswordManager.LeakDetection.SingleLeakResponseSize"
    units="bytes" expires_after="M165">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The size of a single leak lookup response in bytes. Only recorded if there
    was no network or server error.
  </summary>
</histogram>

<histogram name="PasswordManager.LocalUpmActivated" enum="Boolean"
    expires_after="2026-10-19">
  <owner>ioanap@chromium.org</owner>
  <owner>src/components/password_manager/OWNERS</owner>
  <summary>
    Records on startup whether the user was activated for local UPM. Records
    false for users who have a migration of local passwords scheduled but didn't
    get activated yet.

    Can be obsoleted once PasswosrdManager.LocalUpmActivationStatus saturates.
  </summary>
</histogram>

<histogram name="PasswordManager.LoginDatabaseInit2"
    enum="LoginDatabaseInitError" expires_after="2027-02-07">
  <owner>mamir@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    An error on LoginDatabase initialization. Recorded when error was
    encountered during login database initialization.
  </summary>
</histogram>

<histogram name="PasswordManager.LogInWithPasswordChangeSubmission"
    enum="LogInWithChangedPasswordOutcome" expires_after="2026-12-20">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records whether or not a login is successful using either the primary or the
    backup password previously saved through password change flow. It is
    recorded at the moment of detecting a succesful or failed log in.
  </summary>
</histogram>

<histogram name="PasswordManager.ManagePasswordsReferrer"
    enum="ManagePasswordsReferrer" expires_after="2027-01-17">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Referrer of a navigation to the &quot;Manage Passwords&quot; page. Recorded
    when the user attempts to see their list of passwords, either via native or
    Web UI.
  </summary>
</histogram>

<histogram
    name="PasswordManager.ManualFallback.AcceptedSuggestion.FromRootPopup"
    enum="BooleanRootPopupSuggestionAccepted" expires_after="2026-03-01">
  <owner>brunobraga@google.com</owner>
  <owner>tchudakov@google.com</owner>
  <summary>
    Desktop only. Emitted on every accepted suggestion from a manually triggered
    password autofill popup. The two buckets allow to see whether the user
    accepted a suggestion from the root popup or from the subpopup.
  </summary>
</histogram>

<histogram
    name="PasswordManager.ManualFallback.AcceptedSuggestion.SearchInputUsed"
    enum="BooleanSearchInputIsNotEmpty" expires_after="2027-01-17">
  <owner>vykochko@google.com</owner>
  <owner>brunobraga@google.com</owner>
  <summary>
    Desktop only. Emitted on every accepted suggestion from a manually triggered
    password autofill popup. The two buckets allow to see whether the user used
    the search bar or not.
  </summary>
</histogram>

<histogram
    name="PasswordManager.ManualFallback.CrossDomainPasswordFilling.ConfirmationBubbleResult"
    enum="CrossDomainPasswordFillingConfirmation" expires_after="2027-01-03">
  <owner>vykochko@google.com</owner>
  <owner>brunobraga@google.com</owner>
  <summary>
    Desktop only. Whenever the user is about to fill a password that was created
    on a different domain, they are prompted to confirm the action to avoid
    accidental exposure of critical information. This metric records the result
    of the interaction with the confirmation bubble: password filling can be
    confirmed or canceled/ignored resulting in no filling. The metric is being
    recorded on bubble closing.
  </summary>
</histogram>

<histogram name="PasswordManager.MatchedFormType"
    enum="PasswordManagerMatchedFormType" expires_after="2026-12-27">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    This metric records the type of the preferred password that will be used for
    filling. It is recorded when the browser instructs the renderer to fill the
    credentials on page load.
  </summary>
</histogram>

<histogram name="PasswordManager.MediationConditional"
    enum="CredentialManagerGetResult" expires_after="2025-11-22">
  <owner>goto@google.com</owner>
  <owner>markusheintz@google.com</owner>
  <owner>yigu@google.com</owner>
  <summary>
    Tracks result of navigator.credentials.get() with
    mediation=&quot;conditional&quot;. Used in unified sign-in and sign-up.
  </summary>
</histogram>

<histogram name="PasswordManager.MediationOptional"
    enum="CredentialManagerGetResult" expires_after="2027-02-14">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Tracks result of navigator.credentials.get() with
    mediation=&quot;optional&quot;. That is the result of account chooser.
  </summary>
</histogram>

<histogram name="PasswordManager.MediationRequired"
    enum="CredentialManagerGetResult" expires_after="2027-01-17">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Tracks result of navigator.credentials.get() with
    mediation=&quot;required&quot;. That is the result of forced account
    chooser.
  </summary>
</histogram>

<histogram name="PasswordManager.MediationSilent"
    enum="CredentialManagerGetResult" expires_after="2027-01-17">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Tracks result of navigator.credentials.get() with
    mediation=&quot;silent&quot;. That is the result of auto sign-in.
  </summary>
</histogram>

<histogram name="PasswordManager.MergeSyncData.AddLoginSyncError"
    enum="PasswordAddLoginSyncError" expires_after="2027-01-24">
  <owner>mamir@chromium.org</owner>
  <owner>mastiz@chromium.org</owner>
  <summary>
    Records different results upon adding a remote password to the password
    manager. It is recorded during the initial sync when merging remote and
    local data.
  </summary>
</histogram>

<histogram name="PasswordManager.MergeSyncData.UpdateLoginSyncError"
    enum="PasswordUpdateLoginSyncError" expires_after="2026-11-06">
  <owner>mamir@chromium.org</owner>
  <owner>mastiz@chromium.org</owner>
  <summary>
    Records different results upon updating a remote password in the password
    manager. It is recorded during the initial sync when merging remote and
    local data. Warning: this histogram was expired from 2021-07-31 to
    2022-11-17; data may be missing.
  </summary>
</histogram>

<histogram name="PasswordManager.ModelPredictions.Empty" enum="Boolean"
    expires_after="2027-02-07">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records if the predictions made by Password manager clientside
    classification model are empty (= contain only NO_SERVER_DATA). Recorded
    when predictions are propagated into PasswordManager after the model runs.
  </summary>
</histogram>

<histogram
    name="PasswordManager.NewlySavedPasswordHasEmptyUsername.{PasswordType}"
    enum="Boolean" expires_after="2027-01-31">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Whether a newly saved password has an empty username. Recorded right before
    a new credential is commited to the store.
  </summary>
  <token key="PasswordType" variants="PasswordType"/>
</histogram>

<histogram name="PasswordManager.NonSyncPasswordHashChange"
    enum="GaiaPasswordHashChange" expires_after="2027-01-03">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    This metric reports a type of a password hash change event where the
    associated account is not syncing. Recorded when a non sync password hash is
    saved or cleared.
  </summary>
</histogram>

<histogram name="PasswordManager.OnDeviceEncryptionState.{Type}"
    enum="OnDeviceEncryptionStateHistogramBucket" expires_after="2027-02-07">
  <owner>ylahodiuk@google.com</owner>
  <owner>markusheintz@google.com</owner>
  <owner>anki-team@google.com</owner>
  <summary>
    Records the on-device encryption state for {Type}. Recorded whenever the
    state transitions to a new valid on-device encryption state.
  </summary>
  <token key="Type">
    <variant name="Passkeys" summary="passkeys"/>
    <variant name="Passwords" summary="passwords"/>
  </token>
</histogram>

<histogram name="PasswordManager.OpenedAsShortcut" enum="Boolean"
    expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records whether Password Manager was opened as a standalone app or inside a
    browser window. Recorded every time Password Manager is opened.
  </summary>
</histogram>

<histogram name="PasswordManager.OtpPresentInMainTab" enum="Boolean"
    expires_after="2027-10-25">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records whether an OTP field is present on the page where an password change
    is initiated. Recorded when the password change flow starts.
  </summary>
</histogram>

<histogram name="PasswordManager.ParsedFormIsOtpForm2"
    enum="PasswordVsOtpFormType" expires_after="2026-09-13">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    For a successfully parsed form, records whether a form is an OTP form, a
    normal multi-use password form, or a combination of both. Recorded once a
    form is classified with a clientside model.
  </summary>
</histogram>

<histogram name="PasswordManager.ParserDetectedOtpFieldWithRegex"
    enum="Boolean" expires_after="2027-02-28">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Reports whether the form parser has detected an OTP field with regex.
    Reported any time when the parser processes a form. Used to compare how
    often the new and old OTP regexes detect any OTP field.
  </summary>
</histogram>

<histogram name="PasswordManager.Parsing.PasswordField.IsMasked" enum="Boolean"
    expires_after="2026-09-13">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Reports whether the field predicted as password field in a parsed form is
    masked (has HTML type &quot;password&quot;) or not. Recorded once per form
    when the form is parsed for filling, and the form contains a field with
    PASSWORD type prediction.
  </summary>
</histogram>

<histogram name="PasswordManager.PasskeyRetrievalWaitDuration" units="ms"
    expires_after="2027-05-31">
  <owner>kenrb@chromium.org</owner>
  <owner>chrome-webauthn@google.com</owner>
  <summary>
    The elapsed time between the PasswordManager requesting passkeys for
    conditional UI and receiving the list of available passkeys to offer in the
    password autofill UI.
  </summary>
</histogram>

<histogram name="PasswordManager.PasskeysArrivedAfterAutofillDisplay"
    enum="Boolean" expires_after="2026-11-08">
  <owner>kenrb@chromium.org</owner>
  <owner>chrome-webauthn@google.com</owner>
  <summary>
    Recorded the first time passkeys become available for use by the password
    manager on a page, if the passkey list is non-empty. It records true if an
    autofill surface has already attempted to display the passkeys, and they
    arrived too late. It records false otherwise.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.CanceledToast"
    enum="PasswordChangeToastEvent" expires_after="2027-09-18">
  <owner>otara@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records password change toast events. This toast is diplayed after user
    cancels the flow. This metric can include user interactions with the toast
    or events that happen automatically.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.ChangingFailedBubble"
    enum="PasswordManagerUIDismissalReason" expires_after="2026-11-30">
  <owner>atsvirchkova@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records the result of interaction with the password change failed bubble
    shown in the end of the flow if it fails. The metric is recorded during the
    bubble closure.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.ChangingPasswordToast"
    enum="PasswordChangeToastEvent" expires_after="2026-12-20">
  <owner>rgod@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records password change toast events. This toast is diplayed during password
    change flow when it is filling password fields on change password form. This
    metric can include user interactions with the toast or events that happen
    automatically.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.CheckingSignInToast"
    enum="PasswordChangeToastEvent" expires_after="2026-12-27">
  <owner>rgod@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records checking sign in toast events. This toast is diplayed during
    password change flow when it is waiting for change password form. This
    metric can include user interactions with the toast or events that happen
    automatically.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.FailedCapturingPageContent"
    enum="PasswordChangeFlowStep" expires_after="2027-05-30">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records failures in capturing annotated page content in the steps of the
    password change flow.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.FailedInteraction"
    enum="PasswordChangeDialogAction" expires_after="2027-06-06">
  <owner>rgod@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records user interaction with the dialog displayed in the password change
    flow when it ends with an error.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.InformationBubble"
    enum="PasswordManagerUIDismissalReason" expires_after="2026-11-30">
  <owner>atsvirchkova@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records the result of interaction with the status information bubble shown
    in the password change flow. This bubble is only displayed if the user
    clicks on the omnibox icon. The metric is recorded during the bubble
    closure.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.LeakDetectionBubble"
    enum="PasswordManagerUIDismissalReason" expires_after="2026-11-30">
  <owner>atsvirchkova@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records the result of interaction with the credential leak detected bubble
    shown when password change flow is available. The metric is recorded during
    the bubble closure.
  </summary>
</histogram>

<histogram
    name="PasswordManager.PasswordChange.LeakDetectionDialog.TimeSpent{DialogType}"
    units="ms" expires_after="2027-02-14">
  <owner>rgod@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    The time in milliseconds the user spends on the initial dialog of the
    password change flow. {DialogType}
  </summary>
  <token key="DialogType">
    <variant name=".WithoutPrivacyNotice"
        summary="This is the version without privacy notice."/>
    <variant name=".WithPrivacyNotice"
        summary="This is the version with privacy notice."/>
  </token>
</histogram>

<histogram
    name="PasswordManager.PasswordChange.LeakDetectionDialog{DialogType}"
    enum="PasswordChangeDialogAction" expires_after="2027-02-14">
  <owner>rgod@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records user interaction with the dialog displayed when the password change
    flow is available. {DialogType}
  </summary>
  <token key="DialogType">
    <variant name=""
        summary="This metric contains the total count of actions in the
                 initial password change dialog regardless of the type (e.g.
                 with or without privacy notice)"/>
    <variant name=".WithoutPrivacyNotice"
        summary="This is the dialog that is displayed every consecutive time
                 after the user accepted the first run dialog."/>
    <variant name=".WithPrivacyNotice"
        summary="This is the first run dialog that includes privacy notice."/>
  </token>
</histogram>

<histogram name="PasswordManager.PasswordChange.LoginCheckAttempts"
    units="attempts" expires_after="2027-08-01">
  <owner>talitahalboth@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the number of attempts (login state checks) performed during the
    LOGIN_CHECK step of the password change flow. Recorded when the login check
    step finishes (either successfully or with a failure).
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.LoginCheckDuration" units="ms"
    expires_after="2027-08-01">
  <owner>talitahalboth@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the duration of the LOGIN_CHECK step of the password change flow in
    ms.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.LoginCheckError"
    enum="LoginCheckError" expires_after="2027-08-01">
  <owner>talitahalboth@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the exact failure reason when the LOGIN_CHECK step in the password
    change flow fails. Recorded when the login check step fails.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.LoginCheckResult"
    enum="LoginCheckResult" expires_after="2027-08-01">
  <owner>talitahalboth@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the outcome of the LOGIN_CHECK step in the password change flow
    (Success, Failure, or Error). Recorded when the login check step finishes.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.NoPasswordForm"
    enum="PasswordChangeDialogAction" expires_after="2026-12-20">
  <owner>rgod@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records user interaction with the dialog displayed in the password change
    flow when no change password form is detected.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.NoPasswordFormBubble"
    enum="PasswordManagerUIDismissalReason" expires_after="2026-11-30">
  <owner>atsvirchkova@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records the result of interaction with one of the password change flow
    bubbles. This bubble is displayed when error occures, namely no password
    change form is detected. The metric is recorded during the bubble closure.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.OTPRequested"
    enum="PasswordChangeDialogAction" expires_after="2026-11-22">
  <owner>rgod@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records user interaction with the dialog displayed in the password change
    flow when the site requires additional OTP verification and the flow cannot
    continue automatically.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.PageContentCaptureDuration"
    units="ms" expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The total time spent capturing page content for Automated Password Change,
    including all retries and delays. Recorded when the capture succeeds or
    fails after max retries.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.PageContentCaptureResult"
    enum="Boolean" expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Whether the page content capture for Automated Password Change was
    successful (potentially after retries). Recorded when the capture succeeds
    or fails after max retries.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.PrivacyNoticeBubble"
    enum="PasswordManagerUIDismissalReason" expires_after="2026-11-30">
  <owner>atsvirchkova@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records the result of interaction with the privacy notice bubble shown in
    the password change flow. The metric is recorded during the bubble closure.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.StabilityWaitDuration"
    units="ms" expires_after="2027-02-07">
  <owner>atsvirchkova@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    The total duration of waiting for page stability during the password change
    flow. Recorded when all stability checks (visual state, LCP, and Autofill
    predictions) are completed.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.SuccessBubble"
    enum="PasswordManagerUIDismissalReason" expires_after="2027-02-07">
  <owner>atsvirchkova@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records the result of interaction with the password change success bubble
    shown in the end of the flow. The metric is recorded during the bubble
    closure.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.UserClosedTab"
    enum="PasswordChangeFlowState" expires_after="2026-12-27">
  <owner>rgod@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records the state of a password change flow during which the user closed the
    tab. The metric is recorded when the tab is about to be deleted.
  </summary>
</histogram>

<histogram
    name="PasswordManager.PasswordChange.UserHasPasswordSavedOnAPCLaunch"
    enum="Boolean" expires_after="2027-02-07">
  <owner>rgod@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records whether the user has any saved passwords for the particular website
    where they initiated the password change flow.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChange.WaitingForUserSignInToast"
    enum="PasswordChangeToastEvent" expires_after="2027-10-18">
  <owner>vsemeniuk@google.com</owner>
  <owner>rgod@google.com</owner>
  <summary>
    Records password change toast events. This toast is diplayed during password
    change flow when the user initiated the flow, but there is still some 2FA
    visible on screen that user has to resolve before the flow can continue.
    This metric can include user interactions with the toast or events that
    happen automatically.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChangeAvailability"
    enum="PasswordChangeAvailability" expires_after="2027-02-14">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the availability of the automated password change feature and the
    reason if it's not available. Recorded every time IsPasswordChangeSupported
    is called.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChangeRecoveryFlow"
    enum="PasswordChangeRecoveryFlowState" expires_after="2027-01-17">
  <owner>otara@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records the state of Password Change recovery flow. It is recorded when a
    user enters the flow either manually or automatically and when the flow
    results in an updated primary password.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChangeSubmissionOutcome"
    enum="SubmissionOutcome" expires_after="2027-01-03">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The password change submission outcome. This is recorded when receiving a
    response from the optimization guide service to a request made with the
    representation of the web page where the submission happened.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChangeTimeOverall2" units="ms"
    expires_after="2027-02-07">
  <owner>atsvirchkova@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    The time in milliseconds it takes to complete the password change flow. The
    metric is recorded only if the flow runs until the end with success or
    failure outcome.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordChangeVerificationTime" units="ms"
    expires_after="2026-12-20">
  <owner>atsvirchkova@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    The time in milliseconds it takes to get a response from the server whether
    the change password form submission was successful. The metric is reported
    immediately after receiving the server response.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordCheckup.Launch.Success2"
    enum="BooleanSuccess" expires_after="2027-02-07">
  <owner>ioanap@chromium.org</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records whether the provided intent to launch the Password Checkup could be
    used successfully. This is recorded right after calling send() on the intent
    which happens when the async call to get the intent from Google Play
    Services returns. Metric will not be reported when the Loading dialog is
    cancelled by user or timed out.

    This histogram replaces the expired
    PasswordManager.PasswordCheckup.Launch.Success.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordCheckup.{Operation}.APIError"
    enum="PasswordStoreAndroidBackendAPIError" expires_after="2027-09-14">
  <owner>ioanap@chromium.org</owner>
  <owner>izuzic@google.com</owner>
  <summary>
    Records the error code returned by the GMS Password Checkup 1P API while
    attempting to {Operation}. This is recorded after the asynchronous call
    comes back with an error. This is only recorded for GMS API errors on
    Android and only for exceptions of type ApiException.
  </summary>
  <token key="Operation" variants="PasswordCheckupOperation"/>
</histogram>

<histogram name="PasswordManager.PasswordCheckup.{Operation}.Error"
    enum="CredentialManagerError" expires_after="2027-09-14">
  <owner>ioanap@chromium.org</owner>
  <owner>izuzic@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records the backend error code encountered while attempting to {Operation}.
    If the code is equal to 2 (API_ERROR), GMS 1P API error code is additionally
    reported. This is recorded either before making the actual request (if the
    preconditions are not met) or after the asynchronous call comes back with an
    error. This is currently only recorded on Android.
  </summary>
  <token key="Operation" variants="PasswordCheckupOperation"/>
</histogram>

<histogram name="PasswordManager.PasswordCheckup.{Operation}.ErrorLatency"
    units="ms" expires_after="2026-03-14">
  <owner>ioanap@chromium.org</owner>
  <owner>izuzic@google.com</owner>
  <summary>
    Records the time(ms) elapsed between asking Google Play Services to
    {Operation} and receiving the error response. This is recorded either before
    making the actual request (if the preconditions are not met) or after the
    asynchronous call comes back with an error. This is currently only recorded
    on Android.
  </summary>
  <token key="Operation" variants="PasswordCheckupOperation"/>
</histogram>

<histogram name="PasswordManager.PasswordCheckup.{Operation}.Latency"
    units="ms" expires_after="2026-03-14">
  <owner>ioanap@chromium.org</owner>
  <owner>izuzic@google.com</owner>
  <summary>
    Records the time(ms) elapsed between asking Google Play Services to
    {Operation} and receiving the response. It includes synchronous calls made
    to get the PasswordCheckupClient. Recorded when the asynchronous call comes
    back and only on success. This is currently only recorded on Android.
  </summary>
  <token key="Operation" variants="PasswordCheckupOperation"/>
</histogram>

<histogram name="PasswordManager.PasswordCheckup.{Operation}.Success"
    enum="BooleanSuccess" expires_after="2026-03-22">
  <owner>ioanap@chromium.org</owner>
  <owner>izuzic@google.com</owner>
  <summary>
    Records whether attempt to {Operation} using the Google Play Services was
    successful or not. Recorded when the asynchronous call comes back.
  </summary>
  <token key="Operation" variants="PasswordCheckupOperation"/>
</histogram>

<histogram name="PasswordManager.PasswordDropdownItemSelected"
    enum="PasswordDropdownSelectedOption" expires_after="2026-12-27">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Logs the type of the suggestion in the password dropdown when selected.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordDropdownShown"
    enum="PasswordDropdownState" expires_after="2027-02-07">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>Logs the state of the password dropdown when it's shown.</summary>
</histogram>

<histogram
    name="PasswordManager.PasswordDropdownShown.NonWebAuthnRequest.TotalCount"
    units="credentials" expires_after="2026-03-22">
  <owner>derinel@google.com</owner>
  <owner>markusheintz@google.com</owner>
  <summary>
    Logs the number of passwords in the password dropdown when it's shown. This
    metric is only recorded when the field is not supporting WebAuthn
    conditional UI, that is the field is not annotated with
    autocomplete=&quot;webauthn&quot;.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordDropdownShown.TotalCount"
    units="credentials" expires_after="2027-02-07">
  <owner>derinel@google.com</owner>
  <owner>markusheintz@google.com</owner>
  <summary>
    Logs the number of passwords or passkeys in the password dropdown when it's
    shown.
  </summary>
</histogram>

<histogram
    name="PasswordManager.PasswordDropdownShown.WebAuthnRequest.UseAnotherDeviceShown"
    enum="Boolean" expires_after="2026-11-29">
  <owner>derinel@google.com</owner>
  <owner>markusheintz@google.com</owner>
  <summary>
    Logs whether the password dropdown has the option to use another device for
    a passkey sign in. Recorded when the dropdown is displayed for a WebAuthn
    conditional get request.
  </summary>
</histogram>

<histogram
    name="PasswordManager.PasswordDropdownShown.WebAuthnRequest{MetricType}"
    units="credentials" expires_after="2027-02-07">
  <owner>derinel@google.com</owner>
  <owner>markusheintz@google.com</owner>
  <summary>
    Logs details about the password dropdown when it's shown for a WebAuthn
    conditional get request. Recorded when the dropdown is displayed.
    {MetricType}
  </summary>
  <token key="MetricType">
    <variant name=".PasskeyCount"
        summary="Logs the number of passkeys in the password dropdown."/>
    <variant name=".PasswordCount"
        summary="Logs the number of passwords in the password dropdown."/>
    <variant name=".TotalCount"
        summary="Logs the total number of credentials in the password
                 dropdown. This is the sum of PasskeyCount and PasswordCount
                 for WebAuthn requests."/>
  </token>
</histogram>

<histogram
    name="PasswordManager.PasswordDropdownShown{PasswordDropdownRequestTypeSuffix}.DuplicateCredentialsTypesWhenExists"
    enum="PasswordDropdownDuplicateCredentialsType" expires_after="2026-10-31">
  <owner>derinel@google.com</owner>
  <owner>chrome-webauthn@google.com</owner>
  <summary>
    Records the specific types of duplicate credentials present in the password
    autofill dropdown, if any duplicates were found (i.e., if
    PasswordManager.PasswordDropdownShown.[Suffix].HasAnyDuplicateCredentials is
    true). This histogram is logged for each distinct type of duplication found
    in a single dropdown appearance (e.g., if one user has duplicate passwords
    and another has a password and passkey, two entries are logged).
    {PasswordDropdownRequestTypeSuffix}
  </summary>
  <token key="PasswordDropdownRequestTypeSuffix"
      variants="PasswordDropdownRequestTypeSuffix"/>
</histogram>

<histogram
    name="PasswordManager.PasswordDropdownShown{PasswordDropdownRequestTypeSuffix}.HasAnyDuplicateCredentials"
    enum="Boolean" expires_after="2026-10-31">
  <owner>derinel@google.com</owner>
  <owner>chrome-webauthn@google.com</owner>
  <summary>
    Records whether any duplicate credentials were present in the password
    autofill dropdown when it was shown. A duplicate is defined as multiple
    passwords for the same username, multiple passkeys for the same username, or
    both a password and a passkey for the same username. Logged each time the
    password dropdown is shown. {PasswordDropdownRequestTypeSuffix}
  </summary>
  <token key="PasswordDropdownRequestTypeSuffix"
      variants="PasswordDropdownRequestTypeSuffix"/>
</histogram>

<histogram name="PasswordManager.PasswordFilling.ReauthPromo"
    enum="PasswordFillingReauthPromoShown" expires_after="2027-02-07">
  <owner>droger@chromium.org</owner>
  <owner>mlbipin@google.com</owner>
  <summary>
    Logs whether the reauth promo is shown as part of password filling
    suggestions. Recorded when some suggestions are shown.
  </summary>
</histogram>

<histogram
    name="PasswordManager.PasswordGenerationBottomSheet.InteractionResult"
    enum="PasswordManager.PasswordGenerationBottomSheet.InteractionResult"
    expires_after="2027-02-24">
  <owner>atsvirchkova@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Records the interaction result with the password generation bottom sheet.
    The metric is recorded regardless of how the bottom sheet was triggered
    (automatically, from keyboard accessory or through manual generation). The
    metric is logged when the bottom sheet is dismissed.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordManagementBubble.UserAction"
    enum="PasswordManagementBubbleInteractions" expires_after="2026-10-01">
  <owner>mamir@chromium.org</owner>
  <owner>rgod@google.com</owner>
  <summary>
    This metrics shows how user interacted with the password management native
    bubble triggered from the key icon in the omnibox. Recorded during the
    interaction with the bubble.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordNoteActionInSettings2"
    enum="PasswordNoteAction" expires_after="2026-09-13">
  <owner>derinel@google.com</owner>
  <owner>mamir@chromium.org</owner>
  <summary>
    This metric shows how user created / edited / cleared the note field in the
    passwords settings page. Recorded after closing the add/edit password dialog
    in settings. This metric was mistakenly deleted between M116 and M120 and
    data is missing in this period.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordReuse.NumberOfMatches"
    units="credentials" expires_after="2027-07-26">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    This metric shows how many saved credentials (num unique registry-controlled
    domains) have password that's equal to the reused password.

    Before M63 this logged a &quot;0&quot; for sync-reuse.

    A &quot;password reuse&quot; is when the user typed a string that is equal
    to a saved password on another domain or is equal to the sync password on a
    non google-login domain.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordReuse.PasswordFieldDetected"
    enum="PasswordReusePasswordFieldDetected" expires_after="2026-10-12">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    This metric reports whether a password field had been detected on a page
    when a password reuse happened.

    A &quot;password reuse&quot; is when the user typed a string that is equal
    to a saved password on another domain or is equal to the sync password on a
    non google-login domain.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordReuse.TotalPasswords"
    units="credentials" expires_after="2027-01-12">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    This metric shows how many credentials are stored in Password Manager when a
    password reuse happened. This counts unique registry-controlled domains with
    passwords saved.

    A &quot;password reuse&quot; is when the user typed a string that is equal
    to a saved password on another domain or is equal to the sync password on a
    non google-login domain.

    During M61/M62 this metric logged a &quot;1&quot; for every sync-reuse. It
    was fixed in M63 such that it logs actual Password Manager credential count.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordSavingDisabledDueToGMSCoreError"
    enum="Boolean" expires_after="2027-01-17">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    This histogram records whenever password saving is disabled for a user
    because of GMSCore error. Recorded each time password saving availibility is
    checked.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordSettings.iOS.SavedPasswordIsGenerated"
    enum="BooleanSavedPasswordIsGenerated" expires_after="2025-10-28">
  <owner>prasanaa@google.com</owner>
  <owner>bling-transactions@google.com</owner>
  <summary>
    For a saved password from the settings page in iOS, whether the password was
    generated by Chrome or typed manually by the user.
  </summary>
</histogram>

<histogram
    name="PasswordManager.PasswordSettings.{Function}.{Setting}{Type}.APIError1"
    enum="PasswordStoreAndroidBackendAPIError" expires_after="2026-11-11">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    The error codes returned by the GMS Core Password preferences 1P API while
    attempting to {Function} for {Setting}. Recorded when the asynchronous job
    has returned. This is currently only recorded on Android for {Type}.

    Replacing PasswordManager.PasswordSettings.{Function}.{Setting}.APIError
    which incorrectly recorded *only* the enum values and crashed for all
    unknown values.
  </summary>
  <token key="Function" variants="PasswordManagerSettingAccessorFunction"/>
  <token key="Setting" variants="PasswordManagerSetting"/>
  <token key="Type">
    <variant name="" summary="any store type"/>
    <variant name=".Account" summary="account store"/>
    <variant name=".Local" summary="local store"/>
  </token>
</histogram>

<histogram
    name="PasswordManager.PasswordSettings.{Function}.{Setting}{Type}.ErrorCode"
    enum="PasswordStoreAndroidBackendError" expires_after="2026-11-11">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Records the error encountered in PasswordSettingsUpdater while attempting to
    {Function} for {Setting}. This is recorded either before making the actual
    request (if the preconditions are not met) or after the asynchronous call
    comes back with an error. This is currently only recorded on Android for
    {Type}.
  </summary>
  <token key="Function" variants="PasswordManagerSettingAccessorFunction"/>
  <token key="Setting" variants="PasswordManagerSetting"/>
  <token key="Type">
    <variant name="" summary="any store type"/>
    <variant name=".Account" summary="account store"/>
    <variant name=".Local" summary="local store"/>
  </token>
</histogram>

<histogram
    name="PasswordManager.PasswordSettings.{Function}.{Setting}{Type}.ErrorLatency"
    units="ms" expires_after="2026-11-11">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Real-time duration of the asynchronous attempt to {Function} for {Setting}.
    Recorded when the asynchronous job failed. This is currently only recorded
    on Android for {Type}.
  </summary>
  <token key="Function" variants="PasswordManagerSettingAccessorFunction"/>
  <token key="Setting" variants="PasswordManagerSetting"/>
  <token key="Type">
    <variant name="" summary="any store type"/>
    <variant name=".Account" summary="account store"/>
    <variant name=".Local" summary="local store"/>
  </token>
</histogram>

<histogram
    name="PasswordManager.PasswordSettings.{Function}.{Setting}{Type}.Latency"
    units="ms" expires_after="2027-07-12">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Real-time duration of the asynchronous attempt to {Function} for {Setting}.
    Only recorded when the asynchronous job has returned successfully. This is
    currently only recorded on Android for {Type}.
  </summary>
  <token key="Function" variants="PasswordManagerSettingAccessorFunction"/>
  <token key="Setting" variants="PasswordManagerSetting"/>
  <token key="Type">
    <variant name="" summary="any store type"/>
    <variant name=".Account" summary="account store"/>
    <variant name=".Local" summary="local store"/>
  </token>
</histogram>

<histogram
    name="PasswordManager.PasswordSettings.{Function}.{Setting}{Type}.Success"
    enum="BooleanSuccess" expires_after="2026-10-25">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Records whether PasswordSettingsUpdater attempt to {Function} for {Setting}
    succeed. Recorded for {Type} when the asynchronous job has returned. This is
    currently only recorded on Android.
  </summary>
  <token key="Function" variants="PasswordManagerSettingAccessorFunction"/>
  <token key="Setting" variants="PasswordManagerSetting"/>
  <token key="Type">
    <variant name="" summary="any store type"/>
    <variant name=".Account" summary="account store"/>
    <variant name=".Local" summary="local store"/>
  </token>
</histogram>

<histogram name="PasswordManager.PasswordsGrouping.Time" units="ms"
    expires_after="M165">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The time it takes to group passwords using the information provided by the
    affiliation service. Recorded after password grouping is finished.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordSharingDesktop.UserAction"
    enum="PasswordManager.PasswordSharingDesktopActions"
    expires_after="2027-01-03">
  <owner>natiahlyi@google.com</owner>
  <owner>mamir@chromium.org</owner>
  <owner>rgod@google.com</owner>
  <summary>
    Records user interactions with the elements of password sharing flow in the
    desktop settings.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordSharingIOS.UserAction"
    enum="PasswordManager.PasswordSharingIOSUserAction"
    expires_after="2027-06-06">
  <owner>rgod@google.com</owner>
  <owner>mamir@chromium.org</owner>
  <summary>
    Records user interactions with the elements of password sharing flow in the
    iOS settings.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordSharingRecipients.ResponseOrErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2027-04-26">
  <owner>rushans@google.com</owner>
  <owner>mamir@chromium.org</owner>
  <summary>
    Records the response (both HTTP code and net error code) for password
    sharing recipients URL fetches, recorded when the request completes or fails
    (does not include transient errors if request is retried).
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordStore.InitTime" units="ms"
    expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The time it takes to initialize PasswordStore. Recorded inside
    PasswordStore::OnInitCompleted().
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordStore.OnLoginsRetained"
    enum="LoginsChangedTrigger" expires_after="2027-09-14">
  <owner>vsemeniuk@google.com</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    Android only. |OnLoginsRetained| replaces |OnLoginsChanged| and this metric
    records potential calls of |OnLoginsRetained| to measure differences in
    volume after switching. The metrics is recorded whenever the PasswordStore
    (potentially) requests all logins to notify consumers because data may have
    changed. Changes can occur within Chrome (e.g. after saving/updating a
    password) or externally.
  </summary>
</histogram>

<histogram
    name="PasswordManager.PasswordStoreAndroidBackend.Retry{Operation}.APIError"
    enum="PasswordStoreAndroidBackendAPIError" expires_after="2027-09-14">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Records the last error code returned by the GMS ChromeSync 1P API when
    scheduling a retry for the {Operation} operation. This is recorded after the
    asynchronous call comes back with an error and it is checked that operation
    could be retried. This is only recorded for GMS API errors on Android.
  </summary>
  <token key="Operation" variants="RetriedOperation"/>
</histogram>

<histogram
    name="PasswordManager.PasswordStoreAndroidBackend.Retry{Operation}.Attempt"
    units="Times" expires_after="2027-09-14">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Records the retry attempt number when the GMS ChromeSync 1P API returned an
    error and a retry for the {Operation} operation is about to be scheduled.
    This is recorded after the asynchronous call comes back with an error and it
    is checked that operation could be retried. This is only recorded for GMS
    API errors on Android. Note: This histogram expired after M120. Data might
    be incomplete before M122, Jan 4 2023.
  </summary>
  <token key="Operation" variants="RetriedOperation"/>
</histogram>

<histogram
    name="PasswordManager.PasswordStoreAndroidBackend.Retry{Operation}.CancelledAtAttempt"
    units="Times" expires_after="2027-09-14">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Records which attempt was ongoing when the posted retry was cancelled for
    {Operation}. Recorded when the sync state changes and the callback which was
    supposed to be invoked after the attempt's delay is invalidated. Note that
    the original attempt to call the method counts as attempt 1, so the first
    retry would be attempt 2, etc.
  </summary>
  <token key="Operation" variants="RetriedOperation"/>
</histogram>

<histogram name="PasswordManager.PasswordStoreAndroidBackend.{Type}.APIError"
    enum="PasswordStoreAndroidBackendAPIError" expires_after="2027-09-14">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    The error codes returned by the GMS Core ChromeSync 1P API. Recorded when
    the asynchronous job has returned. This histogram is recording an overall
    metric for {Type}.
  </summary>
  <token key="Type" variants="PasswordStoreAndroidBackendType"/>
</histogram>

<histogram name="PasswordManager.PasswordStoreAndroidBackend.{Type}.ErrorCode"
    enum="PasswordStoreAndroidBackendError" expires_after="2027-09-14">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    This is an overall metric that reports the errors observed when
    retrieving/adding/updating or removing logins from the PasswordStore Android
    backend that uses {Type}. Recorded when the asynchronous job has returned.
  </summary>
  <token key="Type" variants="PasswordStoreAndroidBackendType"/>
</histogram>

<histogram name="PasswordManager.PasswordStoreAndroidBackend.{Type}.Success"
    enum="BooleanSuccess" expires_after="2027-09-14">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Whether a call to GMS Core ChromeSync 1P API succeeded. Recorded when the
    asynchronous job has returned. This histogram is recording an overall metric
    for the {Type} backend.
  </summary>
  <token key="Type" variants="PasswordStoreAndroidBackendType"/>
</histogram>

<histogram name="PasswordManager.PasswordStoreAndroidBackend.{Type}.{Function}"
    enum="PasswordStoreAndroidBackendRequestStatus" expires_after="2026-11-29">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Records each {Function} call by the PasswordStoreAndroidBackend for the
    {Type}. Recorded twice: 1) when the store issues the request, and 2) as the
    asynchronous job has finished or times out. The first bucket may exceed
    others if Chrome closes before the request finishes. This histogram is
    recording the metric separately for local and account store.
  </summary>
  <token key="Type" variants="PasswordStoreAndroidBackendType"/>
  <token key="Function" variants="PasswordStoreBackendFunction"/>
</histogram>

<histogram
    name="PasswordManager.PasswordStoreAndroidBackend.{Type}.{Function}.APIError"
    enum="PasswordStoreAndroidBackendAPIError" expires_after="2026-11-29">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    The error codes returned by the GMS Core ChromeSync 1P API{Function}.
    Recorded when the asynchronous job has returned. This histogram is recording
    the metric separately for local and account store.
  </summary>
  <token key="Type" variants="PasswordStoreAndroidBackendType"/>
  <token key="Function" variants="PasswordStoreBackendFunction"/>
</histogram>

<histogram
    name="PasswordManager.PasswordStoreAndroidBackend.{Type}.{Function}.ConnectionResultCode"
    enum="PasswordStoreAndroidBackendConnectionResultCode"
    expires_after="2027-09-14">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    The connection result status code returned by the GMS Core ChromeSync 1P
    API{Function}. Recorded when the asynchronous job has returned with error
    and only if ConnectionResult was set on the returned error. This histogram
    is recording the metric separately for local and account store.
  </summary>
  <token key="Type" variants="PasswordStoreAndroidBackendType"/>
  <token key="Function" variants="PasswordStoreBackendFunction"/>
</histogram>

<histogram
    name="PasswordManager.PasswordStoreAndroidBackend.{Type}.{Function}.ErrorCode"
    enum="PasswordStoreAndroidBackendError" expires_after="2026-11-29">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    This metric reports the error observed when {Function} the PasswordStore
    Android backend. Recorded when the asynchronous job has returned. This
    metric is recorded for {Type}.
  </summary>
  <token key="Function">
    <variant name="AddLoginAsync" summary="adding a login to"/>
    <variant name="GetAllLoginsAsync" summary="retrieving all logins from"/>
    <variant name="GetAllLoginsWithBrandingInfoAsync"
        summary="for GetAllLoginsWithBrandingInfoAsync"/>
    <variant name="GetAutofillableLoginsAsync"
        summary="retrieving autofillable logins from"/>
    <variant name="GetGroupedMatchingLoginsAsync"
        summary="for GetGroupedMatchingLoginsAsync"/>
    <variant name="GetLoginsAsync"
        summary="retrieving logins filtered by signon realm from"/>
    <variant name="RemoveLoginAsync" summary="removing a login from"/>
    <variant name="UpdateLoginAsync" summary="updating a login in"/>
  </token>
  <token key="Type" variants="PasswordStoreAndroidBackendType"/>
</histogram>

<histogram
    name="PasswordManager.PasswordStoreAndroidBackend.{Type}.{Function}.Latency"
    units="ms" expires_after="2027-02-07">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Real-time duration of the asynchronous call to {Function} in
    PasswordStoreAndroidBackend. Recorded when the asynchronous job has
    returned. This histogram is recording the metric separately for local and
    account store.
  </summary>
  <token key="Type" variants="PasswordStoreAndroidBackendType"/>
  <token key="Function" variants="PasswordStoreBackendFunction"/>
</histogram>

<histogram
    name="PasswordManager.PasswordStoreAndroidBackend.{Type}.{Function}.Success"
    enum="BooleanSuccess" expires_after="2026-11-29">
  <owner>izuzic@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Records whether {Function} succeeded in AndroidBackend. Recorded when the
    asynchronous job has returned. False is emitted if an error occurs;
    otherwise true is emitted. This histogram is recording the metric separately
    for local and account store.
  </summary>
  <token key="Type" variants="PasswordStoreAndroidBackendType"/>
  <token key="Function" variants="PasswordStoreBackendFunction"/>
</histogram>

<histogram
    name="PasswordManager.PasswordStoreAndroidBackend{Function}.APIError"
    enum="PasswordStoreAndroidBackendAPIError" expires_after="2027-02-07">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The error codes returned by the GMS Core ChromeSync 1P API{Function}.
    Recorded when the asynchronous job has returned. This is an overall
    histogram that includes records for both local and account store.
  </summary>
  <token key="Function">
    <variant name=""/>
    <variant name=".AddLoginAsync" summary="for AddLoginAsync"/>
    <variant name=".GetAllLoginsAsync" summary="for GetAllLoginsAsync"/>
    <variant name=".GetAllLoginsWithBrandingInfoAsync"
        summary="for GetAllLoginsWithBrandingInfoAsync"/>
    <variant name=".GetAutofillableLoginsAsync"
        summary="for GetAutofillableLoginsAsync"/>
    <variant name=".GetGroupedMatchingLoginsAsync"
        summary="for GetGroupedMatchingLoginsAsync"/>
    <variant name=".GetLoginsAsync" summary="for GetLoginsAsync"/>
    <variant name=".RemoveLoginAsync" summary="for RemoveLoginAsync"/>
    <variant name=".UpdateLoginAsync" summary="for UpdateLoginAsync"/>
  </token>
</histogram>

<histogram
    name="PasswordManager.PasswordStoreAndroidBackend{Function}.ConnectionResultCode"
    enum="PasswordStoreAndroidBackendConnectionResultCode"
    expires_after="2026-11-29">
  <owner>ioanap@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The connection result status code returned by the GMS Core ChromeSync 1P
    API{Function}. Recorded when the asynchronous job has returned with error
    and only if ConnectionResult was set on the returned error. This is an
    overall histogram that includes records for both local and account store.
  </summary>
  <token key="Function">
    <variant name=""/>
    <variant name=".AddLoginAsync" summary="for AddLoginAsync"/>
    <variant name=".GetAllLoginsAsync" summary="for GetAllLoginsAsync"/>
    <variant name=".GetAllLoginsWithBrandingInfoAsync"
        summary="for GetAllLoginsWithBrandingInfoAsync"/>
    <variant name=".GetAutofillableLoginsAsync"
        summary="for GetAutofillableLoginsAsync"/>
    <variant name=".GetGroupedMatchingLoginsAsync"
        summary="for GetGroupedMatchingLoginsAsync"/>
    <variant name=".GetLoginsAsync" summary="for GetLoginsAsync"/>
    <variant name=".RemoveLoginAsync" summary="for RemoveLoginAsync"/>
    <variant name=".UpdateLoginAsync" summary="for UpdateLoginAsync"/>
  </token>
</histogram>

<histogram
    name="PasswordManager.PasswordStoreAndroidBackend{Function}.ErrorCode"
    enum="PasswordStoreAndroidBackendError" expires_after="2027-02-07">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    This metric reports the error observed when {Function} the PasswordStore
    Android backend. Recorded when the asynchronous job has returned.
  </summary>
  <token key="Function">
    <variant name=""
        summary="retrieving/adding/updating or removing logins from"/>
    <variant name=".AddLoginAsync" summary="adding a login to"/>
    <variant name=".GetAllLoginsAsync" summary="retrieving all logins from"/>
    <variant name=".GetAllLoginsWithBrandingInfoAsync"
        summary="for GetAllLoginsWithBrandingInfoAsync"/>
    <variant name=".GetAutofillableLoginsAsync"
        summary="retrieving autofillable logins from"/>
    <variant name=".GetGroupedMatchingLoginsAsync"
        summary="for GetGroupedMatchingLoginsAsync"/>
    <variant name=".GetLoginsAsync"
        summary="retrieving logins filtered by signon realm from"/>
    <variant name=".RemoveLoginAsync" summary="removing a login from"/>
    <variant name=".UpdateLoginAsync" summary="updating a login in"/>
  </token>
</histogram>

<histogram name="PasswordManager.PasswordStore{Backend}.{Function}"
    enum="PasswordStoreAndroidBackendRequestStatus" expires_after="2027-01-03">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records each {Function} call by the PasswordStore {Backend}. Recorded twice:
    1) when the store issues the request, and 2) as the asynchronous job has
    finished or times out. The first bucket may exceed others if Chrome closes
    before the request finishes. In case of Android backend, this is an overall
    histogram that includes records for both local and account store.
  </summary>
  <token key="Backend">
    <variant name="AndroidBackend" summary="Android backend"/>
    <variant name="Backend" summary="backend"/>
    <variant name="BuiltInBackend" summary="built-in backend"/>
  </token>
  <token key="Function" variants="PasswordStoreBackendFunction"/>
</histogram>

<histogram name="PasswordManager.PasswordStore{Backend}.{Function}.Latency"
    units="ms" expires_after="2027-02-07">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Real-time duration of the asynchronous call to {Function} in {Backend}.
    Recorded when the asynchronous job has returned. In case of Android backend,
    this is an overall histogram that includes records for both local and
    account store.
  </summary>
  <token key="Backend">
    <variant name="AndroidBackend" summary="Android backend"/>
    <variant name="Backend" summary="backend"/>
    <variant name="BuiltInBackend" summary="built-in backend"/>
  </token>
  <token key="Function" variants="PasswordStoreBackendFunction"/>
</histogram>

<histogram name="PasswordManager.PasswordStore{Backend}.{Function}.Success"
    enum="BooleanSuccess" expires_after="2027-01-31">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records whether {Function} succeeded in {Backend}. Recorded when the
    asynchronous job has returned. False is emitted if an error occurs;
    otherwise true is emitted. In case of Android backend, this is an overall
    histogram that includes records for both local and account store.
  </summary>
  <token key="Backend">
    <variant name="AndroidBackend" summary="Android backend"/>
    <variant name="Backend" summary="backend"/>
    <variant name="BuiltInBackend" summary="built-in backend"/>
  </token>
  <token key="Function" variants="PasswordStoreBackendFunction"/>
</histogram>

<histogram name="PasswordManager.PasswordSyncState3" enum="PasswordSyncState"
    expires_after="2027-01-03">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Whether the passwords are syncing and, if not, then what's causing sync
    failures. Recorded after the first sync attempt either succeeds or fails for
    the regular profiles.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordViewPage.UserActions"
    enum="PasswordViewPageInteractions" expires_after="2027-01-24">
  <owner>derinel@google.com</owner>
  <owner>mamir@chromium.org</owner>
  <summary>
    Records the user actions performed on password viewing page in desktop
    settings. Reported upon interactions with the password settings page.
  </summary>
</histogram>

<histogram name="PasswordManager.PotentialBestMatchFormType"
    enum="PasswordManagerMatchedFormType" expires_after="2027-01-03">
  <owner>atsvirchkova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    This metric records the type of the potential preferred password for
    filling. It is recorded when the browser instructs the renderer to fill the
    credentials on page load. It may record values that are different than
    recorded in PasswordManager.MatchedFormType due to difference in FormFetcher
    configuration.
  </summary>
</histogram>

<histogram name="PasswordManager.PredictionWaitResult"
    enum="PasswordFormPredictionWaitResult" expires_after="2027-01-03">
  <owner>kenrb@chromium.org</owner>
  <owner>chrome-webauthn@google.com</owner>
  <summary>
    The outcome of a wait for external predictions for filling a password form.
    This is emitted whenever a wait completes, either from all the external
    sources having provided a response or from a timeout.
  </summary>
</histogram>

<histogram
    name="PasswordManager.ProcessIncomingPasswordSharingInvitationResult"
    enum="PasswordManager.ProcessIncomingPasswordSharingInvitationResult"
    expires_after="2027-03-29">
  <owner>mamir@chromium.org</owner>
  <owner>rushans@google.com</owner>
  <component>1457410</component>
  <summary>
    Records the result of processing incoming password sharing invitation.
    Invitation are either auto-approved and stored in the password store or
    ignored for different reasons. This is recorded upon processing an incoming
    password sharing invitation.
  </summary>
</histogram>

<histogram name="PasswordManager.PromoCard.ActionButtonClicked"
    enum="PasswordManagerPromoCard" expires_after="2026-12-20">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the type of a promo card for which user clicked action button in the
    Password Manager UI. Recorded when a promo card action button is clicked.
  </summary>
</histogram>

<histogram name="PasswordManager.PromoCard.Shown"
    enum="PasswordManagerPromoCard" expires_after="2027-01-03">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the type of a promo card shown in the Password Manager UI. Recorded
    when a promo card is shown.
  </summary>
</histogram>

<histogram name="PasswordManager.ProvisionalSaveFailure2"
    enum="ProvisionalSaveFailure" expires_after="2027-02-07">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Breakdown of cases where a password is submitted, but we don't even try and
    save it. Recorded for every password form submit.
  </summary>
</histogram>

<histogram name="PasswordManager.ReauthToAccessPasswordInSettings"
    enum="DeviceReauth.ReauthResult" expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Recorded whenever the user interacts with reauthentication in order to
    access the passwords in settings, or when such reauthentication is skipped
    for a well-defined reason.
  </summary>
</histogram>

<histogram name="PasswordManager.RemoteActorCredentialSharing.Result"
    enum="RemoteActorCredentialSharingResult" expires_after="2026-10-28">
  <owner>derinel@google.com</owner>
  <owner>anki-team@google.com</owner>
  <summary>
    Records the outcome of a Remote Actor Credential Sharing request. Recorded
    when the flow finishes (either successfully or with a specific failure
    reason).
  </summary>
</histogram>

<histogram name="PasswordManager.RequestVerificationAsyncResult"
    enum="AuthenticationResultStatusWin" expires_after="2026-12-27">
  <owner>sygiet@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records an error immediately after RequestVerificationAsyncResult
    encountered one, or UserConsentVerificationResult if the authentication call
    was successful.
  </summary>
</histogram>

<histogram name="PasswordManager.ReuseCheck.CheckedPasswords" units="passwords"
    expires_after="M165">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The number of passwords analyzed during the password reuse check. Note: this
    is a number of unique password values. Recorded after reuse check is
    finished.
  </summary>
</histogram>

<histogram name="PasswordManager.ReuseCheck.ReusedPasswords" units="passwords"
    expires_after="M165">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The number of reused passwords found when the password reuse check
    completed. Note: this is a number of unique password values. Recorded after
    reuse check is finished.
  </summary>
</histogram>

<histogram name="PasswordManager.ReuseCheck.Time" units="ms"
    expires_after="2026-11-15">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The time it took to complete the password reuse check. Recorded after reuse
    check is finished.
  </summary>
</histogram>

<histogram name="PasswordManager.ReusedPasswordType" enum="ReusedPasswordType"
    expires_after="2027-01-17">
<!-- Note to owner: This histogram can be renewed 1 full year if it is still
useful for Chirp alerts (go/crca-alerts). -->

  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records the type of password (e.g saved password, sync password, enterprise
    password etc) reused by the user. This is logged when a password reuse
    happens.
  </summary>
</histogram>

<histogram
    name="PasswordManager.SavedGaiaPasswordHashCount2{SyncConsentStatus}"
    units="count" expires_after="M160">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records the number of Gaia password hashes that have been saved for password
    reuse detection {SyncConsentStatus}. This is logged during the
    initialization of the PasswordReuseManagerImpl class.
  </summary>
  <token key="SyncConsentStatus">
    <variant name="" summary=""/>
    <variant name=".SignedInNonSync"
        summary="when the primary account for the profile does not have Sync
                 consent"/>
    <variant name=".Sync"
        summary="when the primary account for the profile has Sync consent"/>
  </token>
</histogram>

<histogram
    name="PasswordManager.SavedPasswordIsGenerated{PasswordAccountStorageUsageLevel}{Profile}"
    enum="BooleanSavedPasswordIsGenerated" expires_after="2027-02-14">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    For a saved password, whether the password was generated by Chrome or typed
    manually by the user. {PasswordAccountStorageUsageLevel}

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

<histogram name="PasswordManager.SaveUIDismissalReason.UsersWithNoCredentials"
    enum="PasswordManagerUIDismissalReason" expires_after="2027-01-03">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Why was the save password UI (bubble or infobar) closed? Recorded for users
    who don't yet have any credentials stored in the password manager. Currently
    only logged on desktop.
  </summary>
</histogram>

<histogram name="PasswordManager.SaveUIDismissalReason.{PasswordStoreError}"
    enum="PasswordManagerUIDismissalReason" expires_after="2027-01-31">
  <owner>izuzic@google.com</owner>
  <owner>anki-team@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Why was the save password UI (bubble, message or infobar) closed? Recorded
    when saving is blocked by {PasswordStoreError}.
  </summary>
  <token key="PasswordStoreError">
    <variant name="PassphraseRequiredError"
        summary="a custom passphrase error"/>
    <variant name="PendingSignInError" summary="a pending sign-in error"/>
    <variant name="TrustedVaultError"
        summary="a trusted vault key retrieval error"/>
  </token>
</histogram>

<histogram name="PasswordManager.SaveUIDismissalReason{UserSyncingType}"
    enum="PasswordManagerUIDismissalReason" expires_after="2027-01-31">
  <owner>treib@chromium.org</owner>
  <owner>mamir@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Why was the save password UI (bubble or infobar) closed? Recorded for
    {UserSyncingType}. Note that on Automotive, closing the save password UI
    might not result in the password being saved in some cases (e.g. when the
    activity is destroyed or the device lock can't be set).
  </summary>
  <token key="UserSyncingType" variants="UserSyncingType"/>
</histogram>

<histogram
    name="PasswordManager.SavingBlockedByTrustedVaultErrorOnSuccessfulLogin"
    enum="Boolean" expires_after="2027-01-01">
  <owner>ylahodiuk@google.com</owner>
  <owner>anki-team@google.com</owner>
  <summary>
    Records whether saving a password after a successful login is blocked by a
    trusted vault error. Recorded once per form submission on successful login.
  </summary>
</histogram>

<histogram name="PasswordManager.ServerPredictionsWaitDuration" units="ms"
    expires_after="2027-06-30">
  <owner>kenrb@chromium.org</owner>
  <owner>chrome-webauthn@google.com</owner>
  <summary>
    The elapsed time between the PasswordManager requesting server-side
    credentials and receiving a response.
  </summary>
</histogram>

<histogram name="PasswordManager.Settings.Export.Event"
    enum="PasswordExportEvent" expires_after="2025-04-20">
  <owner>ioanap@chromium.org</owner>
  <owner>atsvirchkova@google.com</owner>
  <summary>
    Measures the frequency of various password export events in settings menu.
    Recorded when the user interacts with the password export menu item or
    dialog. Curently logged only on Android.
  </summary>
</histogram>

<histogram name="PasswordManager.Settings.Export.Result2"
    enum="HistogramExportResult" expires_after="2025-04-20">
  <owner>ioanap@chromium.org</owner>
  <owner>atsvirchkova@google.com</owner>
  <summary>
    Records whether the export flow finished successfully or the type of error
    for passwords export started from password settings. Recorded when the
    export flow finishes. Logged only on Android. This is an updated version of
    PasswordManager.Settings.Export.Result, which logs more possible export flow
    results in adition to the old values.
  </summary>
</histogram>

<histogram name="PasswordManager.ShortcutMetric"
    enum="PasswordManagerShortcutMetric" expires_after="M165">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the user actions related to password manager shortcut. Recorded
    before showing install prompt, after successful installation, or when user
    switched profile inside a shortcut.
  </summary>
</histogram>

<histogram name="PasswordManager.SingleUsername.PasswordFormHadUsernameField"
    enum="PasswordFormHadUsernameField" expires_after="2026-12-06">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Single username vote is sent after user is signed in (i.e. entered password
    in password form). This means that there are actually 2 forms in username
    first flow, that is single username and password form.

    Form is considered for single username vote in 2 cases:

    (1) There is a password field and no username fields in the password form.

    (2) There is a password field and username value from password form matches
    username value in the single username form.

    This metric tracks which of the two cases the vote is coming from. Recorded
    once per vote submission.
  </summary>
</histogram>

<histogram name="PasswordManager.StoreDecryptionResult"
    enum="PasswordDecryptionResult" expires_after="2027-02-28">
  <owner>mamir@chromium.org</owner>
  <owner>kazinova@google.com</owner>
  <summary>
    Describes the result of decrypting a password value from the LoginDatabase.
  </summary>
</histogram>

<histogram name="PasswordManager.StoresUsedForFillingInLast28Days"
    enum="PasswordManagerFillingSource" expires_after="2027-02-25">
  <owner>mamir@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    Which of the password manager's stores (the profile-scoped one and/or the
    account-scoped one) were used within the last 28 days for filling passwords.
    Recorded whenever a password form is successfully submitted. This should
    typically only be used with &quot;Count unique clients&quot;.
  </summary>
</histogram>

<histogram name="PasswordManager.StoresUsedForFillingInLast7Days"
    enum="PasswordManagerFillingSource" expires_after="2027-02-25">
  <owner>mamir@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    Which of the password manager's stores (the profile-scoped one and/or the
    account-scoped one) were used within the last 7 days for filling passwords.
    Recorded whenever a password form is successfully submitted. This should
    typically only be used with &quot;Count unique clients&quot;.
  </summary>
</histogram>

<histogram name="PasswordManager.SubmittedFormFrame2"
    enum="SubmittedPasswordFormFrame" expires_after="2026-12-16">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records a frame type (eg. main frame, iframe with the same url as the main
    frame, etc) of a submitted password form. Logged only once per submitted
    form.
  </summary>
</histogram>

<histogram name="PasswordManager.SubmittedFormType2" enum="PasswordFormType2"
    expires_after="2027-02-07">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The presumed type (e.g. signup, login, change password) of all submitted
    password forms. The type is based on local heuristics. Logged on the
    corresponding form manager destruction.
  </summary>
</histogram>

<histogram name="PasswordManager.SuccessfulLoginHappened"
    enum="BooleanSuccessfulLoginHappenedOnHttps" expires_after="2027-01-17">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    For a successful login, whether the origin is HTTPS or HTTP. A succesful
    login is detected by local heuristics. The heuristics can misclassify
    whether a login succeeded, so this is an approximation.
  </summary>
</histogram>

<histogram name="PasswordManager.SuccessfulSubmissionIndicatorEvent"
    enum="SubmissionIndicatorEvent" expires_after="2027-01-03">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The type of event that the Password Manager used for detecting a password
    form submission. Recorded for each successful password form submission.
  </summary>
</histogram>

<histogram name="PasswordManager.SuggestionPopupTriggerSource"
    enum="AutofillSuggestionTriggerSource" expires_after="2026-12-20">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the reason that triggered password suggestions popup, excluding
    manual fallback suggestions. Recorded at the time the popup is shown.
  </summary>
</histogram>

<histogram
    name="PasswordManager.SyncControllerDelegateNotifiesCredentialManager.APIErrorCode"
    enum="CredentialManagerAPIError" expires_after="2025-11-30">
  <owner>kazinova@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    The error codes returned by the GMS Core ChromeSync 1P CredentialManager API
    for setting the current autofill account. Recorded when the asynchronous job
    has returned. This is currently only recorded on Android.
  </summary>
</histogram>

<histogram
    name="PasswordManager.SyncControllerDelegateNotifiesCredentialManager.ErrorCode"
    enum="PasswordStoreAndroidBackendError" expires_after="2025-11-30">
  <owner>kazinova@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Error code registered when PasswordSyncControllerDelegateAndroid fails in
    notifying CredentialManager of the currect account. This happens either when
    the request made to the credential manager API returns with a failure or
    before, if the PasswordSyncControllerDelegateAndroid makes a call with
    incomplete data (e.g. no account is found when one is required).
  </summary>
</histogram>

<histogram
    name="PasswordManager.SyncControllerDelegateNotifiesCredentialManager.Success"
    enum="Boolean" expires_after="2025-11-30">
  <owner>kazinova@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Whether PasswordSyncControllerDelegateAndroid succeeded in notifying
    CredentialManager of the currect account. Recorded when the async request to
    notify the credential manager about the account returns.
  </summary>
</histogram>

<histogram name="PasswordManager.SyncingAccountState3"
    enum="PasswordManagerSyncingAccountState" expires_after="2026-12-31">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Information about the user's current sync status crossed with whether their
    synced password is saved. Recorded at most once per day for regular
    profiles.
  </summary>
</histogram>

<histogram name="PasswordManager.SyncMetadataReadError2"
    enum="PasswordSyncMetadataReadError" expires_after="2026-11-01">
  <owner>mamir@chromium.org</owner>
  <owner>mastiz@chromium.org</owner>
  <summary>
    This metric reports the error observed when trying to read the Sync metadata
    from the password store during the start of Password sync. Recorded only if
    password store was created.
  </summary>
</histogram>

<histogram name="PasswordManager.SyncPasswordHashChange"
    enum="GaiaPasswordHashChange" expires_after="2027-01-17">
<!-- Note to owner: This histogram can be renewed 1 full year if it is still
useful for Chirp alerts (go/crca-alerts). -->

  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    This metric reports a type of a sync password hash change event. Recorded
    when a sync password hash is saved or cleared.
  </summary>
</histogram>

<histogram name="PasswordManager.TimeBetweenStoreAndServer" units="ms"
    expires_after="2026-12-31">
  <owner>kazinova@google.com</owner>
  <owner>battre@chromium.org</owner>
  <summary>
    The time between receiving saved credentials from the password store and
    predictions from the Autofill server. Recorded each time when predictions
    for a form are received.
  </summary>
</histogram>

<histogram name="PasswordManager.TimeSpentChangingPassword" units="ms"
    expires_after="2027-10-05">
  <owner>atsvirchkova@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    The time in milliseconds it takes to fill and submit the change password
    form. The metric is recorded from the moment the form is found until the
    flow produces an outcome.
  </summary>
</histogram>

<histogram name="PasswordManager.TouchToFill.CredentialIndex" units="index"
    expires_after="2027-01-03">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    The index of a selected credential in the Touch To Fill sheet. Only recorded
    when the sheet showed at least two entries.
  </summary>
</histogram>

<histogram name="PasswordManager.TouchToFill.DismissalReason"
    enum="BottomSheet.StateChangeReason" expires_after="2027-02-14">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    The reason why a user dismissed the Touch To Fill sheet. Recorded once for
    each dismissal.
  </summary>
</histogram>

<histogram name="PasswordManager.TouchToFill.Outcome"
    enum="TouchToFill.Outcome" expires_after="2026-12-27">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    The final outcome that closes the Touch To Fill sheet (e.g. credentials
    filling, settings opened, failed reauth, sheet dismissal). Recorded once for
    each closing.
  </summary>
</histogram>

<histogram name="PasswordManager.TouchToFill.PasswordGeneration.TriggerOutcome"
    enum="TouchToFillPasswordGenerationTriggerOutcome"
    expires_after="2027-07-26">
  <owner>atsvirchkova@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Records the outcome of an attempt to trigger the password generation bottom
    sheet. It either records success or the reason why the sheet was not shown.
    The metric is recorded when the browser process receives the notification
    about password generation being available and only if the generation bottom
    sheet feature is on. Important: due to the renderer issuing 2 generation
    available calls per field focus event, all buckets apart from
    &quot;Shown&quot; are double-counted.
  </summary>
</histogram>

<histogram name="PasswordManager.TouchToFill.PasswordGeneration.UserChoice"
    enum="GenerationDialogChoice" expires_after="2026-12-27">
  <owner>atsvirchkova@google.com</owner>
  <owner>ioanap@chromium.org</owner>
  <summary>
    Records whether the user chose to use the proposed automatically generated
    password in the bottom sheet. The metric is recorded only when the password
    generation bottom sheet was automatically triggered (not triggered by using
    manual password generation or from the keyboard accessory). The metric is
    logged when the bottom sheet is dismissed.
  </summary>
</histogram>

<histogram name="PasswordManager.TouchToFill.SubmissionReadiness"
    enum="TouchToFill.SubmissionReadiness" expires_after="2027-01-24">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    A given form's state (e.g. there are empty fields in the form, or there are
    only two fields and they both are filled by Chrome) that indicates whether
    the form is ready for submission. Recorded when a Touch To Fill sheet is
    shown for that form.
  </summary>
</histogram>

<histogram name="PasswordManager.TouchToFill.SuccessfulSubmissionWasObserved"
    enum="Boolean" expires_after="2026-12-16">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    Measures whether a credential filling by Touch To Fill leads to a successful
    submission or not (submission failed, or the submission could not be
    associated with filling by Touch To Fill). A submission after filling is
    considered successful iff the filled and submitted usernames coincide, the
    timestamps are within one minute and a user hasn't modified any field after
    filling. Otherwise, it is reported as 'no successful submission observed'.
    The metric is used to compare a login success rate when automated submission
    is enabled and disabled. Due to stale or wrong credentials, the success rate
    will be degraded independently of automated submission. Recorded when the
    password manager has classified a login submission (succeeded or failed) or
    a user has modified a field after Touch-To-Fill.
  </summary>
</histogram>

<histogram name="PasswordManager.TouchToFill.TimeToSuccessfulLogin" units="ms"
    expires_after="2027-01-24">
  <owner>ioanap@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    The time in milliseconds between filling by the Touch To Fill and a
    successful submission (To ensure filling and submitting correspond to each
    other, the usernames should coincide and the timestamps should be within one
    minute. A successful login after a failed submission or manual typing is not
    reported). Used to compare the times when automated submission is enabled
    and disabled. Thus, we measure the time saved for a user. Recorded when the
    password manager detects that the login was successful.
  </summary>
</histogram>

<histogram name="PasswordManager.TrustedVaultPasswordReadiness" enum="Boolean"
    expires_after="2027-03-22">
  <owner>ylahodiuk@google.com</owner>
  <owner>markusheintz@google.com</owner>
  <owner>anki-team@google.com</owner>
  <summary>
    Records the trusted vault readiness state of passwords (whether the trusted
    vault encryption key is available) for Google Password Manager users with
    trusted vault encryption. Currently it is recorded on desktop only, 30
    seconds after Chrome startup when Sync engine is initialized and passwords
    encryption type is trusted vault.
  </summary>
</histogram>

<histogram name="PasswordManager.UI.OpenedPasswordDetailsWhileSearching"
    enum="BooleanSuccess" expires_after="2027-09-14">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records whether user navigated to password details page while using search
    field. Recorded only on desktop after user clicked on a password entry.
  </summary>
</histogram>

<histogram name="PasswordManager.UIDismissalReason"
    enum="PasswordManagerUIDismissalReason" expires_after="2026-12-20">
  <owner>mamir@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Why was the password manager's UI (bubble or infobar) closed? Save and
    update UI are tracked separately.
  </summary>
</histogram>

<histogram name="PasswordManager.UpdateUIDismissalReason"
    enum="PasswordManagerUIDismissalReason" expires_after="2026-12-27">
  <owner>mamir@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>Why was the update password UI (bubble or infobar) closed?</summary>
</histogram>

<histogram name="PasswordManager.UPM.NoGmsNoPasswordsDialogShown"
    enum="BooleanShown" expires_after="2026-10-26">
  <owner>ioanap@chromium.org</owner>
  <owner>atsvirchkova@google.com</owner>
  <summary>
    Records true whenever the dialog explaining why the password manager is no
    longer available is shown to users on devices without Google Play Services.
    This dialog is only shown if the users have already downloaded or don't have
    passwords left over in Chrome. Android only.
  </summary>
</histogram>

<histogram name="PasswordManager.UPM.OldGmsNoPasswordsDialogDismissalReason"
    enum="BooleanAccepted" expires_after="2026-12-27">
  <owner>ioanap@chromium.org</owner>
  <owner>atsvirchkova@google.com</owner>
  <summary>
    Records the reason why the dialog shown to users with an old version of
    Google Play Services was dismissed. The old version of Google Play Services
    in this case, is a version without full UPM support. This dialog is only
    shown if the user has already downlaoded or doesn't have passwords left over
    in Chrome. Acceptance of the dialog leads the user to Google Play Store to
    update Google Play Services. Android only.
  </summary>
</histogram>

<histogram name="PasswordManager.UPM.{DialogType}.DownloadCsvFlowLastStep"
    enum="DownloadCsvFlowStep" expires_after="2027-01-03">
  <owner>ioanap@chromium.org</owner>
  <owner>atsvirchkova@google.com</owner>
  <summary>
    Records the last step in the flow allowing the user to download the
    auto-exported CSV out of Chrome to a chosen location. A successful flow
    looks as follows: a dialog is shown, the user selects to export passwords, a
    reauthentication prompt is presented, the user selects the download
    location, the CSV is copied from Chrome to the selected location. This
    histogram is recorded when the flow ends, and it records the reason why the
    flow ended. Recorded for the {DialogType}. Android only.
  </summary>
  <token key="DialogType">
    <variant name="FullUpmSupportGms"
        summary="dialog shown when Google Play Services offers full UPM
                 support"/>
    <variant name="NoGms"
        summary="dialog shown when Google Play Services is unavailable"/>
    <variant name="OldGms"
        summary="dialog shown when Google Play Services is too old"/>
  </token>
</histogram>

<histogram name="PasswordManager.UserActionTriggerThatRetrievedPasskeySecret"
    enum="TrustedVaultUserActionTrigger" expires_after="2027-01-17">
  <owner>izuzic@google.com</owner>
  <owner>chrome-webauthn@google.com</owner>
  <summary>
    Tracks the trigger of the Magic Arch challenge initiated to obtain the
    passkey secret. Recorded when the challenge is completed.
  </summary>
</histogram>

<histogram name="PasswordManager.UsernameDetectionMethod"
    enum="UsernameDetectionMethod" expires_after="2026-12-27">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Measures what method was used for username field detection in the renderer
    code. The metric may be recorded several times for page visit because it is
    recorded at every PasswordForm creation. If a site changes HTML attributes
    of fields or server-side predictions is received, different values can be
    recorded for the same form. If an outcome of HTML classifier or a
    server-side prediction coincides with the outcome of base heuristic, the
    metric points to base heuristic method.
  </summary>
</histogram>

<histogram name="PasswordManager.WeakCheck.CheckedPasswords" units="passwords"
    expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The number of passwords analyzed during the passwords weak check.
  </summary>
</histogram>

<histogram name="PasswordManager.WeakCheck.PasswordScore"
    enum="PasswordWeaknessScore" expires_after="2027-10-04">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The score of the password that was checked by the passwords weak check. The
    score indicates how guessable the password is.
  </summary>
</histogram>

<histogram name="PasswordManager.WeakCheck.Time" units="ms"
    expires_after="2026-11-15">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>The time it took to complete the passwords weak check.</summary>
</histogram>

<histogram name="PasswordManager.WeakCheck.WeakPasswords" units="passwords"
    expires_after="2027-05-03">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The number of weak passwords found when the passwords weak check completed.
  </summary>
</histogram>

<histogram name="PasswordManager.WellKnownChangePasswordResult"
    enum="WellKnownChangePasswordResult" expires_after="2027-02-07">
  <owner>kazinova@google.com</owner>
  <owner>jkeitel@google.com</owner>
  <summary>
    The type of change password URL opened after requesting, for example,
    https://example.com/.well-known/change-password. The metric is emitted when
    the appropriate throttle handles such URLs.
  </summary>
</histogram>

<histogram name="PasswordManager.{Function}.TimeSinceInit" units="units"
    expires_after="2026-12-16">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Time passed since PasswordStore construction till PasswordStore::{Function}
    call. Recorded on PasswordStore::{Function} call. Max value is 30 seconds.
    This function helps to evaluate PasswordStore usage on start-up.
  </summary>
  <token key="Function">
    <variant name="GetAllLogins" summary="GetAllLogins()"/>
    <variant name="GetAllLoginsWithAffiliationAndBrandingInformation"
        summary="GetAllLoginsWithAffiliationAndBrandingInformation()"/>
    <variant name="GetAutofillableLogins" summary="GetAutofillableLogins()"/>
  </token>
</histogram>

<histogram name="PasswordManager.{Location}.AuthenticationResult"
    enum="BooleanSuccess" expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the result of the attempt to re-auth the user via biometrics when
    {Location}.
  </summary>
  <token key="Location">
    <variant name="BiometricAuthenticationPromo"
        summary="trying to enable the feature from the promo dialog"/>
    <variant name="PasswordFilling" summary="filling suggestion on webpage"/>
  </token>
</histogram>

<histogram name="PasswordManager.{Location}.AuthenticationTime2" units="ms"
    expires_after="2027-02-14">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Records the time it takes user to authenticate {Location}. Uses wider range
    of buckets
  </summary>
  <token key="Location">
    <variant name="ActorLogin"
        summary="when filling via the actor login component"/>
    <variant name="ManagementBubble"
        summary="in management bubble when navigating to details view"/>
    <variant name="PasswordFilling"
        summary="on webpage after selecting a suggestion to fill"/>
    <variant name="Settings"
        summary="in settings when trying to show/copy/edit/export passwords"/>
  </token>
</histogram>

<histogram
    name="PasswordManager.{Store}BlacklistedSitesHiRes3{CustomPassphraseStatus}"
    units="sites" expires_after="2027-01-31">
  <owner>kazinova@google.com</owner>
  <owner>mamir@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    The total number of sites that the user has blocklisted in the password
    manager's {Store}. Recorded by iterating over stored passwords at most once
    per day for regular profiles.
  </summary>
  <token key="Store" variants="Store"/>
  <token key="CustomPassphraseStatus" variants="CustomPassphraseStatus"/>
</histogram>

<histogram name="PasswordManager.{Store}InaccessiblePasswords3"
    units="saved passwords" expires_after="2027-02-07">
  <owner>derinel@google.com</owner>
  <owner>mamir@chromium.org</owner>
  <summary>
    The number of saved passwords that could not be decrypted in the password
    manager's LoginDatabase for {Store}. Recorded once for the regular profile
    when it's opened.
  </summary>
  <token key="Store">
    <variant name="AccountStore." summary="account-scoped store"/>
    <variant name="ProfileStore." summary="profile-scoped store"/>
  </token>
</histogram>

<histogram name="PasswordManager.{Store}LoginDatabaseEncryptionStatus"
    enum="LoginDatabaseEncryptionStatus" expires_after="2027-02-07">
  <owner>derinel@google.com</owner>
  <owner>mamir@chromium.org</owner>
  <summary>
    The encryption status of the login database in the password manager's
    {Store} after initialization. Recorded only once per profile when the
    database is initialized.
  </summary>
  <token key="Store">
    <variant name="AccountStore." summary="account-scoped store"/>
    <variant name="ProfileStore." summary="profile-scoped store"/>
  </token>
</histogram>

<histogram name="PasswordManager.{Store}PasswordLoss" units="count"
    expires_after="2027-02-07">
  <owner>izuzic@google.com</owner>
  <owner>battre@chromium.org</owner>
  <summary>
    The number of accounts that was stored in the password manager's {Store} and
    then was deleted by the time of next startup. Recorded during browser
    start-up, at most once per day for regular profiles.
  </summary>
  <token key="Store" variants="Store"/>
</histogram>

<histogram name="PasswordManager.{Store}PasswordLossPotentialReasonBitmask"
    units="bitmask" expires_after="2027-02-07">
  <owner>izuzic@google.com</owner>
  <owner>battre@chromium.org</owner>
  <summary>
    This histogram is recorded if the password manager observed a possible loss
    of passwords (change from &gt;1 stored password in previous profile startup
    to 0 passwords in this profile startup).

    Records the reasons for credentials to be removed from the {Store} during
    the last day or longer, if Chrome wasn't started up for longer than a day.
    See `enum class PasswordManagerCredentialRemovalReason`.

    If the value of the bitmask is 0, then there was no known reason for
    credential removal.

    This histogram is recorded on all platforms during browser start-up, at most
    once per day for regular profiles.
  </summary>
  <token key="Store" variants="Store"/>
</histogram>

<histogram
    name="PasswordManager.{Store}PasswordNotes.CountCredentialsWithNonEmptyNotes2"
    units="count" expires_after="2027-03-01">
  <owner>derinel@google.com</owner>
  <owner>mamir@chromium.org</owner>
  <summary>
    Total number of credentials with non-empty notes in the password manager's
    {Store}. Recorded at most once per day for regular profiles.
  </summary>
  <token key="Store" variants="Store"/>
</histogram>

<histogram name="PasswordManager.{Store}PasswordNotes.CountNotesPerCredential3"
    units="count" expires_after="2027-03-01">
  <owner>derinel@google.com</owner>
  <owner>mamir@chromium.org</owner>
  <summary>
    Total number of notes attached to a password in the password manager's
    {Store}. Recorded once for credentials with 1+ notes at most once per day
    for regular profiles.
  </summary>
  <token key="Store" variants="Store"/>
</histogram>

<histogram name="PasswordManager.{Store}ReencryptedWithAsyncOSCrypt"
    enum="BooleanOccurred" expires_after="2027-02-07">
  <owner>vsemeniuk@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Password store was fully reencrypted with the app-bound OSCrypt API.
    Recorded at most once per day for regular profiles.
  </summary>
  <token key="Store" variants="Store"/>
</histogram>

<histogram
    name="PasswordManager.{Store}TimesPasswordUsed3.{PasswordType}{CustomPassphraseStatus}"
    units="PasswordUses" expires_after="2026-11-29">
  <owner>kazinova@google.com</owner>
  <owner>battre@chromium.org</owner>
  <owner>mamir@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    The number of times each saved password from the {Store} has been used to
    log in. Split by whether created by the user or generated by Chrome, and
    further by whether the user used sync with custom passphrase or not.
    Recorded by iterating over stored passwords soon after startup, at most once
    per day for regular profiles.
  </summary>
  <token key="Store" variants="Store"/>
  <token key="PasswordType" variants="PasswordType"/>
  <token key="CustomPassphraseStatus" variants="CustomPassphraseStatus"/>
</histogram>

<histogram name="PasswordManager.{Store}TotalAccountsHiRes3.WithScheme{Scheme}"
    units="accounts" expires_after="2027-08-24">
  <owner>mamir@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    The number of accounts stored in the password manager's {Store} (across all
    sites) for origins with the scheme (e.g., HTTP, HTTPS, FTP) as given in the
    histogram suffix. For each scheme, the count is recorded at most once per
    day for regular profiles.
  </summary>
  <token key="Store" variants="Store"/>
  <token key="Scheme" variants="Scheme"/>
</histogram>

<histogram
    name="PasswordManager.{Store}{Metric3}.{PasswordType}{CustomPassphraseStatus}{StoreErrorStatus}"
    units="units" expires_after="2027-02-07">
  <owner>kazinova@google.com</owner>
  <owner>mamir@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <owner>battre@chromium.org</owner>
  <summary>
    The number of accounts stored {Metric3} in the password manager's {Store}. ,
    split by whether created by the user or generated by Chrome, and further by
    whether the user use sync with custom passphrase or not. Recorded during
    browser start-up, at most once per day for regular profiles.
  </summary>
  <token key="Store" variants="Store"/>
  <token key="Metric3">
    <variant name="AccountsPerSiteHiRes3" summary="per site"/>
    <variant name="TotalAccountsHiRes3.ByType" summary="across all sites"/>
  </token>
  <token key="PasswordType" variants="PasswordType"/>
  <token key="CustomPassphraseStatus" variants="CustomPassphraseStatus"/>
  <token key="StoreErrorStatus" variants="StoreErrorStatus"/>
</histogram>

<histogram
    name="PasswordProtection.AttemptsToSavePasswordHashFromProfilePicker"
    enum="BooleanSuccess" expires_after="2027-01-12">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Track attempts to save password hashes from the profile picker sign-in flow.
  </summary>
</histogram>

<histogram name="PasswordProtection.CSDCacheContainsDebuggingMetadata"
    enum="BooleanPresent" expires_after="2027-03-02">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records whether the CSD Features cache had debugging metadata present for a
    given URL when using the cache from PhishGuard side.
  </summary>
</histogram>

<histogram name="PasswordProtection.CSDCacheDebuggingMetadataSizeAtHit"
    units="bytes" expires_after="2027-03-02">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records the CSD Features debugging metadata cache size at the time when
    using the cache from PhishGuard side. This histogram is used to evaluate the
    memory usage of the cache.
  </summary>
</histogram>

<histogram name="PasswordProtection.GmailReportSent" enum="Boolean"
    expires_after="2026-08-24">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records whether an enterprise report is sent for a Gmail password. This
    should not happen due to a fix in M129 and this metric should provide
    assurance of that claim.
  </summary>
</histogram>

<histogram name="PasswordProtection.InterstitialAction"
    enum="PasswordProtectionWarningAction" expires_after="2027-01-03">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records how a user interacts with the password protection interstitial
    (a.k.a chrome://reset-password page). Logged when the interstitial is shown
    and when the user chooses to change their password. Warning: this histogram
    was expired from 2021-01-30 to 2021-10-25 and 2024-09-01 to 2025-01-16; data
    may be missing.
  </summary>
</histogram>

<histogram name="PasswordProtection.ModalWarningDialogAction"
    enum="PasswordProtectionWarningAction" expires_after="2027-04-12">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records how a user interacts with the password protection modal warning
    dialog. Logged when the dialog is shown and when the user chooses to change
    their password, ignore warning, or navigate away. Warning: this histogram
    was expired from 2024-12-08 to 2025-01-22; data may be missing.
  </summary>
</histogram>

<histogram name="PasswordProtection.ModalWarningDialogLifetime" units="ms"
    expires_after="2026-05-19">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records the interval between when the password protection modal warning
    dialog is constructed and when the dialog is destructed. The dialog can be
    destructed when the user takes action or the web content is destroyed.
    Warning: The histogram was expired from 2025-04-20 to 2025-05-22.
  </summary>
</histogram>

<histogram name="PasswordProtection.NoHostedDomainFoundMatched" enum="Boolean"
    expires_after="2026-05-19">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Tracks whether the kNoHostedDomainFound check is useful when the gmail and
    googlemail domains are being checked explicitly. Warning: The histogram was
    expired from 2025-04-20 to 2025-05-22.
  </summary>
</histogram>

<histogram name="PasswordProtection.PageInfoAction"
    enum="PasswordProtectionWarningAction" expires_after="2027-01-03">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records how a user interacts with page info bubble that displays the
    password protection warning. Logged when such page info bubble is shown and
    when the user chooses to change their password, ignore warning, or mark site
    as legitimate via buttons on the page info bubble. Warning: The histogram
    was expired from 2025-05-13 to 2025-05-22.
  </summary>
</histogram>

<histogram name="PasswordProtection.PasswordAlertModeOutcome"
    enum="PasswordProtectionRequestOutcome" expires_after="2026-12-08">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records the outcome of the password alert mode, indicating if password alert
    warning is shown successfully or if it is skipped for some reason. Warning:
    this histogram was expired from 2021-01-30 to 2021-10-25; data may be
    missing.
  </summary>
</histogram>

<histogram name="PasswordProtection.PasswordProtectionResponseOrErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-05-03">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Response or error codes for PasswordProtectionRequest. Logged after chrome
    receives response of PasswordProtectionRequest from Safe Browsing service.

    Note: In M98 the error code HTTP_RESPONSE_CODE_FAILURE was changed to log
    the actual HTTP response code. Warning: this histogram expired from
    2024-10-28 to 2025-01-21; data may be missing.
  </summary>
</histogram>

<histogram name="PasswordProtection.RequestNetworkDuration" units="ms"
    expires_after="2026-12-08">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The time it takes for PasswordProtectionService request. It is not recorded
    for requests that were canceled. Warning: this histogram expired from
    2024-12-08 to 2025-01-22; data may be missing.
  </summary>
</histogram>

<histogram name="PasswordProtection.RequestOutcome"
    enum="PasswordProtectionRequestOutcome" expires_after="2027-01-17">
<!-- Note to owner: This histogram can be renewed 1 full year if it is still
useful for Chirp alerts (go/crca-alerts). -->

  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records the outcome of the password protection request, indicating if
    request is sent out successfully or if it is skipped or canceled for some
    reason.
  </summary>
</histogram>

<histogram name="PasswordProtection.RequestReferringAppSource"
    enum="PasswordProtectionReferringAppSource" expires_after="2027-01-24">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records the referring app source of the password protection request,
    indicating the source of the referring app name in the request. This metric
    is only logged on Android.
  </summary>
</histogram>

<histogram name="PasswordProtection.RequestWithToken.{TriggerType}"
    enum="BooleanSent" expires_after="2027-02-14">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records if the password protection request, triggered by a(n) {TriggerType},
    was sent with a GAIA-tied OAuth2 token. This token is sent only for
    signed-in Enhanced Safe Browsing users.
  </summary>
  <token key="TriggerType" variants="PasswordProtectionTriggerType"/>
</histogram>

<histogram name="PasswordProtection.ReusedPasswordAccountType"
    enum="AccountTypeWithSyncState" expires_after="2027-03-29">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    In the event of a password reuse, and a password protection request is
    constructed, the reused password's account type and whether it is syncing is
    logged.
  </summary>
</histogram>

<histogram name="PasswordProtection.SampleReportSent" enum="Boolean"
    expires_after="2026-02-20">
  <owner>skrakowi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Logs when an event where users reuse their password or focus on a password
    field is sent as a sample ping when the URL in the allowlist to Safe
    Browsing. Events only happen 1% of the time when URLs match the allowlist.
  </summary>
</histogram>

<histogram name="PasswordProtection.SharedPrefCredentialsAccessOutcome"
    enum="SharedPrefCredentialsAccessOutcome" expires_after="2026-02-01">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Logs the outcome of attempts to access credentials from SharedPreferences.
  </summary>
</histogram>

<histogram name="PasswordProtection.SkipProfilePickerPasswordHashSaveAttempt"
    enum="BooleanProfilePicker" expires_after="2026-03-25">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The decision of whether to skip trying to save a password hash happens when
    the profile picker runs.
  </summary>
</histogram>

<histogram name="PasswordProtection.Verdict" enum="PasswordProtectionVerdict"
    expires_after="2027-01-17">
<!-- Note to owner: This histogram can be renewed 1 full year if it is still
useful for Chirp alerts (go/crca-alerts). -->

  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Verdict types returned by Safe Browsing server for a password protection
    request. Request can be triggered when user focuses on a password field or
    enters a protected password (syncing, signed-in, or saved).
  </summary>
</histogram>

<histogram
    name="PasswordProtection.Verdict.{TriggerType}.SiteEngagementScore.{VerdictType}"
    units="score" expires_after="2027-05-15">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The site engagement score of the site for which a password protection
    verdict of type {VerdictType} was received for trigger {TriggerType}. Logged
    whenever a verdict is received from the Safe Browsing server.
  </summary>
  <token key="TriggerType">
    <variant name="OtpFieldDetected" summary="OTP_FIELD_DETECTED"/>
    <variant name="PasswordReuseEvent" summary="PASSWORD_REUSE_EVENT"/>
    <variant name="UnfamiliarLoginPage" summary="UNFAMILIAR_LOGIN_PAGE"/>
    <variant name="Unspecified" summary="TRIGGER_TYPE_UNSPECIFIED"/>
  </token>
  <token key="VerdictType">
    <variant name="LowReputation" summary="LOW_REPUTATION"/>
    <variant name="Phishing" summary="PHISHING"/>
    <variant name="Safe" summary="SAFE"/>
    <variant name="Unspecified" summary="VERDICT_TYPE_UNSPECIFIED"/>
  </token>
</histogram>

<histogram name="PasswordProtection.VisualFeatureExtractionDuration" units="ms"
    expires_after="2027-02-10">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The time it takes to extract the visual features of a login page before
    sending a PasswordProtectionRequest. Logged every time visual features are
    extracted (when an SBER user sends an On Focus ping).
  </summary>
</histogram>

<histogram name="PasswordProtection.VisualFeaturesClearReason"
    enum="CanExtractVisualFeaturesResult" expires_after="2027-02-07">
  <owner>nwokedi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Log the reason why PhishGuard pings does not contain visual features images.
  </summary>
</histogram>

</histograms>

</histogram-configuration>
