<!--
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 Extensions histograms
along with a detailed description for each histogram.

For best practices on writing histogram descriptions, see
https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md

Please follow the instructions in the OWNERS file in this directory to find a
reviewer. If no OWNERS file exists, please consider signing up at
go/reviewing-metrics (Googlers only), as all subdirectories are expected to
have an OWNERS file. As a last resort you can send the CL to
chromium-metrics-reviews@google.com.
-->

<histogram-configuration>

<histograms>

<variants name="ExtensionFunctionExecutionTime">
  <variant name=".1msTo5ms"
      summary="Execution took between 1ms and 5ms (tolerable)."/>
  <variant name=".5msTo10ms"
      summary="Execution took between 5ms and 10ms (slow)."/>
  <variant name=".LessThan1ms" summary="Execution took less than 1ms (fast)."/>
  <variant name=".Over10ms" summary="Execution took over 10ms (glacial)."/>
  <variant name=".Over270s"
      summary="Execution took over 4 and half minutes, close to timeout."/>
</variants>

<variants name="ExtensionMessagingPortType">
  <variant name=".Extension" summary="A port opened to an extension context."/>
  <variant name=".NativeApp" summary="A port opened to a native application."/>
  <variant name=".Tab" summary="A port opened to a tab context."/>
</variants>

<histogram name="ExtensionBlacklist.BlacklistInstalled"
    enum="ExtensionLocation" expires_after="2023-11-18">
  <owner>anunoy@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The number of extensions that were blocklisted when already installed,
    grouped by Extension::Location. Logged when ExtensionService blockists and
    unloads an installed extension.
  </summary>
</histogram>

<histogram name="ExtensionBlacklist.BlockCRX" enum="ExtensionLocation"
    expires_after="2023-11-18">
  <owner>anunoy@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The number of extensions that have been blocked from installing grouped by
    Extension::Location. Logged when ExtensionService refuses to install a
    blocklisted extension.
  </summary>
</histogram>

<histogram name="ExtensionBlacklist.SilentInstall" enum="ExtensionLocation"
    expires_after="2023-11-18">
  <owner>anunoy@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The number of extensions that have been silently installed in a blocklisted
    state, grouped by Extension::Location. Logged when ExtensionService installs
    a blocklisted extension without blocking it (ExtensionBlacklist.BlockCRX
    would be logged otherwise). Typically this will be when a user has a
    blocklisted extension synced.
  </summary>
</histogram>

<histogram name="ExtensionBlacklist.UnblacklistInstalled"
    enum="ExtensionLocation" expires_after="2023-11-18">
  <owner>anunoy@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The number of extensions that were unblocklisted when installed, grouped by
    Extension::Location. Logged when ExtensionService unblocklists and loads a
    blocklisted extension.
  </summary>
</histogram>

<histogram name="ExtensionContentHashFetcher.CreateHashesTime" units="ms"
    expires_after="never">
