chromium/tools/metrics/histograms/metadata/storage/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 Storage 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="DatabaseTag">
  <variant name="Activity" summary="Activity"/>
  <variant name="Affiliation" summary="Affiliation"/>
  <variant name="AggregationService" summary="AggregationService"/>
  <variant name="BackgroundRequestQueue" summary="BackgroundRequestQueue"/>
  <variant name="BrowsingTopics" summary="BrowsingTopics"/>
  <variant name="Conversions" summary="Conversions"/>
  <variant name="Cookie" summary="Cookie"/>
  <variant name="DatabaseTracker" summary="DatabaseTracker"/>
  <variant name="DIPS" summary="DIPS"/>
  <variant name="FirstPartySets" summary="FirstPartySets"/>
  <variant name="History" summary="History"/>
  <variant name="InterestGroups" summary="InterestGroups"/>
  <variant name="LocalTraces" summary="LocalTraces"/>
  <variant name="MediaDeviceSalts" summary="MediaDeviceSalts"/>
  <variant name="OptOutBlacklist" summary="OptOutBlacklist"/>
  <variant name="Passwords" summary="Passwords"/>
  <variant name="PowerBookmarks" summary="PowerBookmarks"/>
  <variant name="Predictor" summary="Predictor"/>
  <variant name="PrivateAggregation" summary="PrivateAggregation"/>
  <variant name="Quota" summary="Quota"/>
  <variant name="ReportingAndNEL" summary="ReportingAndNEL"/>
  <variant name="SharedDictionary" summary="SharedDictionary"/>
  <variant name="SharedStorage" summary="SharedStorage"/>
  <variant name="Shortcuts" summary="Shortcuts"/>
  <variant name="Thumbnail" summary="Thumbnail"/>
  <variant name="TopSites" summary="TopSites"/>
  <variant name="TrustTokens" summary="TrustTokens"/>
  <variant name="UKMMetrics" summary="UKMMetrics"/>
  <variant name="UserAnnotations" summary="UserAnnotations"/>
  <variant name="UserNotes" summary="UserNotes"/>
  <variant name="Web" summary="Web"/>
</variants>

<variants name="InterestGroupStorageProtoType">
  <variant name="AdProtos" summary="AdProtos"/>
  <variant name="BiddingAndAuctionServerKeyProtos"
      summary="BiddingAndAuctionServerKeyProtos"/>
  <variant name="KAnonKeyProtos" summary="KAnonKeyProtos"/>
</variants>

<histogram name="API.StorageAccess.AllowedRequests3" enum="StorageAccessResult"
    expires_after="2024-07-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records if various requests to access storage are allowed or not and if the
    Storage Access API unblocked the request or not. Recorded whenever a
    decision to access storage like getting/setting cookies or opening an
    indexeddb connection is made in CookieSettings.

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

<histogram name="API.StorageAccess.AutograntViaFedCmOutcome"
    enum="AutograntViaFedCmOutcome" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the outcomes when deciding whether to allow a Storage Access API
    autogrant via FedCM permission.

    Recorded in the browser process exactly once for each storage-access
    permissions request that has autogrants via FedCM permission enabled.
  </summary>
</histogram>

<histogram name="API.StorageAccess.DocumentInheritedStorageAccess"
    enum="BooleanInherited" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether or not a document inherited the `has_storage_access` bit
    from the previous document.

    Recorded once at document commit, for every document.
  </summary>
</histogram>

<histogram name="API.StorageAccess.DocumentLoadedWithStorageAccess"
    enum="Boolean" expires_after="2025-09-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether or not a document was loaded with the `has_storage_access`
    bit set to true.

    Recorded once at document commit, for every document.
  </summary>
</histogram>

<histogram name="API.StorageAccess.GrantIsImplicit" enum="BooleanAvailable"
    expires_after="2023-03-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records if a generated grant was implicit or explicit at the time it was
    created.

    Warning: this histogram was expired from 2020-11-27 to 08-12-2022; data may
    be missing.
  </summary>
</histogram>

<histogram name="API.StorageAccess.PermissionRenewedDeltaToExpiration"
    units="hours" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the delta between the time at which a storage-access permission
    grant was renewed, and permission grant's old expiration time.

    Recorded once each time any storage-access permission grant is renewed.
  </summary>
</histogram>

<histogram name="API.StorageAccess.RequestOutcome"
    enum="StorageAccessAPIRequestOutcome" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the outcome of a particular Storage Access API permission request.

    Recorded at the time of the request, for every request.
  </summary>
</histogram>

<histogram name="API.StorageAccess.RequestStorageAccess2"
    enum="RequestStorageResult" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records requests to use document.requestStorageAccess and reasons the
    request may be approved or rejected.

    Recorded by the renderer exactly once for each invocation of
    document.requestStorageAccess.
  </summary>
</histogram>

<histogram name="API.TopLevelStorageAccess.RequestOutcome"
    enum="TopLevelStorageAccessRequestOutcome" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the outcome of a particular Top-Level Storage Access API permission
    request.

    Recorded at the time of the request, for every request.
  </summary>
</histogram>

<histogram name="API.TopLevelStorageAccess.RequestStorageAccessFor2"
    enum="RequestStorageResult" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records invocations of document.requestStorageAccessFor and reasons the
    request was approved or rejected. Recorded for every call to the function,
    regardless of outcome. Note that API.StorageAccess.RequestStorageAccess is
    similar, but for the other variant of this API.
  </summary>
</histogram>

<histogram name="Clipboard.Read" enum="ClipboardFormatRead"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/ui/base/clipboard/OWNERS</owner>
  <summary>
    Counts how often each Clipboard format is read by the platform clipboard.
    These reads generally imply that an application requested this format after
    checking that the format is available, but there are some cases where Chrome
    reads a format to check for existence (outside the
    ui::Clipboard::ReadAvailableTypes() function). Please prefer interpreting
    these numbers as relative use changes, as opposed to absolute user usage.
  </summary>
</histogram>

