blob: 14b13e3a996187b3e249cc2ab9902546cafca59f [file] [log] [blame]
<!--
Copyright 2020 The Chromium Authors. All rights reserved.
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)."/>
</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="2022-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="2022-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="2022-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-01-22">
<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">
<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-01-22">
<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="2022-12-25">
<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.ApiTabUpdateJavascript" enum="Boolean"
expires_after="M78">
<owner>dbertoni@chromium.org</owner>
<summary>
Reports whether a tab was updated to a javascript:-scheme URL from the
extensions tabs.update API. Reported once per call to tabs.update().
</summary>
</histogram>
<histogram name="Extensions.AppLaunch" enum="AppLaunch"
expires_after="2023-01-15">
<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.
</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 at startup 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="2022-09-11">
<owner>benwells@chromium.org</owner>
<owner>tapted@chromium.org</owner>
<summary>
The number of apps launched grouped by extensions::LaunchType.
</summary>
</histogram>
<histogram name="Extensions.AttemptedToDowngradeVersionLocation"
enum="ExtensionLocation" expires_after="2022-11-18">
<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-01-01">
<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="2022-11-18">
<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="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 startup.
</summary>
</histogram>
<histogram name="Extensions.BadMessageFunctionName{IsKiosk}"
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. In M-102 this
histogram was split and events from kiosk extensions are recorded in the
separate Extensions.BadMessageFunctionName.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.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">
<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="2022-08-14">
<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-01-01">
<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.CheckForExternalUpdatesTime" units="ms"
expires_after="M77">
<owner>rkaplow@chromium.org</owner>
<summary>
The amount of time that elapsed during
ExtensionService::CheckForExternalUpdates.
</summary>
</histogram>
<histogram name="Extensions.ChromeExtensionsClientInitTime2"
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 initialize the ChromeExtensionsClient.
Recorded once per client initialization, which happens once per instance of
Chrome. This is a new stat that has microsecond resolution.
</summary>
</histogram>
<histogram name="Extensions.ContentVerification.ComputedHashesInitTime"
units="ms" expires_after="2020-11-30">
<owner>lazyboy@chromium.org</owner>
<owner>rdevlin.cronin@chromium.org</owner>
<owner>extensions-core@chromium.org</owner>
<summary>
How long a successful initialization of computed_hashes.json file takes.
Recorded when content verification needs to retrieve block hashes.
</summary>
</histogram>
<histogram name="Extensions.ContentVerification.ComputedHashesReadResult"
enum="BooleanSuccess" expires_after="2020-11-30">
<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 read and parse succeeded. Recorded
when content verification needs to retrieve block hashes.
</summary>
</histogram>
<histogram name="Extensions.ContentVerification.ComputeHashesOnInstallResult"
enum="BooleanSuccess" expires_after="2022-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="2022-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="2022-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="2022-02-01">
<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.
</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.ContentVerification.VerifiedContentsInitResult"
enum="BooleanSuccess" expires_after="2020-11-30">
<owner>lazyboy@chromium.org</owner>
<owner>rdevlin.cronin@chromium.org</owner>
<owner>extensions-core@chromium.org</owner>
<summary>
Whether or not initializing verified_contents.json succeeded. Recorded
during an extension load completion or during an on demand content
verification that was triggered by ContentVerifyJob.
</summary>
</histogram>
<histogram name="Extensions.ContentVerification.VerifiedContentsInitTime"
units="ms" expires_after="2020-11-30">
<owner>lazyboy@chromium.org</owner>
<owner>rdevlin.cronin@chromium.org</owner>
<owner>extensions-core@chromium.org</owner>
<summary>
How long a successful initialization of verified_contents.json file takes.
Recorded if Extensions.ContentVerification.VerifiedContentsInitResult = true
was recorded.
</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.CorruptExtensionBecameDisabled" units="units"
expires_after="M85">
<owner>lazyboy@chromium.org</owner>
<owner>extensions-core@chromium.org</owner>
<summary>
Fired each time an extension was detected to be corrupted (contents not
matching an expected content hash from the webstore) and was disabled.
</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="never">
<!-- expires-never: Used for monitoring corrupt extensions. -->
<owner>lazyboy@chromium.org</owner>
<owner>extensions-core@chromium.org</owner>
<summary>
Logged once at startup, 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.CorruptExtensionWouldBeDisabled" units="units"
expires_after="M85">
<owner>lazyboy@chromium.org</owner>
<owner>extensions-core@chromium.org</owner>
<summary>
Simiar to Extensions.CorruptExtensionBecameDisabled, but fires when we're in
a bootstrapping mode and would have disabled an extension.
</summary>
</histogram>
<histogram name="Extensions.CorruptPolicyExtensionDetected3"
enum="ExtensionPolicyReinstallReason" expires_after="2022-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="2022-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.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="2022-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="2022-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="2022-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="2022-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="2022-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-06-26">
<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="2022-12-04">
<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-01-22">
<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-01-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="2022-12-04">
<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-01-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-01-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-01-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="2022-11-13">
<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="2022-11-18">
<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="2022-11-18">
<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="2022-11-18">
<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="2022-11-18">
<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="2022-11-18">
<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="2022-11-18">
<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="2022-11-18">
<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="2022-11-18">
<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="2022-06-26">
<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="never">
<!-- expires-never: Used for monitoring user extension usage. -->
<owner>rdevlin.cronin@chromium.org</owner>
<summary>
The number of extensions that are disabled at browser startup.
</summary>
</histogram>
<histogram name="Extensions.DisabledForPermissions" units="units"
expires_after="never">
<!-- expires-never: Used for monitoring user extension usage. -->
<owner>rdevlin.cronin@chromium.org</owner>
<summary>
The number of extensions that are disabled at browser startup due to
permissions increases.
</summary>
</histogram>
<histogram name="Extensions.DisabledUIUserResponse2"
enum="ExtensionDisabledUIUserResponse" expires_after="M77">
<owner>catmullings@chromium.org</owner>
<summary>
User response to the dialog shown when an extension is disabled due to an
update requiring more permissions. A count is recorded when the user takes
an action on the dialog (re-enable or remove the extension) or ignores the
dialog.
</summary>
</histogram>
<histogram name="Extensions.DisabledUIUserResponseRemoteInstall2"
enum="ExtensionDisabledUIUserResponse" expires_after="M77">
<owner>catmullings@chromium.org</owner>
<summary>
User response to the dialog shown when an extension is disabled due to it
having been installed remotely. A count is recorded when the user takes an
action on the dialog (re-enable or remove the extension) or ignores the
dialog.
</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 at startup 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.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="2022-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="2022-08-28">
<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="2022-10-10">
<owner>drubery@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="2022-12-25">
<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="2022-12-25">
<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="2022-09-11">
<owner>drubery@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="never">
<!-- expires-never: Monitoring core extension usage. -->
<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.ExtensionReenabledRemotely" units="count"
expires_after="2022-12-25">
<owner>drubery@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.ExtensionUninstalled" units="units"
expires_after="2022-05-01">
<owner>rdevlin.cronin@chromium.org</owner>
<owner>extensions-core@chromium.org</owner>
<summary>An extension has been uninstalled.</summary>
</histogram>
<histogram name="Extensions.ExternalExtensionEvent{ExternalExtensionEvent}"
enum="SideloadUIEvents" expires_after="M81">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
Records what happens to extensions that are sideloaded, grouped by the
ExternalExtensionEvent enum. {ExternalExtensionEvent}
</summary>
<token key="ExternalExtensionEvent">
<variant name=""/>
<variant name="NonWebstore"
summary="sideloaded extensions that don't update from the webstore"/>
<variant name="Webstore"
summary="sideloaded extensions that update from the webstore"/>
</token>
</histogram>
<histogram name="Extensions.ExternalItemState" enum="ExternalItemState"
expires_after="2018-08-30">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
The number of sideloaded apps/extensions loaded on startup 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">
<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="2018-08-30">
<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.FileAccessNotAllowed" units="units"
expires_after="2018-08-30">
<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.ForceInstalledAndBlockListed" units="count"
expires_after="2023-01-15">
<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="2022-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="2022-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="2022-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="2022-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="2022-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="2022-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="2022-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="2022-12-18">
<!-- 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="2022-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="2022-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="2022-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="2022-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="2022-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="2022-12-18">
<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="2022-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="2022-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="2022-12-18">
<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="2022-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="2022-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="2022-12-18">
<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="2022-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="2022-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="2022-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="2022-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="2018-08-30">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
Number of apps/extensions loaded on startup 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.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="2022-12-11">
<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">
<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="2022-12-25">
<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="2022-12-25">
<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="2022-12-01">
<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="2022-09-07">
<owner>xinghuilu@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="2022-09-07">
<owner>xinghuilu@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-02-01">
<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="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. 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="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). 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="2022-11-18">
<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.HostedAppLaunchContainer" enum="AppLaunchContainer"
expires_after="2022-12-04">
<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="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.
</summary>
</histogram>
<histogram name="Extensions.HostPermissions.GrantedAccessForBroadRequests"
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 profile initialization.
</summary>
</histogram>
<histogram name="Extensions.HostPermissions.GrantedAccessForTargetedRequests"
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 profile initialization.
</summary>
</histogram>
<histogram name="Extensions.IncognitoAllowed" units="units"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<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.IncognitoNotAllowed" units="units"
expires_after="2018-08-30">
<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.InitPrefGetExtensionsTime" units="ms"
expires_after="M90">
<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="2022-12-04">
<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="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.</summary>
</histogram>
<histogram name="Extensions.InstallType" enum="ExtensionType"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>rdevlin.cronin@chromium.org</owner>
<summary>Installs grouped by Extension::HistogramType.</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="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>rdevlin.cronin@chromium.org</owner>
<summary>The number of extensions and themes loaded at profile open.</summary>
</histogram>
<histogram name="Extensions.LoadAllComponentTime" units="ms"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<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.LoadAllTime2" units="ms" expires_after="never">
<!-- expires-never: Monitoring core extensions system performance. -->
<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.LoadApp" units="units" expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>rdevlin.cronin@chromium.org</owner>
<summary>The number of apps loaded by each user at profile open.</summary>
</histogram>
<histogram name="Extensions.LoadAppExternal" 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 profile open.
</summary>
</histogram>
<histogram name="Extensions.LoadAppUser" units="units" expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<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.LoadBrowserAction" units="units"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>rdevlin.cronin@chromium.org</owner>
<summary>
The number of browser action extensions loaded at profile open.
</summary>
</histogram>
<histogram name="Extensions.LoadCreationFlags" enum="ExtensionCreationFlags"
expires_after="2020-06-01">
<owner>calamity@chromium.org</owner>
<summary>
The creation flags of all extensions loaded at profile open grouped by
Extension::InitFromValueFlags.
</summary>
</histogram>
<histogram name="Extensions.LoadExtension" units="units" expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>rdevlin.cronin@chromium.org</owner>
<summary>The number of extensions loaded at profile open.</summary>
</histogram>
<histogram name="Extensions.LoadExtensionExternal" 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 profile open.
</summary>
</histogram>
<histogram name="Extensions.LoadExtensionUser" 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 profile 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="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>rdevlin.cronin@chromium.org</owner>
<summary>
The number of hosted apps loaded by each user at profile open.
</summary>
</histogram>
<histogram name="Extensions.LoadNoExtensionAction" units="units"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<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.LoadOffStoreItems" 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 profile initialization.
</summary>
</histogram>
<histogram name="Extensions.LoadPackagedApp" 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 profile open.
</summary>
</histogram>
<histogram name="Extensions.LoadPlatformApp" units="units"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>rdevlin.cronin@chromium.org</owner>
<summary>The number of platform apps loaded at profile open.</summary>
</histogram>
<histogram name="Extensions.LoadTheme" units="units" expires_after="2023-01-01">
<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.LoadType" enum="ExtensionType"
expires_after="2022-12-18">
<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.LoadUserScript" units="units"
expires_after="2022-11-18">
<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.Management_Refresh" units="ms"
expires_after="2023-01-01">
<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.ManifestIconSetIconWasVisibleForUnpacked"
enum="BooleanVisible" expires_after="2019-09-07">
<owner>dbertoni@chromium.org</owner>
<owner>extensions-core@chromium.org</owner>
<summary>
Reports whether loading an icon declarated in the extension's manifest icon
set is considered visible by our icon analysis code. This stat is only for
unpacked extensions, which we check at load time.
</summary>
</histogram>
<histogram name="Extensions.ManifestIconSetIconWasVisibleForUnpackedRendered"
enum="BooleanVisible" expires_after="2019-09-07">
<owner>dbertoni@chromium.org</owner>
<owner>extensions-core@chromium.org</owner>
<summary>
Reports whether loading an icon declarated in the extension's manifest icon
set is considered visible by our icon analysis code. This stat is only for
unpacked extensions, which we check at load time.
This replaces the previous stat, ManifestIconSetIconWasVisibleForUnpacked,
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.ManifestReloadNeedsRelocalization" units="units"
expires_after="2018-08-30">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
Number of extension loads on startup where it is necessary to reload the
mainfest because the locale has changed.
</summary>
</histogram>
<histogram name="Extensions.ManifestReloadNotNeeded" units="units"
expires_after="2018-08-30">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
Number of extension loads on startup where it is not necessary to reload the
extension's manifest.
</summary>
</histogram>
<histogram name="Extensions.ManifestReloadUnpackedDir" units="units"
expires_after="2018-08-30">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
Number of extension loads on startup where it is necessary to reload the
manifest because the extension is unpacked.
</summary>
</histogram>
<histogram name="Extensions.ManifestVersion" units="units"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>rdevlin.cronin@chromium.org</owner>
<summary>The manifest version of each loaded extension.</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">
<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.NetworkDelay" units="ms" expires_after="2023-01-23">
<owner>battre@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="2022-12-18">
<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.NonWebstoreLocation" enum="ExtensionLocation"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>rdevlin.cronin@chromium.org</owner>
<summary>
The number of apps/extensions with a non-webstore update_url loaded at
startup time grouped by Extension::Location.
</summary>
</histogram>
<histogram name="Extensions.NonWebStoreNewTabPageOverrides" units="units"
expires_after="M81">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
Number of non-WebStore extensions on startup that override the new tab page.
</summary>
</histogram>
<histogram name="Extensions.NotAllowlistedDisabled" units="extensions"
expires_after="2022-12-04">
<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.NotAllowlistedDisabledAndEsbUser"
units="extensions" expires_after="2022-12-04">
<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.NotAllowlistedEnabled" units="extensions"
expires_after="2022-10-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 all users on profile
initialization.
</summary>
</histogram>
<histogram name="Extensions.NotAllowlistedEnabledAndEsbUser" units="extensions"
expires_after="2022-12-04">
<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.Permissions_Install3" 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. For Sync users, this is reported for each device.
</summary>
</histogram>
<histogram name="Extensions.Permissions_Load3" 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). To find places where this histogram may
be emitted, look for calls to
ExtensionService::RecordPermissionMessagesHistogram with the argument Load.
</summary>
</histogram>
<histogram name="Extensions.PopupCreateTime" units="ms"
expires_after="2022-06-30">
<owner>rdevlin.cronin@chromium.org</owner>
<owner>extensions-core@chromium.org</owner>
<summary>
The time taken between a user clicking on a button to open a popup, and the
popup finishing loading its initial URL. This is a good way to measure the
UI responsiveness of extension popups. It will be strictly larger than
Extensions.PopupLoadTime2, which only measures the time it takes to load -
there may be a delay between clicking and starting to load, for example, if
the popup's host got caught in a queue.
</summary>
</histogram>
<histogram name="Extensions.PopupLoadTime2" units="ms"
expires_after="2022-06-30">
<owner>rdevlin.cronin@chromium.org</owner>
<owner>extensions-core@chromium.org</owner>
<summary>
The time taken for an extension popup to load its initial URL. This may not
include the time taken for an extension process to start, if the extension
already has a background page running. It does not necessarily correlate
with the amount of time since the popup was *clicked* either, since there
may be a delay between the user clicking and the loading started.
Extensions.PopupCreateTime measures this instead.
</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="2022-10-09">
<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">
<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.ResourceLastModifiedDelta" units="seconds"
expires_after="2019-11-30">
<owner>lazyboy@chromium.org</owner>
<summary>
The difference in seconds between an extension resource's last modification
time and its extension base directory's creation time. Recorded on each
extension resource request if the difference is non-negative (i.e., the
resource's last modification time is more recent than the directory's
creation time.) For cases where the directory creation date is more recent,
see Extensions.ResourceLastModifiedNegativeDelta instead.
</summary>
</histogram>
<histogram name="Extensions.ResourceLastModifiedNegativeDelta" units="seconds"
expires_after="2019-11-30">
<owner>lazyboy@chromium.org</owner>
<summary>
The absolute difference in seconds between an extension resource's last
modification time and extension base directory's creation time. Recorded on
each extension resource request if the difference is negative (i.e., the
directory's creation time is more recent than the resource's last
modification time.) For cases where the resource modification time is more
recent, see Extensions.ResourceLastModifiedDelta instead.
</summary>
</histogram>
<histogram name="Extensions.RuntimeHostPermissions.ExtensionHasWithheldHosts"
enum="BooleanHasWithheldHosts" expires_after="never">
<!-- expires-never: Monitors core extension usage. -->
<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.GrantedHostCount"
units="Granted hosts" expires_after="never">
<!-- expires-never: Monitors core extension usage. -->
<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.SandboxedPageLoad.IsWebAccessibleResource"
enum="BooleanVisible" expires_after="2022-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="2022-12-04">
<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.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-04-01">
<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="2022-12-04">
<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-04-01">
<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="2022-12-04">
<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="2022-10-04">
<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="2022-12-04">
<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-01-01">
<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="2022-10-04">
<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="2022-12-11">
<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="2022-10-10">
<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.SyncBlockedByDefaultWebAppMigration" enum="Boolean"
expires_after="2023-01-15">
<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">
<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">
<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-01-15">
<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">
<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;).
</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.UpdateCheckApp" units="units"
expires_after="2018-08-30">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
The number of legacy packaged apps and hosted apps that were checked during
an update check.
</summary>
</histogram>
<histogram name="Extensions.UpdateCheckExtension" units="units"
expires_after="M77">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
The number of extensions that were checked during an update check.
</summary>
</histogram>
<histogram name="Extensions.UpdateCheckGoogleUrl" units="units"
expires_after="M77">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
The number of crx's with a Google-hosted update URL that were checked during
an update check.
</summary>
</histogram>
<histogram name="Extensions.UpdateCheckNoUrl" units="units" expires_after="M77">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
The number of crx's with no update URL checked during an update check.
</summary>
</histogram>
<histogram name="Extensions.UpdateCheckOtherUrl" units="units"
expires_after="M77">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
The number of crx's with a non-Google update URL that were checked during an
update check.
</summary>
</histogram>
<histogram name="Extensions.UpdateCheckPackagedApp" units="units"
expires_after="2018-08-30">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
The number of packaged apps that were checked during an update check.
</summary>
</histogram>
<histogram name="Extensions.UpdateCheckTheme" units="units"
expires_after="2018-08-30">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
The number of themes that were checked during an update check.
</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.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="2022-11-27">
<owner>yhirano@chromium.org</owner>
<owner>kinuko@chromium.org</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.OnBeforeSendHeadersEventResponse"
enum="WebRequestEventResponse" expires_after="M77">
<owner>rockot@chromium.org</owner>
<summary>
For every network request visible to the Web Request API, this indicates
whether any registered declarative rules or event listeners observed the
onBeforeSendHeaders event.
This histogram is temporary, for investigating https://crbug.com/827582. It
can probably be removed by M69.
</summary>
</histogram>
<histogram name="Extensions.WebRequest.OnHeadersReceivedEventResponse"
enum="WebRequestEventResponse" expires_after="M77">
<owner>rockot@chromium.org</owner>
<summary>
For every network request visible to the Web Request API, this indicates
whether any registered declarative rules or event listeners observed the
onHeadersReceived event.
This histogram is temporary, for investigating https://crbug.com/827582. It
can probably be removed by M69.
</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="never">
<!-- expires-never: For monitoring Web request API usage. -->
<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.WebRequestCount" units="extensions"
expires_after="never">
<!-- expires-never: For monitoring Web request API usage. -->
<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.WebstoreDownload.InterruptReason"
enum="InterruptReason" expires_after="2018-08-30">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>The reason a webstore download was interrupted.</summary>
</histogram>
<histogram name="Extensions.WebstoreDownload.InterruptReceivedKBytes"
units="KB" expires_after="2018-08-30">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
The number of KBytes received for a webstore download before it was
interrupted.
</summary>
</histogram>
<histogram name="Extensions.WebstoreDownload.InterruptTotalKBytes" units="KB"
expires_after="2018-08-30">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
The total expected size in KBytes of an interrupted webstore download.
</summary>
</histogram>
<histogram name="Extensions.WebstoreDownload.InterruptTotalSizeUnknown"
enum="Boolean" expires_after="2018-08-30">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>
Tracks whether the total size of an interrupted webstore download was known.
</summary>
</histogram>
<histogram name="Extensions.WebStoreInstall.EsbAllowlistParameter"
enum="WebStoreInstallAllowlistParameter" expires_after="2022-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="2022-12-04">
<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="2022-12-04">
<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="2022-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="2022-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="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 startup per (non-incognito) profile.
</summary>
</histogram>
<histogram name="ExtensionUrlRequest.Latency" units="ms"
expires_after="2020-11-30">
<owner>lazyboy@chromium.org</owner>
<summary>The time taken to complete an extension url request.</summary>
</histogram>
<histogram name="ExtensionUrlRequest.SeekPosition" units="units"
expires_after="2020-11-30">
<owner>lazyboy@chromium.org</owner>
<summary>
When fetching a chrome-extension:// URL, this indicates the first byte
position we read from. This will be greater than 0 in cases such as XHR's
with a Range header, but will normally be 0 in the typical case of reading
the entire file. This helps identify how frequently partial file reads are
taking place.
</summary>
</histogram>
<histogram name="ExtensionUrlRequest.TotalKbRead" units="KB"
expires_after="2020-11-30">
<owner>lazyboy@chromium.org</owner>
<summary>
The total number of bytes read for a chrome-extension:// URL, logged when
the job is finished (either successfully or not).
</summary>
</histogram>
</histograms>
</histogram-configuration>