<!-- expires-never: Used for monitoring extension content verification latency. -->

  <owner>lazyboy@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The time taken to create the computed_hashes.json file for an extension.
    This happens once for each extension after we get signed values of the
    expected root node of a tree hashes for each file from the webstore; we then
    compute the individual block level hashes of the actual files and cache them
    in computed_hashes.json (assuming we don't detect any mismatches).
  </summary>
</histogram>

<histogram name="ExtensionContentVerifyJob.TimeSpentUS" units="microseconds"
    expires_after="2020-11-30">
  <owner>lazyboy@chromium.org</owner>
  <summary>
    The time taken in computation (hashing actual bytes read and comparing
    against expected computed hashes values) during an extension resource load.

    Warning: This metric may include reports from clients with low-resolution
    clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
    will cause this metric to have an abnormal distribution. When considering
    revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
    solution.
  </summary>
</histogram>

<histogram name="Extensions.ActionSetIconFailureType"
    enum="ExtensionActionSetIconFailureType" expires_after="M88">
  <obsolete>
    Code removed 2022/12.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The cause for the failure in the setIcon() extension API function. This is
    temporary logging to help track down the cause of a crash.
  </summary>
</histogram>

<histogram name="Extensions.ActiveScriptController.DeniedExtensions"
    units="Extension Count" expires_after="2023-10-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of extensions on a page that wanted to execute a script, required
    explicit user consent, and were denied permission.
  </summary>
</histogram>

<histogram name="Extensions.ActiveScriptController.PermittedExtensions"
    units="Extension Count" expires_after="2023-09-03">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of extensions on a page that wanted to execute a script, required
    explicit user consent, and were granted permission.
  </summary>
</histogram>

<histogram name="Extensions.AlarmManager.AlarmsLoadedCount" units="alarms"
    expires_after="2023-12-01">
  <owner>dbertoni@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of alarms loaded from storage when an extension is loaded.
  </summary>
</histogram>

<histogram name="Extensions.AppLaunch" enum="AppLaunch"
    expires_after="2023-10-08">
  <owner>benwells@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <owner>tapted@chromium.org</owner>
  <summary>
    The number of times v1 apps are launched grouped by
    extension_misc::AppLaunchBuckets. See also Apps.AppLaunch for v2 apps. Note
    this was changed in 2023-02 to no longer count web app launches.
  </summary>
</histogram>

<histogram name="Extensions.AppLaunchSource" enum="AppLaunchSource"
    expires_after="2022-06-30">
  <owner>benwells@chromium.org</owner>
  <owner>cylee@chromium.org</owner>
  <summary>
    The number of times apps are launched grouped by
    extensions::AppLaunchSource.
  </summary>
</histogram>

<histogram name="Extensions.AppLoadedInTab" enum="AppLoadedInTabSource"
    expires_after="M77">
  <owner>lazyboy@chromium.org</owner>
  <summary>
    A platform app ended up in a regular tab either by the app page or its
    background page. Note that this happens unexpectedly right now and we wish
    to track its usage before removing the supporting code.
  </summary>
</histogram>

<histogram name="Extensions.AppLocation" enum="ExtensionLocation"
    expires_after="2022-06-30">
  <owner>benwells@chromium.org</owner>
  <owner>tapted@chromium.org</owner>
  <summary>
    The number of apps loaded on profile open time grouped by
    Extension::Location.
  </summary>
</histogram>

<histogram name="Extensions.AppLocation2" enum="ExtensionLocation"
    expires_after="2024-01-01">
  <owner>benwells@chromium.org</owner>
  <owner>tapted@chromium.org</owner>
  <summary>
    The number of apps loaded on profile open time grouped by
    Extension::Location.
  </summary>
</histogram>

<histogram name="Extensions.AppsPromo" enum="AppPromoAction"
    expires_after="2022-06-30">
  <owner>benwells@chromium.org</owner>
  <owner>tapted@chromium.org</owner>
  <summary>
    The actions taken in the NTP apps promo grouped by
    extension_misc::AppsPromoBuckets.
  </summary>
</histogram>

<histogram name="Extensions.AppTabLaunchType" enum="ExtensionLaunchType"
    expires_after="2023-03-11">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of extension apps launched grouped by extensions::LaunchType.
    From 2022-09 this no longer includes web app launches.
  </summary>
</histogram>

<histogram name="Extensions.AttemptedToDowngradeVersionLocation"
    enum="ExtensionLocation" expires_after="2022-11-18">
  <obsolete>
    Code removed 2022/12.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The extension install location of an extension that Chrome attempted to add,
    but failed because it would downgrade the version. Tracking for
    https://crbug.com/810799.
  </summary>
</histogram>

<histogram name="Extensions.BackgroundHostCreatedForExtension"
    enum="BackgroundHostCreatedForExtensionValues" expires_after="2023-09-10">
  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Recorded when a background host is created for an extension. The value
    indicates for which extension the host was created.

    The breakdown of extensions that make up the &quot;Other extension&quot;
    bucket can be derived from the LoadCountsPerTopLevelDocument UKM event. To
    compare UKM event counts with UMA sample counts, use this formula:

    count of UKM events for a given extension * count of samples in the
    &quot;Other extension&quot; bucket of this histogram / count of UKM events
    for all extensions

    Extensions bundled with Chrome have dedicated values in this histogram
    because they are not synced and therefore not reported through UKM.
  </summary>
</histogram>

<histogram name="Extensions.BackgroundPageLoadTime2" units="ms"
    expires_after="2023-10-08">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The time taken for an extension's persistent background page to load its
    initial URL.
  </summary>
</histogram>

<histogram name="Extensions.BackgroundPageType"
    enum="ExtensionBackgroundPageType" expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The type (if any) of background page the extension has. Recorded for
    installed extensions on profile open.
  </summary>
</histogram>

<histogram name="Extensions.BackgroundPageType2"
    enum="ExtensionBackgroundPageType" expires_after="never">
<!-- expires-never: Used for monitoring user extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The type (if any) of background page the extension has. Recorded for
    installed extensions on profile open for &quot;user profiles&quot; (profiles
    where people can install extensions, specifically profiles that can have
    non-component extensions installed.
  </summary>
</histogram>

<histogram name="Extensions.BadMessageFunctionName" enum="ExtensionFunctions"
    expires_after="never">
<!-- expires-never: Monitoring core extension system health. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of times each Extension function call sends a bad message,
    killing the renderer. This may indicate a bug in that API's implementation
    on the renderer. Note a similar, aggregate metric is BadMessageTerminate_EFD
    which counts the number of bad messages that are sent overall.
  </summary>
</histogram>

<histogram name="Extensions.BadSyncDataReason" enum="BadSyncDataReason"
    expires_after="never">
<!-- expires-never: Monitoring core extension system health. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The reason a valid ExtensionSyncData could not be parsed from a SyncData
    received from sync.
  </summary>
</histogram>

<histogram name="Extensions.Bindings.NativeBindingCreationTime"
    units="microseconds" expires_after="2023-01-22">
  <obsolete>
    Code removed 2022/12.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The elapsed time to create a new full instance of an extension API's
    bindings using native bindings.

    Warning: This metric may include reports from clients with low-resolution
    clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
    will cause this metric to have an abnormal distribution. When considering
    revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
    solution.
  </summary>
</histogram>

<histogram name="Extensions.BookmarkAppLaunchContainer"
    enum="AppLaunchContainer" expires_after="2023-08-14">
  <obsolete>
    Replaced by WebApp.LaunchContainer in M113.
  </obsolete>
  <owner>phillis@chromium.org</owner>
  <owner>benwells@chromium.org</owner>
  <owner>dominickn@chromium.org</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="Extensions.BookmarkAppLaunchSource" enum="AppLaunchSource"
    expires_after="2023-07-09">
  <obsolete>
    Replaced by WebApp.LaunchSource in M113.
  </obsolete>
  <owner>phillis@chromium.org</owner>
  <owner>benwells@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    The number of times web apps are launched, grouped by
    extensions::AppLaunchSource. The equivalent histogram on Android is called
    Launch.HomeScreenSource.
  </summary>
</histogram>

<histogram name="Extensions.ContentScripts.ContentScriptLength" units="KB"
    expires_after="2023-11-22">
  <owner>kelvinjiang@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The size, in KB, of a content script that is loaded successfully from a
    file. Recorded when the content of a user script object is set.
  </summary>
</histogram>

<histogram name="Extensions.ContentScripts.DynamicContentScriptsLengthPerLoad"
    units="KB" expires_after="2023-12-02">
  <owner>kelvinjiang@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The size, in KB, of all newly loaded dynamic content scripts for one
    extension. Recorded when a script load containing at least one new dynamic
    content script finishes.
  </summary>
</histogram>

<histogram name="Extensions.ContentScripts.ManifestContentScriptsLengthPerLoad"
    units="KB" expires_after="2023-12-02">
  <owner>kelvinjiang@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The size, in KB, of all newly loaded manifest content scripts for one
    extension. Recorded when a script load containing at least one new manifest
    content script finishes.
  </summary>
</histogram>

<histogram name="Extensions.ContentVerification.ComputeHashesOnInstallResult"
    enum="BooleanSuccess" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>lazyboy@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Whether or not computed_hashes.json file was successfully generated and
    written during extension installation. Recorded during installation of an
    extension if hashes computing was requested for this specifix extension.
    Hashes computing on installation is used for off-store policy-based
    extensions since we need them to be checked against corruption and cannot
    use Chrome Web Store for source of hashes.
  </summary>
</histogram>

<histogram name="Extensions.ContentVerification.ComputeHashesOnInstallTime"
    units="ms" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>lazyboy@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The time taken to successfully create the computed_hashes.json file for an
    extension upon installation. The histogram is collected with
    &amp;Extensions.ContentVerification.ComputeHashesOnInstallResult&amp; (in
    case of success).
  </summary>
</histogram>

<histogram name="Extensions.ContentVerification.FetchFailureError"
    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>lazyboy@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Error info for fetching verified_contents.json. Recorded when the file
    wasn't available locally and we failed to fetch it from network. Note that
    OK may also be reported in some cases, for example, when file was
    successfully fetched, but is incorrect.
  </summary>
</histogram>

<histogram name="Extensions.ContentVerification.FetchResult"
    enum="BooleanSuccess" expires_after="2023-09-01">
  <owner>vkovalova@google.com</owner>
  <owner>lazyboy@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Whether or not fetching verified_contents.json succeeded. Recorded when the
    file wasn't available locally and we needed to fetch it from network.

    Warning: this histogram was expired from 2022-02-01 to 2022-09-22; data may
    be missing.
  </summary>
</histogram>

<histogram name="Extensions.ContentVerification.ReadContentHashTime" units="ms"
    expires_after="2020-11-30">
  <owner>lazyboy@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Time spent by ContentVerifier for a request to create a ContentHash
    instance. Recorded during an extension load completion or during an on
    demand content verification that was triggered by ContentVerifyJob.
  </summary>
</histogram>

<histogram name="Extensions.ContextMenuAction"
    enum="ExtensionContextMenuAction" expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Records the action taken by the user from the extension icon context menu.
  </summary>
</histogram>

<histogram name="Extensions.CorruptedExtensionLocation"
    enum="ExtensionLocation" expires_after="2022-01-01">
  <obsolete>
    Obsolete in M100.
  </obsolete>
  <owner>ydago@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Records the manifest location of a corrupted extension that will be
    reinstalled silently. Fires when we suspect corruption in an extension and
    begin the process of reinstalling it.
  </summary>
</histogram>

<histogram name="Extensions.CorruptExtensionDisabledReason"
    enum="CorruptExtensionDisabledReason" expires_after="2022-12-01">
  <owner>lazyboy@chromium.org</owner>
  <owner>rockot@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The reason why an extension was detected to be corrupted. Recorded each time
    an extension is disabled due to corruption detection.
  </summary>
</histogram>

<histogram name="Extensions.CorruptExtensionTotalDisables" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>jlulejian@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Logged once on profile open, this is the value of a counter that is
    incremented anytime we disable a corrupted extension because its content
    didn't match an expected content hash.
  </summary>
</histogram>

<histogram name="Extensions.CorruptExtensionTotalDisables2" units="units"
    expires_after="never">
<!-- expires-never: Used for monitoring corrupt extensions. -->

  <owner>jlulejian@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Logged once on profile open for &quot;user profiles&quot; (profiles where
    people can install extensions, specifically profiles that can have
    non-component extensions installed. This is the value of a counter that is
    incremented anytime we disable a corrupted extension because its content
    didn't match an expected content hash.
  </summary>
</histogram>

<histogram name="Extensions.CorruptPolicyExtensionDetected3"
    enum="ExtensionPolicyReinstallReason" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>lazyboy@chromium.org</owner>
  <owner>poromov@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Fires when we suspect corruption in an enterprise policy forced install
    extension and begin the process of reinstalling it, saving reason of such
    suspection. Compare to CorruptPolicyExtensionResolved to judge success rate.
    Note that if extension was not reinstalled in the session when corruption
    was found, it will be detected again (possible several times, every session
    start will trigger a detection until the extension will be fixed), but as
    CORRUPTION_DETECTED_IN_PRIOR_SESSION.
  </summary>
</histogram>

<histogram name="Extensions.CorruptPolicyExtensionResolved" units="ms"
    expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>lazyboy@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    Fires when we've successfully resinstalled a corrupt enterprise policy
    force-installed extension, with a value indicating how long it took
    end-to-end to complete the reinstall (including download time).
  </summary>
</histogram>

<histogram name="Extensions.CreateWindowHeight" units="pixels"
    expires_after="2023-03-31">
  <owner>emiliapaz@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>Height of the window created via chrome.windows.create.</summary>
</histogram>

<histogram name="Extensions.CreateWindowWidth" units="pixels"
    expires_after="2023-03-31">
  <owner>emiliapaz@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>Width of the window created via chrome.windows.create.</summary>
</histogram>

<histogram name="Extensions.Database.Database.Restore"
    enum="LevelDBDatabaseCorruptionRestoreValue" expires_after="M85">
  <owner>cmumford@chromium.org</owner>
  <summary>
    The result of an attempt to recover from an attempt to open a database that
    failed as a result of corruption.
  </summary>
</histogram>

<histogram name="Extensions.Database.Open{ExtensionsDatabaseOpen}"
    enum="LevelDBStatus" expires_after="never">
<!-- expires-never: core storage metric; consumed in separate dashboard (go/chrome-storage-dashboard) -->

  <owner>dmurph@chromium.org</owner>
  <owner>pwnall@chromium.org</owner>
  <summary>
    The result of an open attempt to an Extensions database.
    {ExtensionsDatabaseOpen}
  </summary>
  <token key="ExtensionsDatabaseOpen">
    <variant name=""/>
    <variant name=".Rules" summary="Rules backing stores"/>
    <variant name=".Scripts" summary="Scripts backing stores"/>
    <variant name=".Settings" summary="Settings backing stores"/>
    <variant name=".State" summary="State backing stores"/>
    <variant name=".WebAppsLockScreen" summary="Web apps lock screen stores"/>
  </token>
</histogram>

<histogram name="Extensions.Database.Value.Restore"
    enum="LevelDBValueCorruptionDeleteValue" expires_after="M85">
  <owner>cmumford@chromium.org</owner>
  <summary>
    The result of an attempt to delete a corrupted value from a database.
  </summary>
</histogram>

<histogram name="Extensions.Debugger.UserIsInDeveloperMode"
    enum="InDeveloperMode" expires_after="2023-01-15">
  <owner>ghazale@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Reports whether the debugger API is called while the user has extensions
    developer mode enabled. This excludes extensions installed by the enterprise
    policy and component extensions. The stat is emitted when the
    debugger.attach extension function is called.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeAPIFunctionCalls"
    enum="DeclarativeAPIFunctionType" expires_after="never">
<!-- expires-never: For monitoring usage of declarative APIs. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Number of calls to the declarative API extension functions. This includes
    the declarativeContent and declarativeWebRequest APIs. Emitted when the
    extension function is called.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeContentActionCreated"
    enum="DeclarativeContentActionType" expires_after="2023-09-20">
  <owner>kelvinjiang@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Number of times a declarative content action is created within an extension.
    Emitted when a new declarative content action is created.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.CreateVerifiedMatcherTime"
    units="ms" expires_after="2023-08-28">
  <owner>kelvinjiang@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Measures the time taken to load a single indexed ruleset in the browser
    process for an extension. This includes reading the indexed ruleset file and
    verifying it. Emitted whenever a single file-backed extension ruleset is
    loaded.
  </summary>
</histogram>

<histogram
    name="Extensions.DeclarativeNetRequest.EvaluateBeforeRequestTime.SingleExtension2"
    units="microseconds" expires_after="2023-10-01">
  <owner>kelvinjiang@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Time taken to evaluate the before-request action for a network request for a
    single extension ruleset. Emitted for each network request that is visible
    to the extension. This is only emitted for users with high resolution
    clocks.
  </summary>
</histogram>

<histogram
    name="Extensions.DeclarativeNetRequest.EvaluateRequestTime.AllExtensions3"
    units="microseconds" expires_after="2023-10-01">
  <owner>kelvinjiang@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Time taken to evaluate the action to take for the network request as per the
    Declarative Net Request API. This includes the time taken to evaluate all
    the extension rulesets. Emitted for non-sensitive network requests seen by
    the Extension System when there is at least one active extension ruleset.
    This is only emitted for users with high resolution clocks.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.IndexAndPersistRulesTime"
    units="ms" expires_after="2023-10-01">
  <owner>lazyboy@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Time taken to index and persist to disk, the deserialized json rules
    provided by an extension manifest for the Declarative Net Request API. This
    is emitted whenever a packaged extension with a declarative ruleset is
    installed or updated.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.IsLargeRegexRule"
    enum="RegexRuleStatus" expires_after="2023-11-14">
  <owner>kelvinjiang@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Logs whether a regex rule wasn't indexed since it exceeded the per-rule
    memory limit. Emitted for every regex rule an extension adds.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.LoadRulesetResult"
    enum="LoadRulesetResult" expires_after="2023-08-27">
  <owner>kelvinjiang@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Records the result of loading an extension ruleset for the Declarative Net
    Request API. Emitted whenever a single extension ruleset is loaded.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.ManifestEnabledRulesCount2"
    units="rules" expires_after="2023-10-22">
  <owner>kelvinjiang@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    The number of enabled indexed declarative rules provided by an extension
    manifest for the Declarative Net Request API. This is emitted whenever a
    packaged extension with a declarative ruleset is installed or updated.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.ReadDynamicRulesJSONStatus"
    enum="ReadDynamicRulesJSONStatus" expires_after="2023-06-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Indicates the result of reading the dynamic JSON rules for an extension from
    the disk. Logged whenever an extension calls the getDynamicRules extension
    function or when it updates the dynamic rules through a call to
    addDynamicRules or removeDynamicRules.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.RequestHeaderAdded"
    enum="WebRequest.RequestHeader" expires_after="2023-08-08">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>kelvinjiang@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Records the request header added by extensions using the
    DeclarativeNetRequest API. Recorded for each network request during the
    OnBeforeSendHeaders stage. Multiple samples can be recorded per request.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.RequestHeaderChanged"
    enum="WebRequest.RequestHeader" expires_after="2023-12-22">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>kelvinjiang@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Records the request header modified by extensions using the
    DeclarativeNetRequest API. Recorded for each network request during the
    OnBeforeSendHeaders stage. Multiple samples can be recorded per request.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.RequestHeaderRemoved"
    enum="WebRequest.RequestHeader" expires_after="2023-12-12">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>kelvinjiang@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Records the request header removed by extensions using the
    DeclarativeNetRequest API. Recorded for each network request during the
    OnBeforeSendHeaders stage. Multiple samples can be recorded per request.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.ResponseHeaderAdded"
    enum="WebRequest.ResponseHeader" expires_after="2023-12-22">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>kelvinjiang@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Records the response header added by extensions using the
    DeclarativeNetRequest API. Recorded for each network request during the
    OnHeadersReceived stage. Multiple samples can be recorded per request.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.ResponseHeaderChanged"
    enum="WebRequest.ResponseHeader" expires_after="2023-12-22">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>kelvinjiang@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Records the response header modified by extensions using the
    DeclarativeNetRequest API. Recorded for each network request during the
    OnHeadersReceived stage. Multiple samples can be recorded per request.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.ResponseHeaderRemoved"
    enum="WebRequest.ResponseHeader" expires_after="2023-12-22">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>kelvinjiang@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Records the response header removed by extensions using the
    DeclarativeNetRequest API. Recorded for each network request during the
    OnHeadersReceived stage. Multiple samples can be recorded per request.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.RulesetReindexSuccessful"
    enum="BooleanSuccess" expires_after="2023-07-31">
  <owner>lazyboy@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Indicates whether reindexing of a Declarative Net Request ruleset was
    successful. Called whenever a JSON ruleset for an extension is reindexed,
    e.g. on ruleset corruption. Note: this is emitted for both static and
    dynamic rulesets.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.UpdateDynamicRulesStatus"
    enum="UpdateDynamicRulesStatus" expires_after="2023-06-26">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Indicates the result of an extension function call to add or remove dynamic
    rules. Logged every time an extension calls the addDynamicRules or
    removeDynamicRules extension function.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeRulesStorageInitialization" units="ms"
    expires_after="M85">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Time spent until rules storage delegate gets ready.</summary>
</histogram>

<histogram name="Extensions.DeclarativeSetIconWasVisible" enum="BooleanVisible"
    expires_after="2019-09-07">
  <owner>dbertoni@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Reports whether an icon specified in the declarativeContent.SetIcon API is
    considered visible by our icon analysis code. This stat is emitted when we
    create the underlying object that sets the icon when the declarative rule is
    applied.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeSetIconWasVisibleRendered"
    enum="BooleanVisible" expires_after="2019-09-07">
  <owner>dbertoni@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Reports whether an icon specified in the declarativeContent.SetIcon API is
    considered visible by our icon analysis code. This stat is emitted when we
    create the underlying object that sets the icon when the declarative rule is
    applied.

    This replaces the previous stat, DeclarativeSetIconWasVisibleRendered, due
    to a change to our analysis algorithm. The new algorithm renders the icon
    against the toolbar background color and determines how visible the
    resulting pixels are.
  </summary>
</histogram>

<histogram name="Extensions.DevTools.UserIsInDeveloperMode"
    enum="InDeveloperMode" expires_after="2023-07-02">
  <owner>ghazale@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Reports whether DevTools extensions are being loaded while the user has
    extensions developer mode enabled. This excludes extensions installed by the
    enterprise policy and component extensions.
  </summary>
</histogram>

<histogram name="Extensions.DidCreateScriptContext_Blessed" units="ms"
    expires_after="2023-12-15">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
    the time taken to install Extension JavaScript bindings per blessed
    extension context (chrome-extension://... origins within Extension
    processes, like background pages, options pages, popups).
  </summary>
</histogram>

<histogram name="Extensions.DidCreateScriptContext_BlessedWebPage" units="ms"
    expires_after="2023-12-15">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
    the time taken to install Extension JavaScript bindings per blessed web page
    context (hosted apps).
  </summary>
</histogram>

<histogram name="Extensions.DidCreateScriptContext_ContentScript" units="ms"
    expires_after="2023-12-15">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
    the time taken to install Extension JavaScript bindings per content script
    context.
  </summary>
</histogram>

<histogram name="Extensions.DidCreateScriptContext_LockScreenExtension"
    units="units" expires_after="2023-12-15">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
    the time taken to install Extension JavaScript bindings per content script
    context. This histogram measures the time to install Extension Javascript
    bindings in a context for a platform app enabled on the Chrome OS lock
    screen.
  </summary>
</histogram>

<histogram name="Extensions.DidCreateScriptContext_Unblessed" units="ms"
    expires_after="2023-12-15">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
    the time taken to install Extension JavaScript bindings per unblessed
    extension context (chrome-extension://... origins hosted in iframes).
  </summary>
</histogram>

<histogram name="Extensions.DidCreateScriptContext_Unspecified" units="ms"
    expires_after="2023-12-15">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
    the time taken to install Extension JavaScript bindings in an unknown type
    of context (this should never happen other than in bizarre circumstances).
  </summary>
</histogram>

<histogram name="Extensions.DidCreateScriptContext_WebPage" units="ms"
    expires_after="2023-12-15">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
    the time taken to install Extension JavaScript bindings per web page context
    (just the chrome.app, chrome.webstore, and possibly chrome.runtime APIs).
  </summary>
</histogram>

<histogram name="Extensions.DidCreateScriptContext_WebUI" units="ms"
    expires_after="2023-12-15">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
    the time taken to install Extension JavaScript bindings per WebUI context
    (chrome://extensions and so forth).
  </summary>
</histogram>

<histogram name="Extensions.DidInitializeServiceWorkerContextOnWorkerThread"
    units="ms" expires_after="2023-12-15">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Records the time taken to install Extension JavaScript bindings per service
    worker context.
  </summary>
</histogram>

<histogram name="Extensions.Disabled" units="units" expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions that are disabled at browser profile open.
  </summary>
</histogram>

<histogram name="Extensions.Disabled2" units="units" expires_after="never">
<!-- expires-never: Used for monitoring user extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of extensions that are disabled at browser profile open for
    &quot;user profiles&quot; (profiles where people can install extensions,
    specifically profiles that can have non-component extensions installed).
  </summary>
</histogram>

<histogram name="Extensions.DisabledForPermissions" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions that are disabled at browser profile open due to
    permissions increases.
  </summary>
</histogram>

<histogram name="Extensions.DisabledForPermissions2" units="units"
    expires_after="never">
<!-- expires-never: Used for monitoring user extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of extensions that are disabled at browser profile open for
    &quot;user profiles&quot; (profiles where people can install extensions,
    specifically profiles that can have non-component extensions installed) due
    to permissions increases.
  </summary>
</histogram>

<histogram name="Extensions.DisableReason" enum="ExtensionDisableReason"
    expires_after="2022-08-28">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The count of disabled extensions on profile open grouped by disble reason
    from disable_reason::DisableReason. When an extension is disabled, it can be
    for one or more reasons (although typically just one), so the sum of these
    may be greater than 'Extensions.Disabled' which is a count of the number of
    unique extensions that are disabled.
  </summary>
</histogram>

<histogram name="Extensions.DisableReason2" enum="ExtensionDisableReason"
    expires_after="2024-01-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The count of disabled extensions on profile open for &quot;user
    profiles&quot; (profiles where people can install extensions, specifically
    profiles that can have non-component extensions installed). Grouped by
    disable reason from disable_reason::DisableReason. When an extension is
    disabled, it can be for one or more reasons (although typically just one),
    so the sum of these may be greater than 'Extensions.Disabled' which is a
    count of the number of unique extensions that are disabled.
  </summary>
</histogram>

<histogram name="Extensions.DynamicExtensionActionIconWasVisible"
    enum="BooleanVisible" expires_after="2019-09-07">
  <owner>dbertoni@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Reports whether a call to set a dynamic icon in the toolbar passed an icon
    considered visible by our icon analysis code.
  </summary>
</histogram>

<histogram name="Extensions.DynamicExtensionActionIconWasVisibleRendered"
    enum="BooleanVisible" expires_after="2019-09-07">
  <owner>dbertoni@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Reports whether a call to set a dynamic icon in the toolbar passed an icon
    considered visible by our icon analysis code.

    This replaces the previous stat, DynamicExtensionActionIconWasVisible, due
    to a change to our analysis algorithm. The new algorithm renders the icon
    against the toolbar background color and determines how visible the
    resulting pixels are.
  </summary>
</histogram>

<histogram name="Extensions.ErrorCodeFromCrxOpen" units="units"
    expires_after="M85">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    If opening the CRX file for unpacking fails, this integer is the error code
    given by the OS.
  </summary>
</histogram>

<histogram name="Extensions.EsbAllowlistOmahaAttribute"
    enum="ExtensionAllowlistOmahaAttributeValue" expires_after="2023-10-01">
  <owner>jeffcyr@google.com</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Reports the value of the Safe Browsing CRX allowlist custom omaha attribute
    when an update check occurs for an extension.
  </summary>
</histogram>

<histogram name="Extensions.EventlessEventPages" units="units"
    expires_after="2022-06-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of extensions with event pages that have no registered event
    listeners at profile startup. (This may indicate something has gone wrong;
    such event pages will never get started.)
  </summary>
</histogram>

<histogram name="Extensions.EventPageActiveTime2" units="ms"
    expires_after="never">
<!-- expires-never: Monitoring core extensions platform behavior. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The time between an extension's event page loading its first URL and the
    event page later shutting down.
  </summary>
</histogram>

<histogram name="Extensions.EventPageIdleTime" units="ms"
    expires_after="2023-12-15">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>The time an extension's event page has spent unloaded.</summary>
</histogram>

<histogram name="Extensions.EventPageLoadTime2" units="ms"
    expires_after="never">
<!-- expires-never: Monitoring core extensions platform behavior. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The time taken for an extension's event page to load its initial URL.
  </summary>
</histogram>

<histogram name="Extensions.Events.Dispatch" enum="ExtensionEvents"
    expires_after="never">
<!-- expires-never: Monitoring core extensions platform behavior. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>Recorded every time an event is dispatched to an extension.</summary>
</histogram>

<histogram name="Extensions.Events.DispatchToComponent" enum="ExtensionEvents"
    expires_after="never">
<!-- expires-never: Monitoring core extensions platform behavior. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Recorded every time an event is dispatched to a *component* extension.
    Otherwise identical to Extensions.Events.Dispatched.
  </summary>
</histogram>

<histogram name="Extensions.Events.DispatchWithPersistentBackgroundPage"
    enum="ExtensionEvents" expires_after="never">
<!-- expires-never: Monitoring core extensions platform behavior. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Recorded every time an event is dispatched to an extension with a persistent
    background page. The event may or may not have been dispatched to the
    background page itself, for example it may have been dispatched to its
    popup. When this metric is recorded, Extensions.Events.Dispatch will also be
    recorded.
  </summary>
</histogram>

<histogram name="Extensions.Events.DispatchWithRunningEventPage"
    enum="ExtensionEvents" expires_after="never">
<!-- expires-never: Monitoring core extensions platform behavior. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Recorded every time an event is dispatched to an extension with an event
    page that was already running (i.e. at some point had been woken from its
    suspended state, see Extensions.Events.DispatchWithSuspendedEventPage). The
    event may or may not have been dispatched to the event page itself, for
    example it may have been dispatched to its popup. When this metric is
    recorded, Extensions.Events.Dispatch will also be recorded.
  </summary>
</histogram>

<histogram name="Extensions.Events.DispatchWithServiceWorkerBackground"
    enum="ExtensionEvents" expires_after="2022-12-05">
  <owner>lazyboy@chromium.org</owner>
  <owner>dbertoni@chromium.org</owner>
  <summary>
    Recorded every time an event is dispatched to a service worker based
    extension background context. When this metric is recorded,
    Extensions.Events.Dispatch will also be recorded.
  </summary>
</histogram>

<histogram name="Extensions.Events.DispatchWithSuspendedEventPage"
    enum="ExtensionEvents" expires_after="never">
<!-- expires-never: Monitoring core extensions platform behavior. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Recorded every time an event is dispatched to an extension with an event
    page that was suspended. This implies that firing this event woke up the
    event page. The event may or may not have been dispatched to the event page
    itself, for example it may have been dispatched to its popup, but regardless
    it will wake the event page. When this metric is recorded,
    Extensions.Events.Dispatch will also be recorded.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionAddDisabledRemotelyReason2"
    enum="ExtensionUpdateCheckDataKey" expires_after="2023-08-11">
  <owner>anunoy@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Recorded when a new violation is retrieved from Omaha for an extension. The
    new violation reason is retrieved from the update service data key reasons
    during an update check for extensions. This metric was added in M92 to
    replace the old version, because the logic of logging greylisted extensions
    has changed.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionCacheCount" units="units"
    expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    Number of cached extensions on disk. Reported on Chrome OS during user
    session start.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionCacheSize" units="MB"
    expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    Total size of .crx files in cache on disk. Reported on Chrome OS during user
    session start.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionDisabledRemotely2"
    enum="ExtensionUpdateCheckDataKey" expires_after="2023-08-11">
  <owner>anunoy@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Recorded when an extension that was previously enabled is disabled due to a
    new violation retrieved from Omaha. This is recorded when the violation is
    detected when Chrome checks for an update for the extension. This metric was
    added in M92 to replace the old version, because the logic of logging
    greylisted extensions has changed.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionInstalled" units="units"
    expires_after="never">
<!-- expires-never: Monitoring core extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Emitted when an extension is downloaded by the user (including webstore
    installs).
  </summary>
</histogram>

<histogram name="Extensions.ExtensionLocation" enum="ExtensionLocation"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The install location for a given extension. Recorded once per enabled
    extension on profile initialization.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionLocation2" enum="ExtensionLocation"
    expires_after="never">
<!-- expires-never: Monitoring core extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The install location for a given extension. Recorded once per enabled
    extension on profile initialization for &quot;user profiles&quot; (profiles
    where people can install extensions, specifically profiles that can have
    non-component extensions installed).
  </summary>
</histogram>

<histogram name="Extensions.ExtensionReenabledRemotely" units="count"
    expires_after="2023-10-15">
  <owner>anunoy@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Recorded when an extension that was previously only disabled remotely is
    re-enabled remotely during an update service session.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionReenabledRemotely{BlocklistState}"
    units="count" expires_after="2023-06-10">
  <owner>anunoy@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Recorded when a {BlocklistState} extension that was previously only disabled
    remotely is re-enabled remotely during an update service session.
  </summary>
  <token key="BlocklistState">
    <variant name="ForPolicyViolation" summary="policy violation"/>
    <variant name="ForPotentiallyUWS" summary="potentially unwanted"/>
  </token>
</histogram>

<histogram name="Extensions.ExtensionRootPathLength" units="units"
    expires_after="M85">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Length of the Extensions dir path inside the profile directory.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionsWithPageActions" units="units"
    expires_after="2024-01-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of Extensions that have Page Actions. Measured once per profile
    open for &quot;user profile&quot; (profiles where people can install
    extensions, specifically profiles that can have non-component extensions
    installed). Replaced previous version
    (PageActionController.ExtensionsWithPageActions).
  </summary>
</histogram>

<histogram name="Extensions.ExtensionUninstalled" units="units"
    expires_after="2022-05-01">
  <obsolete>
    Code removed 2022/12.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>An extension has been uninstalled.</summary>
</histogram>

<histogram name="Extensions.ExternalItemState" enum="ExternalItemState"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>anunoy@chromium.org</owner>
  <summary>
    The number of sideloaded apps/extensions loaded on profile open grouped by
    enabled/disabled state.
  </summary>
</histogram>

<histogram name="Extensions.ExternalItemState2" enum="ExternalItemState"
    expires_after="2024-01-01">
  <owner>anunoy@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of sideloaded apps/extensions loaded on profile open for
    &quot;user profiles&quot; (profiles where people can install extensions,
    specifically profiles that can have non-component extensions installed).
    Grouped by enabled/disabled state.
  </summary>
</histogram>

<histogram name="Extensions.ExternalJsonCount" units="units"
    expires_after="M77">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of extensions referenced in the external extensions source at path
    chrome::DIR_EXTERNAL_EXTENSIONS.
  </summary>
</histogram>

<histogram name="Extensions.FaviconResourceRequested" enum="ExtensionType"
    expires_after="2021-01-31">
  <owner>archanasimha@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Records when an extension with the chrome://favicon host permission makes a
    network level request for a favicon resource.
  </summary>
</histogram>

<histogram name="Extensions.FeatureProviderStaticInitTime" units="ms"
    expires_after="M90">
  <obsolete>
    Code removed 2022/12.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The amount of time that elapsed during extensions::FeatureProvider::Static.
    Only measured while in the browser process.
  </summary>
</histogram>

<histogram name="Extensions.FileAccessAllowed" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions (and friends) that could have been given access to
    the file:// scheme, and were, for users that have at least one extension
    that could have been given access. This excludes anything that doesn't show
    up in chrome://extensions (platform apps, hosted apps, component
    extensions), policy-installed extensions, and unpacked extensions. See also
    Extensions.FileAccessNotAllowed.
  </summary>
</histogram>

<histogram name="Extensions.FileAccessAllowed2" units="units"
    expires_after="2024-01-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of extensions (and friends) that could have been given access to
    the file:// scheme, and were, for users that have at least one extension
    that could have been given access. This excludes anything that doesn't show
    up in chrome://extensions (platform apps, hosted apps, component
    extensions), policy-installed extensions, and unpacked extensions. Logged
    once per profile open for &quot;user profiles&quot; (profiles where people
    can install extensions, specifically profiles that can have non-component
    extensions installed). See also Extensions.FileAccessNotAllowed.
  </summary>
</histogram>

<histogram name="Extensions.FileAccessNotAllowed" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions (and friends) that could have been given access to
    the file:// scheme, but weren't, for users that have at least one extension
    that could have been given access. This excludes anything that doesn't show
    up in chrome://extensions (platform apps, hosted apps, component
    extensions), policy-installed extensions, and unpacked extensions. See also
    Extensions.FileAccessAllowed.
  </summary>
</histogram>

<histogram name="Extensions.FileAccessNotAllowed2" units="units"
    expires_after="2024-01-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of extensions (and friends) that could have been given access to
    the file:// scheme, but weren't, for users that have at least one extension
    that could have been given access. This excludes anything that doesn't show
    up in chrome://extensions (platform apps, hosted apps, component
    extensions), policy-installed extensions, and unpacked extensions. Logged
    once per profile open for &quot;user profiles&quot; (profiles where people
    can install extensions, specifically profiles that can have non-component
    extensions installed). See also Extensions.FileAccessAllowed.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledAndBlockListed" units="count"
    expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    Number of enterprise policy forced extensions that are blocklisted and thus
    not loaded 5 minutes after profile creation if at least one of policy forced
    extensions is not yet enabled.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledCacheStatus"
    enum="ExtensionInstallationDownloadingCacheStatus"
    expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>poromov@chromium.org</owner>
  <summary>
    Status of cache entry about enterprise policy forced extension. Recorded for
    each forced extension.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledCreationStage"
    enum="ExtensionInstallCreationStage" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    The last known intermediate stage of extension when the extension
    installation stage if CREATED if failure reason was not recorded
    (installation of an extension was neither yet finished nor failed). Recorded
    for each forced extension that failed to install after 5 minutes. Recorded
    together with &quot;Extensions.ForceInstalledTimedOutCount&quot; histogram,
    but for every extension not installed at the moment.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledDownloadingStage"
    enum="ExtensionInstallationDownloadingStage" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    The last known downloading stage of extension downloading process if failure
    reason was not recorded and installing stage is DOWNLOADING, so it's
    specification of Extensions.ForceInstalledStage. Recorded for each forced
    extension that failed to install after 5 minutes. Recorded together with
    &quot;Extensions.ForceInstalledTimedOutCount&quot; histogram, but for every
    extension not installed at the moment.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledFailureCacheStatus"
    enum="ExtensionInstallationDownloadingCacheStatus"
    expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    Status of cache entry about enterprise policy forced extension which failed
    to install. Recorded for each forced extension that failed to install after
    5 minutes. Recorded together with
    &quot;Extensions.ForceInstalledTimedOutCount&quot; histogram, but for every
    extension not installed at the moment.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledFailureCrxInstallError"
    enum="ExtensionInstallationCrxInstallError" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    Detailed reason why CRX installation failed for enterprise policy forced
    extensions. Recorded for each forced extension that failed to install after
    5 minutes with Extensions.{OffStore,Webstore}_ForceInstalledFailureReason3
    equal to CRX_INSTALL_ERROR_*.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledFailureManifestInvalidAppStatusError"
    enum="ManifestInvalidAppStatusError" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    The detailed reason why enterprise policy forced extensions had failed to
    install because fetched update manifest was invalid due to app status error.
    Recorded for each forced extension that failed to install after 5 minutes
    with Extensions.ForceInstalledFailureReason2 equal to MANIFEST_INVALID and
    Extensions.ForceInstalledFailureManifestInvalidErrorDetail2 equal to
    BAD_APP_STATUS.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledFailureNoUpdatesInfo"
    enum="ExtensionNoUpdatesInfo" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    The info field in the update manifest fetched from the server for enterprise
    policy forced extensions. Recorded for each forced extension for which the
    server responds with no updates and an empty CRX fetch url. Recorded for
    each forced extension that failed to install after 5 minutes with
    Extensions.{OffStore,WebStore}_ForceInstalledFailureReason3 equal to
    CRX_FETCH_URL_EMPTY.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledFailureReason3"
    enum="ExtensionInstallationFailureReason" expires_after="2023-12-01">
<!-- Name completed by histogram_suffixes name="ExtensionSource" -->

  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    The reason why enterprise policy forced extensions were not installed.
    Recorded for each forced extension that failed to install after 5 minutes.
    Recorded together with &quot;Extensions.ForceInstalledTimedOutCount&quot;
    histogram, but for every extension not installed at the moment.

    Replaced Extensions.ForceInstalledFailureReason2 because of reporting
    MANIFEST_INVALID instead of MANIFEST_FETCH_FAILED in case parsing update
    manifest failed with different reasons for the extensions.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledFailureSandboxUnpackFailureReason2"
    enum="ExtensionUnpackFailureReason" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    The reason why enterprise policy forced extensions had failed to unpack.
    Recorded for each forced extension that failed to install after 5 minutes
    with Extensions.ForceInstalledFailureReason3 equal to
    CRX_INSTALL_ERROR_SANDBOXED_UNPACKER_FAILURE.

    Replaced Extensions.ForceInstalledFailureSandboxUnpackFailureReason because
    the enum values were not in sync with the C++ enums.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledFailureSessionType{FailureReason}"
    enum="SessionType" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    The type of session in case enterprise policy forced extensions were not
    installed. Recorded for each force installed extension which failed to
    install after 5 minutes. Supported only on ChromeOS and recorded only if
    there is an active user. {FailureReason}
  </summary>
  <token key="FailureReason">
    <variant name="" summary="Any type of failure"/>
    <variant name=".ExtensionStuckInInitialCreationStage"
        summary="Extensions stuck in
                 NOTIFIED_FROM_MANAGEMENT_INITIAL_CREATION_FORCED stage.
                 Replaced &quot;.ExtensionStuckInCreatedStage&quot; variant
                 as the histogram collects data about extensions stuck in
                 NOTIFIED_FROM_MANAGEMENT_INITIAL_CREATION_FORCED stage but
                 the name suggested that the data is collected for extensions
                 stuck in CREATED stage."/>
  </token>
</histogram>

<histogram
    name="Extensions.ForceInstalledFailureStuckInInitialCreationStageAreExtensionsEnabled"
    enum="BooleanEnabled" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    Records whether the extensions are enabled or not. Recorded for each forced
    extension that failed to install after 5 minutes with
    Extensions.ForceInstalledCreationStage equal to
    NOTIFIED_FROM_MANAGEMENT_INITIAL_CREATION_FORCED.

    Replaced
    &quot;Extensions.ForceInstalledFailureStuckInCreatedStageAreExtensionsEnabled&quot;
    because the histogram collects data about extensions stuck in
    NOTIFIED_FROM_MANAGEMENT_INITIAL_CREATION_FORCED stage but the name
    suggested that the data is collected for extensions stuck in CREATED stage.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledFailureWithCrxHeaderInvalidIsCWS"
    enum="IsForceInstalledExtensionFailedWithCrxHeaderInvalidFromCWSBoolean"
    expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    Records whether the extension is from the Chrome Web Store or not. Recorded
    for each forced extension that failed to install after 5 minutes with
    Extensions.ForceInstalledFailureSandboxUnpackFailureReason equal to
    CRX_HEADER_INVALID.
  </summary>
</histogram>

<histogram
    name="Extensions.ForceInstalledFailureWithCrxHeaderInvalidIsFromCache"
    enum="BooleanCacheHit" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    Records whether the extension is downloaded from cache or not. Recorded for
    each forced extension that failed to install after 5 minutes with
    Extensions.ForceInstalledFailureSandboxUnpackFailureReason equal to
    CRX_HEADER_INVALID.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledLoadTime" units="ms"
    expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    The amount of time elapsed during installation of enterprise policy forced
    extensions.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledNotLoadedDisableReason"
    enum="ExtensionDisableReason" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    Records the disable reason for the enterpise policy forced extensions.
    Recorded for each forced extension that installed but failed to load after 5
    minutes. If the extension is not disabled, it records
    DisableReason::DISABLE_NONE.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledReadyTime" units="ms"
    expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    The amount of time elapsed for enterprise policy forced extensions to become
    ready for use.
  </summary>
</histogram>

<histogram
    name="Extensions.ForceInstalledSessionsWithNonMisconfigurationFailureOccured"
    enum="Boolean" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    Records whether there was a possible non-misconfiguration failure for the
    enterprise policy forced extensions. Records true if in a session at least
    one forced extension failed to install after 5 minutes with a
    non-misconfiguration failure and false when all the forced extensions which
    failed to install after 5 minutes failed due to some misconfiguration.
    Recorded together with &quot;Extensions.ForceInstalledTimedOutCount&quot;
    histogram.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledStage2"
    enum="ExtensionInstallationStage" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    The last known stage of extension installation process if failure reason was
    not recorded (installation of an extension was neither yet finished nor
    failed). Recorded for each forced extension that failed to install after 5
    minutes. Recorded together with
    &quot;Extensions.ForceInstalledTimedOutCount&quot; histogram, but for every
    extension not installed at the moment.

    Replaced Extensions.ForceInstalledStage because the stages that were used
    for used for investigation of CREATED stage are moved to a new enum.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledTimedOutAndNotInstalledCount"
    units="units" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    Number of enterprise policy forced extensions that are not installed after 5
    minutes if at least one of policy forced extensions is not yet enabled.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledTimedOutCount" units="units"
    expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    Number of enterprise policy forced extensions that are not loaded after 5
    minutes timeout, while might be already installed.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledTime{ExtensionInstallStages}"
    units="ms" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    The amount of time elapsed during different stage of the installation
    process for the enterprise policy forced extensions.
    {ExtensionInstallStages}
  </summary>
  <token key="ExtensionInstallStages">
    <variant name=".CheckingExpectationsStartTo.FinalizingStart"
        summary="Time taken to perform the expectations checks to confirm
                 that the extension can be installed."/>
    <variant name=".CopyingStartTo.UnpackingStart"
        summary="Time taken to complete copying of extension archive into the
                 working directory"/>
    <variant name=".DownloadingStartTo.ManifestDownloadComplete"
        summary="Time taken to complete download of update manifest"/>
    <variant name=".FinalizingStartTo.CRXInstallComplete"
        summary="Time taken to complete the installation of the unpacked
                 extension."/>
    <variant name=".ManifestDownloadCompleteTo.CRXDownloadComplete"
        summary="Time taken to complete download of CRX"/>
    <variant name=".UnpackingStartTo.CheckingExpectationsStart"
        summary="Time taken to complete the unpacking of the extension
                 archive."/>
    <variant name=".VerificationStartTo.CopyingStart"
        summary="Time taken to complete signature verification of CRX"/>
  </token>
</histogram>

<histogram name="Extensions.ForceInstalledTotalCandidateCount" units="units"
    expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    Total amount of extensions in force installed list. Gets recorded on profile
    open (which happens on every startup and when user logs in) and tries to
    load extensions. Number of records should correspond to the sum of records
    in &quot;Extensions.ForceInstalledLoadTime&quot; and records in
    &quot;Extensions.ForceInstalledTimedOutAndNotInstalledCount&quot;.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalled{ErrorType}FetchTries"
    units="retries" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    Number of fetch retries made when enterprise policy forced extensions failed
    to install with {ErrorType}. Recorded for each forced extension that failed
    to install after 5 minutes with
    Extensions.`OffStore,Webstore`_ForceInstalledFailureReason3 equal to
    {ErrorType}.
  </summary>
  <token key="ErrorType">
    <variant name="" summary="CRX_FETCH_FAILED failure reason."/>
    <variant name="CrxFetchRetry" summary="CRX_DOWNLOAD_RETRY stage."/>
    <variant name="ManifestFetchFailed"
        summary="MANIFEST_FETCH_FAILED failure reason."/>
    <variant name="ManifestFetchRetry"
        summary="MANIFEST_DOWNLOAD_RETRY stage."/>
  </token>
</histogram>

<histogram name="Extensions.ForceInstalled{ErrorType}NetworkErrorCode"
    enum="NetErrorCodes" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    Network error code for the last retry attempt when CRX fetch failed for
    enterprise policy forced extensions failed to install due to {ErrorType}.
    Recorded for each forced extension that failed to install after 5 minutes
    with Extensions.`OffStore,WebStore`_ForceInstalledFailureReason3 equal to
    {ErrorType}.
  </summary>
  <token key="ErrorType">
    <variant name="" summary="CRX_FETCH_FAILED failure reason."/>
    <variant name="CrxFetchRetry" summary="CRX_DOWNLOAD_RETRY stage."/>
    <variant name="ManifestFetchFailed"
        summary="MANIFEST_FETCH_FAILED failure reason."/>
    <variant name="ManifestFetchRetry"
        summary="MANIFEST_DOWNLOAD_RETRY stage."/>
  </token>
</histogram>

<histogram name="Extensions.ForceToolbarPinnedCount2" units="extensions"
    expires_after="2022-04-24">
  <owner>nicolaso@chromium.org</owner>
  <owner>chrome-enterprise-team-core@google.com</owner>
  <summary>
    Number of force installed extensions that are &quot;force-pinned&quot; in
    the ExtensionSettings policy. Recorded after policies are parsed, or
    refreshed. Only recorded if non-zero.
  </summary>
</histogram>

<histogram name="Extensions.FromWebstoreInconsistency"
    enum="ExtensionFromWebstoreInconcistencyEnum" expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>anunoy@chromium.org</owner>
  <summary>
    Number of apps/extensions loaded on profile open with an inconsistent
    &quot;from webstore&quot; state. This means an item that is flagged as
    from_webstore, but with either a non-webstore update_url or an external
    install location.
  </summary>
</histogram>

<histogram name="Extensions.FromWebstoreInconsistency2"
    enum="ExtensionFromWebstoreInconcistencyEnum" expires_after="2024-01-01">
  <owner>anunoy@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Number of apps/extensions loaded on profile open with an inconsistent
    &quot;from webstore&quot; state for &quot;user profiles&quot; (profiles
    where people can install extensions, specifically profiles that can have
    non-component extensions installed). This means an item that is flagged as
    from_webstore, but with either a non-webstore update_url or an external
    install location.
  </summary>
</histogram>

<histogram name="Extensions.Functions.ComponentExtensionCalls"
    enum="ExtensionFunctions" expires_after="never">
<!-- expires-never: Used for monitoring extension API usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Recorded when a component extension calls an extension API. Recorded once
    per function call. See also Extensions.Functions.WebUICalls,
    Extensions.Functions.WebUIUntrustedCalls, and
    Extensions.Functions.ExtensionCalls.
  </summary>
</histogram>

<histogram name="Extensions.Functions.ExtensionCalls" enum="ExtensionFunctions"
    expires_after="never">
<!-- expires-never: Used for monitoring extension API usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Recorded when a non-component extension calls an extension API. Recorded
    once per function call. See also Extensions.Functions.WebUICalls,
    Extensions.Functions.WebUIUntrustedCalls, and
    Extensions.Functions.ComponentExtensionCalls.
  </summary>
</histogram>

<histogram name="Extensions.Functions.ExtensionMV3Calls"
    enum="ExtensionFunctions" expires_after="2023-10-01">
  <owner>tjudkins@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Recorded when a manifest V3 extension calls an extension API. Note that the
    function would also be included in either
    Extensions.Functions.ExtensionCalls or
    Extensions.Functions.ComponentExtensionCalls histogram.
  </summary>
</histogram>

<histogram name="Extensions.Functions.ExtensionServiceWorkerCalls"
    enum="ExtensionFunctions" expires_after="2023-02-12">
  <owner>lazyboy@chromium.org</owner>
  <owner>dbertoni@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Recorded when an extension service worker calls an extension API. Note that
    the function would also be included in either
    Extensions.Functions.ExtensionCalls or
    Extensions.Functions.ComponentExtensionCalls histogram.
  </summary>
</histogram>

<histogram
    name="Extensions.Functions.FailedTime{ExtensionFunctionExecutionTime}"
    enum="ExtensionFunctions" expires_after="never">
<!-- expires-never: Used for monitoring extension API usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Recorded when an extension function call fails and finishes execution. The
    suffix indicates the exact bucket the function is in. See also
    Extensions.Functions.FailedTotalExecutionTime.
    {ExtensionFunctionExecutionTime}
  </summary>
  <token key="ExtensionFunctionExecutionTime"
      variants="ExtensionFunctionExecutionTime">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Extensions.Functions.FailedTotalExecutionTime{IsKiosk}"
    units="ms" expires_after="2022-08-21">
  <obsolete>
    Code removed 2022/12.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The total amount of time it took to execute an extension function that
    failed from the time the extension function is called to the time the
    function responds. Note that since some extension functions are inherently
    slow (anything that requires user interaction, for instance), this is not a
    definitive source for function performance. In M-102 this histogram was
    split and events from kiosk extensions are recorded in the separate
    Extensions.Functions.FailedTotalExecutionTime.Kiosk histogram.
  </summary>
  <token key="IsKiosk">
    <variant name="" summary="from non-kiosk extension"/>
    <variant name=".Kiosk" summary="from kiosk extension"/>
  </token>
</histogram>

<histogram name="Extensions.Functions.HandleResponseElapsedTime" units="ms"
    expires_after="never">
<!-- expires-never: Used for monitoring extension API performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The amount of time it takes to handle a response for an extension API
    request. Recorded on the renderer side once we receive the response IPC from
    the browser and have deserialized the arguments and passed them to the JS
    context. Only recorded if the response is successfully handled.
  </summary>
</histogram>

<histogram name="Extensions.Functions.StartRequestElapsedTime" units="ms"
    expires_after="never">
<!-- expires-never: Used for monitoring extension API performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The amount of time it takes to start an extension API request. Recorded on
    the renderer side after we perform JS pre-processing, but includes all
    serialization and dispatching. Only recorded if the request is successfully
    dispatched.
  </summary>
</histogram>

<histogram
    name="Extensions.Functions.SucceededTime{ExtensionFunctionExecutionTime}"
    enum="ExtensionFunctions" expires_after="never">
<!-- expires-never: Used for monitoring extension API usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Recorded when an extension function call succeeds and finishes execution.
    The suffix indicates the exact bucket the function is in. See also
    Extensions.Functions.SucceededTotalExecutionTime.
    {ExtensionFunctionExecutionTime}
  </summary>
  <token key="ExtensionFunctionExecutionTime"
      variants="ExtensionFunctionExecutionTime">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Extensions.Functions.SucceededTotalExecutionTime" units="ms"
    expires_after="2023-09-03">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The total amount of time it took to execute an extension function that
    succeeded from the time the extension function is called to the time the
    function responds. Note that since some extension functions are inherently
    slow (anything that requires user interaction, for instance), this is not a
    definitive source for function performance.
  </summary>
</histogram>

<histogram name="Extensions.Functions.SynchronousExecutionTime" units="ms"
    expires_after="2023-09-10">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The synchronous amount of time an extension function takes. Note that many
    extension functions run asynchronously; see also
    Extensions.Functions.[Succeeded|Failed]TotalExecutionTime.
  </summary>
</histogram>

<histogram name="Extensions.Functions.WebUICalls" enum="ExtensionFunctions"
    expires_after="never">
<!-- expires-never: Used for monitoring extension API usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Recorded when a WebUI context calls an extension API. Recorded once per
    function call. See also Extensions.Functions.WebUIUntrustedCalls,
    Extensions.Functions.ComponentExtensionCalls and
    Extensions.Functions.ExtensionCalls.
  </summary>
</histogram>

<histogram name="Extensions.Functions.WebUIUntrustedCalls"
    enum="ExtensionFunctions" expires_after="never">
<!-- expires-never: Used for monitoring extension API usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Recorded when a WebUI context calls an extension API. Recorded once per
    function call. See also Extensions.Functions.WebUICalls,
    Extensions.Functions.ComponentExtensionCalls and
    Extensions.Functions.ExtensionCalls.
  </summary>
</histogram>

<histogram name="Extensions.GoogleDocOffline.AvailabilityOnResourceRequest"
    enum="GoogleDocsExtensionAvailablity" expires_after="2023-06-18">
  <owner>arabm@chromium.org</owner>
  <owner>chrome-incognito@google.com</owner>
  <summary>
    This histogram records requests to use resources from Google Docs Offline
    extension, along with whether the extension has been available or not and
    the request has been done from incognito mode or not. Note that this request
    is double counted for the imports.
  </summary>
</histogram>

<histogram name="Extensions.Greylist.Disabled" enum="ExtensionLocation"
    expires_after="2023-09-07">
  <owner>anunoy@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Emits the Extension::Location of a newly-disabled greylisted extension.
    Logged when SafeBrowsingVerdictHandler greylists and disables an installed
    extension.
  </summary>
</histogram>

<histogram name="Extensions.Greylist.Enabled" enum="ExtensionLocation"
    expires_after="2023-09-07">
  <owner>anunoy@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Emits the Extension::Location of an extension that was ungreylisted. Logged
    when SafeBrowsingVerdictHandler ungreylists and enables an installed
    extension.
  </summary>
</histogram>

<histogram name="Extensions.GuestView.ChangeOwnerWebContentsOnAttach"
    enum="Boolean" expires_after="2023-10-15">
  <owner>mcnee@chromium.org</owner>
  <owner>src/components/guest_view/OWNERS</owner>
  <summary>
    It is possible for a Chrome Apps webview to be attached to a WebContents
    that did not create it. This reports True if attachment involves a change to
    the owner WebContents or False if attachment does not change the owner.

    We'd like to understand how common this case is, as this is architecturally
    complex to support.
  </summary>
</histogram>

<histogram name="Extensions.HasPermissions_Install3" enum="Boolean"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Whether there were any permissions present in an extension when it was
    installed . To find places where this histogram may be emitted, look for
    calls to ExtensionService::RecordPermissionMessagesHistogram with the
    argument Install. For Sync users, this is reported for each device.
  </summary>
</histogram>

<histogram name="Extensions.HasPermissions_Install4" enum="Boolean"
    expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Whether there were any permissions present in an extension when it was
    installed for &quot;user profiles&quot; (profiles where people can install
    extensions, specifically profiles that can have non-component extensions
    installed). To find places where this histogram may be emitted, look for
    calls to ExtensionService::RecordPermissionMessagesHistogram with the
    argument Install. For Sync users, this is reported for each device.
  </summary>
</histogram>

<histogram name="Extensions.HasPermissions_Load3" enum="Boolean"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Whether there were any permissions present in an extension when it was
    loaded (which happens at profile open or extension install). To find places
    where this histogram may be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument Load.
  </summary>
</histogram>

<histogram name="Extensions.HasPermissions_Load4" enum="Boolean"
    expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Whether there were any permissions present in an extension when it was
    loaded (which happens at profile open or extension install) for &quot;user
    profiles&quot; (profiles where people can install extensions, specifically
    profiles that can have non-component extensions installed). To find places
    where this histogram may be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument Load.
  </summary>
</histogram>

<histogram name="Extensions.HomepageOverrides" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>kelvinjiang@chromium.org</owner>
  <summary>
    The number of enabled extensions with a homepage override specified in their
    manifest. Recorded once per profile at profile initialization.
  </summary>
</histogram>

<histogram name="Extensions.HomepageOverrides2" units="units"
    expires_after="2024-01-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>kelvinjiang@chromium.org</owner>
  <summary>
    The number of enabled extensions with a homepage override specified in their
    manifest. Recorded once per &quot;user profile&quot; (profiles where people
    can install extensions, specifically profiles that can have non-component
    extensions installed) at profile initialization.
  </summary>
</histogram>

<histogram name="Extensions.HostedAppLaunchContainer" enum="AppLaunchContainer"
    expires_after="2023-04-16">
  <owner>benwells@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    Records the container used for a hosted app launch, when the app is
    launched. The definition of 'launch' for the purposes of this histogram is
    different to that used for the launch type histograms. This definition is
    less inclusive, for example it does not include navigations to the hosted
    app due to normal browsing, which the other definition does include. This
    definition could be thought of more as explicit launches via a launch
    surface such as the app launcher, chrome://apps, or a shortcut.
  </summary>
</histogram>

<histogram name="Extensions.HostPermissions.GrantedAccess"
    enum="HostPermissionsAccess" expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>emiliapaz@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Records the host permissions access for a enabled extension as a result of
    the RuntimeHostPermissions feature. Recorded once per extension at profile
    initialization.
  </summary>
</histogram>

<histogram name="Extensions.HostPermissions.GrantedAccess2"
    enum="HostPermissionsAccess" expires_after="never">
<!-- expires-never: Monitors core extension usage. -->

  <owner>emiliapaz@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Records the host permissions access for a enabled extension as a result of
    the RuntimeHostPermissions feature. Recorded once per extension at profile
    initialization for &quot;user profiles&quot; (profiles where people can
    install extensions, specifically profiles that can have non-component
    extensions installed) initialization.
  </summary>
</histogram>

<histogram name="Extensions.HostPermissions.GrantedAccessForBroadRequests"
    enum="HostPermissionsAccess" expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>emiliapaz@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Records the host permissions access for each enabled extension that
    specifies a host permission that matches an effective TLD. Recorded once per
    extension at profile initialization.
  </summary>
</histogram>

<histogram name="Extensions.HostPermissions.GrantedAccessForBroadRequests2"
    enum="HostPermissionsAccess" expires_after="never">
<!-- expires-never: Monitors core extension usage. -->

  <owner>emiliapaz@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Records the host permissions access for each enabled extension that
    specifies a host permission that matches an effective TLD. Recorded once per
    extension at &quot;user profile&quot; (profiles where people can install
    extensions, specifically profiles that can have non-component extensions
    installed) initialization.
  </summary>
</histogram>

<histogram name="Extensions.HostPermissions.GrantedAccessForTargetedRequests"
    enum="HostPermissionsAccess" expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>emiliapaz@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Records the host permissions access for each enabled extension that
    specifies hosts, but has no host permission that matches an effective TLD.
    Recorded once per extension at profile initialization.
  </summary>
</histogram>

<histogram name="Extensions.HostPermissions.GrantedAccessForTargetedRequests2"
    enum="HostPermissionsAccess" expires_after="never">
<!-- expires-never: Monitors core extension usage. -->

  <owner>emiliapaz@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Records the host permissions access for each enabled extension that
    specifies hosts, but has no host permission that matches an effective TLD.
    Recorded once per extension at &quot;user profile&quot; (profiles where
    people can install extensions, specifically profiles that can have
    non-component extensions installed) initialization.
  </summary>
</histogram>

<histogram name="Extensions.IncognitoAllowed" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions (and friends) that could have been allowed in
    incognito, and were, for users that have at least one extension that could
    have been allowed. This excludes anything that doesn't show up in
    chrome://extensions (platform apps, hosted apps, component extensions),
    policy-installed extensions, and unpacked extensions. See also
    Extensions.IncognitoNotAllowed.
  </summary>
</histogram>

<histogram name="Extensions.IncognitoAllowed2" units="units"
    expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of extensions (and friends) that could have been allowed in
    incognito, and were, for users that have at least one extension that could
    have been allowed. This excludes anything that doesn't show up in
    chrome://extensions (platform apps, hosted apps, component extensions),
    policy-installed extensions, and unpacked extensions. Logged at &quot;user
    profile&quot; (profiles where people can install extensions, specifically
    profiles that can have non-component extensions installed) initialization.
    See also Extensions.IncognitoNotAllowed.
  </summary>
</histogram>

<histogram name="Extensions.IncognitoNotAllowed" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions (and friends) that could have been allowed in
    incognito, but weren't, for users that have at least one extension that
    could have been allowed. This excludes anything that doesn't show up in
    chrome://extensions (platform apps, hosted apps, component extensions),
    policy-installed extensions, and unpacked extensions. See also
    Extensions.IncognitoAllowed.
  </summary>
</histogram>

<histogram name="Extensions.IncognitoNotAllowed2" units="units"
    expires_after="2024-01-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of extensions (and friends) that could have been allowed in
    incognito, but weren't, for users that have at least one extension that
    could have been allowed. This excludes anything that doesn't show up in
    chrome://extensions (platform apps, hosted apps, component extensions),
    policy-installed extensions, and unpacked extensions. Logged at &quot;user
    profile&quot; (profiles where people can install extensions, specifically
    profiles that can have non-component extensions installed) initialization.
    See also Extensions.IncognitoAllowed.
  </summary>
</histogram>

<histogram name="Extensions.InitPrefGetExtensionsTime" units="ms"
    expires_after="M90">
  <obsolete>
    Code removed 2022/12.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The amount of time that elapsed during the GetExtensions call within
    ExtensionPrefs::InitPrefStore.
  </summary>
</histogram>

<histogram name="Extensions.InjectCssTime" units="ms" expires_after="never">
<!-- expires-never: Used for monitoring extension API performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The amount of time for a CSS file to be injected into a page.
  </summary>
</histogram>

<histogram name="Extensions.InjectedScriptExecutionTime" units="ms"
    expires_after="never">
<!-- expires-never: Monitoring performance of a core extension API. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Time taken to execute all scripts for one location within an extension.
    Recorded every time content scripts injected by extensions are executed.
    Unlike Extensions.InjectScriptTime, this includes execution time of
    asynchronously injected scripts.
  </summary>
</histogram>

<histogram name="Extensions.InjectEnd_BlockingScriptCount" units="units"
    expires_after="never">
<!-- expires-never: Monitoring core extensions performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Number of blocking scripts injected at document end by extensions.
  </summary>
</histogram>

<histogram name="Extensions.InjectEnd_ScriptCount" units="units"
    expires_after="never">
<!-- expires-never: Monitoring core extensions performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>Number of scripts injected at document end by extensions.</summary>
</histogram>

<histogram name="Extensions.InjectEnd_Time" units="ms" expires_after="never">
<!-- expires-never: Used for monitoring extension API performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Time taken to inject all scripts at document end by extensions. Not reported
    if scripts are executed asynchronously.
  </summary>
</histogram>

<histogram name="Extensions.InjectIdle_BlockingScriptCount" units="units"
    expires_after="never">
<!-- expires-never: Monitoring core extensions performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Number of blocking scripts injected at document idle by extensions.
  </summary>
</histogram>

<histogram name="Extensions.InjectIdle_ScriptCount" units="units"
    expires_after="never">
<!-- expires-never: Monitoring core extensions performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>Number of scripts injected at document idle by extensions.</summary>
</histogram>

<histogram name="Extensions.InjectIdle_Time" units="ms" expires_after="never">
<!-- expires-never: Used for monitoring extension API performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Time taken to inject all scripts at document idle by extensions. Not
    reported if scripts are executed asynchronously.
  </summary>
</histogram>

<histogram name="Extensions.InjectStart_BlockingScriptCount" units="units"
    expires_after="never">
<!-- expires-never: Used for monitoring extension API performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Number of blocking scripts injected at document start by extensions.
  </summary>
</histogram>

<histogram name="Extensions.InjectStart_CssCount" units="units"
    expires_after="never">
<!-- expires-never: Monitors core extension performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>Number of css files injected by extensions.</summary>
</histogram>

<histogram name="Extensions.InjectStart_ScriptCount" units="units"
    expires_after="never">
<!-- expires-never: Used for monitoring extension API performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>Number of scripts injected at document start by extensions.</summary>
</histogram>

<histogram name="Extensions.InjectStart_Time" units="ms" expires_after="never">
<!-- expires-never: Monitors core extension performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Time taken to inject css/scripts at document start by extensions. Not
    reported if scripts are executed asynchronously.
  </summary>
</histogram>

<histogram name="Extensions.InstallFrictionDialogAction"
    enum="ExtensionInstallFrictionDialogAction" expires_after="2023-10-01">
  <owner>jeffcyr@google.com</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Action taken in the extension install friction dialog displayed to Enhanced
    Safe Browsing users before installing an extension that is not included in
    the Safe Browsing CRX allowlist.
  </summary>
</histogram>

<histogram name="Extensions.InstallPrompt.TimeToCancel" units="ms"
    expires_after="2022-09-20">
  <owner>kelvinjiang@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Time from first display of the extension installation prompt until the user
    aborts the installation through clicking the cancel button or dismissing the
    dialog.
  </summary>
</histogram>

<histogram name="Extensions.InstallPrompt.TimeToInstall" units="ms"
    expires_after="2022-09-20">
  <owner>kelvinjiang@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Time from first display of the extension installation prompt until the user
    accepts the installation. Will always be greater than 500ms as the install
    option is enabled after that time has elapsed.
  </summary>
</histogram>

<histogram name="Extensions.InstallPrompt.Type2"
    enum="ExtensionInstallPromptType" expires_after="2022-08-07">
  <owner>meacer@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Type of the extension install prompt displayed when an extension
    installation is triggered. Replaced Extensions.InstallPrompt.Type 2019-07.
  </summary>
</histogram>

<histogram name="Extensions.InstallSource" enum="ExtensionLocation"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its new versions
    (Extensions.InstallType.User and Extensions.InstallType.Nonuser) that emit
    only on profile open for &quot;user&quot; profiles (profiles where people
    can install extensions, specifically profiles that can have non-component
    extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Installs grouped by the location property in prefs. Emitted once per profile
    open.
  </summary>
</histogram>

<!-- TODO(crbug.com/1383740): Change all .NonUser/.User metrics to use histogram suffixes rather than be duplicated here. -->

<histogram name="Extensions.InstallSource.NonUser" enum="ExtensionLocation"
    expires_after="never">
<!-- expires-never: Monitoring core extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Installs grouped by the location property in prefs for &quot;non-user&quot;
    profiles (profiles where people can't install extensions, specifically
    profiles that can have only have non-component extensions installed).
    Emitted once per profile open.
  </summary>
</histogram>

<histogram name="Extensions.InstallSource.User" enum="ExtensionLocation"
    expires_after="never">
<!-- expires-never: Monitoring core extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Installs grouped by the location property in prefs for &quot;user&quot;
    profiles (profiles where people can install extensions, specifically
    profiles that can have non-component extensions installed). Emitted once per
    profile open.
  </summary>
</histogram>

<histogram name="Extensions.InstallType" enum="ExtensionType"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its new versions
    (Extensions.InstallType.User and Extensions.InstallType.Nonuser) that emit
    only on profile open for &quot;user&quot; profiles (profiles where people
    can install extensions, specifically profiles that can have non-component
    extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Installs grouped by Extension::HistogramType emitted once per extension
    install.
  </summary>
</histogram>

<histogram name="Extensions.InstallType.NonUser" enum="ExtensionType"
    expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Installs grouped by Extension::HistogramType for non-&quot;user
    profiles&quot; (profiles where people cannot install extensions,
    specifically profiles that can only have component extensions installed).
    Emitted once per extension install.
  </summary>
</histogram>

<histogram name="Extensions.InstallType.User" enum="ExtensionType"
    expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Installs grouped by Extension::HistogramType for &quot;user profiles&quot;
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed). Emitted once per extension
    install.
  </summary>
</histogram>

<histogram name="Extensions.IsRenderedIconSufficientlyVisibleTime"
    units="microseconds" expires_after="2019-12-01">
  <owner>dbertoni@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The amount of elapsed time taken to render an icon against a specified
    background color and determine whether it would be visible to the user.
    Recorded every time the analysis code is called.
  </summary>
</histogram>

<histogram name="Extensions.LoadAll" units="units" expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>The number of extensions and themes loaded at profile open.</summary>
</histogram>

<histogram name="Extensions.LoadAll2" units="units" expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of extensions and themes loaded at &quot;user profile&quot;
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed) open.
  </summary>
</histogram>

<histogram name="Extensions.LoadAllComponentTime" units="ms"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its new versions
    (Extensions.LoadAllComponentTime.NonUser and
    Extensions.LoadAllComponentTime.User) that emit only on profile open for
    &quot;user&quot; profiles (profiles where people can install extensions,
    specifically profiles that can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Time taken to load all component extensions at profile open. This happens as
    part of the total initialization time of ExtensionService, measured in
    Extensions.ExtensionServiceInitTime.
  </summary>
</histogram>

<histogram name="Extensions.LoadAllComponentTime.NonUser" units="ms"
    expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Time taken to load all component extensions at profile open for
    non-&quot;user profiles&quot; (profiles where people cannot install
    extensions, specifically profiles that can only have component extensions
    installed). This happens as part of the total initialization time of
    ExtensionService, measured in Extensions.ExtensionServiceInitTime. Emitted
    once per profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadAllComponentTime.User" units="ms"
    expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Time taken to load all component extensions at profile open for &quot;user
    profiles&quot; (profiles where people can install extensions, specifically
    profiles that can have non-component extensions installed). This happens as
    part of the total initialization time of ExtensionService, measured in
    Extensions.ExtensionServiceInitTime. Emitted once per profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadAllTime2" units="ms" expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its new versions
    (Extensions.LoadAllTime2.NonUser and Extensions.LoadAllTime2.User) that emit
    only on profile open for &quot;user&quot; profiles (profiles where people
    can install extensions, specifically profiles that can have non-component
    extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Time taken to load all non-component extensions at profile open and record
    metrics. This happens as part of the total initialization time of
    ExtensionService, measured in Extensions.ExtensionServiceInitTime.
  </summary>
</histogram>

<histogram name="Extensions.LoadAllTime2.NonUser" units="ms"
    expires_after="never">
<!-- expires-never: Monitoring core extensions system performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Time taken to load all non-component extensions at profile open and record
    metrics for non-&quot;user profiles&quot; (profiles where people cannot
    install extensions, specifically profiles that can only have component
    extensions installed). This happens as part of the total initialization time
    of ExtensionService, measured in Extensions.ExtensionServiceInitTime.
    Emitted once per profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadAllTime2.User" units="ms" expires_after="never">
<!-- expires-never: Monitoring core extensions system performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Time taken to load all non-component extensions at profile open and record
    metrics for &quot;user profiles&quot; (profiles where people can install
    extensions, specifically profiles that can have non-component extensions
    installed). This happens as part of the total initialization time of
    ExtensionService, measured in Extensions.ExtensionServiceInitTime. Emitted
    once per profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadApp" units="units" expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>The number of apps loaded by each user at profile open.</summary>
</histogram>

<histogram name="Extensions.LoadApp2" units="units" expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of apps loaded by each user at &quot;user profile&quot; (profiles
    where people can install extensions, specifically profiles that can have
    non-component extensions installed) open.
  </summary>
</histogram>

<histogram name="Extensions.LoadAppExternal" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of externally managed apps loaded by each user at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadAppExternal2" units="units"
    expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of externally managed apps loaded by each user at &quot;user
    profile&quot; (profiles where people can install extensions, specifically
    profiles that can have non-component extensions installed) open.
  </summary>
</histogram>

<histogram name="Extensions.LoadAppUser" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of user-installed apps loaded by each user at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadAppUser2" units="units" expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of user-installed apps loaded by each user at &quot;user
    profile&quot; (profiles where people can install extensions, specifically
    profiles that can have non-component extensions installed) open.
  </summary>
</histogram>

<histogram name="Extensions.LoadBrowserAction" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of browser action extensions loaded at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadBrowserAction2" units="units"
    expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of browser action extensions loaded at &quot;user profile&quot;
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed) open.
  </summary>
</histogram>

<histogram name="Extensions.LoadExtension" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>The number of extensions loaded at profile open.</summary>
</histogram>

<histogram name="Extensions.LoadExtension2" units="units" expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of extensions loaded at profile open for &quot;user&quot;
    profiles (profiles where people can install extensions, specifically
    profiles that can have non-component extensions installed).
  </summary>
</histogram>

<histogram name="Extensions.LoadExtensionExternal" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of externally managed extensions loaded at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadExtensionExternal2" units="units"
    expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of externally managed extensions loaded at &quot;user
    profile&quot; (profiles where people can install extensions, specifically
    profiles that can have non-component extensions installed) open.
  </summary>
</histogram>

<histogram name="Extensions.LoadExtensionUser" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of user-installed extensions loaded at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadExtensionUser2" units="units"
    expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of user-installed extensions loaded at &quot;user profile&quot;
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed) open.
  </summary>
</histogram>

<histogram name="Extensions.LoadExternal" units="units" expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of externally managed extensions and apps loaded at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadHostedApp" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of hosted apps loaded by each user at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadHostedApp2" units="units" expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of hosted apps loaded by each user at &quot;user profile&quot;
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed) open.
  </summary>
