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

<!--
Copyright 2021 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 Simple 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>

<histogram name="AppBanners.BeforeInstallEvent"
    enum="AppBannersBeforeInstallEvent" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    App banners promote an application related to the current website, and are
    requested specifically through the current page's HTML. This stat tracks
    usage of the BeforeInstallPromptEvent, which allows developers to control
    when an app banner appears. The events in this histogram are not mutually
    exclusive - for example, preventDefault() must be called if prompt() is
    called.
  </summary>
</histogram>

<histogram name="AppBanners.DismissEvent" enum="AppBannersDismissEvent"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    App banners promote an application related to the current website, and are
    requested specifically through the current page's HTML. This stat tracks the
    different ways that an app banner left the screen, e.g. through an automatic
    dismissal after navigation or an explicit user action.
  </summary>
</histogram>

<histogram name="AppBanners.DisplayEvent" enum="AppBannersDisplayEvent"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    App banners promote an application related to the current website, and are
    requested specifically through the current page's HTML. This stat tracks
    when an app banner was requested and how the request was handled, e.g. the
    user blocked its appearance or the banner was ultimately created.
  </summary>
</histogram>

<histogram name="AppBanners.InstallableStatusCode" enum="InstallableStatusCode"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    App banners promote an application related to the current website, and are
    requested specifically through the current page's HTML. This stat tracks the
    status code logged by the app banner system as it processes a site's
    eligibility for an app banner. Every request for a banner will be logged in
    a bucket of this histogram.
  </summary>
</histogram>

<histogram name="AppBanners.InstallEvent" enum="AppBannersInstallEvent"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    App banners promote an application related to the current website, and are
    requested specifically through the current page's HTML. This stat tracks
    when a user triggers an install dialog for the app promoted by the banner,
    as well as whether or not the user ultimately decided to install the app.
  </summary>
</histogram>

<histogram name="AppBanners.UserResponse" enum="AppBannersUserResponse"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This stat tracks the user reponse when the add-to-homescreen dialog is shown
    either: (A) Via the website's JavaScript (B) Via the user tapping the app
    banner which promotes the application related to the current site.
  </summary>
</histogram>

<histogram name="Launch.BrowserTab.CreateShortcutApp.WebAppDisplayMode"
    enum="WebAppDisplayMode" expires_after="2025-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the display mode (as defined in the Web App Manifest spec) at the
    launch of a web app that was created using &quot;Create Shortcut...&quot; on
    desktop. This is only recorded if the launch was to a browwer tab context,
    not a standalone window.
  </summary>
</histogram>

<histogram name="Launch.BrowserTab.WebAppDisplayMode" enum="WebAppDisplayMode"
    expires_after="2025-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the display mode (as defined in the Web App Manifest spec) at the
    launch of a desktop web app installed NOT using &quot;Create
    Shortcut...&quot;. This is only recorded if the launch was to a browwer tab
    context, not a standalone window.
  </summary>
</histogram>

<histogram name="Launch.BrowserTab.WebAppLaunchHandlerClientMode"
    enum="WebAppLaunchHandlerClientMode" expires_after="2025-05-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the launch_handler.client_mode used when a web app is launched in a
    browser tab.
  </summary>
</histogram>

<histogram name="Launch.HomeScreen" enum="LaunchFromHomeScreen"
    expires_after="2025-12-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how Chrome handled a launch from an Android Home screen shortcut.
  </summary>
</histogram>

<histogram name="Launch.HomeScreenSource" enum="LaunchFromHomeScreenSource"
    expires_after="2025-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the source of an Android homescreen launch intent used to launch
    Chrome.

    The Menu item bucket is deprecated as of M57, and will only contain records
    for shortcuts added to the homescreen until M56.

    For M57+, the Menu item (standalone) bucket contains all launch intents
    originating from the add to homescreen menu item that launch to standalone
    mode and *are not* WebAPKs. These are sites which do not meet the PWA
    eligibility criteria, but have an app manifest that specifies either
    standalone or fullscreen display. This bucket also contains PWA *and*
    non-PWA intents that were added to the homescreen *prior* to M57, as we
    cannot distinguish between them after they are added.

    For M57+, the Menu item (shortcut) bucket contains all launch intents
    originating from the add to homescreen menu item that launch to a browser
    tab, regardless of when the intent was added.
  </summary>
</histogram>

<histogram name="Launch.WebApp.DiyOrCrafted" enum="LaunchedAppType"
    expires_after="2025-05-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the type of app that was launched in a windowed context was
    a DIY app or a crafted app.
  </summary>
</histogram>

<histogram name="Launch.WebAppDisplayMode" enum="WebAppDisplayMode"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the display mode (as defined in the Web App Manifest spec) at the
    launch of the Added to Home screen or installed Web App (including WebAPKs).
    This is only recorded if the launch was to a windowed context, not a browser
    tab.
  </summary>
</histogram>

<histogram name="Launch.WebAppLaunchHandlerClientMode"
    enum="WebAppLaunchHandlerClientMode" expires_after="2025-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the launch_handler.client_mode used when a web app is launched in a
    window.
  </summary>
</histogram>

<histogram name="Launch.Window.CreateShortcutApp.WebAppDisplayMode"
    enum="WebAppDisplayMode" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the display mode (as defined in the Web App Manifest spec) at the
    launch of a shortcut created using &quot;Add to Homescreen&quot; on mobile,
    or a &quot;Create Shortcut...&quot; on desktop. This is only recorded if the
    launch was to a windowed context, not a browser tab.
  </summary>
</histogram>

<histogram name="Webapp.AddToHomescreenDialog.Timeout" units="ms"
    expires_after="2023-10-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of milliseconds that the add to homescreen dialog
    required to check installability eligibility.
  </summary>
</histogram>

<histogram name="Webapp.AmbientBadge.Terminate"
    enum="InstallableAmbientBadgeState" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/chrome/android/webapk/OWNERS</owner>
  <summary>
    On mobile, an install ambient badge may automatically shows to promote an
    application related to the current website when the site meets all install
    criteria. When the ambient badge pipleline was terminated, record the
    pipeline state.
  </summary>
</histogram>

<histogram name="Webapp.AppIdentityDialog.AlreadyApproved"
    enum="AppIdentityDisplayMetric" expires_after="2024-01-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whenever PWAs change their manifest, this may result in a change to their
    identity (icon and/or name). This metric is intended to keep track of the
    combinations of App Identity changes that were requested (changes to the
    icons and/or app name -- plus icon masks and/or shortname on Android). This
    metric is logged once each time Chrome determines that a PWA is in need of
    an update, but ONLY if the change should be auto-approved. On Android that
    happens when the user has approved the App Identity dialog with identical
    data before (and another update request comes in), and on Desktop platforms
    that happens when Default apps/Policy apps are pre-approved for updating.
    See also complementary metric Webapp.AppIdentityDialog.NotShowing. Milestone
    112 update: This used to record when there were no app identity changes
    required or for shortcut apps, this is now recorded as
    Webapp.AppIdentityDialog.NotShowing instead.
  </summary>
