chromium/tools/metrics/histograms/metadata/password/histograms.xml

<!--
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
[email protected].
-->

<histogram-configuration>

<histograms>

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

<variants name="MigrationOperation">
  <variant name="AddLogin"/>
  <variant name="GetAllLogins"/>
  <variant name="RemoveLogin"/>
  <variant name="UpdateLogin"/>
</variants>

<variants name="PasswordCheckupOperation">
  <variant name="GetBreachedCredentialsCount"
      summary="get breached credentials count"/>
  <variant name="GetIntent" summary="get password checkup UI intent"/>
  <variant name="RunPasswordCheckup" summary="run password checkup"/>
</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="RemoveLoginsByURLAndTimeAsync"
      summary="RemoveLoginsByURLAndTimeAsync()"/>
  <variant name="RemoveLoginsCreatedBetweenAsync"
      summary="RemoveLoginsCreatedBetweenAsync()"/>
  <variant name="UpdateLoginAsync" summary="UpdateLoginAsync()"/>
</variants>

<variants name="PasswordStoreBackendType">
  <variant name="AccountBackend" summary="account backend"/>
  <variant name="BuiltInBackend" summary="built in backend"/>
  <variant name="LocalBackend" summary="local backend"/>
</variants>

<variants name="PasswordType">
  <variant name="AutoGenerated" summary="automatically generated"/>
  <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="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=".SignedInAccountStoreUserSavingLocally"
      summary="signed-in user and opted in to the account storage, but has
               chosen to save passwords only on the device."/>
  <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=".SignedInUserSavingLocally"
      summary="signed-in user, not opted in to the account storage, and has
               explicitly chosen to save passwords only on the device."/>
  <variant name=".SignedOutAccountStoreUser"
      summary="signed-out user, but an account storage opt-in exists."/>
  <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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Android only. Records whenever users faces an action in the accessory bar or
    one of its sheets.
  </summary>
</histogram>

<histogram name="KeyboardAccessory.AccessoryActionSelected"
    enum="AccessoryAction" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Android only. Records whenever users select an action in the accessory bar
    or one of its sheets.
  </summary>
</histogram>

<histogram name="KeyboardAccessory.AccessorySheetSuggestionsSelected"
    enum="AccessorySuggestionType" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Android only. Records which type of suggestion was selected from an open
    sheet.
  </summary>
</histogram>

<histogram name="KeyboardAccessory.AccessorySheetTriggered"
    enum="AccessorySheetTrigger" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram name="KeyboardAccessory.AccessoryToggleClicked"
    enum="AccessoryToggleType" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Android only. Records the interactions with the password generation dialog
    for {GenerationType}. Recorded when the user taps a button in the dialog or
    dismsses it.
  </summary>
  <token key="GenerationType">
    <variant name="Automatic" summary="automatic generation"/>
    <variant name="Manual" summary="manual generation"/>
  </token>
</histogram>

<histogram name="KeyboardAccessory.TouchEventFiltered" enum="BooleanYesNo"
    expires_after="2025-04-22">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="PasswordBubble.AddUsernameBubble.UsernameAdded"
    enum="BooleanYesNo" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether the user added username and clicked confirmation button on the
    AddUsername bubble, after successful submission of the generated password.
  </summary>
</histogram>

<histogram name="PasswordBubble.BiometricAuthenticationPromo.AcceptClicked"
    enum="BooleanSuccess" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.CompromisedBubble.Type"
    enum="PasswordBubbleFollowupType" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The state of the bubble shown after users saves/updates a password. It
    notifies the user about leftover compromised passwords.
  </summary>
</histogram>

<histogram
    name="PasswordBubble.DefaultStoreChangedBubble.ContinueButtonInBubbleClicked"
    enum="BooleanYesNo" expires_after="M133">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether the user clicked &quot;Got it&quot; in the DefaultStoreChanged
    bubble
  </summary>
</histogram>

<histogram name="PasswordBubble.DisplayDisposition"
    enum="PasswordBubbleDisplayDisposition" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <summary>
    When the password management bubble opened, what state was it in?
  </summary>
</histogram>

<histogram
    name="PasswordBubble.RelaunchChromeBubble.RestartButtonInBubbleClicked"
    enum="BooleanYesNo" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.AcceptedGeneratedPasswordSource"
    enum="AcceptedGeneratedPasswordSourceType" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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.ProactiveBottomSheetStateTransition"
    enum="ProactivePasswordGenerationBottomSheetTransitionType"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Records an entry if (and only if) a popup was shown.</summary>
</histogram>

<histogram name="PasswordGeneration.SubmissionAvailableEvent"
    enum="PasswordSubmissionEvent" expires_after="M131">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the frequency of submission events for passwords that could have
    been generated, but the user didn't choose to use the feature. This is to
    compare with PasswordGeneration.SubmssionEvent.
  </summary>
</histogram>

<histogram name="PasswordGeneration.SubmissionEvent"
    enum="PasswordSubmissionEvent" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="PasswordHash.CreateTime" units="units" expires_after="M85">
  <owner>[email protected]</owner>
  <summary>
    Time required to create the local hash of the user's GAIA password.
  </summary>
</histogram>

<histogram name="PasswordManager.AbleToSavePasswordsOnSuccessfulLogin"
    enum="BooleanSuccess" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/components/password_manager/OWNERS</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="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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.AccountStorage.NumOptedInAccountsAfterOptIn"
    units="accounts" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded whenever a user opts in to the account-scoped password storage. The
    recorded value is the total number of opted-in accounts in this profile,
    including the new opt-in.
  </summary>