</histogram>

<histogram name="Extensions.LoadNoExtensionAction" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions that had neither a page nor browser action
    specified in their manifest. Recorded at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadNoExtensionAction2" units="units"
    expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of extensions that had neither a page nor browser action
    specified in their manifest. Recorded at &quot;user profile&quot; (profiles
    where people can install extensions, specifically profiles that can have
    non-component extensions installed) open.
  </summary>
</histogram>

<histogram name="Extensions.LoadOffStoreItems" units="Number of items"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of enabled extensions or apps the user has installed that do not
    update from the Chrome Web Store. Recorded during profile initialization.
  </summary>
</histogram>

<histogram name="Extensions.LoadOffStoreItems2" units="Number of items"
    expires_after="never">
<!-- expires-never: Monitoring core extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of enabled extensions or apps the user has installed that do not
    update from the Chrome Web Store. Recorded during &quot;user profile&quot;
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed) initialization.
  </summary>
</histogram>

<histogram name="Extensions.LoadPackagedApp" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of legacy packaged apps loaded by each user at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadPackagedApp2" units="units"
    expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of legacy packaged apps loaded by each user at &quot;user
    profile&quot; (profiles where people can install extensions, specifically
    profiles that can have non-component extensions installed) open.
  </summary>
</histogram>