</histogram>

<histogram name="Webapp.AppIdentityDialog.NotShowing"
    enum="AppIdentityDisplayMetric" expires_after="2024-01-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whenever PWAs change their manifest, this may result in a change to their
    identity (icon and/or name). This metric is intended to keep track of the
    combinations of App Identity changes that were requested (changes to the
    icons and/or app name -- plus icon masks and/or shortname on Android). This
    metric is logged once each time Chrome determines that a PWA is in need of
    an update, but ONLY if there is no App Identity change involved (or the App
    Identity dialog is disabled by a feature switch). See also complementary
    metric Webapp.AppIdentityDialog.Showing. Milestone 112 update:
    Webapp.AppIdentityDialog.AlreadyApproved used to record when there were no
    app identity changes required or for shortcut apps, this is now recorded as
    Webapp.AppIdentityDialog.NotShowing instead.
  </summary>
</histogram>

<histogram name="Webapp.AppIdentityDialog.Showing"
    enum="AppIdentityDisplayMetric" expires_after="2024-01-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whenever PWAs change their manifest, this may result in a change to their
    identity (icon and/or name). This metric is intended to keep track of the
    combinations of App Identity changes that were requested (changes to the
    icons and/or app name -- plus icon masks and/or shortname on Android). This
    metric is logged once each time Chrome determines that a PWA is in need of
    an update, but ONLY if there is an App Identity change involved (the App
    Identity dialog is enabled by a feature switch and the dialog was shown to
    the user). See also complementary metric
    Webapp.AppIdentityDialog.NotShowing.
  </summary>
</histogram>

<histogram name="Webapp.ApplySyncDataToApp.ManifestIdMatch"
    enum="BooleanSuccess" expires_after="2025-04-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when incoming sync data is applied to an app, whether the resolved
    manifest ID's path matches the manifest ID path stored in the sync proto.
  </summary>
</histogram>

<histogram name="WebApp.AppSettingsPage.EntryPoints"
    enum="AppSettingsPageEntryPoints" expires_after="2023-08-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the source of certain navigations to chrome://app-settings.
    Recording happens at the given entry point, and not during the loading of
    chrome://app-settings, so direct visits to the URL are not recorded.
  </summary>
</histogram>

<histogram name="Webapp.CreateWebApp.ManifestIdMatch" enum="BooleanSuccess"
    expires_after="2025-04-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded at web app database read time for each app, whether the resolved
    manifest ID's path matches the manifest ID path stored in the sync proto.
  </summary>
</histogram>

<histogram name="WebApp.Database.WriteResult" enum="BooleanSuccess"
    expires_after="never">
<!-- expires-never: The dPWA team uses this from time to time to look into success rates for database writes for web apps. pwa-team@ -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records if modifying data in the web app database was successful. Recorded
    whenever the database is written to, which can happen on large events like
    installing a web app, as well as small events like changing a the user
    display preference for a web app.
  </summary>
</histogram>

<histogram name="WebApp.DedupeInstallUrls.AppsDeduped" units="apps"
    expires_after="2025-05-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of web apps deduped *for each install URL* that had more than one
    web app associated with it. Recorded at the end of each
    DedupeInstallUrlsCommand scan, about 3 times at start up (once per external
    web app install source) and once whenever web app policy changes.
  </summary>
</histogram>

<histogram name="WebApp.DedupeInstallUrls.InstallUrlsDeduped"
    units="install URLs" expires_after="2025-05-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of install URLs that had multiple web apps associated with it
    during a run of DedupeInstallUrlsCommand. Recorded at the end of each
    DedupeInstallUrlsCommand scan, about 3 times at start up (once per external
    web app install source) and once whenever web app policy changes.
  </summary>
</histogram>

<histogram name="WebApp.DedupeInstallUrls.SessionRunCount" units="runs"
    expires_after="2025-05-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of times the DedupeInstallUrlsCommand ran in a single browser
    profile session. Note that because this is recorded for each run, if it is
    run 3 times the client will emit 1, 2 and 3 in succession. Recorded at the
    start of each DedupeInstallUrlsCommand scan, about 3 times at start up (once
    per external web app install source) and once whenever web app policy
    changes.
  </summary>
</histogram>

<histogram name="WebApp.DefaultOffline.ClosingReason"
    enum="DefaultOfflineClosingReason" expires_after="2024-01-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Keeps track of why the default offline (error) page is no longer visible.
    Logged once each time the default error page shown, after determining that
    it is no longer needed, e.g. because a new navigation occurred for the error
    page's WebContents, the device is online again and the WebContents was
    refreshed or when the WebContents is destroyed.
  </summary>
</histogram>

<histogram name="WebApp.DefaultOffline.DurationShown" units="seconds"
    expires_after="2024-01-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Keeps track of how long the default offline (error) page was shown for PWAs.
    Logged once each time the default error page shown, after determining that
    it is no longer needed, e.g. because a new navigation occurred for the error
    page's WebContents, the device is online again and the WebContents was
    refreshed or when the WebContents is destroyed.
  </summary>
</histogram>

<histogram name="WebApp.DiyAppsInstalledCount.ByUser" units="count"
    expires_after="2025-03-21">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of fully installed DIY web apps, installed by the user.
    This is recorded on the initialization of the Profile object, which can
    happen either at chrome startup or when the user switches profiles.
  </summary>
</histogram>

<histogram name="WebApp.Engagement.{EngagementType}"
    enum="SiteEngagementServiceEngagementType" expires_after="never">
<!-- expires-never: This is used for dashboard metrics. [email protected] -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The type of engagement (navigation, user input, etc.) which led to an
    accumulation in site engagement that {EngagementType}. This is collected for
    a subset of SiteEngagementService.EngagementType, which is triggered for all
    browsing contexts. Recorded at the time of engagement accumulation (e.g.,
    when mouse is clicked).
  </summary>
  <token key="EngagementType">
    <variant name="MoreThanThreeUserInstalledApps"
        summary="happened in web site for user with 4 or more user-installed
                 apps"/>
    <variant name="NoUserInstalledApps"
        summary="happened in web site for user without user-installed apps"/>
    <variant name="UpToThreeUserInstalledApps"
        summary="happened in web site for user with [1-3] user-installed apps"/>
  </token>