</histogram>

<histogram name="PasswordManager.AccountStorage.NumOptedInAccountsAfterOptOut"
    units="accounts" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded whenever a user opts out of the account-scoped password storage.
    The recorded value is the total number of opted-in accounts remaining in
    this profile after the current opt-out.
  </summary>
</histogram>

<histogram
    name="PasswordManager.AccountStorage.UnsyncedPasswordsFoundDuringSignOut"
    units="passwords" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how many passwords in the account store were unsynced when the user
    signed out of their Google Account. Recorded only in Win/Mac/Linux when a
    user of the account-scoped password storage signs out.
  </summary>
</histogram>

<histogram
    name="PasswordManager.AccountStorageUserStateDuration{UserSyncingType}"
    units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.AccountStoreBlocklistedEntriesAfterOptIn"
    units="credentials" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how many blocklisting entries are downloaded to the account store
    after unlocking account store.
  </summary>
</histogram>

<histogram name="PasswordManager.AccountStoreCredentialsAfterOptIn"
    units="credentials" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how many non-blacklisting credentials are downloaded to the account
    store after unlocking account store.
  </summary>
</histogram>

<histogram name="PasswordManager.AccountStoreVsProfileStore4.{DifferenceType}"
    units="accounts" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.AddCredentialFromSettings.AccountStoreUsed2"
    enum="Boolean" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <summary>
    Tracks which store is used when the user adds a new credential from
    Settings. True means account store, false means device store. Recorded only
    for users who opted in for account storage and thus are given a choice. Only
    applicable to Desktop platform.
  </summary>
</histogram>

<histogram name="PasswordManager.AddCredentialFromSettings.UserAction2"
    enum="AddCredentialFromSettingsUserInteractions" expires_after="2025-01-05">
  <owner>[email protected]</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="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.AffiliationBackend.FirstFetchDelay" units="ms"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time elapsed between creation of the AffiliationBackend and the first
    time it needed to issue a network fetch. Warning: this histogram was expired
    from M90 to M92; data may be missing.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationBackend.SubsequentFetchDelay"
    units="ms" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The elapsed time between subsequent network fetches. Recorded whenever the
    AffiliationBackend initiated a network fetch, regardless of success or
    failure. Warning: this histogram was expired from M90 to M92; data may be
    missing.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationDatabase.DatabaseSize" units="KB"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Errors reported by SQLite while using the affiliation database database.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationDatabase.StoreResult"
    enum="StoreAffiliationResult" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>The result of AffiliationDatabase::Store call.</summary>
</histogram>

<histogram name="PasswordManager.AffiliationFetcher.FailedToParseResponse"
    enum="Boolean" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Usage and timing of the Affiliation Service GetChangePasswordUrl call.
  </summary>
</histogram>

<histogram name="PasswordManager.AndroidAccountStorageNotice.CloseReason"
    enum="AndroidAccountStorageNoticeCloseReason" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/components/password_manager/OWNERS</owner>
  <summary>
    Android only. The &quot;account storage notice&quot; is a one-off UI shown
    to users who went from saving passwords locally to saving in their signed-in
    account (and thus need to be notified). This histogram is recorded when such
    notice is closed, and records the event which caused this.
  </summary>
</histogram>

<histogram name="PasswordManager.ApplySyncChanges.AddLoginSyncError"
    enum="PasswordAddLoginSyncError" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The state of the windows hello authentication. Recorded before prompting the
    OS dialog, and after result is recieved.
  </summary>
</histogram>

<histogram name="PasswordManager.AutomaticChange.AcceptanceWithoutAutoButton"
    enum="PasswordCheckResolutionAction" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The dismissal reason of the auto-signin first run experience.
  </summary>
</histogram>

<histogram name="PasswordManager.BiometricAuthBeforeFillingEnabled2"
    enum="BooleanEnabled" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-10-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram name="PasswordManager.BiometricAuthPwdFill.CanAuthenticate"
    enum="BiometricsAvailability" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded whenever a password filling surface or the account chooser dialog
    checks whether it can use biometrics to re-authenticate the user.
  </summary>
</histogram>

<histogram
    name="PasswordManager.BiometricAuthPwdFillAndroid.CanAuthenticateWithBiometricOrScreenLock"
    enum="Boolean" expires_after="2025-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.BiometricAvailabilityWin"
    enum="BiometricAuthenticationStatusWin" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.BubbleSuppression.AccountsInStatisticsTable2"
    units="accounts" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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.Error"
    enum="PasswordLeakDetectionError" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Error encountered during the password bulk check.</summary>
</histogram>

<histogram name="PasswordManager.BulkCheck.InsecureCredentials.Count"
    units="credentials" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.PasswordCheckReferrerAndroid2"
    enum="PasswordCheckReferrerAndroid" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Referrer of a navigation to the Password Check UI Settings view. Recorded
    when the user enters the view. Replaces
    PasswordManager.BulkCheck.PasswordCheckReferrerAndroid histogram. Fixing the
    bug that LEAK_DIALOG entry was reported as PHISHED_WARNING_DIALOG with UPM
    enabled.
  </summary>
</histogram>

<histogram name="PasswordManager.BulkCheck.Time" units="ms"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>User actions performed on the Password Check settings view.</summary>
</histogram>

<histogram name="PasswordManager.CanUseBiometricsMac" enum="BooleanSuccess"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    If user have enabled biometric authentication on their device. It is
    recorded whenever DeviceAuthenticatorMac::CanAuthenticate is called.
  </summary>