<histogram name="Extensions.LoadPlatformApp" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>The number of platform apps loaded at profile open.</summary>
</histogram>

<histogram name="Extensions.LoadPlatformApp2" units="units"
    expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of platform apps loaded at &quot;user profile&quot; (profiles
    where people can install extensions, specifically profiles that can have
    non-component extensions installed) open.
  </summary>
</histogram>

<histogram name="Extensions.LoadTheme" units="units" expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>The number of themes loaded at profile open.</summary>
</histogram>

<histogram name="Extensions.LoadTheme2" units="units"
    expires_after="2024-01-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of themes loaded at &quot;user profile&quot; (profiles where
    people can install extensions, specifically profiles that can have
    non-component extensions installed) open.
  </summary>
</histogram>

<histogram name="Extensions.LoadType" enum="ExtensionType"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of extensions loaded at profile open grouped by
    Extension::HistogramType.
  </summary>
</histogram>

<histogram name="Extensions.LoadType2" enum="ExtensionType"
    expires_after="2024-01-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of extensions loaded at &quot;user profile&quot; (profiles where
    people can install extensions, specifically profiles that can have
    non-component extensions installed) open grouped by
    Extension::HistogramType.
  </summary>
</histogram>

<histogram name="Extensions.LoadUserScript" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of converted user scripts loaded at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadUserScript2" units="units"
    expires_after="2024-01-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of converted user scripts loaded at &quot;user profile&quot;
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed) open.
  </summary>