</histogram>

<histogram name="WebApp.Engagement{Context}.{Container}"
    enum="SiteEngagementServiceEngagementType" expires_after="2025-06-21">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The type of engagement (navigation, user input, etc.) which led to an
    accumulation in site engagement that {Container} for {Context}. This is
    collected for a subset of SiteEngagementService.EngagementType, which is
    triggered for all browsing contexts. Recorded at the time of engagement
    accumulation (e.g., when mouse is clicked).
  </summary>
  <token key="Context">
    <variant name="" summary="all web app types"/>
    <variant name=".DefaultInstalled"
        summary="an app installed by default on profile creation"/>
    <variant name=".UserInstalled" summary="an app installed by the user"/>
    <variant name=".UserInstalled.Crafted"
        summary="a 'crafted' app installed by the user (where the app was
                 normally installable)"/>
    <variant name=".UserInstalled.Diy"
        summary="a 'DIY' app installed by the user (where the app was not
                 normally installable)"/>
  </token>
  <token key="Container">
    <variant name="InTab" summary="happened in app running in a browser tab"/>
    <variant name="InWindow" summary="happened in app running as a window"/>
  </token>
</histogram>

<histogram name="WebApp.FileHandlersRegistration.Result" enum="BooleanSuccess"
    expires_after="2025-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of file handler registration for PWAs. This is triggered
    during installations or updates, when set by policy changes in the web app
    settings policy or when an user modifies the file handling settings from the
    chrome://app-settings/ page per app.
  </summary>
</histogram>

<histogram name="WebApp.FileHandlersUnregistration.Result"
    enum="BooleanSuccess" expires_after="2025-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of file handler unregistration for PWAs. This is
    triggered during uninstalls or updates, when set by policy changes in the
    web app settings policy or when an user modifies the file handling settings
    from the chrome://app-settings page per app.
  </summary>
</histogram>

<histogram name="WebApp.GeneratedIconFix.AttemptCount" units="attempts"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of generated icon fixes already attempted for each web
    app that had an icon fix scheduled at start up. Recorded at start up.
  </summary>
</histogram>

<histogram name="WebApp.GeneratedIconFix.Result" enum="GeneratedIconFixResult"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of attempting to fix a web app's generated icon. Recorded
    during start up and for all follow up daily retry events.
  </summary>
</histogram>

<histogram name="WebApp.GeneratedIconFix.ScheduleDecision"
    enum="GeneratedIconFixScheduleDecision" expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the decision made for whether to fix a web app's generated icon.
    Recorded during start up and for all follow up daily retry events.
  </summary>
</histogram>

<histogram name="WebApp.GeneratedIconFix.StartUpAttemptCount"
    units="start up attempts" expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of background generated icon fix attempts initiated
    during start up. Recorded at start up.
  </summary>
</histogram>

<histogram name="WebApp.Icon.AppsWithEmptyDownloadedIconSizes" units="web apps"
    expires_after="2025-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of web apps that have an empty
    WebApp::downloaded_icon_sizes field. This indicates an icon failure state
    caused by an installation bug. This gets recorded at browser profile start
    up in both the Lacros and Ash processes.
  </summary>
</histogram>

<histogram name="WebApp.Icon.AppsWithEmptyIconBitmap" units="web apps"
    expires_after="2023-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of web apps that have missing icon bitmap data. This gets
    recorded at browser profile start up in both the Lacros and Ash processes.
  </summary>
</histogram>

<histogram name="WebApp.Icon.AppsWithEmptyIconFile" units="web apps"
    expires_after="2025-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of web apps that have empty icon files. This gets
    recorded at browser profile start up in both the Lacros and Ash processes.
  </summary>
</histogram>

<histogram name="WebApp.Icon.AppsWithGeneratedIconBitmap" units="web apps"
    expires_after="2023-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of web apps that have a generated letter icon bitmap
    (distinct from the is_generated_icon flag). This gets recorded at browser
    profile start up in both the Lacros and Ash processes.
  </summary>
</histogram>

<histogram name="WebApp.Icon.AppsWithGeneratedIconFlag" units="web apps"
    expires_after="2025-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of web apps that have their WebApp::is_generated_icon
    field set. This indicates a letter icon was generated during installation
    instead of using a real app icon. This gets recorded at browser profile
    start up in both the Lacros and Ash processes.
  </summary>
</histogram>