<histogram name="Clipboard.TimeIntervalBetweenCommitAndRead" units="ms"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>src/ui/base/clipboard/OWNERS</owner>
  <summary>
    Records the time interval between when clipboard data was committed to the
    clipboard and the same clipboard data was read from the clipboard. The same
    clipboard data may be read multiple times. Emitted at the moment the
    clipboard data was read. Currently only implemented for Chrome OS' in-memory
    clipboard (`ui::ClipboardNonBacked`).
  </summary>
</histogram>

<histogram name="Clipboard.Write" enum="ClipboardFormatWrite"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/ui/base/clipboard/OWNERS</owner>
  <summary>
    Counts how often each Clipboard format is written by the platform clipboard.
    These writes all imply that an application had this format available, and
    therefore wrote this format.
  </summary>
</histogram>

<histogram name="DOMStorage.CommitMeasuredDelay" units="ms"
    expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The amount of time that a single `Put()` was deferred. This is different
    from LevelDBWrapper.CommitDelay because that histogram only measures the
    delay for the first commit of a batch. Recorded when the batch is pushed to
    LevelDB.
  </summary>
</histogram>

<histogram name="DOMStorage.CommitSizeBytes" units="bytes"
    expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The total in-memory size of a single batched commit to a DOMStorage
    database. Recorded when the batch is pushed to LevelDB. In this case, a
    &quot;batched commit&quot; is all the recent writes to a single storage area
    (i.e. a single site's DOM storage).
  </summary>
</histogram>

<histogram name="DOMStorage.CommitSizeBytesAggregated" units="bytes"
    expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The total in-memory size of a LevelDB writebatch for the DOMStorage
    database. Recorded when the batch is pushed to LevelDB. Unlike
    CommitSizeBytes, this may contain data from multiple storage areas (sites)
    if commit coalescing is enabled.
  </summary>
</histogram>

<histogram name="IndexedDB.BackingStoreCloseDuration" units="ms"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logs the time it takes to close the IDB backing store. This is different
    WebCore.IndexedDB.LevelDB.CloseTime because it includes the time taken for
    in-flight tasks such as scope commit/rollback, and not just the time taken
    for the leveldb::DB destructor.
  </summary>
</histogram>

<histogram name="IndexedDB.ContextShutdownDuration" units="ms"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logs the time it takes to completely shut down `IndexedDBContextImpl`,
    starting from when it's requested on the UI thread to when destruction is
    completed on the IDB task runner.
  </summary>
</histogram>

<histogram name="IndexedDB.QuotaCheckTime2.{QuotaCheckResult}" units="ms"
    expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logs the result of quota checks made by the IndexedDB component on commit of
    readwrite txns.
  </summary>
  <token key="QuotaCheckResult">
    <variant name="DroppedRequest"/>
    <variant name="QuotaError"/>
    <variant name="Success"/>
  </token>
</histogram>

<histogram name="LevelDBEnv.DeleteTableBackupFile" enum="BooleanSuccess"
    expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the success rate of deleting an unused leveldb table backup file.
  </summary>
</histogram>

<histogram name="LevelDBEnv.IOError" enum="LevelDBIOErrorMethods"
    expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Methods where leveldb's Chromium environment has IO errors.</summary>
</histogram>

<histogram name="LevelDBEnv.LockFileInUseByThisProcess" enum="Boolean"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When there is a failure to acquire a lock on a LevelDB LOCK file due to
    FILE_IN_USE, this histogram logs true if the lock was already held by the
    same Chromium process, false otherwise. This is only logged for IndexedDB
    LevelDB instances.
  </summary>
</histogram>

<histogram name="LevelDBEnv.LockFileSuccessAttempts" units="count"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When a LevelDB LOCK file is successfully locked, this is the count of
    attempts that were required. This is intended to inform how long LevelDB
    should keep retrying. This is only logged for IndexedDB LevelDB instances.
  </summary>
</histogram>

<histogram name="LevelDBEnv.MissingFiles" units="files"
    expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of backup files found without corresponding ldb files. As measured by
    GetChildren when used in LevelDB clients other than IndexedDB.
  </summary>
</histogram>

<histogram name="LevelDBEnv.SyncResult" enum="PlatformFileError"
    expires_after="2024-08-06">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logs the success/failure of LevelDB's calls to Sync() (which translates to
    system calls of fsync(), FlushFileBuffers(), etc). Sync() is only called if
    the client requests it (e.g. for a strict durability IndexedDB transaction)
    and after an otherwise successful write.
  </summary>
</histogram>

<histogram name="LevelDBWrapper.CommitDelay" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Delay between the browser process receiving changes and those changes being
    written to the DB.
  </summary>
</histogram>

<histogram name="MojoLevelDBEnv.IOError" enum="LevelDBIOErrorMethods"
    expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Methods where leveldb's Mojo environment has IO errors. This histogram has
    expired between M87-106.
  </summary>
</histogram>

<histogram name="Sql.Recovery.Result" enum="SqlRecoveryResult"
    expires_after="2024-11-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Outcome of attempting to recover a database with sql::Recovery.
  </summary>
</histogram>

<histogram name="Sql.Recovery.Result.{DatabaseTag}" enum="SqlRecoveryResult"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Outcome of attempting to recover the {DatabaseTag} database with
    sql::Recovery.
  </summary>
  <token key="DatabaseTag" variants="DatabaseTag"/>
</histogram>

<histogram name="Sql.Recovery.ResultCode" enum="SqliteLoggedResultCode"
    expires_after="2024-11-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    SQLite result code from attempting to recover a database with sql::Recovery.
    Note that kNoError does not necessarily indicate that recovery succeeded
    (see Sql.Recovery.Result for that information), since not all recoveries
    fail due to SQLite errors (e.g. if a version number could not be read from
    the meta table).
  </summary>
</histogram>

<histogram name="Sql.Recovery.ResultCode.{DatabaseTag}"
    enum="SqliteLoggedResultCode" expires_after="2025-09-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    SQLite result code from attempting to recover the {DatabaseTag} database
    with sql::Recovery. Note that kNoError does not necessarily indicate that
    recovery succeeded (see Sql.Recovery.Result for that information), since not
    all recoveries fail due to SQLite errors (e.g. if a version number could not
    be read from the meta table).
  </summary>
  <token key="DatabaseTag" variants="DatabaseTag"/>