</histogram>

<histogram name="Extensions.Management_Refresh" units="ms"
    expires_after="2023-05-07">
  <owner>jam@chromium.org</owner>
  <owner>cduvall@chromium.org</owner>
  <summary>
    Measures how long ExtensionManagement::Refresh takes. This reloads all
    enterprise-related policies for all extensions, and is called both at
    startup and any time the enterprise policy changes.
  </summary>
</histogram>

<histogram name="Extensions.ManifestFetchFailureRetryCountGoogleUrl"
    units="units" expires_after="M77">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of times chrome retried to download an extension update manifest with
    a url on a google.com domain, before eventually giving up.
  </summary>
</histogram>

<histogram name="Extensions.ManifestFetchFailureRetryCountOtherUrl"
    units="units" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of times chrome retried to download an extension update manifest with
    a url on a non google.com domain, before eventually giving up.
  </summary>
</histogram>

<histogram name="Extensions.ManifestFetchSuccessRetryCountGoogleUrl"
    units="units" expires_after="M77">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of times chrome retried to download an extension update manifest with
    a url on a google.com domain, before eventually succeeding.
  </summary>
</histogram>

<histogram name="Extensions.ManifestFetchSuccessRetryCountOtherUrl"
    units="units" expires_after="M77">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of times chrome retried to download an extension update manifest with
    a url on a non google.com domain, before eventually succeeding.
  </summary>