<histogram name="WebApp.Icon.AppsWithGeneratedIconFlagFalseNegative"
    units="web apps" expires_after="2023-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of web apps that have their WebApp::is_generated_icon
    field unset but actually have a generated icon bitmap. This indicates a
    letter icon was generated during installation instead of using a real app
    icon and a manifest update clobbered the correct value of is_generated_icon
    (https://crbug.com/1317922). This gets recorded at browser profile start up
    in both the Lacros and Ash processes.
  </summary>
</histogram>

<histogram name="WebApp.Icon.AppsWithMissingIconFile" units="web apps"
    expires_after="2025-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of web apps that have missing icon files. This gets
    recorded at browser profile start up in both the Lacros and Ash processes.
  </summary>
</histogram>

<histogram name="WebApp.Icon.DownloadedHttpStatusCodeOnCreate"
    enum="HttpResponseCode" expires_after="2024-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The HTTP status code returned for a list of icons when installing single
    WebApp. Recorded when WebAppInstallTask finishes downloading icons for
    non-sync installs. Icon download attempts with identical codes produce only
    one event for this histogram.
  </summary>
</histogram>

<histogram name="WebApp.Icon.DownloadedHttpStatusCodeOnSync"
    enum="HttpResponseCode" expires_after="2024-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The HTTP status code returned for a list of icons when installing single
    WebApp. Recorded when WebAppInstallTask finishes downloading icons for web
    apps from sync. Icon download attempts with identical codes produce only one
    event for this histogram.
  </summary>
</histogram>

<histogram name="WebApp.Icon.DownloadedHttpStatusCodeOnUpdate"
    enum="HttpResponseCode" expires_after="2024-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The HTTP status code returned for a list of icons when updating single
    WebApp. Recorded when ManifestUpdateDataFetchCommand finishes downloading
    icons for update. Icon download attempts with identical codes produce only
    one event for this histogram.
  </summary>
</histogram>

<histogram name="WebApp.Icon.DownloadedResultOnCreate"
    enum="WebAppIconsDownloadedResult" expires_after="2024-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The overall result returned by WebAppIconDownloader. Recorded when
    WebAppInstallTask finishes downloading icons for non-sync installs.
  </summary>
</histogram>

<histogram name="WebApp.Icon.DownloadedResultOnSync"
    enum="WebAppIconsDownloadedResult" expires_after="2024-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The overall result returned by WebAppIconDownloader. Recorded when
    WebAppInstallTask finishes downloading icons for web aps from sync.
  </summary>
</histogram>

<histogram name="WebApp.Icon.DownloadedResultOnUpdate"
    enum="WebAppIconsDownloadedResult" expires_after="2024-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The overall result returned by WebAppIconDownloader. Recorded when
    ManifestUpdateDataFetchCommand finishes downloading icons.
  </summary>
</histogram>

<histogram name="WebApp.Icon.HttpStatusCodeClassOnCreate"
    enum="HttpStatusCodeClass" expires_after="2024-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The HTTP status code class returned for each icon loaded during a WebApp's
    creation. Recorded when WebAppInstallTask finishes downloading icons.
  </summary>
</histogram>

<histogram name="WebApp.Icon.HttpStatusCodeClassOnSync"
    enum="HttpStatusCodeClass" expires_after="2024-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The HTTP status code class returned for each icon loaded when syncing a
    WebApp. Recorded when WebAppInstallTask finishes downloading icons on sync.
  </summary>
</histogram>

<histogram name="WebApp.Icon.HttpStatusCodeClassOnUpdate"
    enum="HttpStatusCodeClass" expires_after="2024-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The HTTP status code class returned for each icon loaded when updating a
    WebApp. Recorded when ManifestUpdateDataFetchCommand finishes downloading
    icons.
  </summary>
</histogram>

<histogram name="WebApp.IconDownloader.HttpResult"
    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2024-01-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the http error code returned from downloading icons from the
    WebAppIconDownloader. This is recorded during any type of web app install
    (user/sync/preinstall/policy/etc), manifest update checking which can occur
    on page loads under an installed app scope, or other users of of
    WebAppIconDownloader in the WebAppProvider system.
  </summary>
</histogram>

<histogram name="WebApp.IconDownloader.Result"
    enum="WebAppIconDownloaderResult" expires_after="2025-08-04">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of downloading a number of icons. This is recorded during
    any type of web app install (user/sync/preinstall/policy/etc), manifest
    update checking which can occur on page loads under an installed app scope,
    or other users of WebAppIconDownloader in the WebAppProvider system.
  </summary>
</histogram>

<histogram name="Webapp.Install.DisplayMode2" enum="WebAppDisplayMode"
    expires_after="2025-09-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the display mode (as defined in the Web App Manifest spec) at the
    install time of a WebApp. Fixes a bug in the data collection for desktop web
    apps.
  </summary>
</histogram>

<histogram name="Webapp.Install.InstallBounce" enum="WebappInstallSource"
    expires_after="2025-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records when a web app install bounced for different install sources. A
    bounce is when the user uninstalls the web app within 1 hour of installing
    it.
  </summary>
</histogram>

<histogram name="Webapp.Install.InstallEvent" enum="WebappInstallSource"
    expires_after="never">
<!-- expires-never: This is used for dashboard metrics. [email protected] -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the mechanism and source from which a web app installation was
    triggered, regardless of whether the installation was successful.
  </summary>
</histogram>

<histogram name="WebApp.Install.Result" enum="BooleanSuccess"
    expires_after="2025-12-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This is recorded when a web app installation is completed. If the
    installation occurred or the app was already installed, then this records
    &quot;true&quot;. All other cases record &quot;false&quot;. This tracks all
    kinds of web app installations, e.g. user installs from install icon or
    admin installs from WebAppInstallForcelist.
  </summary>
</histogram>

<histogram name="WebApp.Install.Source.Failure" enum="WebappInstallSource"
    expires_after="never">
<!-- expires-never: This is used for dashboard metrics. [email protected] -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the mechanism and source from which a web app installation was
    triggered, when installation failed.
  </summary>
</histogram>

<histogram name="WebApp.Install.Source.Success" enum="WebappInstallSource"
    expires_after="never">
<!-- expires-never: This is used for dashboard metrics. [email protected] -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the mechanism and source from which a web app installation was
    triggered, when installation succeeded (this includes cases where the app
    was already installed).
  </summary>
</histogram>

<histogram name="WebApp.Install.SyncFallbackInstallInitiated"
    enum="WebAppInstallResultCode" expires_after="2024-01-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This is recorded when a web app install from the sync system fails and the
    fallback install is initiated. Sync installations happen when the sync
    system tells the local client that a web app has been installed on the
    profile on a different device. This often happens during startup. The value
    is the error code for the regular install flow.
  </summary>
</histogram>

<histogram name="Webapp.Install.UninstallEvent" enum="WebappUninstallSource"
    expires_after="never">
<!-- expires-never: The dPWA team uses this from time to time to look into uninstallations of web apps per uninstall source. pwa-team@ -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the mechanism and source from which a web app uninstallation was
    triggered, regardless of whether the uninstallation was successful.
  </summary>
</histogram>

<histogram name="WebApp.InstallConfirmation.CloseReason"
    enum="WidgetClosedReason" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the reason that the WebApp install confirmation dialog is closed.
    This dialog is shown when the user clicks on the 'install' icon in the
    omnibox for websites that are installable. This metric is intended to give
    data for an experiment to choose the best install icon.
  </summary>
</histogram>

<histogram name="WebApp.InstalledCount.ByUser" units="count"
    expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of fully installed web apps, installed by the user. This
    is recorded on the initialization of the Profile object, which can happen
    either at chrome startup or when the user switches profiles. Note: This
    includes DIY apps as well.
  </summary>
</histogram>

<histogram name="WebApp.InstalledCount.ByUserInMultipleProfiles" units="count"
    expires_after="2025-09-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of fully installed web apps, installed by the user in
    multiple profiles. This is only recorded on macOS. This is recorded on the
    initialization of the Profile object, which can happen either at chrome
    startup or when the user switches profiles.
  </summary>
</histogram>

<histogram name="WebApp.InstalledCount.ByUserNotLocallyInstalled" units="count"
    expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of web apps that were installed by sync but not yet
    locally installed by the user. This is recorded on the initialization of the
    Profile object, which can happen either at chrome startup or when the user
    switches profiles.
  </summary>
</histogram>

<histogram name="Webapp.InstallResult" enum="WebAppInstallResultCode"
    expires_after="2025-01-05">
<!-- Name completed by histogram_suffixes name="WebAppType" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Records the result code of Web App installs.</summary>
</histogram>

<histogram name="WebApp.Isolated.InstallError"
    enum="IsolatedWebAppInstallError" expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/web_applications/isolated_web_apps/OWNERS</owner>
  <summary>
    Records the exact error that occured during the installation of an Isolated
    Web App. The error is logged together with WebApp.Isolated.InstallSuccess in
    case an error occurs.
  </summary>
</histogram>

<histogram name="WebApp.Isolated.InstallSuccess" enum="BooleanSuccess"
    expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/web_applications/isolated_web_apps/OWNERS</owner>
  <summary>
    Records whether the the installation of an Isolated Web App was successful
    or resulted in an error.
  </summary>
</histogram>

<histogram name="WebApp.Isolated.OrphanedBundlesCleanupJobError"
    enum="IsolatedWebAppCleanupOrphanedIWAsError" expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/web_applications/isolated_web_apps/OWNERS</owner>
  <summary>
    Records the exact error that occurred during the execution of the
    OrphanedBundlesCleanupCommand. This command is run on session start and
    after a failed IWA install, to remove the folders of IWAs that are not
    installed. The error is logged together with
    WebApp.Isolated.OrphanedBundlesCleanupJobSuccess in case an error occurs.
  </summary>
</histogram>

<histogram name="WebApp.Isolated.OrphanedBundlesCleanupJobSuccess"
    enum="BooleanValid" expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/web_applications/isolated_web_apps/OWNERS</owner>
  <summary>
    Records whether the OrphanedBundlesCleanupCommand was successful or resulted
    in an error. This command is run on session start and after a failed IWA
    install, to remove the folders of IWAs that are not installed.
  </summary>
</histogram>

<histogram name="WebApp.Isolated.ReadResponseHeadError"
    enum="IsolatedWebAppReadResponseHeadError" expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/web_applications/isolated_web_apps/OWNERS</owner>
  <summary>
    Records the exact error that occured during reading of a response head for a
    request to an Isolated Web App via the isolated-app: scheme. The error is
    logged together with WebApp.Isolated.ReadResponseHeadSuccess in case when an
    error occurs. Warning: this histogram was expired from 2024-05-08 to
    2024-06-12; data may be missing.
  </summary>
</histogram>

<histogram name="WebApp.Isolated.ReadResponseHeadSuccess" enum="BooleanSuccess"
    expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/web_applications/isolated_web_apps/OWNERS</owner>
  <summary>
    Records whether reading the response head for a request to an Isolated Web
    App via the isolated-app: scheme was successful or resulted in an error. As
    a prerequisite for this metric to be logged, the Isolated Web App's
    integrity block and metadata must have passed validation and its signatures
    must have been verified successfully. This metric is then logged for any
    resources loading for the Isolated Web App, so any usage could trigger this
    metric. Warning: this histogram was expired from 2024-05-08 to 2024-06-12;
    data may be missing.
  </summary>
</histogram>

<histogram name="WebApp.Isolated.ResponseReaderCacheState"
    enum="IsolatedWebAppResponseReaderCacheState" expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/web_applications/isolated_web_apps/OWNERS</owner>
  <summary>
    This histogram is logged whenever an HTTP request to read a response from a
    Signed Web Bundle used for Isolated Web Apps is made through the
    isolated-app: scheme and handled by the corresponding URLLoader. This
    happens both during installation of an Isolated Web App, and when users
    browse an installed Isolated Web App. The histogram records whether a cached
    reader was used to read the response. A cached reader is able to directly
    read a response from the Signed Web Bundle, whereas an uncached reader first
    needs to parse the Signed Web Bundle's Integrity Block and metadata, and
    possibly verify signatures.
  </summary>
</histogram>

<histogram name="WebApp.Isolated.SignatureVerificationDuration" units="ms"
    expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/web_applications/isolated_web_apps/OWNERS</owner>
  <summary>
    Records how long it takes to verify signatures of Signed Web Bundles used
    for Isolated Web Apps every time their signatures are verified. Signatures
    are verified during installation (all platforms) and when an Isolated Web
    App is first accessed during a Chrome session (non-ChromeOS platforms only).
  </summary>
</histogram>

<histogram name="WebApp.Isolated.SignatureVerificationFileLength" units="MiB"
    expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/web_applications/isolated_web_apps/OWNERS</owner>
  <summary>
    Records the file length of Signed Web Bundles used for Isolated Web Apps
    every time their signatures are verified. Signatures are verified during
    installation (all platforms) and when an Isolated Web App is first accessed
    during a Chrome session (non-ChromeOS platforms only).
  </summary>
</histogram>

<histogram name="WebApp.Isolated.SwbnFileUsabilityError"
    enum="IsolatedWebAppSwbnFileUsabilityError" expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/web_applications/isolated_web_apps/OWNERS</owner>
  <summary>
    Records the exact error why a Signed Web Bundle is unusable. In particular
    integrity block or metadata parsing errors are recorded here. The error is
    logged together with WebApp.Isolated.SwbnFileUsabilitySuccess when an error
    occurs. Warning: this histogram was expired from 2024-05-08 to 2024-06-12;
    data may be missing.
  </summary>
</histogram>

<histogram name="WebApp.Isolated.SwbnFileUsabilitySuccess" enum="BooleanValid"
    expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/web_applications/isolated_web_apps/OWNERS</owner>
  <summary>
    Records whether a Signed Web Bundle file is usable. To be usable the file's
    integrity block and metadata should be read, parsed and validated
    successfully. This is logged every time the integrity block and metadata of
    an Isolated Web App are parsed, which happens whenever the reader for an
    Isolated Web App is not yet cached. Readers are evicted from the cache after
    approximately 10 minutes of not reading any responses from their
    corresponding Signed Web Bundle. Isolated Web Apps are parsed for any
    resources loading for the web app, so any usage could trigger this UMA.
    Warning: this histogram was expired from 2024-05-08 to 2024-06-12; data may
    be missing.
  </summary>
</histogram>

<histogram name="WebApp.Isolated.UpdateError" enum="IsolatedWebAppUpdateError"
    expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/web_applications/isolated_web_apps/OWNERS</owner>
  <summary>
    Records the exact error that occured during the update of an Isolated Web
    App. The update process happens at 2 different times: browser launch and
    every 5 hours. Admin installed IWAs are also checked everytime the policy
    value changes. Additional details can be found at go/iwa-managed-updates.
    The error is logged together with WebApp.Isolated.UpdateSuccess in case an
    error occurs.
  </summary>
</histogram>

<histogram name="WebApp.Isolated.UpdateSuccess" enum="BooleanSuccess"
    expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/web_applications/isolated_web_apps/OWNERS</owner>
  <summary>
    Records whether the the update of an Isolated Web App was successful or
    resulted in an error. The update process happens at 2 different times:
    browser launch and every 5 hours. Admin installed IWAs are also checked
    everytime the policy value changes. Additional details can be found at
    go/iwa-managed-updates.
  </summary>
</histogram>

<histogram name="WebApp.LaunchContainer" enum="AppLaunchContainer"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the container used for a web app launch, when the app is launched
    (eg. via UI surfaces or intents). Not recorded when the web app is navigated
    to via URL.
  </summary>
</histogram>

<histogram name="WebApp.Launcher.LaunchResult"
    enum="WebAppLauncherLaunchResult" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The result of a Progressive Web App (PWA) launcher's attempt to launch
    Chrome. Windows-only.
  </summary>
</histogram>

<histogram name="WebApp.LaunchSource" enum="LaunchSource"
    expires_after="2025-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of times web apps are launched, grouped by apps::LaunchSource.
    The equivalent histogram on Android is called Launch.HomeScreenSource.
  </summary>
</histogram>

<histogram name="WebApp.Media.SystemMediaControls"
    enum="WebAppSystemMediaControlsEvent" expires_after="2025-09-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records events when Progressive Web Apps (PWAs) play audio as well as when
    PWA specific SystemMediaControls are interacted with in the operating
    system. This can be to play, pause, skip and other similar actions available
    from the OS. This histogram is only used when instanced PWA system media
    controls is enabled. The control events (like next) are only fired if the
    request comes from system media controls (and the OS) not when the media is
    directly interacted.
  </summary>
</histogram>

<histogram name="WebApp.MlInstall.DialogResponse"
    enum="WebAppMlInstallResponse" expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the user's response to an install dialog, but only if the dialog was
    triggered by the ML promotion prediction system, or if the dialog was
    already showing when the ML prediction system returned a result. Note that
    in the second case, the ML prediction could have been anything, but in the
    first case, the prediction is always to show the installation UX. The ML
    prediction always happens after a page is loaded, relevant UKM metrics are
    gathered, and 3 seconds have gone past. If the result is 'blocked by
    guardrails', then that can only occur if there wasn't install UX showing
    when ML finished the prediction, and the programatic guardrails applied.
    This is reported irrespective of the ML result.
  </summary>
</histogram>

<histogram name="WebApp.MlInstall.InstallSource" enum="WebappInstallSource"
    expires_after="2025-09-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when a result occurs on an installation dialog that was either
    triggered via ML or was showing through another means when ML returned a
    classification result for the web contents.
  </summary>
</histogram>

<histogram name="WebApp.MLInstallPromo.UserResponse"
    enum="WebAppMlInstallResponse" expires_after="2025-04-25">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Similar to WebApp.MlInstall.DialogResponse, but measures the user response
    only if ML triggered the install dialog for PWAs. This is a subset of the
    information that will be sent to the Segmentation system for training, and
    is useful in understanding the exact outputs of the ML model.
  </summary>
</histogram>

<histogram name="WebApp.NewCraftedAppInstalled.ByUser" enum="BooleanSuccess"
    expires_after="2025-03-21">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of an app installation flow for a site that is promotable
    and installable, that is triggered manually by the user. This is measured
    when the user completes the full installation flow, by opening the dialog
    from either the omnibox icon or the three dot menu option for installing the
    site, and performing an action on it.
  </summary>
</histogram>

<histogram name="WebApp.NewDiyAppInstalled.ByUser" enum="BooleanSuccess"
    expires_after="2025-03-21">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of a DIY app installation flow that is triggered manually
    by the user. This is measured when the user visits the three dot menu and
    clicks on `Install Page as App`.
  </summary>
</histogram>

<histogram name="WebApp.OpenMode" enum="WebAppOpenMode" expires_after="never">
<!-- expires-never: The dPWA team uses this from time to time to see how web
      apps are opened. davidbienvenu@ -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when Chrome is launched to open a Web App; e.g., with --app-id.
    Metric describes how the web app opened; e.g., in a standalone window or in
    a tab. Previously recorded in Launch.Modes.
  </summary>
</histogram>

<histogram name="WebApp.OsSettingsUninstallRegistration.Result"
    enum="BooleanSuccess" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of registering a PWA with the OS's app management
    surface, which is used to offer uninstallation. This currently is only
    implemented on Windows, and this causes the app to appear in the control
    panel's list of installed applications. This is triggered during
    installations or updates. Updates can occur when the app's name has been
    changed, or when the system has determined that the user can uninstall this
    app. For example, if this app was installed by the user and policy (so the
    user cannot uninstall it, due to policy), but then the policy is removed.
    The app is now uninstallable by the user, so this will be registered with
    the OS.
  </summary>
</histogram>

<histogram name="WebApp.OsSettingsUninstallUnregistration.Result"
    enum="BooleanSuccess" expires_after="2025-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of unregistering a PWA with the OS's app management
    surface, which is used to offer uninstallation. This currently is only
    implemented on Windows, and this causes the app to no longer appear in the
    control panel's list of installed applications. This is triggered during
    uninstallations or updates. Updates can occur when the app's name has been
    changed, or when the system has determined that the user cannot uninstall
    this app. For example, if this app was installed by the user (which is
    uninstallable), but then it is force-installed by policy. The app is no
    longer uninstallable by the user, so this will be unregistered with the OS.
  </summary>
</histogram>

<histogram name="WebApp.OsSettingsUninstallUnregistration.WinOSResult"
    enum="WinRegistryErrorCode" expires_after="2025-08-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the windows result code for OS settings uninstallation
    unregistration when an app is being uninstalled, so that the app no longer
    appears on the control panel's list of installed applications. This is
    triggered during uninstallations or updates. Updates can occur when the
    app's name has been changed, or when the system has determined that the user
    cannot uninstall this app. For example, if this app was installed by the
    user (which is uninstallable), but then it is force-installed by policy. The
    app is no longer uninstallable by the user, so this will be unregistered
    with the OS.
  </summary>
</histogram>

<histogram name="WebApp.Preinstalled.AppToReplaceStillDefaultInstalledCount"
    units="apps" expires_after="2023-12-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Preinstalled web app configs can specify a set of apps to uninstall after
    the preinstalled web app is installed.

    This records how many apps that are meant to be uninstalled are still
    default installed; see https://crbug.com/1266234.

    This gets recorded at start up after preinstalled web apps configs have been
    applied.
  </summary>
</histogram>

<histogram name="WebApp.Preinstalled.AppToReplaceStillInstalledCount"
    units="apps" expires_after="2024-02-04">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Preinstalled web app configs can specify a set of apps to uninstall after
    the preinstalled web app is installed.

    This records how many apps that are meant to be uninstalled are still
    installed. This could occur due to manual installation by the user or Chrome
    app sync, see https://crbug.com/1266234.

    This gets recorded at start up after preinstalled web apps configs have been
    applied.
  </summary>
</histogram>

<histogram name="WebApp.Preinstalled.AppToReplaceStillInstalledInShelfCount"
    units="apps" expires_after="2023-12-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Preinstalled web app configs can specify a set of apps to uninstall after
    the preinstalled web app is installed.

    This records how many apps that are meant to be uninstalled are still
    installed and present in the Chrome OS shelf; see https://crbug.com/1266234.

    This gets recorded at start up after preinstalled web apps configs have been
    applied.
  </summary>
</histogram>

<histogram name="WebApp.Preinstalled.ConfigErrorCount" units="apps"
    expires_after="2023-12-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how many preinstalled web app config files failed to parse as valid
    JSON with valid fields. See preinstalled_web_app_utils.cc ParseConfig().
    This is recorded at start up.
  </summary>
</histogram>

<histogram name="WebApp.Preinstalled.CorruptUserUninstallPrefsCount"
    units="apps" expires_after="2025-12-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how many preinstalled web app configs have an entry in
    UserUninstalledPreinstalledWebAppPrefs while the associated web app is still
    installed by default. This state is an error state caused by:
    https://crbug.com/1359205 This is recorded at start up.
  </summary>
</histogram>

<histogram name="WebApp.Preinstalled.DisabledCount" units="apps"
    expires_after="2023-12-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how many preinstalled web apps configs were disabled for the device.
    This is recorded at start up.
  </summary>
</histogram>

<histogram name="WebApp.Preinstalled.DisabledReason"
    enum="PreinstalledAppDisabledReason" expires_after="2023-12-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the reason a preinstalled installation was disabled. This is
    recorded at startup for every app in the preinstalled apps list, before it
    is sent to the ExternallyManagedAppManger for synchronization.
  </summary>
</histogram>

<histogram name="WebApp.Preinstalled.EnabledCount" units="apps"
    expires_after="2023-12-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how many preinstalled web apps configs were enabled for the device.
    This is recorded at start up.
  </summary>
</histogram>

<histogram name="WebApp.Preinstalled.InstallCount" units="apps"
    expires_after="2025-06-07">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how many preinstalled web app installations were attempted during
    synchronization at startup. This is the size of install_results in the
    SynchronizeInstalledApps() callback.
  </summary>
</histogram>

<histogram name="WebApp.Preinstalled.UninstallAndReplaceCount" units="apps"
    expires_after="2023-12-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how many preinstalled web app installations uninstalled and replaced
    an old default app (web app or Chrome app). This corresponds to the
    &quot;uninstall_and_replace&quot; field in preinstalled web app configs.
  </summary>
</histogram>

<histogram name="WebApp.Preinstalled.UninstallAppRemovedCount" units="apps"
    expires_after="2025-06-07">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how many of the preinstalled web app uninstalls attempted during
    synchronization at startup removed the app since it had no other install
    sources. This is the number of items set to kAppRemoved in uninstall_results
    in the SynchronizeInstalledApps() callback.
  </summary>
</histogram>

<histogram name="WebApp.Preinstalled.UninstallSourceRemovedCount" units="apps"
    expires_after="2025-06-07">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how many of the preinstalled web app uninstalls attempted during
    synchronization at startup removed a single install source but left the app
    installed since other sources remained. This is the number of items set to
    kInstallSourceRemoved in uninstall_results in the SynchronizeInstalledApps()
    callback.
  </summary>
</histogram>

<histogram name="WebApp.Preinstalled.UninstallTotalCount" units="apps"
    expires_after="2025-06-07">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the total of how many preinstalled web app uninstalls were attempted
    during synchronization at startup. This is the total size of
    uninstall_results in the SynchronizeInstalledApps() callback.
  </summary>
</histogram>

<histogram name="WebApp.ProtocolHandlers.Registration.Result"
    enum="BooleanSuccess" expires_after="2025-09-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of registering protocol handlers for PWAs. This is
    triggered during OS integration synchronization whenever new protocol
    handlers need to be registered for a recently installed app, when an user
    allows an app as a protocol handler from chrome://settings/handlers or
    during a manifest update process when the app previously did not have any
    protocol handlers defined for it.
  </summary>
</histogram>

<histogram name="WebApp.ProtocolHandlers.Unregistration.Result"
    enum="BooleanSuccess" expires_after="2025-09-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of unregistering protocol handlers for PWAs. This is
    triggered during OS integration synchronization whenever an app is being
    uninstalled, when a manifest update removes the approved protocol handlers
    from an app or when an user has disallowed the app from its protocol
    handlers from chrome://settings/handlers.
  </summary>
</histogram>

<histogram name="WebApp.ProtocolHandlers.Update.Result" enum="BooleanSuccess"
    expires_after="2025-09-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of updating protocol handlers for PWAs. This is triggered
    during OS integration synchronization whenever the protocol handlers for an
    existing app needs to be updated as part of the manifest update process or
    user approval changes from chrome://settings/handlers.
  </summary>
</histogram>

<histogram name="WebApp.RunOnOsLogin.CommandCompletionState"
    enum="RunOnOSLoginCommandCompletionState" expires_after="2025-07-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the completion state for Run On OS Login commands being scheduled.
    The command can be scheduled when the user changes the Run on OS login
    setting and/or when a policy is applied, and the completion state is
    recorded after the command either executes succesfully or fails prematurely.
  </summary>
</histogram>

<histogram name="WebApp.RunOnOsLogin.Registration.Result" enum="BooleanSuccess"
    expires_after="2025-07-07">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of registering Run On OS Login with the OS. This is
    triggered during OS integration whenever an app is being installed or the
    run on OS login state is being updated by the user from various UI surfaces
    like the chrome://apps context menu or from the app settings page for an
    app.
  </summary>
</histogram>

<histogram name="WebApp.RunOnOsLogin.Unregistration.Result"
    enum="BooleanSuccess" expires_after="2025-07-07">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of unregistering Run On OS Login with the OS. This is
    triggered during OS integration whenever an app is being uninstalled or the
    user is modifying the app preferences to not have it run on startup from the
    chrome://apps context menu or app settings page.
  </summary>
</histogram>

<histogram name="WebApp.Shortcuts.Creation.Result"
    enum="ShortcutsCreationResult" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Records the result of shortcut creation for PWA.</summary>
</histogram>

<histogram name="WebApp.Shortcuts.Delete.Result" enum="BooleanSuccess"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The result of deleting shortcuts for an installed PWA. Shortcuts are usually
    the icon in the operating system signifying the app or extension as an OS
    entity (e.g. on Mac, it's the .app file). Deleting shortcuts occurs when an
    app is uninstalled, which can be triggered by the user uninstalling the app,
    or by other 'app management' sources uninstalling an app (e.g. organization
    policy).
  </summary>
</histogram>

<histogram name="WebApp.Shortcuts.Update.Result" enum="BooleanSuccess"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The result of updating shortcuts for an installed PWA. Shortcuts are usually
    the icon in the operating system signifying the app or extension as an OS
    entity (e.g. on Mac, it's the .app file). Updating shortcuts occurs when an
    app is updated through the manifest update mechanism, when the Mac
    architecture changes, the shortcut version number has been updated, and when
    the user denies use of protocol handlers or file handlers, which occurs on
    launch of those respective features.

    Before 2024/06 on macOS some successes were incorrectly counted as failures.
  </summary>
</histogram>

<histogram name="WebApp.ShortcutsMenu.Win.Results"
    enum="ShortcutsMenuWinRegistrationResult" expires_after="2025-08-11">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the different results (both failure and success) that contributes to
    shortcuts menu registration on Windows.
  </summary>
</histogram>

<histogram name="WebApp.ShortcutsMenuBitmapAndItemCount.Results"
    enum="ShortcutsMenuIconAndDataDifference" expires_after="2025-07-13">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the difference in result between the shortcuts menu icons downloaded
    compared to the shortcuts menu item information stored in the web
    applications/ DB for that web app. This is measured during OS integration
    registration, unregistration or update during the Configuration phase of the
    sub managers. This is not measured when the app is not installed, or if
    there are no shortcuts menu items infos in the DB.
  </summary>
</histogram>

<histogram name="WebApp.ShortcutsMenuRegistration.Result" enum="BooleanSuccess"
    expires_after="2025-07-21">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Records the result of shortcuts menu registration for PWAs.</summary>
</histogram>

<histogram name="WebApp.ShortcutsMenuUnregistered.Result" enum="BooleanSuccess"
    expires_after="2025-07-21">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of shortcuts menu unregistration for PWAs.
  </summary>
</histogram>

<histogram name="Webapp.Site.Intents.IntentPickerIconEvent"
    enum="IntentPickerIconEvent" expires_after="2025-11-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records events associated with the intent picker icon in the omnibox.
    Recorded when the icon is shown or interacted with on Windows, Mac and Linux
    only.
  </summary>
</histogram>

<histogram name="WebApp.Sync.CorruptSyncEntity"
    enum="WebAppManifestIdParseResult" expires_after="2025-01-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records a sync data corruption that was detected after the storage key was
    parsed. This is detected on startup (if sync is already connected), when
    signing in to sync, or when sync sends changes to Chrome while it's already
    running and signed in.
  </summary>
</histogram>

<histogram name="WebApp.Sync.InvalidEntity" enum="WebAppStorageKeyParseResult"
    expires_after="2025-01-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records invalid sync data that was detected, and completely ignored /
    excluded from the WebAppSyncBridge logic. This is recorded potentially
    multiple times during startup (if sync is already connected), when signing
    in to sync, or when sync sends changes to Chrome while it's already running
    and signed in.
  </summary>
</histogram>

<histogram name="Webapp.SyncInitiatedUninstallResult" enum="BooleanSuccess"
    expires_after="2024-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records uninstallation result for sync initiated uninstalls in the new
    USS-based web applications system.

    Warning: this histogram was expired from 2022-04-24 through M106, data may
    be missing.
  </summary>
</histogram>

<histogram name="Webapp.SystemApps.FreshInstallDuration" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time taken to perform a fresh install of all system web apps. It
    measures the time from when we dispatch a call to install them, until we get
    all the installation results. This intentionally excludes the scenario where
    we don't request to install all the apps for consistency. Recorded in
    milliseconds, from 1 millisecond to 3 minutes.
  </summary>
</histogram>

<histogram name="Webapp.SystemApps.IconsAreHealthyInSession"
    enum="BooleanSuccess" expires_after="2025-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether system web app icons are healthy for each user session that
    has system web apps installed. Failure indicates that at least one app has
    missing or fallback icons.
  </summary>
</histogram>

<histogram name="Webapp.SystemApps.IconsFixedOnReinstall" enum="BooleanSuccess"
    expires_after="2025-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether a reinstall fixes previously broken system web app icons.
    This is recorded during icon check after a reinstall (when icons were broken
    in the last session).
  </summary>
</histogram>

<histogram name="WebApp.Uninstall.NonSyncIncompleteCount"
    units="Partially uninstalled webapps" expires_after="2024-03-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of incomplete uninstalls that were found on startup.
    These web apps are immediately scheduled for uninstall again. This does NOT
    include webapps that uninstalled from sync - any incomplete uninstalls from
    sync cannot be counted.
  </summary>
</histogram>

<histogram name="WebApp.Uninstall.Result" enum="BooleanSuccess"
    expires_after="never">
<!-- expires-never: The dPWA team uses this in chirp alerts to ensure
      uninstallation doesn't start failing. dmurph@ -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records if uninstallation was successful. Uninstall can occur from the user,
    enterprise policy, device policy, or chrome sync.
  </summary>
</histogram>

<histogram name="Webapp.UninstallDialogAction"
    enum="WebappUninstallDialogAction" expires_after="2025-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the user response to the dialog shown when uninstalling a web app.

    Warning: this histogram was expired from 2022-05-22 through M106, data may
    be missing.
  </summary>
</histogram>

<histogram name="Webapp.Update.ManifestUpdateResult"
    enum="WebAppManifestUpdateResult" expires_after="2025-10-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of web app manifest update checks during page
    navigations. Note that &quot;No app in scope&quot; results are ignored due
    to the expected several orders of magnitude higher volume than all other
    update results.
  </summary>
</histogram>

<histogram name="Webapp.WebAppOriginAssociationFetchResult"
    enum="WebAppOriginAssociationFetchResult" expires_after="2025-03-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of web app origin association file fetch when url
    handlers are present. Happens when PWA is installed or updated.
  </summary>
</histogram>

<histogram name="Webapp.WebAppOriginAssociationParseResult"
    enum="WebAppOriginAssociationParseResult" expires_after="2025-03-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of web app origin association file parsing. Happens after
    an web app origin association file is fetched.
  </summary>
</histogram>

<histogram name="Webapp.WebAppUrlLoaderPrepareForLoadResult"
    enum="WebAppUrlLoaderResult" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Records the result of WebAppUrlLoader::PrepareForLoad().</summary>
</histogram>

</histograms>

</histogram-configuration>