</histogram>

<histogram name="Sql.Statement.{DatabaseTag}.VMSteps" units="count"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of virtual machine operations executed for {DatabaseTag}
    database. It is reported once per statement. It can be used as a proxy of
    total work done by queries executed over the database.
  </summary>
  <token key="DatabaseTag" variants="DatabaseTag"/>
</histogram>

<histogram name="Sql.vfs.SyncTime" units="ms" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it takes to sync SQLite data to disk. The metric is recorded once
    per flush. A SQLite operation may require multiple sync operation to ensure
    database consistency.
  </summary>
</histogram>

<histogram name="Storage.Blob.FileReaderLoader.DataPipeNotReadableMojoError"
    enum="FileReaderLoaderMojoResult" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when FileReaderLoader.FailureType2 records a data pipe not readable
    error. This is the specific type of Mojo error.
  </summary>
</histogram>

<histogram name="Storage.Blob.FileReaderLoader.FailureType2"
    enum="FileReaderLoaderFailureType" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when an error occurs in the FileReaderLoader, which is used to load
    blobs in the Renderer. FileReaderUser is mostly used for Javascript's
    'FileReader', but can also be used to read blobs for the IndexedDB
    renderer-side implementation. For the read error category, see
    Storage.Blob.FileReaderLoader.ReadError for a breakdown of the specific read
    error reasons.
  </summary>
</histogram>

<histogram name="Storage.Blob.FileReaderLoader.ReadError2" enum="NetErrorCodes"
    expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The error code reported by the blob system while trying to read a blob in
    the FileReaderLoader.
  </summary>
</histogram>

<histogram name="Storage.Buckets.BucketCount" units="buckets"
    expires_after="2025-04-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of storage buckets in existence for a StorageKey when a
    new one is created (including the new one). This is intended to give an idea
    of the number of buckets individual apps use. Note: the count in histogram
    bucket 1 correlates to the total number of sites that use the buckets API
    (per Chrome client). The count in histogram bucket N, divided by the size of
    the bucket, correlates to the number of sites for that Chrome client which
    use at least that many buckets.
  </summary>
</histogram>

<histogram name="Storage.Buckets.Parameters.Durability"
    enum="StorageBucketDurabilityParameter" expires_after="2025-04-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>The requested durability for a bucket when it is open()ed.</summary>
</histogram>

<histogram name="Storage.Buckets.Parameters.Expiration" units="minutes"
    expires_after="2025-04-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The expiration time for a bucket, in minutes, if provided when it is
    open()ed. If not provided, the underflow bucket is used.
  </summary>
</histogram>

<histogram name="Storage.Buckets.Parameters.Persisted"
    enum="StorageBucketPersistedParameter" expires_after="2025-04-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>The requested persistence for a bucket when it is open()ed.</summary>
</histogram>

<histogram name="Storage.Buckets.Parameters.QuotaKb" units="KB"
    expires_after="2025-04-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The requested quota for a bucket, in kB, if provided. If not provided, the
    underflow bucket is used. Logged when the bucket is open()ed.
  </summary>
</histogram>

<histogram name="Storage.ClearSiteDataHeader.Parameters"
    enum="ClearSiteDataParameters" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    A Clear-Site-Data response header was seen with the given values.
  </summary>
</histogram>

<histogram name="Storage.FileSystemAccess.FilePathWatcherCallbackError"
    enum="FileSystemAccessWatchWithChangeInfoResult" expires_after="2025-06-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records if content::FilePathWatcher sends an error to its callback and how
    it failed. Recorded on every error sent to the callback.
  </summary>
</histogram>

<histogram name="Storage.FileSystemAccess.InotifyWatchCount" units="count"
    expires_after="2025-07-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the high water mark of inotify watches used in a FilePathWatcher on
    Linux. Recorded when the FilePathWatcher is destroyed.
  </summary>
</histogram>

<histogram name="Storage.FileSystemAccess.ObservationCallbackRate"
    units="count" expires_after="2025-07-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of times an observer's callback is triggered per
    observation in a one second window. Recorded one second after a callback has
    been triggered when there is no ongoing window.
  </summary>
</histogram>

<histogram name="Storage.FileSystemAccess.RestorePermissionPromptOutcome"
    enum="FileSystemAccessRestorePermissionPromptOutcome"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>src/content/browser/file_system_access/OWNERS</owner>
  <summary>
    The result of a user interaction with the File System Access Persistent
    Permissions restore prompt UI.
  </summary>
</histogram>

<histogram name="Storage.FileSystemAccess.ToggleExtendedPermissionOutcome"
    enum="Boolean" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>src/content/browser/file_system_access/OWNERS</owner>
  <summary>
    The result of a user interaction with the File System Access Persistent
    Permissions Page Info UI checkbox toggle option to enable or disable
    Extended Permissions for a given origin.
  </summary>
</histogram>

<histogram name="Storage.FileSystemAccess.WatchWithChangeInfoResult"
    enum="FileSystemAccessWatchWithChangeInfoResult" expires_after="2025-06-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records if content::FilePathWatcher::WatchWitchChangeInfo succeeds and if it
    doesn't, how it fails. Recorded for every call.
  </summary>
</histogram>

<histogram
    name="Storage.FileSystemAccess.{OpType}PermissionRequestOutcome.{EntryType}"
    enum="FileSystemAccessPermissionRequestOutcome" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>src/content/browser/file_system_access/OWNERS</owner>
  <summary>
    The result of an attempt to request permission to a file or directory via
    the File System Access API.
  </summary>
  <token key="OpType">
    <variant name="Read" summary="Read permission requested"/>
    <variant name="Write" summary="Write permission requested"/>
  </token>
  <token key="EntryType">
    <variant name="Directory" summary="Requested permission to a directory"/>
    <variant name="File" summary="Requested permission to a file"/>
  </token>