</histogram>

<histogram name="Extensions.ManifestIconSetIconWasVisibleForPacked"
    enum="BooleanVisible" expires_after="2019-09-07">
  <owner>dbertoni@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Reports whether an icon that's specified in the manifest is considered
    visible by our icon analysis code. This stat is only for packed extensions,
    which we check dynamically when the icon is requested. The stat is emitted
    the first time the default icon is requested, since we cache the icon that's
    selected.
  </summary>
</histogram>

<histogram name="Extensions.ManifestIconSetIconWasVisibleForPackedRendered"
    enum="BooleanVisible" expires_after="2019-09-07">
  <owner>dbertoni@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Reports whether an icon that's specified in the manifest is considered
    visible by our icon analysis code. This stat is only for packed extensions,
    which we check dynamically when the icon is requested. The stat is emitted
    the first time the default icon is requested, since we cache the icon that's
    selected.

    This replaces the previous stat, ManifestIconSetIconWasVisibleForPacked, due
    to a change to our analysis algorithm. The new algorithm renders the icon
    against the toolbar background color and determines how visible the
    resulting pixels are.
  </summary>
</histogram>

<histogram name="Extensions.ManifestVersion" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>The manifest version of each loaded extension.</summary>
</histogram>

<histogram name="Extensions.ManifestVersion2" units="units"
    expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The manifest version of each loaded extension. Emitted for each extension at
    &quot;user profils&quot; (profiles where people can install extensions,
    specifically profiles that can have non-component extensions installed)
    open.
  </summary>
</histogram>

<histogram
    name="Extensions.Messaging.ExtensionPortsCreated{ExtensionMessagingPortCreationTime}"
    units="number of ports" expires_after="M85">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of ports created in a given script context at a specific time.
    Recorded once at the destruction of the script context (when no more ports
    could be created) if and only if at least one port was created in the
    context. Only includes ports to extension contexts (i.e., not ports created
    to tabs or native apps). {ExtensionMessagingPortCreationTime}
  </summary>
  <token key="ExtensionMessagingPortCreationTime">
    <variant name=""/>
    <variant name=".Total" summary="The total number of ports created."/>
  </token>
</histogram>

<histogram
    name="Extensions.Messaging.GetPortIdAsyncTime{ExtensionMessagingPortType}"
    units="ms" expires_after="M85">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The total amount of time between when an extension opens a new channel and
    when it receives the global port id from the browser and can begin sending
    messages. {ExtensionMessagingPortType}
  </summary>
  <token key="ExtensionMessagingPortType" variants="ExtensionMessagingPortType">
    <variant name=""/>
  </token>
</histogram>

<histogram
    name="Extensions.Messaging.GetPortIdSyncTime{ExtensionMessagingPortType}"
    units="ms" expires_after="M85">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The amount of synchronous time taken for the renderer to request an
    extension message port id from the browser when a new channel is first
    opened by an extension. {ExtensionMessagingPortType}
  </summary>
  <token key="ExtensionMessagingPortType" variants="ExtensionMessagingPortType">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Extensions.Messaging.MessageSize" units="bytes"
    expires_after="2022-11-18">
  <obsolete>
    Code removed 2022/12.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The size, in bytes, of a message sent from an extension using one of the
    messaging APIs (e.g. chrome.runtime.sendMessage). All message sizes are
    logged, but messages over 64 MB in size aren't sent.
  </summary>
</histogram>

<histogram
    name="Extensions.Messaging.SetPortIdTime{ExtensionMessagingPortType}"
    units="ms" expires_after="M85">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The amount of time for the renderer to inform the browser process of a new
    port being created with a certain id. This replaces the flow for
    Extensions.Messaging.GetPortId[A]SyncTime. {ExtensionMessagingPortType}
  </summary>
  <token key="ExtensionMessagingPortType" variants="ExtensionMessagingPortType">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Extensions.Navigation.Scheme" enum="NavigationScheme"
    expires_after="2024-01-01">
  <owner>jkokatsu@google.com</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Counts usage of various schemes (e.g. file:, chrome:, http:) when a
    navigation is triggered from an extension (such as through tabs API).
  </summary>
</histogram>

<histogram name="Extensions.NetworkDelay" units="ms" expires_after="2023-12-15">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>kelvinjiang@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>Time that network requests were blocked due to extensions.</summary>
</histogram>

<histogram name="Extensions.NetworkDelayPercentage" units="%"
    expires_after="2023-01-23">
  <owner>battre@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Percentage of total lifetime a network request was blocked due to an
    extension.
  </summary>
</histogram>

<histogram name="Extensions.NewTabPageOverrides" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>kelvinjiang@chromium.org</owner>
  <summary>
    The number of enabled extensions with a New Tab Page override specified in
    their manifest. Recorded once per profile at profile initialization.
  </summary>
</histogram>

<histogram name="Extensions.NewTabPageOverrides2" units="units"
    expires_after="2024-01-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>kelvinjiang@chromium.org</owner>
  <summary>
    The number of enabled extensions with a New Tab Page override specified in
    their manifest. Recorded once per &quot;user profile&quot; (profiles where
    people can install extensions, specifically profiles that can have
    non-component extensions installed) at profile open.
  </summary>
</histogram>

<histogram name="Extensions.NonWebstoreLocation" enum="ExtensionLocation"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of apps/extensions with a non-webstore update_url loaded on
    profile open and grouped by Extension::Location.
  </summary>
</histogram>

<histogram name="Extensions.NonWebstoreLocation2" enum="ExtensionLocation"
    expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of apps/extensions with a non-webstore update_url loaded on
    profile open grouped by Extension::Location. Emitted per &quot;user
    profiles&quot; (profiles where people can install extensions, specifically
    profiles that can have non-component extensions installed) open.
  </summary>
</histogram>

<histogram name="Extensions.NonWebStoreNewTabPageOverrides" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>anunoy@chromium.org</owner>
  <summary>
    Number of non-WebStore extensions on profile open that override the new tab
    page.
  </summary>
</histogram>

<histogram name="Extensions.NonWebStoreNewTabPageOverrides2" units="units"
    expires_after="2024-01-01">
  <owner>anunoy@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Number of non-WebStore extensions on profile open for &quot;user
    profiles&quot; (profiles where people can install extensions, specifically
    profiles that can have non-component extensions installed) that override the
    new tab page.
  </summary>
</histogram>

<histogram name="Extensions.NotAllowlistedDisabled" units="extensions"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>jeffcyr@google.com</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The total number of disabled extensions that are not present in the Enhanced
    Safe Browsing CRX allowlist. Recorded for all users on profile
    initialization.
  </summary>
</histogram>

<histogram name="Extensions.NotAllowlistedDisabled2" units="extensions"
    expires_after="2024-01-01">
  <owner>jeffcyr@google.com</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The total number of disabled extensions that are not present in the Enhanced
    Safe Browsing CRX allowlist. Recorded for &quot;user profiles&quot;
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed) on profile initialization.
  </summary>
</histogram>

<histogram name="Extensions.NotAllowlistedDisabledAndEsbUser"
    units="extensions" expires_after="2023-10-01">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>jeffcyr@google.com</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The total number of disabled extensions that are not present in the Enhanced
    Safe Browsing CRX allowlist. Recorded for only for Enhanced Safe Browsing
    users on profile initialization.
  </summary>
</histogram>

<histogram name="Extensions.NotAllowlistedDisabledAndEsbUser2"
    units="extensions" expires_after="2024-01-01">
  <owner>jeffcyr@google.com</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The total number of disabled extensions that are not present in the Enhanced
    Safe Browsing CRX allowlist. Recorded for only for Enhanced Safe Browsing
    users on &quot;user profile&quot; (profiles where people can install
    extensions, specifically profiles that can have non-component extensions
    installed) initialization.
  </summary>
</histogram>

<histogram name="Extensions.NotAllowlistedEnabled" units="extensions"
    expires_after="2023-10-01">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>jeffcyr@google.com</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The total number of enabled extensions that are not present in the Enhanced
    Safe Browsing CRX allowlist. Recorded for all users on profile
    initialization.
  </summary>
</histogram>