</histogram>

<histogram name="PasswordManager.CompromisedCredentials3.{Issue}"
    units="credentials" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.CredentialEntryActions.{CredentialEntryType}"
    enum="CredentialEntryAction" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records actions performed by the users in the {CredentialEntryType} view.
    Android-only for now.
  </summary>
  <token key="CredentialEntryType">
    <variant name="BlockedCredential"/>
    <variant name="FederatedCredential"/>
    <variant name="SavedPassword"/>
  </token>
</histogram>

<histogram
    name="PasswordManager.CredentialManager.{ProfileType}.GetIntent.APIError"
    enum="PasswordStoreAndroidBackendAPIError" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
  <token key="ProfileType" variants="ProfileType"/>
</histogram>

<histogram
    name="PasswordManager.CredentialManager.{ProfileType}.GetIntent.APIError.ConnectionResultCode"
    enum="PasswordStoreAndroidBackendConnectionResultCode"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.CredentialsCountFromAccountStoreAfterUnlock"
    units="credentials" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded after unlocking the account store from the password filling flow.
    Records how many credentials from the account store can be used to fill the
    current password form. If a credential is an exact duplicate with a local
    credential, it still counts into this metric.
  </summary>
</histogram>

<histogram name="PasswordManager.CredentialsWithDuplicates3" units="units"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.DefaultPasswordStoreSet"
    enum="PasswordManager.Store" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The default store for newly-saved passwords (profile-scoped store or
    account-scoped store), recorded whenever it is set explicitly.
  </summary>
</histogram>

<histogram name="PasswordManager.DeleteUndecryptableLoginsReturnValue"
    enum="DeleteCorruptedPasswordsResult" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram name="PasswordManager.EditsInSaveBubble"
    enum="PasswordManagerEditsInSaveBubbleEnum" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="GMSCoreOutdatedSavingDisabled"
        summary="error that nudges to update GMSCore because password saving
                 is disabled"/>
    <variant name="GMSCoreOutdatedSavingPossible"
        summary="error that nudges to update GMSCore because only account
                 passwords can be saved"/>
    <variant name="KeyRetrievalRequired"
        summary="error shown because key retrieval is required"/>
  </token>
</histogram>

<histogram name="PasswordManager.ErrorMessageDisplayReason"
    enum="PasswordStoreBackendErrorType" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.FieldNameCollisionInVotes" enum="Boolean"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures whether a password vote had a field name collision, i.e. multiple
    fields that should have an Autofill type uploaded have the same name.
  </summary>
</histogram>

<histogram name="PasswordManager.FilledCredentialWasFromAndroidApp2"
    enum="PasswordManagerFilledAndroidCredentials" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.FillingAssistance"
    enum="PasswordManagerFillingAssistance" expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram name="PasswordManager.FillingAssistanceForSingleUsername"
    enum="SingleUsernameFillingAssistance" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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.FillingAutomationRate" units="%"
    expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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.FillSuggestionsIncludeAndroidAppCredentials"
    enum="PasswordManagerOfferedAndroidCredentials" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.FirstRendererFillingResult"
    enum="PasswordManagerFirstRendererFillingResult" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.FormSubmissionsVsSavePrompts"
    enum="SaveFlowStep" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the steps in the save password flow that were reached. Each bucket
    represents one step. Used to determine at which step the flow ended.

    Only recorded for users who can save passwords: the setting has to be
    enabled and saving has to not be disabled by UPM.

    Android only.
  </summary>
</histogram>

<histogram name="PasswordManager.FormVisited.PerProfileType"
    enum="BrowserProfileType" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.HttpCredentials2"
    enum="PasswordManagerHttpCredentialType" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.DesktopInteractions"
    enum="PasswordsImportDesktopInteractions" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the user actions related to passwords import flow on desktop.
    Reported upon interactions with the password settings page.
  </summary>
</histogram>

<histogram name="PasswordManager.Import.FileDeletionSelected" enum="Boolean"
    expires_after="2025-02-25">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records if the user selected to delete a file after a succesful import with
    no errors. Reported before the import success dialog is closed.
  </summary>
</histogram>

<histogram name="PasswordManager.Import.PerFile.ConflictsResolved"
    units="saved credentials" expires_after="2025-02-25">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-25">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.ImportDuration" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the time it takes to import credentials in passwords import flow. The
    time that is tracked is the time needed to process the credentials, checking
    for conflicts, generating status, (user resolving conflicts if any) and
    storing them. This metric doesn't include the time needed to read the CSV
    file. Recorded when the import flow finished importing all credentials
    within password settings.
  </summary>
</histogram>

<histogram name="PasswordManager.ImportedPasswordsPerUserInCSV" units="units"
    expires_after="2025-02-10">
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.ImportFileSize" units="bytes"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.HandleFormSubmitEvent"
    enum="HandleSubmittedFormStatus" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-03-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Result of analyzing a single leak response.</summary>
</histogram>

<histogram name="PasswordManager.LeakDetection.DialogDismissalReason"
    enum="PasswordLeakDetectionDialogDismissalReason"
    expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reason of the dismissal of the leak detection dialog. Recorded when a leaked
    credential is detected and the dialog is shown.
  </summary>
</histogram>