</histogram>

<histogram name="Storage.ImportantSites.CBDChosenReason"
    enum="ImportantSitesReason" expires_after="2024-10-06">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When a user chooses to blocklist one or more sites when they clear browsing
    data, this is recorded for every reason each chosen site was marked as
    important. It indicates which signals were used to show the given site to
    the user that the user then chose to exclude from clearing. This histogram
    has expired between M95-M106.
  </summary>
</histogram>

<histogram name="Storage.ImportantSites.CBDChosenReasonCount" units="count"
    expires_after="2024-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This records the number of reasons each important site had that the user
    chose to blocklist when clearing browsing data. This histogram has expired
    between M95-M106.
  </summary>
</histogram>

<histogram name="Storage.ImportantSites.CBDIgnoredReason"
    enum="ImportantSitesReason" expires_after="2024-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When a user chooses to blocklist one or more sites when they clear browsing
    data, this is recorded for every reason each unchosen site was marked as
    important. It indicates which signals were used to show the given site to
    the user, which the user then ignored and did not select to blocklist from
    clearing data. This histogram has expired between M95-M106.
  </summary>
</histogram>

<histogram name="Storage.ImportantSites.CBDIgnoredReasonCount" units="count"
    expires_after="2024-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This records the number of reasons each important site had that the user
    chose to NOT blocklist when clearing browsing data. This histogram has
    expired between M95-M106.
  </summary>
</histogram>

<histogram name="Storage.ImportantSites.GeneratedReason"
    enum="ImportantSitesReason" expires_after="2024-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when we generate a list of important sites. This can happen when
    the user opens the Clear Browsing Data dialog on Android, views the Storage
    tab in Site Settings on Android, or launches 'Manage Storage' from Android
    System Settings for Chrome. We record every reason each site was chosen in
    this metric. This means that we can report this metric multiple times for a
    single site. This histogram has expired between M95-M106.
  </summary>
</histogram>

<histogram name="Storage.ImportantSites.GeneratedReasonCount" units="count"
    expires_after="2024-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This records the number of reasons qualifying a site for being 'important'.
    We record this for every site when we generate a list of important sites,
    described in &quot;Storage.ImportantSites.GeneratedReason&quot;. This
    histogram has expired between M95-M106.
  </summary>
</histogram>

<histogram name="Storage.ImportantSites.GenerationTime" units="ms"
    expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it takes to generate the list of 'important' sites. This list is
    generated when the user enters the 'Clear Browsing Dialog' or the 'Manage
    Space' screens for Chrome, both of which are on Android. This histogram has
    expired between M95-M106.
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.AdComponentRenderURLSize" units="bytes"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the size of each ad component renderURL in bytes. Recorded for each
    ad component, each time an interest group is successfully joined.
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.AdProtoCompressionRatio" units="%"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the percentage ratio of compressed size divided by uncompressed size
    of the AdsProto, times 100. Recorded each time the AdProto is compressed,
    including both during interest group insertion, and database migration from
    older uncompressed versions, unless uncompressed size is 0. Includes both
    ads and ad components.
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.AdProtoCompressionTime" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time taken to compress the ad proto. Recorded each time the
    AdProto is compressed, including both during interest group insertion, and
    database migration from older uncompressed versions. Includes both ads and
    ad components.
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.AdProtoDecompressionOutcome"
    enum="AdProtoDecompressionOutcome" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the outcome of interest group AdProto decompression, recorded on
    each decompression attempt. Includes both ads and ad components.
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.AdProtoDecompressionTime" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the outcome of interest group AdProto decompression, recorded on
    each successful decompression attempt. Includes both ads and ad components.
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.AdProtoSizeCompressed" units="bytes"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the size of the compressed AdProto, recorded each time the AdProto
    is compressed, including both during interest group insertion, and database
    migration from older uncompressed versions, even if the uncompressed size is
    0. Includes both ads and ad components.
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.AdProtoSizeUncompressed" units="bytes"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the size of the uncompressed AdProto, recorded each time the AdProto
    is compressed, including both during interest group insertion, and database
    migration from older uncompressed versions, even if the uncompressed size is
    0. Includes both ads and ad components.
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.AdRenderURLSize" units="bytes"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the size of each ad renderURL in bytes. Recorded for each ad, each
    time an interest group is successfully joined.
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.DBErrors" units="count"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of database errors that occur when accessing interest
    group storage.
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.DBMaintenanceTime" units="microseconds"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time spent performing database maintenance on the interest group
    storage. Recorded when maintenance is run (approximately once an hour).

    Note that clients without high-resolution clocks will report 0 for very
    short times.
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.DBSize" units="KB"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the size of the InterestGroup database. Collected prior to database
    maintenance.
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.InitializationResult"
    enum="InterestGroupStorageInitializationResult" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of database initialization, every time initialization is
    attempted.
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.JSONDeserializationResult"
    enum="InterestGroupStorageJSONDeserializationResult"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of JSON deserialization, every time it is attempted.
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.JSONSerializationResult"
    enum="InterestGroupStorageJSONSerializationResult"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of JSON serialization, every time it is attempted.
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.PerInterestGroup.NumAdComponents"
    units="ad components" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of ads components per interest group. Recorded each time
    an interest group is successfully joined when a (potentially-empty) ad
    components array was passed to joinAdInterestGroup().
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.PerInterestGroup.NumAds" units="ads"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of ads per interest group. Recorded each time an interest
    group is successfully joined when a (potentially-empty) ads array was passed
    to joinAdInterestGroup().
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.PerSiteCount" units="groups"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of interest groups loaded for a single group owner when
    running an ad auction. Recorded for each owner involved in a running ad
    auction.
  </summary>
</histogram>

<histogram name="Storage.InterestGroup.ProtoDeserializationResult.{Type}"
    enum="InterestGroupStorageProtoDeserializationResult"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of {Type} Proto deserialization, every time it is
    attempted.
  </summary>
  <token key="Type" variants="InterestGroupStorageProtoType"/>
</histogram>