<histogram name="Extensions.NotAllowlistedEnabled2" units="extensions"
    expires_after="2024-01-01">
  <owner>jeffcyr@google.com</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The total number of enabled extensions that are not present in the Enhanced
    Safe Browsing CRX allowlist. Recorded for &quot;user profiles&quot;
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed) on profile initialization.
  </summary>
</histogram>

<histogram name="Extensions.NotAllowlistedEnabledAndEsbUser" units="extensions"
    expires_after="2023-10-01">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>jeffcyr@google.com</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The total number of enabled extensions that are not present in the Enhanced
    Safe Browsing CRX allowlist. Recorded for only for Enhanced Safe Browsing
    users on profile initialization.
  </summary>
</histogram>

<histogram name="Extensions.NotAllowlistedEnabledAndEsbUser2"
    units="extensions" expires_after="2024-01-01">
  <owner>jeffcyr@google.com</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The total number of enabled extensions that are not present in the Enhanced
    Safe Browsing CRX allowlist. Recorded for only for Enhanced Safe Browsing
    users on &quot;user profile&quot; (profiles where people can install
    extensions, specifically profiles that can have non-component extensions
    installed) initialization.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_Install3" enum="ExtensionPermission3"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The permissions present in an extension when it was installed. To find
    places where this histogram may be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument
    Install. For Sync users, this is reported for each device.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_Install4" enum="ExtensionPermission3"
    expires_after="never">
<!-- expires-never: Monitoring extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The permissions present in an extension when it was installed. To find
    places where this histogram may be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument
    Install. Emitted once per &quot;user profile&quot; (profiles where people
    can install extensions, specifically profiles that can have non-component
    extensions installed) open. For Sync users, this is reported for each
    device.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_Load3" enum="ExtensionPermission3"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The permissions present in an extension when it was loaded (which happens at
    profile open or extension install). To find places where this histogram may
    be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument Load.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_Load4" enum="ExtensionPermission3"
    expires_after="never">
<!-- expires-never: Monitoring core extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The permissions present in an extension when it was loaded (which happens at
    profile open or extension install). Only emitted for quot;user
    profiles&quot; (profiles where people can install extensions, specifically
    profiles that can have non-component extensions installed). To find places
    where this histogram may be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument Load.
  </summary>
</histogram>

<histogram name="Extensions.PowerfulCount" units="extensions"
    expires_after="2021-12-01">
  <owner>tnagel@chromium.org</owner>
  <owner>chrome-privacy-core@chromium.org</owner>
  <summary>
    The number of extensions reported in chrome://management UI with powerful
    permissions. This number is recorded every time the user opens
    chrome://management UI.
  </summary>
</histogram>

<histogram name="Extensions.ProcessManagerStartupHostsTime2" units="ms"
    expires_after="2023-12-15">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The time taken to start up persistent background pages for extensions in
    ExtensionProcessManager when the extension system notifies that it is ready.
    This version of the histogram does not include cases where the background
    page startup is deferred, which would have been logged as ~0ms startup in
    Extensions.ProcessManagerStartupHostsTime.
  </summary>
</histogram>

<histogram name="Extensions.ResetPermissionsIncrease" enum="Boolean"
    expires_after="2022-12-01">
  <obsolete>
    Code removed 2022/12.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Whether the DISABLE_PERMISSIONS_INCREASE disable reason was removed from an
    extension while checking for a permissions increase. Recorded during startup
    and on reload and update, for each extension that has the
    DISABLE_PERMISSIONS_INCREASE reason.
  </summary>
</histogram>

<histogram name="Extensions.RuntimeHostPermissions.ExtensionHasWithheldHosts"
    enum="BooleanHasWithheldHosts" expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Whether an extension had host permissions withheld as a result of the
    RuntimeHostPermissions feature. Recorded once per extension at profile
    initialization if and only if the RuntimeHostPermissions feature is enabled
    and the extension requests any host permissions (i.e., could be affected by
    the feature).
  </summary>
</histogram>

<histogram name="Extensions.RuntimeHostPermissions.ExtensionHasWithheldHosts2"
    enum="BooleanHasWithheldHosts" expires_after="never">
<!-- expires-never: Monitors core extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Whether an extension had host permissions withheld as a result of the
    RuntimeHostPermissions feature. Recorded once per extension at &quot;user
    profile&quot; (profiles where people can install extensions, specifically
    profiles that can have non-component extensions installed) initialization if
    and only if the RuntimeHostPermissions feature is enabled and the extension
    requests any host permissions (i.e., could be affected by the feature).
  </summary>
</histogram>

<histogram name="Extensions.RuntimeHostPermissions.GrantedHostCount"
    units="Granted hosts" expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    The number of hosts an extension has been granted explicit access to that it
    also requested (note that if the user granted unrequested hosts, those will
    not be included in this count). Recorded once per extension at profile
    initialization if and only if the RuntimeHostPermissions feature is enabled
    and the extension has had host permissions withheld. See also
    Extensions.RuntimeHostPermissions.ExtensionHasWithheldHosts.
  </summary>
</histogram>

<histogram name="Extensions.RuntimeHostPermissions.GrantedHostCount2"
    units="Granted hosts" expires_after="never">
<!-- expires-never: Monitors core extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of hosts an extension has been granted explicit access to that it
    also requested (note that if the user granted unrequested hosts, those will
    not be included in this count). Recorded once per extension at &quot;user
    profile&quot; (profiles where people can install extensions, specifically
    profiles that can have non-component extensions installed) initialization if
    and only if the RuntimeHostPermissions feature is enabled and the extension
    has had host permissions withheld. See also
    Extensions.RuntimeHostPermissions.ExtensionHasWithheldHosts.
  </summary>
</histogram>

<histogram name="Extensions.SandboxedPageLoad.IsWebAccessibleResource"
    enum="BooleanVisible" expires_after="2023-11-01">
  <owner>solomonkinard@google.com</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Logs if the requested extension subresource is a Web Accessible Resource
    that is &quot;visible&quot; to any requesting origin. Logged for each
    extension subresource request if the requesting origin is opaque (with
    precursor origin also being an extension).
  </summary>
</histogram>

<histogram name="Extensions.SandboxUnpackFailureReason2"
    enum="ExtensionUnpackFailureReason" expires_after="never">
<!-- expires-never: Monitors core extension installation flows. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The reason an extension failed to unpack, recorded when a failure occurs.

    Replaced Extensions.SandboxUnpackFailureReason because the enum values were
    not in sync with the C++ enums.
  </summary>
</histogram>

<histogram name="Extensions.SandboxUnpackHashCheck" enum="BooleanValidHashSum"
    expires_after="M85">
  <owner>achuith@chromium.org</owner>
  <summary>
    Whether a CRX file hash sum was the same as in an updater manifest.
  </summary>
</histogram>

<histogram name="Extensions.SandboxUnpackSuccess" units="units"
    expires_after="never">
<!-- expires-never: Monitors core extension installation flows. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>Count the number of times a sandboxed CRX unpack succeeds.</summary>
</histogram>

<histogram name="Extensions.SearchEngineOverrides" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>kelvinjiang@chromium.org</owner>
  <summary>
    The number of enabled extensions with a search engine override specified in
    their manifest. Recorded once per profile at profile initialization.
  </summary>
</histogram>

<histogram name="Extensions.SearchEngineOverrides2" units="units"
    expires_after="2024-01-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>kelvinjiang@chromium.org</owner>
  <summary>
    The number of enabled extensions with a search engine override specified in
    their manifest. Recorded once per &quot;user profile&quot; (profiles where
    people can install extensions, specifically profiles that can have
    non-component extensions installed) at profile initialization.
  </summary>
</histogram>

<histogram
    name="Extensions.ServiceWorkerBackground.RegistrationMismatchLocation"
    enum="ExtensionLocation" expires_after="2023-04-01">
  <owner>lazyboy@chromium.org</owner>
  <owner>dbertoni@chromium.org</owner>
  <summary>
    Recorded when Service Worker registration wasn't found when expected. This
    also records the manifest location of the extension.
  </summary>
</histogram>

<histogram
    name="Extensions.ServiceWorkerBackground.RegistrationMismatchMitigated"
    enum="Boolean" expires_after="2023-08-08">
  <owner>lazyboy@chromium.org</owner>
  <owner>dbertoni@chromium.org</owner>
  <summary>
    Whether the attempt to re-register an extension Service Worker to mitigate
    missing registration issue succeeded. The attempt is performed during
    extension load.
  </summary>
</histogram>

<histogram name="Extensions.ServiceWorkerBackground.RegistrationStatus"
    enum="Boolean" expires_after="2023-06-18">
  <owner>lazyboy@chromium.org</owner>
  <owner>dbertoni@chromium.org</owner>
  <summary>
    Tracks whether background service worker registration succeeded or not.
  </summary>
</histogram>

<histogram name="Extensions.ServiceWorkerBackground.RegistrationTime"
    units="ms" expires_after="2022-10-01">
  <owner>lazyboy@chromium.org</owner>
  <owner>dbertoni@chromium.org</owner>
  <summary>
    The amount of time it takes to register a service worker background script.
  </summary>
</histogram>

<histogram name="Extensions.ServiceWorkerBackground.RegistrationWhenExpected"
    enum="Boolean" expires_after="2023-08-13">
  <owner>lazyboy@chromium.org</owner>
  <owner>dbertoni@chromium.org</owner>
  <summary>
    Whether or not an expected Service Worker registration was found. Note that
    this expectation was stored in ExtensionPrefs.
  </summary>
</histogram>

<histogram name="Extensions.ServiceWorkerBackground.StartWorkerStatus"
    enum="Boolean" expires_after="2023-10-22">
  <owner>lazyboy@chromium.org</owner>
  <owner>dbertoni@chromium.org</owner>
  <summary>
    Tracks whether background service worker starting succeeded or not.
  </summary>
</histogram>

<histogram name="Extensions.ServiceWorkerBackground.StartWorkerTime" units="ms"
    expires_after="2022-10-01">
  <owner>lazyboy@chromium.org</owner>
  <owner>dbertoni@chromium.org</owner>
  <summary>
    The amount of time it takes to start the background service worker of an
    extension.
  </summary>
</histogram>

<histogram
    name="Extensions.SettingsOverridden.BackToGoogleNtpOverriddenDialogResult"
    enum="SettingsOverriddenDialogResult" expires_after="2023-12-15">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The action taken on the settings overridden dialog that was shown to alert
    the user of an extension overriding the New Tab Page, when the dialog shown
    is the version that asks the user if they want to go back to Google's New
    Tab Page. Recorded once per instance of the dialog being shown, after the
    action is taken.
  </summary>
</histogram>

<histogram
    name="Extensions.SettingsOverridden.BackToGoogleSearchOverriddenDialogResult"
    enum="SettingsOverriddenDialogResult" expires_after="2023-12-15">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The action taken on the settings overridden dialog that was shown to alert
    the user of an extension overriding the default search provider, when the
    dialog shown is the version that asks the user if they want to go back to
    Google search. Recorded once per instance of the dialog being shown, after
    the action is taken.
  </summary>
</histogram>

<histogram
    name="Extensions.SettingsOverridden.BackToOtherSearchOverriddenDialogResult"
    enum="SettingsOverriddenDialogResult" expires_after="2023-12-15">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The action taken on the settings overridden dialog that was shown to alert
    the user of an extension overriding the default search provider, when the
    dialog shown is the version that asks the user if they want to go back to a
    previous search engine that isn't Google. Recorded once per instance of the
    dialog being shown, after the action is taken.
  </summary>
</histogram>

<histogram
    name="Extensions.SettingsOverridden.GenericNtpOverriddenDialogResult"
    enum="SettingsOverriddenDialogResult" expires_after="2023-12-15">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The action taken on the settings overridden dialog that was shown to alert
    the user of an extension overriding the New Tab Page, when the dialog shown
    is the generic version. Recorded once per instance of the dialog being
    shown, after the action is taken.
  </summary>
</histogram>

<histogram
    name="Extensions.SettingsOverridden.GenericSearchOverriddenDialogResult"
    enum="SettingsOverriddenDialogResult" expires_after="2023-12-15">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The action taken on the settings overridden dialog that was shown to alert
    the user of an extension overriding the default search provider, when the
    dialog shown is the generic version. Recorded once per instance of the
    dialog being shown, after the action is taken.
  </summary>
</histogram>

<histogram name="Extensions.StartupPagesOverrides" units="units"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>kelvinjiang@chromium.org</owner>
  <summary>
    The number of enabled extensions with startup page overrides specified in
    their manifest. Recorded once per profile at profile initialization.
  </summary>
</histogram>

<histogram name="Extensions.StartupPagesOverrides2" units="units"
    expires_after="2024-01-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>kelvinjiang@chromium.org</owner>
  <summary>
    The number of enabled extensions with startup page overrides specified in
    their manifest. Recorded once per &quot;user profile&quot; (profiles where
    people can install extensions, specifically profiles that can have
    non-component extensions installed) at profile initialization.
  </summary>
</histogram>

<histogram name="Extensions.SyncBlockedByDefaultWebAppMigration" enum="Boolean"
    expires_after="2023-08-08">
  <owner>alancutter@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Records true whenever an extension sync install attempt was blocked because
    it was a default Chrome app that has been migrated over to a web app. Never
    records false.
  </summary>
</histogram>

<histogram name="Extensions.SyncGetMessageBundle" units="ms"
    expires_after="2022-09-11">
  <obsolete>
    Code removed 2022/12.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The amount of synchronous time spent retrieving an extension's message
    bundle (the collection of its i18n resources) from the browser.
  </summary>
</histogram>

<histogram name="Extensions.ThrottledNetworkRequestDelay" units="ms"
    expires_after="2022-06-01">
  <obsolete>
    Code removed 2022/12.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The duration by which a network request was delayed while waiting for
    extension user script load. Recorded once per request that is delayed, at
    the time the resource resumes loading.
  </summary>
</histogram>

<histogram name="Extensions.Toolbar.InvocationSource"
    enum="ExtensionActionInvocationSource" expires_after="2023-10-08">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The source that triggered an extension action. Recorded once per invocation
    of an extension action.
  </summary>
</histogram>

<histogram name="Extensions.Toolbar.PinnedExtensionCount2"
    units="pinned extensions" expires_after="never">
<!-- expires-never: Monitoring core user behavior with extensions. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The number of extensions that the user has pinned on the toolbar. Recorded
    once per profile during initialization if the user has at least one
    extension with an action in the toolbar.
  </summary>
</histogram>

<histogram name="Extensions.Toolbar.PinnedExtensionPercentage3" units="%"
    expires_after="never">
<!-- expires-never: Monitoring core user behavior with extensions. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The percentage of extensions that the user has pinned to the toolbar (i.e.,
    this will be 100 if the user has every extension pinned). Recorded once per
    profile during initialization if the user has at least one extension with an
    action in the toolbar.
  </summary>
</histogram>

<histogram name="Extensions.UninstallBookmarkApp" enum="Boolean"
    expires_after="2022-12-01">
  <obsolete>
    Obsolete in M110.
  </obsolete>
  <owner>phillis@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Tracks whether bookmark app uninstalling succeeded or not. This is emitted
    whenever a bookmark app (which is deprecated) gets uninstalled.
  </summary>
</histogram>

<histogram name="Extensions.UninstallSource" enum="ExtensionUninstallSource"
    expires_after="never">
<!-- expires-never: Monitoring core extension usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The source for the extension uninstall. This is only recorded if an
    uninstall dialog is shown to the user (i.e., it is not recorded for internal
    &quot;cleanups&quot;). Note: this is no longer emitted for web app
    uninstalls as of M113.
  </summary>