<histogram name="PasswordManager.LeakDetection.Error"
    enum="PasswordLeakDetectionError" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.LookupSingleLeakResponseResult"
    enum="PasswordLeakLookupResponseResult" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-02">
  <owner>[email protected]</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.LocalUpmActivationError{UserType}"
    enum="LocalUpmActivationError" expires_after="2025-02-15">
  <owner>[email protected]</owner>
  <owner>src/components/password_manager/OWNERS</owner>
  <summary>
    Recorded for {UserType}. Records the reason why the local UPM activation
    algorithm failed, if any. For users that require a migration, the
    &quot;None&quot; bucket doesn't mean the migration actually succeeded, only
    that it was scheduled. Recorded on every startup, even for users who already
    got successfully activated. This histogram should be analyzed with
    &quot;count unique clients&quot;.

    TODO(crbug.com/307678344): Mention what other histogram should be used for
    migration failures.
  </summary>
  <token key="UserType">
    <variant name="" summary="all users"/>
    <variant name=".NonSyncingNoMigration"
        summary="users who are not syncing passwords and have no local
                 passwords nor custom password manager settings to be
                 migrated"/>
    <variant name=".NonSyncingWithMigration"
        summary="users who are not syncing passwords and need a migration for
                 local passwords or password manager settings"/>
    <variant name=".Syncing" summary="users who are syncing passwords"/>
  </token>
</histogram>

<histogram name="PasswordManager.LocalUpmActivationStatus"
    enum="UseUpmLocalAndSeparateStoresState" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records on startup the exact state stored in the UPM local state pref,
    immediately after the pref value is set. The main difference to
    PasswordManager.LocalUpmActivated is that this histogram records the
    &quot;migration pending&quot; state separately. This can be used to identify
    whether thre are any issue that could cause clients to be stuck in migration
    pending.
  </summary>
</histogram>

<histogram name="PasswordManager.LoginDatabase.DeleteFromKeychain"
    enum="ErrSecOSStatus" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records status of keychain item removal. Recorded after SecItemDelete is
    called.
  </summary>
</histogram>

<histogram
    name="PasswordManager.LoginDatabase.ShouldDeleteUndecryptablePasswords"
    enum="LoginDatabaseShouldDeleteUndecryptablePasswords"
    expires_after="2025-09-22">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records if undecryptable passwords should be deleted from the login database
    and the reason when they shouldn't be deleted. Recorded after every read
    from the login database after the decision to delete is made.
  </summary>
</histogram>

<histogram name="PasswordManager.LoginDatabaseInit2"
    enum="LoginDatabaseInitError" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    An error on LoginDatabase initialization. Recorded when error was
    encountered during login database initialization.
  </summary>
</histogram>

<histogram name="PasswordManager.ManagePasswordsReferrer"
    enum="ManagePasswordsReferrer" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.CrossDomainPasswordFilling.ConfirmationBubbleResult"
    enum="CrossDomainPasswordFillingConfirmation" expires_after="2025-08-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.ManualFallback.ShowSuggestions.Latency"
    units="ms" expires_after="2025-04-25">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Desktop only. Records the time(ms) elapsed between the user triggering the
    password manual fallback from the Chrome context menu and the suggestions
    being displayed. The delay between these two events is caused by the async
    credential data fetching. This is recorded once per navigation because the
    fetched data is reset on navigation.
  </summary>
</histogram>

<histogram name="PasswordManager.MatchedFormType"
    enum="PasswordManagerMatchedFormType" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.MediationOptional"
    enum="CredentialManagerGetResult" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.MoveUIDismissalReason{UserSyncingType}"
    enum="PasswordManagerUIDismissalReason" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Why was the &quot;move password to account?&quot; bubble closed? Recorded
    whenever the bubble is closed, either because the user clicked one of the
    buttons or it went away automatically (lost focus) for {UserSyncingType}
  </summary>
  <token key="UserSyncingType" variants="UserSyncingType"/>
</histogram>

<histogram
    name="PasswordManager.NewlySavedPasswordHasEmptyUsername.{PasswordType}"
    enum="Boolean" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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.NewlySavedPasswordIsGenerated"
    enum="BooleanNewlySavedPasswordIsGenerated" expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For a newly saved password, whether the password was generated by Chrome or
    typed manually by the user.
  </summary>
</histogram>

<histogram name="PasswordManager.NonSyncPasswordHashChange"
    enum="GaiaPasswordHashChange" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.OnEncryptorReceived.Success"
    enum="BooleanSuccess" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether os_crypt_async::Encryptor is returned by
    os_crypt_async::OSCryptAsync::GetInstance() call. Recorded after the
    callback is invoked.
  </summary>
</histogram>

<histogram name="PasswordManager.OpenedAsShortcut" enum="Boolean"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.OsCryptAsync.GetInstanceTime" units="ms"
    expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it takes to obtain os_crypt_async::Encryptor. Recorded when
    os_crypt_async::Encryptor is received.
  </summary>
</histogram>

<histogram name="PasswordManager.OutdatedGMSDialogDismissalReason"
    enum="OutdatedGMSDialogDismissalReason" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when the outdate GMS Core version dialog is dismissed. Records why
    the dialog is dismissed. This UI is shown when the user tries to access the
    Credential Manager in GMS Core from a Chrome entry point, but the GMS Core
    version available on the device is lower than the min version needed for
    UPM. Android only.
  </summary>
</histogram>

<histogram name="PasswordManager.ParserDetectedOtpFieldWithRegex"
    enum="Boolean" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.PasskeyRetrievalWaitDuration" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.PasswordCheckup.Launch.Success"
    enum="BooleanSuccess" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordCheckup.{Operation}.APIError"
    enum="PasswordStoreAndroidBackendAPIError" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
  <token key="Operation" variants="PasswordCheckupOperation"/>