<histogram name="Storage.InterestGroup.ProtoSerializationResult.{Type}"
    enum="InterestGroupStorageProtoSerializationResult"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of {Type} Proto serialization, every time it is
    attempted.
  </summary>
  <token key="Type" variants="InterestGroupStorageProtoType"/>
</histogram>

<histogram name="Storage.InterestGroup.Upgrade{Outcome}{Version}Version"
    units="version" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the {Version} version number of database upgrades that {Outcome},
    recorded each time the database upgrade has a &quot;{Outcome}&quot; outcome.
  </summary>
  <token key="Outcome">
    <variant name="Failed" summary="fail"/>
    <variant name="Succeeded" summary="succeed"/>
  </token>
  <token key="Version">
    <variant name="End" summary="ending"/>
    <variant name="Start" summary="starting"/>
  </token>
</histogram>

<histogram name="Storage.InterestGroup.VacuumResult"
    enum="InterestGroupStorageVacuumResult" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of the vacuum operation, every time it is attempted.
  </summary>
</histogram>

<histogram name="Storage.SessionStorage.RendererAreaCacheHit"
    enum="LocalStorageRendererAreaCacheHitEnum" expires_after="2025-08-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The renderer side cache hit rate metrics for new HTML5 SessionStorage DB
    opened. This histogram has expired between M97-106.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.AsyncIterator.EntriesQueuedCount"
    units="Entries" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Count of database entries queued to be sent to the async iterator. Recorded
    in `SharedStorage::IterationSource::DidReadEntries()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.AsyncIterator.IteratedEntriesBenchmarks"
    units="BenchmarksMet" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For each of a set of benchmark percentages, we record that benchmark when
    the async iterator first iterates through at least that percentage of queued
    entries. Recorded in `SharedStorage::IterationSource::TryResolvePromise()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.AsyncIterator.ReceivedEntriesBenchmarks"
    units="BenchmarksMet" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For each of a set of benchmark percentages, we record that benchmark when
    the async iterator first receives from the database at least that percentage
    of queued entries. Recorded in
    `SharedStorage::IterationSource::DidReadEntries()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Database.Destruction"
    enum="BooleanDestroyed" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether destruction was successful after a catastrophic error that occurred
    in Shared Storage. Recorded by
    SharedStorageDatabase::DatabaseErrorCallback() just after the SQLite
    database called RazeAndClose() and then, if it was file-backed,
    SharedStorageDatabase attempted to delete the file.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Database.Error" enum="SqliteErrorCode"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Errors that occur in Shared Storage. Recorded by
    SharedStorageDatabase::DatabaseErrorCallback() just before the SQLite
    database determines whether the error is catastrophic and handles it
    accordingly.
  </summary>
</histogram>

<histogram
    name="Storage.SharedStorage.Database.FileBacked.BytesUsed.PerOrigin.Max"
    units="B" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Maximum number of bytes stored as key-value pairs in `values_mapping` for
    any single origin, according to the `per_origin_mapping` of
    `SharedStorageDatabase`. Measured only for file-backed databases whose
    `per_origin_mapping` table contains at least one origin row. Recorded in
    `SharedStorageDatabase::InitImpl()` via `LogInitHistograms()` when
    initialization is successful.
  </summary>
</histogram>

<histogram
    name="Storage.SharedStorage.Database.FileBacked.BytesUsed.PerOrigin.Median"
    units="B" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Median number of bytes stored as key-value pairs in `values_mapping` for any
    single origin, according to the `per_origin_mapping` of
    `SharedStorageDatabase`. Measured only for file-backed databases whose
    `per_origin_mapping` table contains at least one origin row. Recorded in
    `SharedStorageDatabase::InitImpl()` via `LogInitHistograms()` when
    initialization is successful.
  </summary>
</histogram>

<histogram
    name="Storage.SharedStorage.Database.FileBacked.BytesUsed.PerOrigin.Min"
    units="B" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Minimum number of bytes stored as key-value pairs in `values_mapping` for
    any single origin, according to the `per_origin_mapping` of
    `SharedStorageDatabase`. Measured only for file-backed databases whose
    `per_origin_mapping` table contains at least one origin row. Recorded in
    `SharedStorageDatabase::InitImpl()` via `LogInitHistograms()` when
    initialization is successful.
  </summary>
</histogram>

<histogram
    name="Storage.SharedStorage.Database.FileBacked.BytesUsed.PerOrigin.Q1"
    units="B" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Lower quartile of the per-origin bytes used values, as listed in the
    `per_origin_mapping` of `SharedStorageDatabase` (calculated through Method 1
    from https://en.wikipedia.org/wiki/Quartile). Measured only for file-backed
    databases whose `per_origin_mapping` table contains at least one origin row.
    Recorded in `SharedStorageDatabase::InitImpl()` via `LogInitHistograms()`
    when initialization is successful.
  </summary>
</histogram>

<histogram
    name="Storage.SharedStorage.Database.FileBacked.BytesUsed.PerOrigin.Q3"
    units="B" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Upper quartile of the per-origin bytes used values, as listed in the
    `per_origin_mapping` of `SharedStorageDatabase` (calculated through Method 1
    from https://en.wikipedia.org/wiki/Quartile). Measured only for file-backed
    databases whose `per_origin_mapping` table contains at least one origin row.
    Recorded in `SharedStorageDatabase::InitImpl()` via `LogInitHistograms()`
    when initialization is successful.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Database.FileBacked.BytesUsed.Total.KB"
    units="KB" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Sum across all origins of the per-origin bytes used values, as listed in the
    `per_origin_mapping` of `SharedStorageDatabase`. Measured only for
    file-backed databases whose `per_origin_mapping` table contains at least one
    origin row. Recorded in `SharedStorageDatabase::InitImpl()` via
    `LogInitHistograms()` when initialization is successful. Contrast with
    &quot;Storage.SharedStorage.Database.FileBacked.FileSize.*&quot;;
    &quot;Storage.SharedStorage.Database.FileBacked.FileSize.*&quot; records the
    total storage space used for the entire file, as formatted correctly for
    Chrome's embedding of SQLite, whereas
    &quot;Storage.SharedStorage.Database.FileBacked.BytesUsed.Total&quot; only
    records the total bytes in the raw `key` and `value` columns of
    `values_mapping` (under the assumption that `per_origin_mapping` has
    remained in sync).
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Database.FileBacked.FileSize.GB"
    units="GB" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The size in gigabytes of the SQL database file backing
    `SharedStorageDatabase`. Measured only for file-backed databases of size at
    least one gigabyte. Recorded in `SharedStorageDatabase::InitImpl()` via
    `LogInitHistograms()` when initialization is successful.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Database.FileBacked.FileSize.KB"
    units="KB" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The size in kilobytes of the SQL database file backing
    `SharedStorageDatabase`. Measured for file-backed databases only. Recorded
    in `SharedStorageDatabase::InitImpl()` via `LogInitHistograms()` when
    initialization is successful.
  </summary>
</histogram>

<histogram
    name="Storage.SharedStorage.Database.FileBacked.NumEntries.PerOrigin.Max"
    units="Entries" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Maximum origin length, according to the `per_origin_mapping` of
    `SharedStorageDatabase`. Measured only for file-backed databases whose
    `per_origin_mapping` table contains at least one origin row. Recorded in
    `SharedStorageDatabase::InitImpl()` via `LogInitHistograms()` when
    initialization is successful.
  </summary>
</histogram>

<histogram
    name="Storage.SharedStorage.Database.FileBacked.NumEntries.PerOrigin.Median"
    units="Entries" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Median origin length, according to the `per_origin_mapping` of
    `SharedStorageDatabase`. Measured only for file-backed databases whose
    `per_origin_mapping` table contains at least one origin row. Recorded in
    `SharedStorageDatabase::InitImpl()` via `LogInitHistograms()` when
    initialization is successful.
  </summary>
</histogram>

<histogram
    name="Storage.SharedStorage.Database.FileBacked.NumEntries.PerOrigin.Min"
    units="Entries" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Minimum origin length, according to the `per_origin_mapping` of
    `SharedStorageDatabase`. Measured only for file-backed databases whose
    `per_origin_mapping` table contains at least one origin row. Recorded in
    `SharedStorageDatabase::InitImpl()` via `LogInitHistograms()` when
    initialization is successful.
  </summary>
</histogram>

<histogram
    name="Storage.SharedStorage.Database.FileBacked.NumEntries.PerOrigin.Q1"
    units="Entries" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Lower quartile of the origin lengths, as listed in the `per_origin_mapping`
    of `SharedStorageDatabase` (calculated through Method 1 from
    https://en.wikipedia.org/wiki/Quartile). Measured only for file-backed
    databases whose `per_origin_mapping` table contains at least one origin row.
    Recorded in `SharedStorageDatabase::InitImpl()` via `LogInitHistograms()`
    when initialization is successful.
  </summary>
</histogram>

<histogram
    name="Storage.SharedStorage.Database.FileBacked.NumEntries.PerOrigin.Q3"
    units="Entries" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Upper quartile of the origin lengths, as listed in the `per_origin_mapping`
    of `SharedStorageDatabase` (calculated through Method 1 from
    https://en.wikipedia.org/wiki/Quartile). Measured only for file-backed
    databases whose `per_origin_mapping` table contains at least one origin row.
    Recorded in `SharedStorageDatabase::InitImpl()` via `LogInitHistograms()`
    when initialization is successful.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Database.FileBacked.NumEntries.Total"
    units="Entries" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The total count of entries in the `values_mapping` of
    `SharedStorageDatabase`. Measured for file-backed databases only. Recorded
    in `SharedStorageDatabase::InitImpl()` via `LogInitHistograms()` when
    initialization is successful.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Database.FileBacked.NumOrigins"
    units="Origins" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of origins in the `per_origin_mapping` of `SharedStorageDatabase`.
    Measured only for file-backed databases whose `per_origin_mapping` table
    contains at least one origin row. Recorded in
    `SharedStorageDatabase::InitImpl()` via `LogInitHistograms()` when
    initialization is successful.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Database.IsFileBacked"
    enum="BooleanIsFileBacked" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether or not the database is file-backed. Recorded in
    `SharedStorageDatabase::InitImpl()` via `LogInitHistograms()` when
    initialization is successful.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Database.Timing.OpenImpl" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from start to end of the call to
    `components::SharedStorageDatabase::OpenImpl()`. Recorded in
    `components::SharedStorageDatabase::OpenImpl()``.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Document.Timing.AddModule" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from start of the call to
    `blink::SharedStorageWorklet::AddModule()` to when the callback has
    successfully completed. Does not measure the timing of calls that end in an
    error. Recorded in the lambda function callback for
    `blink::SharedStorageWorklet::AddModule()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Document.Timing.Append" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from start of the call to `blink::SharedStorage::Append()`
    to when the callback has successfully completed. Does not measure the timing
    of calls that end in an error. Recorded in
    `blink::SharedStorage::OnVoidOperationFinished()` via
    `LogTimingHistogramForVoidOperation()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Document.Timing.Clear" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from start of the call to `blink::SharedStorage::Clear()`
    to when the callback has successfully completed. Does not measure the timing
    of calls that end in an error. Recorded in
    `blink::SharedStorage::OnVoidOperationFinished()` via
    `LogTimingHistogramForVoidOperation()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Document.Timing.Delete" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from start of the call to `blink::SharedStorage::Delete()`
    to when the callback has successfully completed. Does not measure the timing
    of calls that end in an error. Recorded in
    `blink::SharedStorage::OnVoidOperationFinished()` via
    `LogTimingHistogramForVoidOperation()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Document.Timing.Get" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from start of the call to `blink::SharedStorage::get()` to
    when the callback has successfully completed. Does not measure the timing of
    calls that end in an error. Recorded in the OnceCallback executed after the
    get operation completes.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Document.Timing.Run" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from start of the call to `blink::SharedStorage::Run()` to
    when the callback has successfully completed. Does not measure the timing of
    calls that end in an error. Recorded in
    `blink::SharedStorage::OnVoidOperationFinished()` via
    `LogTimingHistogramForVoidOperation()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Document.Timing.Run.ExecutedInWorklet"
    units="ms" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from when the end of the call to
    `SharedStorageWorkletHost::RunOperationOnWorklet()` to the end of
    `SharedStorageWorkletHost::OnRunOperationOnWorkletFinished()`. Recorded in
    `SharedStorageWorkletHost::OnRunOperationOnWorkletFinished()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Document.Timing.SelectURL" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from start of the call to
    `blink::SharedStorage::SelectURL()` to when the callback has successfully
    completed. Does not measure the timing of calls that end in an error.
    Recorded in the lambda function callback for
    `blink::SharedStorage::SelectURL()`.
  </summary>