</histogram>

<histogram name="Extensions.UninstallType" enum="ExtensionType"
    expires_after="never">
<!-- expires-never: Monitoring core extension usage behaviors. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>Uninstalls grouped by Extension::HistogramType.</summary>
</histogram>

<histogram name="Extensions.UpdateOnLoad" units="units" expires_after="M85">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of extensions that were updated at browser startup.
  </summary>
</histogram>

<histogram name="Extensions.UpdateSource" enum="ExtensionLocation"
    expires_after="M77">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Updates grouped by the location property in prefs.</summary>
</histogram>

<histogram name="Extensions.UpdateType" enum="ExtensionType"
    expires_after="M77">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Updates grouped by Extension::HistogramType.</summary>
</histogram>

<histogram name="Extensions.UsedMimeTypeHandler" enum="UsedMimeTypeHandler"
    expires_after="2021-11-14">
  <owner>apotapchuk@chromium.org</owner>
  <owner>anqing@chromium.org</owner>
  <summary>
    Tracks the usage of different MIME type handlers used to view files. It is
    recorded when the browser intercepts navigation with one of the type
    handlers.
  </summary>
</histogram>

<histogram
    name="Extensions.WebRequest.BeforeRequestDeclarativeNetRequestEvaluationTime"
    units="ms" expires_after="2023-12-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    The total amount of time taken to evaluate declarativeNetRequest rules in
    the onBeforeRequest stage, measured in milliseconds. Recorded once per
    request if and only if at least one declarativeNetRequest rule is present.
  </summary>
</histogram>

<histogram
    name="Extensions.WebRequest.BeforeRequestDeclarativeNetRequestEvaluationTimeInMicroseconds"
    units="microseconds" expires_after="2023-12-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    The total amount of time taken to evaluate declarativeNetRequest rules in
    the onBeforeRequest stage, measured in microseconds. Recorded once per
    request if and only if at least one declarativeNetRequest rule is present.
    This is only emitted for users with high resolution clocks.
  </summary>
</histogram>

<histogram
    name="Extensions.WebRequest.BeforeRequestListenerEvaluationTime.{HandlerTypes}"
    units="ms" expires_after="2023-12-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    The total amount of time, measured in milliseconds, between when an event is
    dispatched to webRequest listeners and when all responses are received and
    handled for an onBeforeRequest event. Emitted when there are {HandlerTypes}
    for the request. Recorded once per request if the request completes.
  </summary>
  <token key="HandlerTypes">
    <variant name="WebRequestAndDeclarativeNetRequest"
        summary="both webRequest listeners and declarativeNetRequest rules"/>
    <variant name="WebRequestOnly" summary="only webRequest listeners"/>
  </token>
</histogram>

<histogram
    name="Extensions.WebRequest.BeforeRequestListenerEvaluationTimeInMicroseconds.{HandlerTypes}"
    units="microseconds" expires_after="2023-12-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    The total amount of time, measured in milliseconds, between when an event is
    dispatched to webRequest listeners and when all responses are received and
    handled for an onBeforeRequest event. Emitted when there are {HandlerTypes}
    for the request. Recorded once per request if the request completes. This is
    only emitted for users with high resolution clocks.
  </summary>
  <token key="HandlerTypes">
    <variant name="WebRequestAndDeclarativeNetRequest"
        summary="both webRequest listeners and declarativeNetRequest rules"/>
    <variant name="WebRequestOnly" summary="only webRequest listeners"/>
  </token>
</histogram>

<histogram name="Extensions.WebRequest.EventListenerFlag"
    enum="WebRequestEventListenerFlag" expires_after="never">
<!-- expires-never: For monitoring Web Request API usage statistics. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Records any flags that were registered in the extraInfoSpec of a webRequest
    listener, as well as the total number of listeners registered. Recorded each
    time a new listener is registered.
  </summary>
</histogram>

<histogram name="Extensions.WebRequest.KeepaliveRequestState"
    enum="ExtensionInProgressRequestState" expires_after="2024-02-07">
  <owner>bashi@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    Whether and how keepalive requests are blocked. There is a similar histgoram
    Net.KeepaliveRequest.BlockStatus. See there for the difference between the
    two histograms.
  </summary>
</histogram>

<histogram name="Extensions.WebRequest.RequestHeaderAdded"
    enum="WebRequest.RequestHeader" expires_after="never">
<!-- expires-never: For monitoring Web Request API usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Records the request header added by extensions using the WebRequest API.
    Recorded for each network request during the OnBeforeSendHeaders stage.
    Multiple samples can be recorded per request.
  </summary>
</histogram>

<histogram name="Extensions.WebRequest.RequestHeaderChanged"
    enum="WebRequest.RequestHeader" expires_after="never">
<!-- expires-never: For monitoring Web Request API usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Records the request header modified by extensions using the WebRequest API.
    Recorded for each network request during the OnBeforeSendHeaders stage.
    Multiple samples can be recorded per request.
  </summary>
</histogram>

<histogram name="Extensions.WebRequest.RequestHeaderRemoved"
    enum="WebRequest.RequestHeader" expires_after="never">
<!-- expires-never: For monitoring Web Request API usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Records the request header removed by extensions using the WebRequest API.
    Recorded for each network request during the OnBeforeSendHeaders stage.
    Multiple samples can be recorded per request.
  </summary>
</histogram>

<histogram name="Extensions.WebRequest.ResponseHeaderAdded"
    enum="WebRequest.ResponseHeader" expires_after="never">
<!-- expires-never: For monitoring Web Request API usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Records the response header added by extensions using the WebRequest API.
    This is logged for the cumulative delta across all the web request
    extensions. Recorded for each network request during the OnHeadersReceived
    stage. Multiple samples can be recorded per request.
  </summary>
</histogram>

<histogram name="Extensions.WebRequest.ResponseHeaderChanged"
    enum="WebRequest.ResponseHeader" expires_after="never">
<!-- expires-never: For monitoring Web Request API usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Records the response header modified by extensions using the WebRequest API.
    This is logged for the cumulative delta across all the web request
    extensions. Recorded for each network request during the OnHeadersReceived
    stage. Multiple samples can be recorded per request.
  </summary>
</histogram>

<histogram name="Extensions.WebRequest.ResponseHeaderRemoved"
    enum="WebRequest.ResponseHeader" expires_after="never">
<!-- expires-never: For monitoring Web Request API usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Records the response header removed by extensions using the WebRequest API.
    This is logged for the cumulative delta across all the web request
    extensions. Recorded for each network request during the OnHeadersReceived
    stage. Multiple samples can be recorded per request.
  </summary>
</histogram>

<histogram name="Extensions.WebRequest.TotalBlockingRequestTime" units="ms"
    expires_after="never">
<!-- expires-never: For monitoring Web Request API performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    The total time a network request took when at least one Web Request listener
    was registered at the start of the request, and a listener was blocked on
    the request. Measures from onBeforeRequest to onCompleted/onErrorOccurred,
    and does not include canceled or redirected requests.
  </summary>
</histogram>

<histogram name="Extensions.WebRequest.TotalExtraHeadersRequestTime" units="ms"
    expires_after="never">
<!-- expires-never: For monitoring Web Request API performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    The total time a network request took when at least one Web Request listener
    with 'extraHeaders' in the extraInfoSpec was registered at the start of the
    request. Measures from onBeforeRequest to onCompleted/onErrorOccurred, and
    does not include canceled or redirected requests.
  </summary>
</histogram>

<histogram name="Extensions.WebRequest.TotalRequestTime" units="ms"
    expires_after="never">
<!-- expires-never: For monitoring Web Request API performance. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    The total time a network request took when at least one Web Request listener
    was registered at the start of the request. Measures from onBeforeRequest to
    onCompleted/onErrorOccurred, and does not include canceled or redirected
    requests.
  </summary>
</histogram>

<histogram name="Extensions.WebRequestAction" enum="RequestAction"
    expires_after="never">
<!-- expires-never: For monitoring Web request actions. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Counts the number of times an action is requested by extensions as part of
    the Web Request API. For a given web request stage, multiple actions may be
    logged.
  </summary>
</histogram>

<histogram name="Extensions.WebRequestBlockingCount" units="extensions"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Number of enabled extensions which have requested the
    &quot;webRequestBlocking&quot; permission. Includes all kinds of extensions,
    including component and unpacked extensions. Recorded during profile
    initialization.
  </summary>
</histogram>

<histogram name="Extensions.WebRequestBlockingCount2" units="extensions"
    expires_after="never">
<!-- expires-never: For monitoring Web request API usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Number of enabled extensions which have requested the
    &quot;webRequestBlocking&quot; permission. Includes all kinds of extensions,
    including component and unpacked extensions. Recorded during &quot;user
    profile&quot; (profiles where people can install extensions, specifically
    profiles that can have non-component extensions installed) initialization.
  </summary>
</histogram>

<histogram name="Extensions.WebRequestCount" units="extensions"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>src/extensions/OWNERS</owner>
  <summary>
    Number of enabled extensions which have requested the &quot;webRequest&quot;
    permission. Includes all kinds of extensions, including component and
    unpacked extensions. Recorded during profile initialization.
  </summary>
</histogram>

<histogram name="Extensions.WebRequestCount2" units="extensions"
    expires_after="never">
<!-- expires-never: For monitoring Web request API usage. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Number of enabled extensions which have requested the &quot;webRequest&quot;
    permission. Includes all kinds of extensions, including component and
    unpacked extensions. Recorded during &quot;user profile&quot; (profiles
    where people can install extensions, specifically profiles that can have
    non-component extensions installed) initialization.
  </summary>
</histogram>

<histogram name="Extensions.WebStoreInstall.EsbAllowlistParameter"
    enum="WebStoreInstallAllowlistParameter" expires_after="2023-10-01">
  <owner>jeffcyr@google.com</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Reports the Safe Browsing CRX allowlist state received from Chrome Web Store
    when a user presses on &quot;Add to Chrome&quot; in Chrome Web Store.
  </summary>
</histogram>

<histogram
    name="Extensions.WebStoreInstall.NotAllowlistedInstalledWithFriction"
    enum="Boolean" expires_after="2023-10-01">
  <owner>jeffcyr@google.com</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Reports when a user with install friction dialog enabled tries to install an
    extension that is not included in the Safe Browsing CRX allowlist. 'True' if
    the install dialog is accepted or 'False' if the friction dialog or install
    dialog is canceled.
  </summary>
</histogram>

<histogram
    name="Extensions.WebStoreInstall.NotAllowlistedInstalledWithoutFriction"
    enum="Boolean" expires_after="2023-10-01">
  <owner>jeffcyr@google.com</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Reports when a user with install friction dialog disabled tries to install
    an extension that is not included in the Safe Browsing CRX allowlist. 'True'
    if the install dialog is accepted or 'False' if the install dialog is
    canceled.
  </summary>
</histogram>

<histogram
    name="Extensions.WebUi.DocumentLoadedInMainFrameTime{ExtensionWebUiPageType}"
    units="ms" expires_after="2021-12-01">
  <owner>dpapad@chromium.org</owner>
  <owner>dbeam@chromium.org</owner>
  <summary>
    The amount of time between starting the provisional load and fully loading
    the document in the main frame of the chrome://extensions page. This
    corresponds to the WebContentsObserver::DocumentLoadedInFrame method.
    {ExtensionWebUiPageType}
  </summary>
</histogram>

<histogram
    name="Extensions.WebUi.LoadCompletedInMainFrame{ExtensionWebUiPageType}"
    units="ms" expires_after="2021-12-01">
  <owner>dpapad@chromium.org</owner>
  <owner>dbeam@chromium.org</owner>
  <summary>
    The amount of time between starting the provisional load and having
    completed the onload handler in the main frame of the chrome://extensions
    page. This corresponds to the
    WebContentsObserver::DocumentOnLoadCompletedInPrimaryMainFrame method.
    {ExtensionWebUiPageType}
  </summary>
</histogram>

<histogram
    name="Extensions.{ExtensionSource}ForceInstalledFailureManifestInvalidErrorDetail2"
    enum="ManifestInvalidError" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    The detailed reason why enterprise policy forced extensions had failed to
    install because fetched update manifest was invalid. Recorded for each
    forced extension that failed to install after 5 minutes with
    Extensions.ForceInstalledFailureReason2 equal to MANIFEST_INVALID.

    Replaced Extensions.ForceInstalledFailureManifestInvalidErrorDetail due to
    addition of new error BAD_APP_STATUS, and some of the errors that were
    MISSING_UPDATE_CHECK_TAG would now be reported as BAD_APP_STATUS.
  </summary>
  <token key="ExtensionSource">
    <variant name="OffStore_"
        summary="Detailed failure reason for OffStore extensions"/>
    <variant name="WebStore_"
        summary="Detailed failure reason for WebStore extensions"/>
  </token>
</histogram>

<histogram
    name="Extensions.{ExtensionSource}ForceInstalled{ErrorType}HttpErrorCode2"
    enum="HttpResponseCode" expires_after="2023-12-01">
  <owner>vkovalova@google.com</owner>
  <owner>burunduk@chromium.org</owner>
  <owner>managed-devices@google.com</owner>
  <summary>
    HTTP error code for the last retry attempt when for enterprise policy forced
    extensions failed with {ErrorType}. Recorded for each forced extension that
    failed to install after 5 minutes with
    Extensions.`OffStore,WebStore`_ForceInstalledFailureReason3 equal to
    {ErrorType} and a HTTP response code was received. HTTP response code is
    received only if there was no network error. Replaced
    Extensions.ForceInstalledHttpErrorCode because error codes are now reported
    only when network error code is HTTP_RESPONSE_CODE_FAILURE.
  </summary>
  <token key="ExtensionSource">
    <variant name=""
        summary="Aggregated detailed failure reason for any type of extension"/>
    <variant name="OffStore_"
        summary="Detailed failure reason for OffStore extensions"/>
    <variant name="WebStore_"
        summary="Detailed failure reason for WebStore extensions"/>
  </token>
  <token key="ErrorType">
    <variant name="" summary="CRX_FETCH_FAILED failure reason."/>
    <variant name="CrxFetchRetry" summary="CRX_DOWNLOAD_RETRY stage."/>
    <variant name="ManifestFetchFailed"
        summary="MANIFEST_FETCH_FAILED failure reason."/>
    <variant name="ManifestFetchRetry"
        summary="MANIFEST_DOWNLOAD_RETRY stage."/>
  </token>
</histogram>

<histogram name="ExtensionToolbarModel.BrowserActionsCount" units="actions"
    expires_after="2023-07-07">
  <obsolete>
    Histogram is in the process of being removed in favor of its incremented
    version that emits only on profile open for &quot;user&quot; profiles
    (profiles where people can install extensions, specifically profiles that
    can have non-component extensions installed).
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The total number of extensions that have an icon in the extension toolbar,
    including those that are unpinned and only show in the extensions menu.
    Measured once per (non-incognito) profile open.
  </summary>
</histogram>

<histogram name="ExtensionToolbarModel.BrowserActionsCount2" units="actions"
    expires_after="never">
<!-- expires-never: Monitoring core user behavior with extensions. -->

  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    The total number of extensions that have an icon in the extension toolbar,
    including those that are unpinned and only show in the extensions menu.
    Measured once per &quot;user&quot; profile (profiles where people can
    install extensions, specifically profiles that can have non-component
    extensions installed) open.
  </summary>
</histogram>

</histograms>

</histogram-configuration>