</histogram>

<histogram name="PasswordManager.PasswordCheckup.{Operation}.Error"
    enum="CredentialManagerError" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logs the type of the suggestion in the password dropdown when selected.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordDropdownShown"
    enum="PasswordDropdownState" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Logs the state of the password dropdown when it's shown.</summary>
</histogram>

<histogram
    name="PasswordManager.PasswordGenerationBottomSheet.InteractionResult"
    enum="PasswordManager.PasswordGenerationBottomSheet.InteractionResult"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.PasswordMigrationWarning.EmptySheetTrigger2"
    enum="PasswordMigrationWarningTriggers" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This histogram logs the UI surface that led to showing an empty local
    passwords migration warning sheet. Recorded when the sheet is closing, but
    only if it was blank. Android only. This replaces
    PasswordManager.PasswordMigrationWarning.EmptySheetTrigger which had a bug
    causing it to also report triggers of non-empty sheets.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordMigrationWarning.Export.Event"
    enum="PasswordExportEvent" expires_after="2024-08-25">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the frequency of various password export events. Recorded when the
    user chooses the option to export passwords in the password migration
    warning. Logged only on Android.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordMigrationWarning.Export.Result2"
    enum="HistogramExportResult" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the export flow finished successfully or the type of error
    for passwords export started from local passwords migration warning.
    Recorded when the export flow finishes. Logged only on Android. This is an
    updated version of PasswordManager.PasswordMigrationWarning.Export.Result,
    which logs more possible export flow results in adition to the old values.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordMigrationWarning.SheetStateAtClosing"
    enum="PasswordMigrationWarningSheetStateAtClosing"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This histogram logs the state of the local passwords migration warning
    bottom sheet. Recorded when the sheet is closing. Android only.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordMigrationWarning.Trigger"
    enum="PasswordMigrationWarningTriggers" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This histogram logs the UI surface that led to showing the local passwords
    migration warning. Recorded when the warning sheet is shown. Android only.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordMigrationWarning.UserAction"
    enum="PasswordMigrationWarningUserActions" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This histograms logs the action that the user performed in the local
    password migration warning sheet. For the export and sync options, this is
    recorded when the user taps &quot;Next&quot; after selecting the
    corresponding radio button. All other actions are recorded when tapping on
    the corresponding buttons/dismissing the sheet. Multiple buckets can be
    recorded for the same sheet. Android only.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordNoteActionInSettings2"
    enum="PasswordNoteAction" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.{Function}.{Setting}{Type}.APIError1"
    enum="PasswordStoreAndroidBackendAPIError" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.PasswordSettingsMigrationFailed.{Setting}.APIError2"
    enum="PasswordStoreAndroidBackendAPIError" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The error codes returned by the GMS Core Password preferences 1P API while
    attempting to do migration for {Setting}. This is only recorded on Android.
    Replaces
    &quot;PasswordManager.PasswordSettingsMigrationFailed.{Setting}.APIError&quot;
    which was overly recorded in rare cases if fetching a password setting fails
    after the migration was just marked as done.
  </summary>
  <token key="Setting" variants="PasswordManagerSetting"/>
</histogram>

<histogram name="PasswordManager.PasswordSettingsMigrationSucceeded2"
    enum="BooleanYesNo" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of succesful password settings migration from Chrome to GMS.
    Recorded for the local users on Android when migration finished because of a
    success or failure along the way. Replaces
    &quot;PasswordManager.PasswordSettingsMigrationSucceeded&quot; which was
    overly recorded when the settings migration was being marked as done for
    clients with default settings which weren't eligible for settings migration.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordsGrouping.Time" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records user interactions with the elements of password sharing flow in the
    iOS settings.
  </summary>
</histogram>

<histogram
    name="PasswordManager.PasswordSharingRecipients.FetchAccessTokenResult"
    enum="GoogleServiceAuthError" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of access token fetch for the password sharing recipients
    request. Recorded when a token fetch completes (including retries).
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordSharingRecipients.ResponseOrErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it takes to initialize PasswordStore. Recorded inside
    PasswordStore::OnInitCompleted().
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordStore.OnLoginsRetained"
    enum="LoginsChangedTrigger" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.PasswordStore.WasEnrolledInUPMWhenBackendWasCreated"
    enum="Boolean" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded on Android when the password store backend is created. This happens
    on startup and once per profile. It logs whether the user is enrolled in
    UPM. In this context, all profiles are enrolled unless they have encountered
    an unrecoverable error upon querying GMS Core. Once that happens, a profile
    pref is flipped and the client is considered unenrolled from that point on.
  </summary>
</histogram>

<histogram
    name="PasswordManager.PasswordStore.{PasswordStoreBackendType}.AddLoginCalledOnStore"
    enum="BooleanCalled" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records calls to AddLoginAsync made from the PasswordStore. Recorded after
    the call to AddLoginAsync() on the backend.
  </summary>
  <token key="PasswordStoreBackendType" variants="PasswordStoreBackendType"/>
</histogram>

<histogram
    name="PasswordManager.PasswordStore.{PasswordStoreBackendType}.UpdateLoginCalledOnStore"
    enum="BooleanCalled" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records calls to UpdateLoginAsync made from the PasswordStore. Recorded
    after the call to UpdateLoginAsync() on the backend.
  </summary>
  <token key="PasswordStoreBackendType" variants="PasswordStoreBackendType"/>
</histogram>