</histogram>

<histogram
    name="Storage.SharedStorage.Document.Timing.SelectURL.ExecutedInWorklet"
    units="ms" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from when the mojo callback runs in
    `SharedStorageWorkletHost::RunURLSelectionOperationOnWorklet()` to the end
    of
    `SharedStorageWorkletHost::OnRunURLSelectionOperationOnWorkletFinished()`.
    Only measured for calls where the mojo callback has run with a parameter
    `success` equal to true. Recorded in
    `SharedStorageWorkletHost::OnRunURLSelectionOperationOnWorkletFinished()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Document.Timing.Set" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from start of the call to `blink::SharedStorage::Set()` to
    when the callback has successfully completed. Does not measure the timing of
    calls that end in an error. Recorded in
    `blink::SharedStorage::OnVoidOperationFinished()` via
    `LogTimingHistogramForVoidOperation()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.DocumentServiceBind.IsSecureFrame"
    enum="BooleanSecure" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the frame is secure when the shared storage document mojom
    service is initialized.
  </summary>
</histogram>

<histogram
    name="Storage.SharedStorage.HeaderObserver.CreatedOpaqueOriginForPrefsCheck"
    enum="Boolean" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks whether or not it was necessary to create a new opaque origin to use
    as the top-frame origin for the call to
    `ContentBrowserClient::IsSharedStorageAllowed()` from
    `SharedStorageHeaderObserver::IsSharedStorageAllowedBySiteSettings()`.
    Recorded in
    `SharedStorageHeaderObserver::IsSharedStorageAllowedBySiteSettings()`.
  </summary>