<histogram
    name="PasswordManager.PasswordStoreAndroidBackend.Retry{Operation}.APIError"
    enum="PasswordStoreAndroidBackendAPIError" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="PasswordStoreAndroidBackendAPIError" expires_after="2025-01-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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}.{Function}"
    enum="PasswordStoreAndroidBackendRequestStatus" expires_after="2025-01-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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.PasswordStoreBuiltInBackend.RemoveLoginsCreatedBetween.KeychainLatency"
    units="ms" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Real-time duration of passwords bulk deletion from the Keychain inside
    RemoveLoginsCreatedBetween() method on iOS. Recorded as soon as it
    completes.
  </summary>
</histogram>

<histogram
    name="PasswordManager.PasswordStoreProxyBackend.PasswordRemovalStatus"
    enum="BooleanSuccess" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether a call to remove all passwords in BuiltInBackend succeeded.
    Recorded when the removal operation is finished.
  </summary>
</histogram>

<histogram
    name="PasswordManager.PasswordStoreProxyBackend.RemovedPasswordCount"
    units="passwords" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of credentials removed by
    PasswordStoreProxyBackend::MaybeClearBuiltInBackend() when the deletion
    actually took place. Recorded only when RemoveLoginsCreatedBetweenAsync()
    operation was successful.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordStore{Backend}.{Function}"
    enum="PasswordStoreAndroidBackendRequestStatus" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.PostPasswordsMigrationSheet.Outcome"
    enum="PostPasswordMigrationSheetOutcome" expires_after="2025-02-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This histogram logs how the post password migration sheet was closed.
    Android only.
  </summary>
</histogram>

<histogram name="PasswordManager.PotentialBestMatchFormType"
    enum="PasswordManagerMatchedFormType" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.PrefilledUsernameFillOutcome"
    enum="PrefilledUsernameFillOutcome" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records successful fills of prefilled username values known as placeholders
    and unsuccessful fills that were blocked because the prefilled value was not
    identified as a placeholder. Recorded once per PasswordAutofillAgent
    instance, when attempting to fill a password form that contains a username
    value which was prepopulated by the website.

    Warning: this histogram was expired from M86 to M115; data may be missing.
  </summary>
</histogram>

<histogram
    name="PasswordManager.ProcessIncomingPasswordSharingInvitationResult"
    enum="PasswordManager.ProcessIncomingPasswordSharingInvitationResult"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.ProfileStore.TotalAccountsBeforeInitialSync"
    units="accounts" expires_after="M134">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of locally saved passwords just before the password Sync
    was successfully turned on.
  </summary>
</histogram>

<histogram name="PasswordManager.PromoCard.ActionButtonClicked"
    enum="PasswordManagerPromoCard" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="M136">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.RequestVerificationAsyncResult"
    enum="AuthenticationResultStatusWin" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records an error immediately after RequestVerificationAsyncResult
    encountered one, or UserConsentVerificationResult if the authentication call
    was successful.
  </summary>
</histogram>

<histogram name="PasswordManager.RequirementsSpecFetcher.HttpResponseCode"
    enum="HttpResponseCode" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    HTTP response code of fetching a password requirements file.
  </summary>
</histogram>

<histogram name="PasswordManager.RequirementsSpecFetcher.NetErrorCode"
    enum="NetErrorCodes" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Network error code of fetching a password requirements file.
  </summary>
</histogram>

<histogram name="PasswordManager.RequirementsSpecFetcher.NetworkDuration"
    units="ms" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time until the lookup for a password requirements file completed (or was
    aborted).
  </summary>
</histogram>

<histogram name="PasswordManager.RequirementsSpecFetcher.Result"
    enum="PasswordRequirementsFetcherResult" expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Result of fetching requirements for password during password generation.
  </summary>
</histogram>

<histogram name="PasswordManager.ReuseCheck.CheckedPasswords" units="passwords"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.SaveUIDismissalReason.UsersWithNoCredentials"
    enum="PasswordManagerUIDismissalReason" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</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{UserSyncingType}"
    enum="PasswordManagerUIDismissalReason" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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.SavingOnUsernameFirstFlow"
    enum="SavingOnUsernameFirstFlow" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records user actions when Chrome offers to save a username on a page which
    is considered to be a username first flow. Recorded on a successful
    submission.
  </summary>
</histogram>

<histogram name="PasswordManager.ServerPredictionsWaitDuration" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.Settings.ToggleAutoSignIn"
    enum="BooleanEnabled" expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records user action to enable or disable automatic sign-in in password
    settings. Recorded when user interacts with the toggle. This metric is only
    logged on Android.
  </summary>
</histogram>

<histogram name="PasswordManager.Settings.ToggleOfferToSavePasswords"
    enum="BooleanEnabled" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records user action to enable or disable password saving in password
    settings. Recorded when user interacts with the toggle. This metric is only
    logged on Android.
  </summary>
</histogram>

<histogram name="PasswordManager.SharedPasswordsNotificationBubble.UserAction"
    enum="PasswordManager.SharedPasswordsNotificationInteractions"
    expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records different user interactions with the shared password notification
    bubble. The bubble is displayed upon visiting a sign-in form for which one
    or more saved passwords are shared by other users. The metric is recorded
    upon displaying the notification and upon user interaction with one of the
    buttons in the notification.
  </summary>
</histogram>

<histogram name="PasswordManager.ShortcutMetric"
    enum="PasswordManagerShortcutMetric" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.ForgotPasswordServerPredictionUsed"
    enum="Boolean" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when a single username form is detected using server predictions.
    Records whether the prediction is SINGLE_USERNAME_FORGOT_PASSWORD.
  </summary>
</histogram>

<histogram name="PasswordManager.SingleUsername.PasswordFormHadUsernameField"
    enum="PasswordFormHadUsernameField" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.SingleUsername.VoteDataAvailability"
    enum="SingleUsernameVoteDataAvailability" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This metric records whether username first and forgot password form voting
    data is available, and whether it contains information about the same form.
    Recorded during single username votes uploading.
  </summary>
</histogram>

<histogram name="PasswordManager.StoreDecryptionResult"
    enum="PasswordDecryptionResult" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Describes the result of decrypting a password value from the LoginDatabase.
  </summary>
</histogram>

<histogram name="PasswordManager.StoresUsedForFillingInLast28Days"
    enum="PasswordManagerFillingSource" expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.TimesReceivedFillDataForForm" units="count"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    How many times the browser sent fill data for the given form to the
    renderer. Recorded only for forms, for which the data was sent at least
    once. Recorded when the form dissapears (e.g. upon page navigation).
  </summary>
</histogram>

<histogram name="PasswordManager.TouchToFill.CredentialIndex" units="index"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.UI.OpenedPasswordDetailsWhileSearching"
    enum="BooleanSuccess" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.UnifiedPasswordManager.ActiveStatus2"
    enum="UnifiedPasswordManagerActiveStatus" expires_after="2024-12-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded on profile open after the sync service is initialized and once per
    regular profile. It is recorded for clients that have UPM enabled and logs
    whether UPM is actually active for them. Reasons why UPM might be inactive
    are: passwords sync off or client unenrolled due to unresolvable errors.
    Note a client can have both sync off and be unenrolled, in which case it
    will still only appear in the sync off bucket, since this is considered the
    main reason why the client is inactive for UPM.
  </summary>
</histogram>

<histogram
    name="PasswordManager.UnifiedPasswordManager.MigrationForLocalUsers.AddLoginCount"
    units="passwords" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of credentials successfully added to GMS Core during
    MigrationForLocalUsers. Recorded when the migration is finished,
    irrespective of the overall migration success.
  </summary>
</histogram>

<histogram
    name="PasswordManager.UnifiedPasswordManager.MigrationForLocalUsers.AndroidBackend.{MigrationOperation}.APIError"
    enum="PasswordStoreAndroidBackendAPIError" expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the API error received when performing {MigrationOperation} on the
    AndroidBacked as part of MigrationForLocalUsers. Reported immediately after
    the operation finishes, unless it's a Get operation. For GetAllLogins, the
    result is only reported after the replies come back fom both backends. Note
    that the BuiltInBackend doesn't return API Errors so no similar histogram is
    recorded for it.
  </summary>
  <token key="MigrationOperation" variants="MigrationOperation"/>
</histogram>

<histogram
    name="PasswordManager.UnifiedPasswordManager.MigrationForLocalUsers.Latency"
    units="ms" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Real-time duration of MigrationForLocalUsers. Recorded when all operations
    are completed and migration is finished.
  </summary>
</histogram>

<histogram
    name="PasswordManager.UnifiedPasswordManager.MigrationForLocalUsers.MergeWhereAndroidHasMostRecent"
    units="passwords" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of conflicts found while migrating local passwords where the
    credential already stored in GMS Core is kept instead of the one in Chrome.
    A conflict is defined as both Chrome and GMS Core having credentials with
    the same primary key, but different passwords. In that case the credential
    that was updated or used last is considered to be the correct one.

    Recorded when the entire migration finished successfully in order to avoid
    double-counting.

    The counterpart of this histogram, recording counts of conflicts where
    Chrome had the more recent credential. is
    &quot;PasswordManager.UnifiedPasswordManager.MigrationForLocalUsers.UpdateLoginCount&quot;
  </summary>
</histogram>

<histogram
    name="PasswordManager.UnifiedPasswordManager.MigrationForLocalUsers.MigratedLoginsTotalCount"
    units="passwords" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of credential successfully migrated to GMS Core during
    MigrationForLocalUsers. Recorded when the migration is finished. If the
    migration fails in the middle after writting only part of credentials to GMS
    core, the metric will report only those that were actually written before
    the failure.
  </summary>
</histogram>

<histogram
    name="PasswordManager.UnifiedPasswordManager.MigrationForLocalUsers.ProgressState"
    enum="LocalPwdMigrationProgressState" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when the local passwords migration is scheduled, when it's started
    and when it finishes, irrespective of success status.
  </summary>
</histogram>

<histogram
    name="PasswordManager.UnifiedPasswordManager.MigrationForLocalUsers.Success"
    enum="BooleanSuccess" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records success of MigrationForLocalUsers. Recorded when the migration is
    finished.
  </summary>
</histogram>

<histogram
    name="PasswordManager.UnifiedPasswordManager.MigrationForLocalUsers.UpdateLoginCount"
    units="passwords" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of credentials successfully updated in GMS Core during
    MigrationForLocalUsers. Recorded when the migration is finished,
    irrespective of the overall migration success.
  </summary>
</histogram>

<histogram
    name="PasswordManager.UnifiedPasswordManager.MigrationForLocalUsers.{BackendType}.{MigrationOperation}.Success"
    enum="BooleanSuccess" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether performing {MigrationOperation} on the {BackendType} as part
    of MigrationForLocalUsers succeeded or not. Reported immediately after the
    operation finishes, unless it's a Get operation. For GetAllLogins, the
    result is only reported after the replies come back fom both backends.
  </summary>
  <token key="BackendType">
    <variant name="AndroidBackend"/>
    <variant name="BuiltInBackend"/>
  </token>
  <token key="MigrationOperation" variants="MigrationOperation"/>