</histogram>

<histogram
    name="Storage.SharedStorage.HeaderObserver.PermissionsPolicyDoubleCheckStatus"
    enum="SharedStorageHeaderObserverPermissionsPolicyDoubleCheckStatus"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether or not a double-check of `PermissionsPolicy` was able to run in the
    `SharedStorageHeaderObserver`, and if so, what the result was (enabled or
    disabled), as well as if not, why not. (Note that the initial
    `PermissionsPolicy` check occurs before the request is sent to the network
    service, whereas this double-check occurs after the response is received.)
    Recorded in `SharedStorageHeaderObserver::HeaderReceived()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.OnShutdown.NumSqlErrors" units="Errors"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Count of SQL errors that have occurred in Shared Storage. Recorded by
    SharedStorageManager::RecordShutdownMetrics() when the StoragePartitionImpl
    is destroyed.
  </summary>
</histogram>

<histogram
    name="Storage.SharedStorage.OnShutdown.RecoveryFromInitFailureAttempted"
    enum="BooleanAttempted" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether or not the SharedStorageManager tried to recover from
    SharedStorageDatabase::InitStatus::kInitFailure. Recorded by
    SharedStorageManager::RecordShutdownMetrics() when the StoragePartitionImpl
    is destroyed.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.OnShutdown.RecoveryOnDiskAttempted"
    enum="BooleanAttempted" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether or not the SharedStorageManager tried to recover from
    SharedStorageDatabase::InitStatus::kInitFailure on disk. Recorded by
    SharedStorageManager::RecordShutdownMetrics() when the StoragePartitionImpl
    is destroyed.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Timing.UrlMappingDuringNavigation"
    units="ms" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time for a URN to resolve during a navigation. Recorded for
    every navigation to a URN that originates from sharedStorage.selectURL().
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Worklet.Context.IsDefined"
    enum="Boolean" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records true if a given call to `sharedStorage.context()` returns a defined
    string, false if the call to `sharedStorage.context()` returns undefined.
    Recorded in the worklet service in the call to `SharedStorage::Context()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Worklet.DestroyedStatus"
    enum="SharedStorageWorkletDestroyedStatus" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether or not the worklet entered keep-alive phase before destruction, and
    if it did enter keep-alive, whether the keep-alive was terminated by
    operations finishing or due to timeout. Recorded in the destructor of
    `SharedStorageWokletHost`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Worklet.Error.Type"
    enum="SharedStorageWorkletErrorType" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Type of error encountered by the SharedStorageWorklet in either
    `addModule()`, `run()`, or `selectURL()`. Recorded after an exception is
    thrown, after a callback is run with `/*success=*/false`, after a call to
    `ReportBadMessage()`, and/or just before the rejected promise is returned,
    via the utility method `LogWorkletError()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Worklet.NumPerPage"
    units="WorkletsCreated" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the number of `SharedStorageWorkletHost`'s created by a given page.
    Recorded in
    `SharedStoragePageLoadMetricsObserver::RecordSessionEndHistogram()` when
    metrics are flushed due to the pageload completing or the app entering the
    background.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Worklet.SelectURL.BudgetStatus"
    enum="SharedStorageSelectUrlBudgetStatus" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether or not the `selectURL()` call had sufficient budget, and if it had
    insufficient budget, which budget check failed. Recorded in
    `SharedStorageWorkletHost::OnRunURLSelectionOperationOnWorkletFinished()`
    via `LogSharedStorageSelectURLBudgetStatus()`. Recorded for `selectURL()`
    calls that succeed and for calls that fail due to insufficient budget.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Worklet.SelectURL.CallsPerPage"
    units="SelectURLCallsPerPage" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of calls made to `selectURL()` by frames on a given page. Recorded in
    `SharedStoragePageLoadMetricsObserver::RecordSessionEndHistograms()`. When
    `SharedStoragePageLoadMetricsObserver` exists, this histogram is recorded
    for all `selectURL()` calls that are forwarded to the browser process from
    the renderer, i.e. those that invoke
    `SharedStorageWorkletHost::SelectURL()`, except for those where
    `SharedStorageWorkletHost`'s pointer to its associated `PageImpl` is
    nullptr.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Worklet.Timing.Append" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from start of the call to
    `shared_storage_worklet::SharedStorage::Append()` to when the callback has
    successfully completed. Does not measure the timing of calls that end in an
    error. Recorded in
    `shared_storage_worklet::SharedStorage::OnVoidOperationFinished()` via
    `LogTimingHistogramForVoidOperation()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Worklet.Timing.Clear" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from start of the call to
    `shared_storage_worklet::SharedStorage::Clear()` to when the callback has
    successfully completed. Does not measure the timing of calls that end in an
    error. Recorded in
    `shared_storage_worklet::SharedStorage::OnVoidOperationFinished()` via
    `LogTimingHistogramForVoidOperation()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Worklet.Timing.Delete" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from start of the call to
    `shared_storage_worklet::SharedStorage::Delete()` to when the callback has
    successfully completed. Does not measure the timing of calls that end in an
    error. Recorded in
    `shared_storage_worklet::SharedStorage::OnVoidOperationFinished()` via
    `LogTimingHistogramForVoidOperation()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Worklet.Timing.Entries.Next" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from the start of the call to
    `SharedStorage::IterationSource::GetNextIterationResult()` to just before
    the promise is returned, for a key-value pair iterator. Includes only calls
    where promises are successfully resolved. Recorded in
    `SharedStorage::IterationSource::TryResolvePromise()` via
    `LogElapsedTime()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Worklet.Timing.Get" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from start of the call to
    `shared_storage_worklet::SharedStorage::Get()` to when the callback has
    successfully completed. Does not measure the timing of calls that end in an
    error. Recorded in
    `shared_storage_worklet::SharedStorage::OnStringRetrievalOperationFinished()`.
  </summary>
</histogram>

<histogram
    name="Storage.SharedStorage.Worklet.Timing.KeepAliveEndedDueToOperationsFinished.KeepAliveDuration"
    units="ms" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from entering keep alive until the start of the call to
    `FinishKeepAlive()` for keep-alives that are terminated when operations end
    (i.e. excludes worklets whose keep-alives are terminated via timeout).
    Recorded in `SharedStorageWokletHost::FinishKeepAlive()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Worklet.Timing.Keys.Next" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from the start of the call to
    `SharedStorage::IterationSource::GetNextIterationResult()` to just before
    the promise is returned, for a key iterator. Includes only calls where
    promises are successfully resolved. Recorded in
    `SharedStorage::IterationSource::TryResolvePromise()` via
    `LogElapsedTime()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Worklet.Timing.Length" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from start of the call to
    `shared_storage_worklet::SharedStorage::Length()` to when the callback has
    successfully completed. Does not measure the timing of calls that end in an
    error. Recorded in
    `shared_storage_worklet::SharedStorage::OnLengthOperationFinished()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Worklet.Timing.RemainingBudget"
    units="ms" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from start of the call to
    `shared_storage_worklet::SharedStorage::RemainingBudget()` to when the
    callback has successfully completed. Does not measure the timing of calls
    that end in an error. Recorded in
    `shared_storage_worklet::SharedStorage::OnVoidOperationFinished()` via
    `LogTimingHistogramForVoidOperation()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Worklet.Timing.Set" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from start of the call to
    `shared_storage_worklet::SharedStorage::Set()` to when the callback has
    successfully completed. Does not measure the timing of calls that end in an
    error. Recorded in
    `shared_storage_worklet::SharedStorage::OnVoidOperationFinished()` via
    `LogTimingHistogramForVoidOperation()`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Worklet.Timing.UsefulResourceDuration"
    units="%" expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the percentage of the time duration between a
    `SharedStorageWorkletHost`'s creation and destruction that occurs before the
    time of its last finished operation. For worklets that are destroyed before
    completing their outstanding operations, we record 100. Recorded in the
    destructor of `SharedStorageWorkletHost`.
  </summary>
</histogram>

<histogram name="Storage.SharedStorage.Worklet.Timing.Values.Next" units="ms"
    expires_after="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time from the start of the call to
    `SharedStorage::IterationSource::GetNextIterationResult()` to just before
    the promise is returned, for a value iterator. Includes only calls where
    promises are successfully resolved. Recorded in
    `SharedStorage::IterationSource::TryResolvePromise()` via
    `LogElapsedTime()`.
  </summary>
</histogram>

<histogram name="Storage.StoragePressure.Bubble"
    enum="StoragePressureBubbleUserAction" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    How did the user interact with the StoragePressure Bubble? Ignored means the
    user did not click on the positive button before the bubble is closed
    (either manually closed or when the browser closes).
  </summary>
</histogram>

<histogram name="Storage.SyncFileSystem.FileSyncAction"
    enum="SyncFileSystemSyncAction" expires_after="2025-05-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records when a SyncFileSystem change event is fired due to the file being
    updated remotely by the background sync service. Recorded right before
    sending the event to the app.
  </summary>
</histogram>

<histogram name="Storage.SyncFileSystem.NotificationSource"
    enum="SyncFileSystemNotificationSource" expires_after="2025-05-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records when observers are notified to sync files either due to incoming
    notification from the invalidations from the Invalidation Service, or
    polling triggered by a timer.
  </summary>
</histogram>

<histogram name="websql.OpenDatabase" enum="BooleanSecure"
    expires_after="never">
<!-- expires-never: core storage metric; consumed in separate dashboard (go/chrome-storage-dashboard) -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of WebSQL databases opened for secure vs insecure origins.
  </summary>
</histogram>

</histograms>

</histogram-configuration>