</histogram>

<histogram name="PasswordManager.UnifiedPasswordManager.WasMigrationDone"
    enum="BooleanSuccess" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether passwords were successfully migrated from built in backed to
    android backed and the current migration version stored in pref is
    greater/equal to the version from feature parameters. Recorded on start up.
  </summary>
</histogram>

<histogram name="PasswordManager.UpdateUIDismissalReason"
    enum="PasswordManagerUIDismissalReason" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <summary>Why was the update password UI (bubble or infobar) closed?</summary>
</histogram>

<histogram name="PasswordManager.UPMUpdateSignInCredentialsSucces"
    enum="Boolean" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the user was successfully signed in after using the sign in
    button on the Password Manager error message. The outcome can be either
    success or failure. It's recorded when the sign in flow that updates
    credentials finishes. Currently only used on Android.
  </summary>
</histogram>

<histogram name="PasswordManager.UsernameDetectionMethod"
    enum="UsernameDetectionMethod" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of passwords analyzed during the passwords weak check.
  </summary>
</histogram>

<histogram name="PasswordManager.WeakCheck.PasswordScore"
    enum="PasswordWeaknessScore" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.SingleCheckTime" units="ms"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time taken to perform a weakness check for a single password. Recorded
    whenever a password weakness score is computed.
  </summary>
</histogram>

<histogram name="PasswordManager.WeakCheck.Time" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>The time it took to complete the passwords weak check.</summary>
</histogram>

<histogram name="PasswordManager.WeakCheck.WeakPasswords" units="passwords"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of weak passwords found when the passwords weak check completed.
  </summary>
</histogram>

<histogram name="PasswordManager.WellKnownChangePasswordResult"
    enum="WellKnownChangePasswordResult" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time it takes user to authenticate {Location}. Uses wider range
    of buckets
  </summary>
  <token key="Location">
    <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.{Scope}LoginData.RemovalStatus"
    enum="BooleanSuccess" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether deleting the {Scope} login data file succeeded. Recorded
    when the removal operation is finished. Android only.
  </summary>
  <token key="Scope">
    <variant name="Account" summary="account-scoped"/>
    <variant name="Profile" summary="profile-scoped"/>
  </token>
</histogram>

<histogram name="PasswordManager.{Store}.RemoveLoginDBError"
    enum="SqliteLoggedResultCode" expires_after="2025-05-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Errors reported by SQLite when removing logins from the login database.
  </summary>
</histogram>

<histogram
    name="PasswordManager.{Store}BlacklistedSitesHiRes3{CustomPassphraseStatus}"
    units="sites" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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}PasswordLossPotentialReason.WIP"
    enum="PasswordManagerPasswordLossPotentialReason"
    expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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}TimesPasswordUsed3.{PasswordType}{CustomPassphraseStatus}"
    units="PasswordUses" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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}"
    units="units" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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"/>
</histogram>

<histogram
    name="PasswordProtection.AttemptsToSavePasswordHashFromProfilePicker"
    enum="BooleanSuccess" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.CSDCacheContainsImages"
    enum="BooleanPresent" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the CSD Features cache had images present for a given URL
    when using the cache from PhishGuard side. This histogram is used to
    evaluate the effectiveness of the cache.
  </summary>
</histogram>

<histogram name="PasswordProtection.CSDCacheDebuggingMetadataSizeAtHit"
    units="bytes" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.CSDCacheSizeAtHit" units="bytes"
    expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the CSD Features verdict 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="2024-12-24">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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; data may be missing.
  </summary>
</histogram>

<histogram name="PasswordProtection.ModalWarningDialogAction"
    enum="PasswordProtectionWarningAction" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram name="PasswordProtection.ModalWarningDialogLifetime" units="ms"
    expires_after="2025-04-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram name="PasswordProtection.PageInfoAction"
    enum="PasswordProtectionWarningAction" expires_after="2025-05-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram base="true" name="PasswordProtection.PasswordAlertModeOutcome"
    enum="PasswordProtectionRequestOutcome" expires_after="2025-01-22">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-10-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.
  </summary>
</histogram>

<histogram name="PasswordProtection.PasswordReuseSyncAccountType"
    enum="PasswordProtectionSyncAccountType" expires_after="2024-02-25">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When password protection service detects a reuse of Chrome sync password,
    record the type of Chrome sync account on which the reuse happens (e.g.
    @gmail.com, @googlemail.com, or other dasher account).
  </summary>
</histogram>

<histogram name="PasswordProtection.RequestNetworkDuration" units="ms"
    expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it takes for PasswordProtectionService request. It is not recorded
    for requests that were canceled.
  </summary>
</histogram>

<histogram base="true" name="PasswordProtection.RequestOutcome"
    enum="PasswordProtectionRequestOutcome" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.SampleReportSent" enum="Boolean"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.SuccessfulPhishingDetectionWithinTimeout"
    enum="BooleanSuccess" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logs when a renderer process' phishing detection finishes or not within a
    timeout when fetching client side detection images for password protection
    pings.
  </summary>
</histogram>

<histogram name="PasswordProtection.Verdict" enum="PasswordProtectionVerdict"
    expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.VisualFeatureExtractionDuration" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Log the reason why PhishGuard pings does not contain visual features images.
  </summary>
</histogram>

</histograms>

</histogram-configuration>