<!--
Copyright 2020 The Chromium Authors
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<!--
This file is used to generate a comprehensive list of Extensions histograms
along with a detailed description for each histogram.
For best practices on writing histogram descriptions, see
https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md
Please follow the instructions in the OWNERS file in this directory to find a
reviewer. If no OWNERS file exists, please consider signing up at
go/reviewing-metrics (Googlers only), as all subdirectories are expected to
have an OWNERS file. As a last resort you can send the CL to
[email protected].
-->
<histogram-configuration>
<histograms>
<variants name="DeclarativeNetRequestRegexRulesetSize">
<variant name="15To100Rules" summary="15 to 100 regex rules"/>
<variant name="100To500Rules" summary="100 to 500 regex rules"/>
<variant name="LessThan15Rules" summary="less than 15 regex rules"/>
<variant name="Over500Rules" summary="Over 500 regex rules"/>
</variants>
<variants name="DeclarativeNetRequestRulesetSize">
<variant name="1000To10000Rules" summary="1,000 to 10,000 rules"/>
<variant name="10000To30000Rules" summary="10,000 to 30,000 rules"/>
<variant name="30000To100000Rules" summary="30,000 to 100,000 rules"/>
<variant name="100000To300000Rules" summary="100,000 to 300,000 rules"/>
<variant name="LessThan1000Rules" summary="less than 1,000 rules"/>
<variant name="Over300000Rules" summary="over 300,000 rules"/>
</variants>
<variants name="DeveloperModeState">
<variant name="DeveloperModeOff" summary="developer mode off"/>
<variant name="DeveloperModeOn" summary="developer mode on"/>
</variants>
<variants name="ExtensionFunctionExecutionTime">
<variant name=".1msTo5ms"
summary="Execution took between 1ms and 5ms (tolerable)."/>
<variant name=".5msTo10ms"
summary="Execution took between 5ms and 10ms (slow)."/>
<variant name=".LessThan1ms" summary="Execution took less than 1ms (fast)."/>
<variant name=".Over10ms" summary="Execution took over 10ms (glacial)."/>
<variant name=".Over270s"
summary="Execution took over 4 and half minutes, close to timeout."/>
</variants>
<variants name="ExtensionMessagingPortType">
<variant name=".Extension" summary="A port opened to an extension context."/>
<variant name=".NativeApp" summary="A port opened to a native application."/>
<variant name=".Tab" summary="A port opened to a tab context."/>
</variants>
<variants name="ExtensionState">
<variant name=".Disabled" summary="disabled"/>
<variant name=".Enabled" summary="enabled"/>
</variants>
<variants name="ManifestLocationGroup">
<variant name="Component"
summary="component extension(s) (ManifestLocations kComponent and
kExternalComponent)"/>
<variant name="External"
summary="external extension(s) (ManifestLocations kExternalPref,
kExternalPrefDownload, and kExternalRegistry)"/>
<variant name="Internal"
summary="internal extension(s) (ManifestLocation::kInternal; likely
user-installed)"/>
<variant name="Policy"
summary="policy-installed extension(s) (ManifestLocations
kExternalPolicy and kExternalPolicyDownload)"/>
<variant name="Unpacked"
summary="unpacked and developer extension(s) (ManifestLocations
kCommandLine and kUnpacked)"/>
</variants>
<!--
This is similar to ManifestLocationGroup above, but allows for grouping
of interesting buckets, such as "internal + external".
-->
<variants name="ManifestLocationGroupWithCombos">
<variant name="Component"
summary="component extension(s) (ManifestLocations kComponent and
kExternalComponent)"/>
<variant name="External"
summary="external extension(s) (ManifestLocations kExternalPref,
kExternalPrefDownload, and kExternalRegistry)"/>
<variant name="Internal"
summary="internal extension(s) (ManifestLocation::kInternal; likely
user-installed)"/>
<variant name="InternalAndExternal"
summary="internal and external extension(s) (ManifestLocations
kInternal, kExternalPref, kExternalPrefDownload, and
kExternalRegistry)"/>
<variant name="Policy"
summary="policy-installed extension(s) (ManifestLocations
kExternalPolicy and kExternalPolicyDownload)"/>
<variant name="Unpacked"
summary="unpacked and developer extension(s) (ManifestLocations
kCommandLine and kUnpacked)"/>
</variants>
<!--
This is emitted for two scenarios when a worker may be unregistered:
1. due to an extension update to potentially unregistering the old worker or
2. due to the extension being deactivated (due to disable, uninstall, or
terminate)
#1 and #2 can both occur for an extension update.
#2 can occur independently outside of an extension update.
-->
<variants name="UnregistrationType">
<variant name=""
summary="This metric is emitted in the #1 (update) and #2 (deactivate
extension) scenarios. Note: in the scenario of an extension
update that has a worker (either as a background context or
registered via the Web API) to a worker-based extension this
metric may be double counted as true. This is because two
unregistrations requests are submitted and both will succeed.
This metric can also emit false expectedly when updating from
an MV2 extension with no workers registered."/>
<variant name="_AddExtension"
summary="This metric is only emitted in the #1 (update) scenario. Note:
This metric can expectedly emit false when updating from an
MV2 extension with no workers registered (either as a
background context, or registered via the web API). This is
because //extensions attempts to unregister a worker
regardless to ensure that those registered via the web API
(which //extensions doesn't track) are unregistered on update
to prepare for the updated version's worker to be registered."/>
<variant name="_DeactivateExtension"
summary="This metric is only emitted in the #2 (deactivate extension)
scenario when the worker is the current worker activation."/>
</variants>
<variants name="VerifiedFileType">
<variant name=".BackgroundPage" summary="Extension background page"/>
<variant name=".BackgroundScript" summary="Extension background script"/>
<variant name=".ContentScript" summary="Content script"/>
<variant name=".MiscFile" summary="Any other verified file"/>
<variant name=".MiscHtmlFile"
summary="Miscellaneous html file (e.g. loaded in a tab)"/>
<variant name=".MiscJsFile"
summary="Miscellaneous js file (e.g. loaded in a tab)"/>
<variant name=".ServiceWorkerScript"
summary="Extension service worker script"/>
</variants>
<histogram name="ExtensionBlacklist.BlacklistInstalled"
enum="ExtensionLocation" expires_after="2024-10-23">
<owner>[email protected]</owner>
<owner>[email protected]</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="2025-02-23">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-10-23">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-07-28">
<owner>[email protected]</owner>
<owner>[email protected]</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>[email protected]</owner>
<owner>[email protected]</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="Extensions.ActiveScriptController.DeniedExtensions"
units="Extension Count" expires_after="2025-02-09">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-12-29">
<owner>[email protected]</owner>
<owner>[email protected]</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.AppLaunch" enum="AppLaunch"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of times v1 apps are launched grouped by
extension_misc::AppLaunchBuckets. See also Apps.AppLaunch for v2 apps. Note
this was changed in 2023-02 to no longer count web app launches.
</summary>
</histogram>
<histogram name="Extensions.AppLocation2" enum="ExtensionLocation"
expires_after="2024-01-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of apps loaded on profile open time grouped by
Extension::Location.
</summary>
</histogram>
<histogram name="Extensions.BackgroundHostCreatedForExtension"
enum="BackgroundHostCreatedForExtensionValues" expires_after="2024-05-19">
<owner>[email protected]</owner>
<owner>[email protected]</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 "Other extension"
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
"Other extension" 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="2024-02-11">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The time taken for an extension's persistent background page to load its
initial URL.
</summary>
</histogram>
<histogram name="Extensions.BackgroundPageType"
enum="ExtensionBackgroundPageType" expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The type (if any) of background page the extension has. Recorded for
installed extensions on profile open.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.BackgroundPageType2"
enum="ExtensionBackgroundPageType" expires_after="never">
<!-- expires-never: Used for monitoring user extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The type (if any) of background page the extension has. Recorded for
installed extensions on profile open for "user profiles" (profiles
where people can install extensions, specifically profiles that can have
non-component extensions installed.
</summary>
</histogram>
<histogram name="Extensions.BadMessageFunctionName" enum="ExtensionFunctions"
expires_after="never">
<!-- expires-never: Monitoring core extension system health. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of times each Extension function call sends a bad message,
killing the renderer. This may indicate a bug in that API's implementation
on the renderer. Note a similar, aggregate metric is BadMessageTerminate_EFD
which counts the number of bad messages that are sent overall.
</summary>
</histogram>
<histogram name="Extensions.BadSyncDataReason" enum="BadSyncDataReason"
expires_after="never">
<!-- expires-never: Monitoring core extension system health. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The reason a valid ExtensionSyncData could not be parsed from a SyncData
received from sync.
</summary>
</histogram>
<histogram
name="Extensions.CommandLineWith{DeveloperModeState}{ExtensionState}"
units="count" expires_after="2025-01-26">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records when a {ExtensionState} command-line extension is loaded with
{DeveloperModeState}. Emitted on every profile open only for "user
profiles" (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed).
</summary>
<token key="DeveloperModeState" variants="DeveloperModeState"/>
<token key="ExtensionState" variants="ExtensionState"/>
</histogram>
<histogram name="Extensions.ContentScripts.ContentScriptLength" units="KB"
expires_after="2024-11-22">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The size, in KB, of a content script that is loaded successfully from a
file. Recorded when the content of a user script object is set.
</summary>
</histogram>
<histogram name="Extensions.ContentScripts.DynamicContentScriptsLengthPerLoad"
units="KB" expires_after="2024-12-02">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The size, in KB, of all newly loaded dynamic content scripts for one
extension. Recorded when a script load containing at least one new dynamic
content script finishes.
</summary>
</histogram>
<histogram name="Extensions.ContentScripts.ManifestContentScriptsLengthPerLoad"
units="KB" expires_after="2024-12-02">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The size, in KB, of all newly loaded manifest content scripts for one
extension. Recorded when a script load containing at least one new manifest
content script finishes.
</summary>
</histogram>
<histogram name="Extensions.ContentScripts.ScriptsWithoutPrefixRetrieved"
enum="Boolean" expires_after="2025-07-02">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Logged when at least one of an extension's dynamic content scripts is
retrieved from the StateStore and the script's id is not prefixed, so a
prefix will be added, since content script Objects should have a prefix to
their ids to indicate their source. Will be removed if this histogram is not
emitted for an extended period of time.
</summary>
</histogram>
<histogram
name="Extensions.ContentSettings.PrimaryPatternChromeExtensionScheme"
enum="ContentType" expires_after="2025-02-28">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
An entry is emitted each time an extension sets a content setting whose
primary pattern has a Chrome extension scheme. This will be used to
determine if the ability to set content settings for Chrome extension
origins can be deprecated.
This happens on profile startup (for stored settings) and each time an
extension calls chrome.contentSettings[type].set(...).
</summary>
</histogram>
<histogram
name="Extensions.ContentSettings.PrimaryPatternUniqueSecondaryPatternDifferent"
enum="ContentType" expires_after="2025-02-28">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
An entry is emitted each time an extension sets a content setting whose
primary pattern is unique and secondary pattern is a different unique.
This happens on profile startup (for stored settings) and each time an
extension calls chrome.contentSettings[type].set(...).
</summary>
</histogram>
<histogram
name="Extensions.ContentSettings.PrimaryPatternUniqueSecondaryPatternIdentical"
enum="ContentType" expires_after="2024-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
An entry is emitted each time an extension sets a content setting whose
primary pattern is unique and secondary pattern is identical to the primary
pattern.
This happens on profile startup (for stored settings) and each time an
extension calls chrome.contentSettings[type].set(...).
</summary>
</histogram>
<histogram
name="Extensions.ContentSettings.PrimaryPatternUniqueSecondaryPatternWildcard"
enum="ContentType" expires_after="2025-01-26">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
An entry is emitted each time an extension sets a content setting whose
primary pattern is unique and secondary pattern is a wildcard.
This happens on profile startup (for stored settings) and each time an
extension calls chrome.contentSettings[type].set(...).
</summary>
</histogram>
<histogram
name="Extensions.ContentSettings.PrimaryPatternWildcardSecondaryPatternUnique"
enum="ContentType" expires_after="2025-02-28">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
An entry is emitted each time an extension sets a content setting whose
primary pattern is a wildcard and whose secondary pattern is unique.
This happens on profile startup (for stored settings) and each time an
extension calls chrome.contentSettings[type].set(...).
</summary>
</histogram>
<histogram
name="Extensions.ContentSettings.PrimaryPatternWildcardSecondaryPatternWildcard"
enum="ContentType" expires_after="2025-02-28">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
An entry is emitted each time an extension sets a content setting whose
primary and secondary pattern are both wildcard.
This happens on profile startup (for stored settings) and each time an
extension calls chrome.contentSettings[type].set(...).
</summary>
</histogram>
<histogram
name="Extensions.ContentSettings.SecondaryPatternChromeExtensionScheme"
enum="ContentType" expires_after="2025-02-28">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
An entry is emitted each time an extension sets a content setting whose
secondary pattern has a Chrome extension scheme. This will be used to
determine if the ability to set content settings for Chrome extension
origins can be deprecated.
This happens on profile startup (for stored settings) and each time an
extension calls chrome.contentSettings[type].set(...).
</summary>
</histogram>
<histogram name="Extensions.ContentVerification.ComputeHashesOnInstallResult"
enum="BooleanSuccess" expires_after="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The time taken to successfully create the computed_hashes.json file for an
extension upon installation. The histogram is collected with
&Extensions.ContentVerification.ComputeHashesOnInstallResult& (in
case of success).
</summary>
</histogram>
<histogram
name="Extensions.ContentVerification.DidHashMismatchOnFetchCompleteMV2"
enum="Boolean" expires_after="2025-02-02">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Reports whether content verification hashes found a hash mismatch when hash
fetching completes for a Manifest Version 2 extension. Hash fetching occurs
both for a specific content verification job and when the extension first
loads.
</summary>
</histogram>
<histogram
name="Extensions.ContentVerification.DidHashMismatchOnFetchCompleteMV2.GoogleDocsOffline"
enum="Boolean" expires_after="2024-12-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Reports whether content verification hashes found a hash mismatch when hash
fetching completes for the Google Docs Offline extension running on Manifest
Version 2. Hash fetching occurs both for a specific content verification job
and when the extension first loads.
</summary>
</histogram>
<histogram
name="Extensions.ContentVerification.DidHashMismatchOnFetchCompleteMV3"
enum="Boolean" expires_after="2025-02-02">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Reports whether content verification hashes found a hash mismatch when hash
fetching completes for a Manifest Version 3 extension. Hash fetching occurs
both for a specific content verification job and when the extension first
loads.
</summary>
</histogram>
<histogram
name="Extensions.ContentVerification.DidHashMismatchOnFetchCompleteMV3.GoogleDocsOffline"
enum="Boolean" expires_after="2024-12-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Reports whether content verification hashes found a hash mismatch when hash
fetching completes for the Google Docs Offline extension running on Manifest
Version 3. Hash fetching occurs both for a specific content verification job
and when the extension first loads.
</summary>
</histogram>
<histogram name="Extensions.ContentVerification.FetchFailureError"
enum="CombinedHttpResponseAndNetErrorCode" expires_after="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Whether or not fetching verified_contents.json succeeded. Recorded when the
file wasn't available locally and we needed to fetch it from network.
Warning: this histogram was expired from 2022-02-01 to 2022-09-22; data may
be missing.
</summary>
</histogram>
<histogram
name="Extensions.ContentVerification.VerifyFailedOnFileMV2.GoogleDocsOffline{VerifiedFileType}"
enum="ContentVerifyJobResult" expires_after="2024-12-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The content verification failure reason for why a {VerifiedFileType} failed.
Emitted when content verification fails for a {VerifiedFileType} for the
Google Docs Offline extension running Manifest V2.
</summary>
<token key="VerifiedFileType" variants="VerifiedFileType">
<variant name=""/>
</token>
</histogram>
<histogram
name="Extensions.ContentVerification.VerifyFailedOnFileMV2{VerifiedFileType}"
enum="ContentVerifyJobResult" expires_after="2025-02-02">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The content verification failure reason for why a {VerifiedFileType} failed.
Emitted when content verification fails for a {VerifiedFileType} in a
manifest V2 extension.
</summary>
<token key="VerifiedFileType" variants="VerifiedFileType">
<variant name=""/>
</token>
</histogram>
<histogram
name="Extensions.ContentVerification.VerifyFailedOnFileMV3.GoogleDocsOffline{VerifiedFileType}"
enum="ContentVerifyJobResult" expires_after="2024-12-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The content verification failure reason for why a {VerifiedFileType} failed.
Emitted when content verification fails for a {VerifiedFileType} for the
Google Docs Offline extension running Manifest V2.
</summary>
<token key="VerifiedFileType" variants="VerifiedFileType">
<variant name=""/>
</token>
</histogram>
<histogram
name="Extensions.ContentVerification.VerifyFailedOnFileMV3{VerifiedFileType}"
enum="ContentVerifyJobResult" expires_after="2025-02-02">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The content verification failure reason for why a {VerifiedFileType} failed.
Emitted when content verification fails for a {VerifiedFileType} in a
manifest V3 extension.
</summary>
<token key="VerifiedFileType" variants="VerifiedFileType">
<variant name=""/>
</token>
</histogram>
<histogram name="Extensions.ContentVerification.VerifyFailedOnFileTypeMV2"
enum="VerifiedFileType" expires_after="2025-02-02">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The type of file content verification failed to verify in an MV2 extension.
Emitted at the time content verification fails, once per file that failed.
</summary>
</histogram>
<histogram
name="Extensions.ContentVerification.VerifyFailedOnFileTypeMV2.GoogleDocsOffline"
enum="VerifiedFileType" expires_after="2024-12-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The type of file content verification failed to verify for the Google Docs
Offline extension running Manifest V2. Emitted at the time content
verification fails, once per file that failed.
</summary>
</histogram>
<histogram name="Extensions.ContentVerification.VerifyFailedOnFileTypeMV3"
enum="VerifiedFileType" expires_after="2025-02-02">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The type of file content verification failed to verify in an MV3 extension.
Emitted at the time content verification fails, once per file that failed.
</summary>
</histogram>
<histogram
name="Extensions.ContentVerification.VerifyFailedOnFileTypeMV3.GoogleDocsOffline"
enum="VerifiedFileType" expires_after="2024-12-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The type of file content verification failed to verify for the Google Docs
Offline extension running Manifest V3. Emitted at the time content
verification fails, once per file that failed.
</summary>
</histogram>
<histogram name="Extensions.ContentVerification.VerifyJobResultMV2"
enum="ContentVerifyJobResult" expires_after="2025-02-02">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Reports the result of a given content verification job succeeded for a
Manifest Version 2 extension. Emitted when the job is complete. A content
verification job is started for a given extension resource request.
</summary>
</histogram>
<histogram
name="Extensions.ContentVerification.VerifyJobResultMV2.GoogleDocsOffline"
enum="ContentVerifyJobResult" expires_after="2024-12-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Reports the result of a given content verification job succeeded for the
Docs Offline extension running on Manifest Version 2. Emitted when the job
is complete. A content verification job is started for a given extension
resource request.
</summary>
</histogram>
<histogram name="Extensions.ContentVerification.VerifyJobResultMV3"
enum="ContentVerifyJobResult" expires_after="2025-02-02">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Reports the result of a given content verification job succeeded for a
Manifest Version 3 extension. Emitted when the job is complete. A content
verification job is started for a given extension resource request.
</summary>
</histogram>
<histogram
name="Extensions.ContentVerification.VerifyJobResultMV3.GoogleDocsOffline"
enum="ContentVerifyJobResult" expires_after="2024-12-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Reports the result of a given content verification job succeeded for the
Docs Offline extension running on Manifest Version 3. Emitted when the job
is complete. A content verification job is started for a given extension
resource request.
</summary>
</histogram>
<histogram name="Extensions.ContextMenuAction"
enum="ExtensionContextMenuAction" expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</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.CookieAPIPartitionKeyWellFormatted"
enum="BooleanEnabled" expires_after="2025-04-18">
<owner>[email protected]</owner>
<owner>src/net/cookies/OWNERS</owner>
<summary>
Emits when a valid partitionKey argument is supplied to chrome.cookies APIs
getting/editing cookies.
The enum value is true when the partitonKey is 'well formatted' (identical
to a SchemefulSite) and false when the partitonKey is otherwise coercible.
</summary>
</histogram>
<histogram name="Extensions.CorruptExtensionDisabledReason"
enum="ContentVerifyJobResult" expires_after="2024-11-20">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The reason why an extension was detected to be corrupted. Recorded each time
an extension is disabled due to corruption detection.
Warning: this histogram was expired from 2022-12 to 2023-11; data will be
missing during this timeframe.
</summary>
</histogram>
<histogram name="Extensions.CorruptExtensionTotalDisables" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Logged once on profile open, this is the value of a counter that is
incremented anytime we disable a corrupted extension because its content
didn't match an expected content hash.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.CorruptExtensionTotalDisables2" units="units"
expires_after="never">
<!-- expires-never: Used for monitoring corrupt extensions. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Logged once on profile open for "user profiles" (profiles where
people can install extensions, specifically profiles that can have
non-component extensions installed. This is the value of a counter that is
incremented anytime we disable a corrupted extension because its content
didn't match an expected content hash.
</summary>
</histogram>
<histogram name="Extensions.CorruptPolicyExtensionDetected3"
enum="ExtensionPolicyReinstallReason" expires_after="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Fires when we've successfully reinstalled a corrupt enterprise policy
force-installed extension, with a value indicating how long it took
end-to-end to complete the reinstall (including download time).
</summary>
</histogram>
<histogram name="Extensions.CreateWindowHeight" units="pixels"
expires_after="2023-03-31">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>Height of the window created via chrome.windows.create.</summary>
</histogram>
<histogram name="Extensions.CreateWindowWidth" units="pixels"
expires_after="2023-03-31">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>Width of the window created via chrome.windows.create.</summary>
</histogram>
<histogram name="Extensions.CWSInfoService.FetchSuccess" enum="BooleanSuccess"
expires_after="never">
<!-- expires-never: used to monitor the health of CWS metadata fetch service -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records whether the overall extension metadata fetch from the Chrome Web
Store (CWS) succeeded or not. This is recorded once for a metadata fetch
(which can include multiple network requests). Metadata fetches occur
periodically (default period is 24 hours). But they can also occur
on-demand, for example, when new extensions are installed.
</summary>
</histogram>
<histogram name="Extensions.CWSInfoService.MetadataChanged"
enum="BooleanChanged" expires_after="never">
<!-- expires-never: used to monitor the health of CWS metadata fetch service -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records whether the extension metadata retrieved from the Chrome Web Store
(CWS) by the latest metadata fetch is different from that currently saved.
This difference can result from store metadata changing, for example an
extension getting unpublished. Metadata is also changed when data for newly
installed extensions is retrieved for the first time.
</summary>
</histogram>
<histogram name="Extensions.CWSInfoService.NetworkResponseCodeOrError"
enum="CombinedHttpResponseAndNetErrorCode" expires_after="never">
<!-- expires-never: used to monitor the health of CWS metadata fetch service -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records the network result for an individual network request within a
metadata fetch.
</summary>
</histogram>
<histogram name="Extensions.CWSInfoService.NetworkRetriesTillSuccess"
units="retries" expires_after="never">
<!-- expires-never: used to monitor the health of CWS metadata fetch service -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Counts how many retries were needed to successfully complete an individual
request within a metadata fetch. This is emitted only for a successful
request. Requests are made in batches at every metadata fetch interval
(default is 24 hours).
</summary>
</histogram>
<histogram name="Extensions.CWSInfoService.NumRequestsInFetch" units="requests"
expires_after="never">
<!-- expires-never: used to monitor the health of CWS metadata fetch service -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records the number of individual network requests made to retrieve metadata
for all installed extensions. Each request is limited to a small number of
extension ids (default is 3) so multiple requests are necessary when the
number of installed extensions is greater than the per-request limit. This
histogram is emitted before sending the first request in a metadata fetch.
It is recorded regardless of whether the metadata fetch succeeds or fails.
</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>[email protected]</owner>
<owner>[email protected]</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.Debugger.UserIsInDeveloperMode"
enum="InDeveloperMode" expires_after="2023-01-15">
<owner>[email protected]</owner>
<owner>[email protected]</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>[email protected]</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="2025-09-20">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Number of times declarative content actions types are created. Emitted each
time a new declarative content action type is created for an extension.
</summary>
</histogram>
<histogram name="Extensions.DeclarativeNetRequest.CreateVerifiedMatcherTime"
units="ms" expires_after="2025-07-21">
<owner>[email protected]</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="2025-02-10">
<owner>[email protected]</owner>
<owner>src/extensions/OWNERS</owner>
<summary>
Time taken to evaluate the action for a network request for a single
extension ruleset for rules matched before the request is sent. 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.EvaluateHeadersReceivedTime.SingleExtension2"
units="microseconds" expires_after="2025-06-30">
<owner>[email protected]</owner>
<owner>src/extensions/OWNERS</owner>
<summary>
Time taken to evaluate the action for a network request for a single
extension ruleset for rules matched after a request's response headers have
been received. 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="2025-02-02">
<owner>[email protected]</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="2025-10-01">
<owner>[email protected]</owner>
<owner>[email protected]</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="2025-03-17">
<owner>[email protected]</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="2025-06-30">
<owner>[email protected]</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="2025-04-28">
<owner>[email protected]</owner>
<owner>[email protected]</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="2025-06-01">
<owner>[email protected]</owner>
<owner>[email protected]</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. Note: this histogram was expired from
2023-06-01 to 2023-09-01; data may be missing.
</summary>
</histogram>
<histogram
name="Extensions.DeclarativeNetRequest.RegexRulesBeforeRequestActionTime.{RegexRulesetSize}"
units="microseconds" expires_after="2024-12-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>src/extensions/OWNERS</owner>
<summary>
The time taken to evaluate regex rules for a single declarativeNetRequest
ruleset where the ruleset has {RegexRulesetSize}, before the request was
sent. Emitted once per ruleset per evaluated request. This is recorded only
for clients with high-resolution clocks.
</summary>
<token key="RegexRulesetSize"
variants="DeclarativeNetRequestRegexRulesetSize"/>
</histogram>
<histogram
name="Extensions.DeclarativeNetRequest.RegexRulesEvaluationPercentage"
units="%" expires_after="2025-08-28">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>src/extensions/OWNERS</owner>
<summary>
For a single declarativeNetRequest ruleset, the percent of the total amount
of time spent on evaluating regex rules, before the request was sent (in the
onBeforeRequest stage). Emitted once per ruleset per evaluated request if
the ruleset has at least one regex rule.
</summary>
</histogram>
<histogram
name="Extensions.DeclarativeNetRequest.RegexRulesHeadersReceivedActionTime.{RegexRulesetSize}"
units="microseconds" expires_after="2025-08-28">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>src/extensions/OWNERS</owner>
<summary>
The time taken to evaluate regex rules for a single declarativeNetRequest
ruleset where the ruleset has {RegexRulesetSize}, after the request has
received response headers. Emitted once per ruleset per evaluated request.
This is recorded only for clients with high-resolution clocks.
</summary>
<token key="RegexRulesetSize"
variants="DeclarativeNetRequestRegexRulesetSize"/>
</histogram>
<histogram
name="Extensions.DeclarativeNetRequest.RegexRulesHeadersReceivedEvaluationPercentage"
units="%" expires_after="2025-08-28">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>src/extensions/OWNERS</owner>
<summary>
For a single declarativeNetRequest ruleset, the percent of the total amount
of time spent on evaluating regex rules, after the request has received
response headers. Emitted once per ruleset per evaluated request if the
ruleset has at least one regex rule.
</summary>
</histogram>
<histogram name="Extensions.DeclarativeNetRequest.RegexRuleSize" units="bytes"
expires_after="2025-06-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Logs the size of a regex rule in bytes, including rules that exceed the
per-rule memory limit that aren't indexed. Note that any rules above 100Kb
are recorded as 100Kb. Emitted for every regex rule an extension adds.
</summary>
</histogram>
<histogram name="Extensions.DeclarativeNetRequest.RequestHeaderAdded"
enum="WebRequest.RequestHeader" expires_after="2025-08-08">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-12-22">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-12-12">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-12-22">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-12-22">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-12-22">
<owner>[email protected]</owner>
<owner>[email protected]</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.RulesetMatchingBeforeRequestActionTime.{RulesetSize}"
units="microseconds" expires_after="2025-08-28">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>src/extensions/OWNERS</owner>
<summary>
The time taken to determine the appropriate declarativeNetRequest action for
a given request from a single ruleset in an extension where the ruleset has
{RulesetSize}, before the request was sent. This is recorded only for
clients with high-resolution clocks.
</summary>
<token key="RulesetSize" variants="DeclarativeNetRequestRulesetSize"/>
</histogram>
<histogram
name="Extensions.DeclarativeNetRequest.RulesetMatchingHeadersReceivedActionTime.{RulesetSize}"
units="microseconds" expires_after="2025-08-28">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>src/extensions/OWNERS</owner>
<summary>
The time taken to determine the appropriate declarativeNetRequest action for
a given request from a single ruleset in an extension where the ruleset has
{RulesetSize}, after the request has received response headers. This is
recorded only for clients with high-resolution clocks.
</summary>
<token key="RulesetSize" variants="DeclarativeNetRequestRulesetSize"/>
</histogram>
<histogram name="Extensions.DeclarativeNetRequest.RulesetReindexSuccessful"
enum="BooleanSuccess" expires_after="2025-04-28">
<owner>[email protected]</owner>
<owner>[email protected]</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="2025-06-26">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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. Note: this histogram was expired from
2023-06-26 to 2023-09-01; data may be missing.
</summary>
</histogram>
<histogram name="Extensions.DeprecatedDisableReasonsObserved"
enum="ExtensionDisableReason" expires_after="2024-06-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Emitted each time deprecated disable reason(s) are observed for an extension
when extension metrics are being collected (see GetDisableReasons in
//c/b/m/extension_metrics_provider.cc). The value recorded is a bitmask with
a bit set in the position of each deprecated disable reason. Most of the
time there will only be one bit set and should correspond to the enum value.
It is possible that there are multiple bits set, however, in which case
those corresponding values will show up as missing buckets in the UMA
dashboard.
</summary>
</histogram>
<histogram name="Extensions.DeveloperModeEnabled" enum="Boolean"
expires_after="2025-02-23">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Logged once on profile open for "user profiles" (profiles where
people can install extensions, specifically profiles that can have
non-component extensions installed). This emits true if the user has
extension developer mode enabled. Note: this is only on profile open, so if
a user either 1) later enables dev mode or 2) enables dev mode after profile
start and disables it before the next profile start we emit false once in
either scenario.
</summary>
</histogram>
<histogram name="Extensions.DevTools.UserIsInDeveloperMode"
enum="InDeveloperMode" expires_after="2023-07-02">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-12-15">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-12-15">
<owner>[email protected]</owner>
<owner>[email protected]</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="2025-02-16">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-12-15">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-12-15">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-12-15">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-12-15">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-12-15">
<owner>[email protected]</owner>
<owner>[email protected]</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.DidInitializeServiceWorkerContextOnWorkerThread2"
units="ms" expires_after="2025-06-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records the time taken to install Extension JavaScript bindings per service
worker context. This is only emitted for the primary extension service
worker, as all other service workers do not receive extension bindings.
</summary>
</histogram>
<histogram name="Extensions.Disabled" units="units" expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
The number of extensions that are disabled at browser profile open.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.Disabled2" units="units" expires_after="never">
<!-- expires-never: Used for monitoring user extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of extensions that are disabled at browser profile open for
"user profiles" (profiles where people can install extensions,
specifically profiles that can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.DisabledForPermissions" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
The number of extensions that are disabled at browser profile open due to
permissions increases.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.DisabledForPermissions2" units="units"
expires_after="never">
<!-- expires-never: Used for monitoring user extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of extensions that are disabled at browser profile open for
"user profiles" (profiles where people can install extensions,
specifically profiles that can have non-component extensions installed) due
to permissions increases.
</summary>
</histogram>
<histogram name="Extensions.DisableReason" enum="ExtensionDisableReason"
expires_after="2022-08-28">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The count of disabled extensions on profile open grouped by disble reason
from disable_reason::DisableReason. When an extension is disabled, it can be
for one or more reasons (although typically just one), so the sum of these
may be greater than 'Extensions.Disabled' which is a count of the number of
unique extensions that are disabled.
</summary>
</histogram>
<histogram name="Extensions.DisableReason2" enum="ExtensionDisableReason"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The count of disabled extensions on profile open for "user
profiles" (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed). Grouped by
disable reason from disable_reason::DisableReason. When an extension is
disabled, it can be for one or more reasons (although typically just one),
so the sum of these may be greater than 'Extensions.Disabled' which is a
count of the number of unique extensions that are disabled.
</summary>
</histogram>
<histogram name="Extensions.ErrorCodeFromCrxOpen" units="units"
expires_after="M85">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
If opening the CRX file for unpacking fails, this integer is the error code
given by the OS.
</summary>
</histogram>
<histogram name="Extensions.EsbAllowlistOmahaAttribute"
enum="ExtensionAllowlistOmahaAttributeValue" expires_after="2023-10-01">
<owner>[email protected]</owner>
<owner>[email protected]</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>[email protected]</owner>
<owner>[email protected]</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>[email protected]</owner>
<owner>[email protected]</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.EventPageLoadTime2" units="ms"
expires_after="never">
<!-- expires-never: Monitoring core extensions platform behavior. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The time taken for an extension's event page to load its initial URL.
</summary>
</histogram>
<histogram
name="Extensions.Events.DidDispatchToAckSucceed.{BackgroundContextType}"
enum="Boolean" expires_after="never">
<!-- expires-never: Monitors core extension system health. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records whether an event dispatched through the event router was acked by
the renderer within a 5 minute threshold for background context of type
{BackgroundContextType}. Emits true shortly after extensions browser code
receives the ack from the renderer if within that threshold. Emits false if
that ack hasn't occurred within the threshold. The 5 minute upper bound was
chosen based on when the majority of events are ack'd.
</summary>
<token key="BackgroundContextType">
<variant name="ExtensionPage"
summary="event page. However, unlike for other contexts that only
emit if the the event fired in the background page of the
extension, this will emit for all events that run in the
event page extension renderer process (event page, tabs,
popups, etc.). Note: this should not be used to perfectly
compare against other contexts like service workers where
the above is not true. But we are presuming that since the
other pages that run in the process are persistent, they
will generally never be stale and so won't skew the data
significantly in the failure case and are therefore mostly
comparable."/>
<variant name="ExtensionPersistentPage"
summary="persistent background page. However, unlike for other
contexts that only emit if the the event fired in the
background page of the extension, this will emit for all
events that run in the persistent background page extension
renderer process (background page, tabs, popups, etc.).
Note: this should not be used to perfectly compare against
other contexts like service workers where the above is not
true. But we are presuming that since the other pages that
run in the process are persistent, they will generally never
be stale and so won't skew the data significantly in the
failure case and are therefore mostly comparable."/>
<variant name="ExtensionServiceWorker3"
summary="service worker. Replaced previous version because values
were temporarily inaccurate due to a bug in logging 2024-04"/>
</token>
</histogram>
<histogram name="Extensions.Events.Dispatch" enum="ExtensionEvents"
expires_after="never">
<!-- expires-never: Monitoring core extensions platform behavior. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>Recorded every time an event is dispatched to an extension.</summary>
</histogram>
<histogram
name="Extensions.Events.DispatchToAckLongTime.{BackgroundContextType}"
units="ms" expires_after="never">
<!-- expires-never: Monitors core extension system health. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records the time it took for the event to be sent to the event router for
dispatch for background page of type {BackgroundContextType}. Reports
samples at milliseconds granualarity up to 1 day. This is meant to
investigate an appropriate time maximum for
Extensions.Events.DispatchToAckTime.{BackgroundContextType}. It does not
include any requests that utilize the EventRouter::DispatchEventToSender()
event routing flow (some web request API, and web view API events).
</summary>
<token key="BackgroundContextType">
<variant name="ExtensionServiceWorker2"
summary="service worker. Emitted shortly after extensions browser
code receives the ack from the renderer that it fired the
event in the service worker. "shortly" because
there is a function call between the receipt by the browser
and recording the value. Note: this may include some amount
of execution time of the extension service worker JS
listener. Replaced previous version because values were
inaccurate due to a bug with recording the dispatch start
time 2023-08"/>
</token>
</histogram>
<histogram
name="Extensions.Events.DispatchToAckTime.ExtensionEventPage3{ContextActive}"
units="microseconds" expires_after="never">
<!-- expires-never: Monitors core extension system health. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records the time it took for the event to be sent to the event router for
dispatch for background page of type event page{ContextActive}. Emitted when
extensions browser code receives receives an ack from the renderer that it
fired the event in the event page. It only counts events that ran in a event
page background script, other listeners in the extension renderer that can
receive the event are not counted. Reports samples at microseconds
granualarity up to 5 minutes. Values over 5 minutes are bucketed together
since no ack is expected to take longer than that. 5 minutes was decided
since that is the maximum for extension service worker event lifetime. This
is recorded only for clients with high-resolution clocks. It does not
include any requests that utilize the EventRouter::DispatchEventToSender()
event routing flow (some web request API, and web view API events).
Note: Previous version replaced October, 2023 because values were inaccurate
due to a bug where we recorded this metric for all events for an extension,
rather that just for those that ran in the lazy background page script.
</summary>
<token key="ContextActive">
<variant name="" summary=""/>
<variant name=".Active"
summary="and in status active. Active means that the background
script was started and ready to receive events when the
event was dispatched"/>
<variant name=".Inactive"
summary="and in status inactive. Inactive means that the background
script was not started and not ready to receive events when
the event was dispatched"/>
</token>
</histogram>
<histogram
name="Extensions.Events.DispatchToAckTime.ExtensionPersistentBackgroundPage"
units="microseconds" expires_after="never">
<!-- expires-never: Monitors core extension system health. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Note: Separate from
Extensions.Events.DispatchToAckTime.{BackgroundContextType}{ContextActive}
because PersistentBackgroundPages are always active (and thus don't need a
ContextActive variant).
Records the time it took for the event to be sent to the event router for
dispatch for background page of type persistent background page. Emitted
shortly after extensions browser code receives the ack from the renderer
that it fired the event in the persistent background page.
"shortly" because there is an IPC call between dispatching the
event in the renderer and the acknowledgement by the browser side that emits
the value. Reports samples at microseconds granualarity up to 5 minutes.
Values over 5 minutes are bucketed together since no ack is expected to take
longer than that. 5 minutes was decided since that is the maximum for
extension service worker event lifetime. This is recorded only for clients
with high-resolution clocks. It does not include any requests that utilize
the EventRouter::DispatchEventToSender() event routing flow (some web
request API, and web view API events).
</summary>
</histogram>
<histogram
name="Extensions.Events.DispatchToAckTime.ExtensionServiceWorker2{ContextActive}"
units="microseconds" expires_after="never">
<!-- expires-never: Monitors core extension system health. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records the time it took for the event to be sent to the event router for
dispatch for a background page of type service worker{ContextActive}.
Emitted shortly after extensions browser code receives the ack from the
renderer that it fired the event in the service worker. "shortly"
because there is a function call between the receipt by the browser and
recording the value. Note: this may include some amount of execution time of
the extension service worker JS listener. Reports samples at microseconds
granualarity up to 5 minutes. Values over 5 minutes are bucketed together
since no ack is expected to take longer than that. 5 minutes was decided
since that is the maximum for extension service worker event lifetime. This
is recorded only for clients with high-resolution clocks. It does not
include any requests that utilize the EventRouter::DispatchEventToSender()
event routing flow (some web request API, and web view API events).
If the extension was unloaded when the event was dispatched, the worker is
considered inactive.
Note: this histogram was incremented May, 2024 since it additionally started
emmitting when the extension is unloaded.
</summary>
<token key="ContextActive">
<variant name="" summary=""/>
<variant name=".Active3"
summary="and in status active. Active means that the background
script was started and ready to receive and run events (both
//content browser notification and extension renderer JS
global evaluation completed) when the event was dispatched"/>
<variant name=".Inactive3"
summary="and in status inactive. Inactive means that the background
script was not started and not ready to receive and run
events (either the //content browser notification or
extension renderer JS global evaluation did not complete)
when the event was dispatched"/>
</token>
</histogram>
<histogram name="Extensions.Events.DispatchToComponent" enum="ExtensionEvents"
expires_after="never">
<!-- expires-never: Monitoring core extensions platform behavior. -->
<owner>[email protected]</owner>
<owner>[email protected]</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>[email protected]</owner>
<owner>[email protected]</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>[email protected]</owner>
<owner>[email protected]</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="2024-11-20">
<owner>[email protected]</owner>
<owner>[email protected]</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.
Warning: this histogram was expired from 2022-12 to 2023-11; data will be
missing during this timeframe.
</summary>
</histogram>
<histogram name="Extensions.Events.DispatchWithSuspendedEventPage"
enum="ExtensionEvents" expires_after="never">
<!-- expires-never: Monitoring core extensions platform behavior. -->
<owner>[email protected]</owner>
<owner>[email protected]</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.Events.ServiceWorkerDispatchFailed.Event"
enum="ExtensionEvents" expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Emits the event type that failed when
Extensions.Events.DidDispatchToAckSucceed.ExtensionServiceWorker2 == false.
</summary>
</histogram>
<histogram
name="Extensions.Events.ServiceWorkerDispatchFailed.StartExternalRequestOk"
enum="Boolean" expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Emits whether the ServiceWorkerContext::StartingExternalRequest() succeeded
or failed when
Extensions.Events.DidDispatchToAckSucceed.ExtensionServiceWorker2 == false.
Note there is missing data during 2024-04 since the metric was not emitting
temporarily.
</summary>
</histogram>
<histogram
name="Extensions.Events.ServiceWorkerDispatchFailed.StartExternalRequestResult"
enum="ServiceWorkerExternalRequestResult" expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Emits the ServiceWorkerExternalRequestResult when
Extensions.Events.ServiceWorkerDispatchFailed.StartExternalRequestOk ==
false.
</summary>
</histogram>
<histogram name="Extensions.ExtensionAddDisabledRemotelyReason2"
enum="ExtensionUpdateCheckDataKey" expires_after="2024-08-11">
<owner>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-08-11">
<owner>[email protected]</owner>
<owner>[email protected]</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>[email protected]</owner>
<summary>
Emitted when an extension is downloaded by the user (including webstore
installs).
</summary>
</histogram>
<histogram name="Extensions.ExtensionLocation" enum="ExtensionLocation"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
The install location for a given extension. Recorded once per enabled
extension on profile initialization.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.ExtensionLocation2" enum="ExtensionLocation"
expires_after="never">
<!-- expires-never: Monitoring core extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The install location for a given extension. Recorded once per enabled
extension on profile initialization for "user profiles" (profiles
where people can install extensions, specifically profiles that can have
non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.ExtensionReenabledRemotely" units="count"
expires_after="2025-02-16">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-06-10">
<owner>[email protected]</owner>
<owner>[email protected]</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.ExtensionsWithPageActions" units="units"
expires_after="2025-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of Extensions that have Page Actions. Measured once per profile
open for "user profile" (profiles where people can install
extensions, specifically profiles that can have non-component extensions
installed). Replaced previous version
(PageActionController.ExtensionsWithPageActions).
</summary>
</histogram>
<histogram name="Extensions.ExternalItemState" enum="ExternalItemState"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
The number of sideloaded apps/extensions loaded on profile open grouped by
enabled/disabled state.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.ExternalItemState2" enum="ExternalItemState"
expires_after="2025-01-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of sideloaded apps/extensions loaded on profile open for
"user profiles" (profiles where people can install extensions,
specifically profiles that can have non-component extensions installed).
Grouped by enabled/disabled state.
</summary>
</histogram>
<histogram name="Extensions.FileAccessAllowed2" units="units"
expires_after="2024-12-15">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of extensions (and friends) that could have been given access to
the file:// scheme, and were, for users that have at least one extension
that could have been given access. This excludes anything that doesn't show
up in chrome://extensions (platform apps, hosted apps, component
extensions), policy-installed extensions, and unpacked extensions. Logged
once per profile open for "user profiles" (profiles where people
can install extensions, specifically profiles that can have non-component
extensions installed). See also Extensions.FileAccessNotAllowed.
</summary>
</histogram>
<histogram name="Extensions.FileAccessNotAllowed2" units="units"
expires_after="2024-12-15">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of extensions (and friends) that could have been given access to
the file:// scheme, but weren't, for users that have at least one extension
that could have been given access. This excludes anything that doesn't show
up in chrome://extensions (platform apps, hosted apps, component
extensions), policy-installed extensions, and unpacked extensions. Logged
once per profile open for "user profiles" (profiles where people
can install extensions, specifically profiles that can have non-component
extensions installed). See also Extensions.FileAccessAllowed.
</summary>
</histogram>
<histogram name="Extensions.ForceInstalledAndBlockListed" units="count"
expires_after="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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 "Extensions.ForceInstalledTimedOutCount" histogram,
but for every extension not installed at the moment.
</summary>
</histogram>
<histogram name="Extensions.ForceInstalledDownloadingStage"
enum="ExtensionInstallationDownloadingStage" expires_after="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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
"Extensions.ForceInstalledTimedOutCount" histogram, but for every
extension not installed at the moment.
</summary>
</histogram>
<histogram name="Extensions.ForceInstalledFailureCacheStatus"
enum="ExtensionInstallationDownloadingCacheStatus" expires_after="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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
"Extensions.ForceInstalledTimedOutCount" histogram, but for every
extension not installed at the moment.
</summary>
</histogram>
<histogram name="Extensions.ForceInstalledFailureCrxInstallError"
enum="ExtensionInstallationCrxInstallError" expires_after="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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.ForceInstalledFailureSandboxUnpackFailureReason2"
enum="ExtensionUnpackFailureReason" expires_after="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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 ".ExtensionStuckInCreatedStage" 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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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
"Extensions.ForceInstalledFailureStuckInCreatedStageAreExtensionsEnabled"
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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The amount of time elapsed during installation of enterprise policy forced
extensions.
</summary>
</histogram>
<histogram name="Extensions.ForceInstalledNotLoadedDisableReason"
enum="ExtensionDisableReason" expires_after="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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.ForceInstalledPreInstalledDeprecatedAppOpenUrl"
enum="ExtensionForceInstalledPreInstalledDeprecatedSite"
expires_after="2025-01-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Called once each time the user clicks the accept button on the
force-installed, pre-installed deprecated apps dialog. This results in the
browser opening a new tab with a URL to one of 6 pre-defined sites.
</summary>
</histogram>
<histogram name="Extensions.ForceInstalledReadyTime" units="ms"
expires_after="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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 "Extensions.ForceInstalledTimedOutCount"
histogram.
</summary>
</histogram>
<histogram name="Extensions.ForceInstalledStage2"
enum="ExtensionInstallationStage" expires_after="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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
"Extensions.ForceInstalledTimedOutCount" 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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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 "Extensions.ForceInstalledLoadTime" and records in
"Extensions.ForceInstalledTimedOutAndNotInstalledCount".
</summary>
</histogram>
<histogram name="Extensions.ForceInstalled{ErrorType}FetchTries"
units="retries" expires_after="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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.FromWebstoreInconsistency"
enum="ExtensionFromWebstoreInconcistencyEnum" expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
Number of apps/extensions loaded on profile open with an inconsistent
"from webstore" state. This means an item that is flagged as
from_webstore, but with either a non-webstore update_url or an external
install location.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.FromWebstoreInconsistency2"
enum="ExtensionFromWebstoreInconcistencyEnum" expires_after="2025-01-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Number of apps/extensions loaded on profile open with an inconsistent
"from webstore" state for "user profiles" (profiles
where people can install extensions, specifically profiles that can have
non-component extensions installed). This means an item that is flagged as
from_webstore, but with either a non-webstore update_url or an external
install location.
</summary>
</histogram>
<histogram name="Extensions.Functions.ComponentExtensionCalls"
enum="ExtensionFunctions" expires_after="never">
<!-- expires-never: Used for monitoring extension API usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when a component extension calls an extension API. Recorded once
per function call. See also Extensions.Functions.WebUICalls,
Extensions.Functions.WebUIUntrustedCalls,
Extensions.Functions.NonExtensionWebPageCalls and
Extensions.Functions.ExtensionCalls.
</summary>
</histogram>
<histogram name="Extensions.Functions.DidSandboxedComponentExtensionAPICall"
enum="Boolean" expires_after="2024-10-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when a component extension calls an extension API from within a
sandboxed frame. Recorded once per function call to track how often API
functions are called within sandboxed frames. See
Extensions.Functions.ComponentExtensionCalls, for comparison with the total
number of calls from a component extension to an extension API.
</summary>
</histogram>
<histogram name="Extensions.Functions.DidSandboxedExtensionAPICall"
enum="Boolean" expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when a non-component extension calls an extension API from within a
sandboxed frame. Recorded once per function call to track how often API
functions are called within sandboxed frames. See
Extensions.Functions.ExtensionCalls, for comparison with the total number of
calls from a non-component extension to an extension API.
</summary>
</histogram>
<histogram name="Extensions.Functions.ExtensionCalls" enum="ExtensionFunctions"
expires_after="never">
<!-- expires-never: Used for monitoring extension API usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</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,
Extensions.Functions.NonExtensionWebPageCalls and
Extensions.Functions.ComponentExtensionCalls.
</summary>
</histogram>
<histogram name="Extensions.Functions.ExtensionMV3Calls"
enum="ExtensionFunctions" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when a manifest V3 extension calls an extension API. Note that the
function would also be included in either
Extensions.Functions.ExtensionCalls or
Extensions.Functions.ComponentExtensionCalls histogram.
</summary>
</histogram>
<histogram name="Extensions.Functions.ExtensionServiceWorkerCalls"
enum="ExtensionFunctions" expires_after="2023-02-12">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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.ExtractJSCallStackElapsedTime"
units="microseconds" expires_after="2025-02-02">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The amount of time it takes to extract the JS call stack when an extension
API method is invoked. The elapsed time is recorded on the renderer side
before the API request is sent to the browser. Recorded regardless of the
API method's execution result. Only supported for a subset of extension API
methods, for example, some chrome.tabs and chrome.cookies methods. This
histogram is recorded only for clients with high-resolution clocks.
</summary>
</histogram>
<histogram
name="Extensions.Functions.FailedTime{ExtensionFunctionExecutionTime}"
enum="ExtensionFunctions" expires_after="never">
<!-- expires-never: Used for monitoring extension API usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</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.HandleResponseElapsedTime" units="ms"
expires_after="never">
<!-- expires-never: Used for monitoring extension API performance. -->
<owner>[email protected]</owner>
<owner>[email protected]</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.NonExtensionWebPageCalls"
enum="ExtensionFunctions" expires_after="never">
<!-- expires-never: Used for monitoring extension API usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when a Web Page context not associated with an extension calls an
extension API. Generally extension APIs are only exposed to extensions or
WebUI, but there are rare cases where an API is exposed to a web page not
associated with an extension e.g. the Chrome Webstore. Recorded once per
function call. See also Extensions.Functions.WebUICalls,
Extensions.Functions.WebUIUntrustedCalls,
Extensions.Functions.ComponentExtensionCalls and
Extensions.Functions.ExtensionCalls.
</summary>
</histogram>
<histogram name="Extensions.Functions.StartRequestElapsedTime" units="ms"
expires_after="never">
<!-- expires-never: Used for monitoring extension API performance. -->
<owner>[email protected]</owner>
<owner>[email protected]</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>[email protected]</owner>
<owner>[email protected]</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="2025-01-19">
<owner>[email protected]</owner>
<owner>[email protected]</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="2025-01-26">
<owner>[email protected]</owner>
<owner>[email protected]</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>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when a WebUI context calls an extension API. Recorded once per
function call. See also Extensions.Functions.WebUIUntrustedCalls,
Extensions.Functions.NonExtensionWebPageCalls,
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>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when a WebUI context calls an extension API. Recorded once per
function call. See also Extensions.Functions.WebUICalls,
Extensions.Functions.NonExtensionWebPageCalls,
Extensions.Functions.ComponentExtensionCalls and
Extensions.Functions.ExtensionCalls.
</summary>
</histogram>
<histogram name="Extensions.GoogleDocOffline.AvailabilityOnResourceRequest"
enum="GoogleDocsExtensionAvailablity" expires_after="2023-06-18">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-09-07">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-09-07">
<owner>[email protected]</owner>
<owner>[email protected]</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.HasPermissions_Install3" enum="Boolean"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</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.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.HasPermissions_Install4" enum="Boolean"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Whether there were any permissions present in an extension when it was
installed for "user profiles" (profiles where people can install
extensions, specifically profiles that can have non-component extensions
installed). To find places where this histogram may be emitted, look for
calls to ExtensionService::RecordPermissionMessagesHistogram with the
argument Install. For Sync users, this is reported for each device.
</summary>
</histogram>
<histogram name="Extensions.HasPermissions_Load3" enum="Boolean"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</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.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.HasPermissions_Load4" enum="Boolean"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Whether there were any permissions present in an extension when it was
loaded (which happens at profile open or extension install) for "user
profiles" (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed). To find places
where this histogram may be emitted, look for calls to
ExtensionService::RecordPermissionMessagesHistogram with the argument Load.
</summary>
</histogram>
<histogram name="Extensions.HomepageOverrides" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of enabled extensions with a homepage override specified in their
manifest. Recorded once per profile at profile initialization.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.HomepageOverrides2" units="units"
expires_after="2025-07-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of enabled extensions with a homepage override specified in their
manifest. Recorded once per "user profile" (profiles where people
can install extensions, specifically profiles that can have non-component
extensions installed) at profile initialization.
</summary>
</histogram>
<histogram name="Extensions.HostedAppLaunchContainer" enum="AppLaunchContainer"
expires_after="2023-04-16">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records the container used for a hosted app launch, when the app is
launched. The definition of 'launch' for the purposes of this histogram is
different to that used for the launch type histograms. This definition is
less inclusive, for example it does not include navigations to the hosted
app due to normal browsing, which the other definition does include. This
definition could be thought of more as explicit launches via a launch
surface such as the app launcher, chrome://apps, or a shortcut.
</summary>
</histogram>
<histogram name="Extensions.HostPermissions.GrantedAccess"
enum="HostPermissionsAccess" expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</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.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.HostPermissions.GrantedAccess2"
enum="HostPermissionsAccess" expires_after="never">
<!-- expires-never: Monitors core extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records the host permissions access for a enabled extension as a result of
the RuntimeHostPermissions feature. Recorded once per extension at profile
initialization for "user profiles" (profiles where people can
install extensions, specifically profiles that can have non-component
extensions installed) initialization.
</summary>
</histogram>
<histogram name="Extensions.HostPermissions.GrantedAccessForBroadRequests"
enum="HostPermissionsAccess" expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</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.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.HostPermissions.GrantedAccessForBroadRequests2"
enum="HostPermissionsAccess" expires_after="never">
<!-- expires-never: Monitors core extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</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 "user profile" (profiles where people can install
extensions, specifically profiles that can have non-component extensions
installed) initialization.
</summary>
</histogram>
<histogram name="Extensions.HostPermissions.GrantedAccessForTargetedRequests"
enum="HostPermissionsAccess" expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</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.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.HostPermissions.GrantedAccessForTargetedRequests2"
enum="HostPermissionsAccess" expires_after="never">
<!-- expires-never: Monitors core extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</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 "user profile" (profiles where
people can install extensions, specifically profiles that can have
non-component extensions installed) initialization.
</summary>
</histogram>
<histogram name="Extensions.IncognitoAllowed" units="units"
expires_after="2023-07-07">
<owner>[email protected]</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.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.IncognitoAllowed2" units="units"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of extensions (and friends) that could have been allowed in
incognito, and were, for users that have at least one extension that could
have been allowed. This excludes anything that doesn't show up in
chrome://extensions (platform apps, hosted apps, component extensions),
policy-installed extensions, and unpacked extensions. Logged at "user
profile" (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed) initialization.
</summary>
</histogram>
<histogram name="Extensions.InjectCssTime" units="ms" expires_after="never">
<!-- expires-never: Used for monitoring extension API performance. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The amount of time for a CSS file to be injected into a page.
</summary>
</histogram>
<histogram name="Extensions.InjectedScriptExecutionTime{UserScriptRunLocation}"
units="ms" expires_after="never">
<!-- expires-never: Monitoring performance of a core extension API. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Time taken to execute all scripts for one location within an extension.
Recorded every time content scripts injected by extensions are executed
{UserScriptRunLocation}. Unlike Extensions.InjectScriptTime, this includes
execution time of asynchronously injected scripts.
</summary>
<token key="UserScriptRunLocation">
<variant name="" summary="for all script run locations"/>
<variant name=".DocumentEnd"
summary="with run location of `run_at: document_end`"/>
<variant name=".DocumentIdle"
summary="with run location of `run_at: document_idle`"/>
<variant name=".DocumentStart"
summary="with run location of `run_at: document_start`"/>
</token>
</histogram>
<histogram name="Extensions.InjectEnd_BlockingScriptCount" units="units"
expires_after="never">
<!-- expires-never: Monitoring core extensions performance. -->
<owner>[email protected]</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>[email protected]</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>[email protected]</owner>
<owner>[email protected]</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>[email protected]</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>[email protected]</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>[email protected]</owner>
<owner>[email protected]</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>[email protected]</owner>
<owner>[email protected]</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>[email protected]</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>[email protected]</owner>
<owner>[email protected]</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>[email protected]</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="2024-11-17">
<owner>[email protected]</owner>
<owner>[email protected]</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.InstallSource" enum="ExtensionLocation"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Installs grouped by the location property in prefs. Emitted once per profile
open.
Histogram is in the process of being removed in favor of its new versions
(Extensions.InstallType.User and Extensions.InstallType.Nonuser) that emit
only on profile open for "user" profiles (profiles where people
can install extensions, specifically profiles that can have non-component
extensions installed).
</summary>
</histogram>
<!-- TODO(crbug.com/40878021): Change all .NonUser/.User metrics to use histogram suffixes rather than be duplicated here. -->
<histogram name="Extensions.InstallSource.NonUser" enum="ExtensionLocation"
expires_after="never">
<!-- expires-never: Monitoring core extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Installs grouped by the location property in prefs for "non-user"
profiles (profiles where people can't install extensions, specifically
profiles that can have only have non-component extensions installed).
Emitted once per profile open.
</summary>
</histogram>
<histogram name="Extensions.InstallSource.User" enum="ExtensionLocation"
expires_after="never">
<!-- expires-never: Monitoring core extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Installs grouped by the location property in prefs for "user"
profiles (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed). Emitted once per
profile open.
</summary>
</histogram>
<histogram name="Extensions.InstallType" enum="ExtensionType"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
Installs grouped by Extension::HistogramType emitted once per extension
install.
Histogram is in the process of being removed in favor of its new versions
(Extensions.InstallType.User and Extensions.InstallType.Nonuser) that emit
only on profile open for "user" profiles (profiles where people
can install extensions, specifically profiles that can have non-component
extensions installed).
</summary>
</histogram>
<histogram name="Extensions.InstallType.NonUser" enum="ExtensionType"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Installs grouped by Extension::HistogramType for non-"user
profiles" (profiles where people cannot install extensions,
specifically profiles that can only have component extensions installed).
Emitted once per extension install.
</summary>
</histogram>
<histogram name="Extensions.InstallType.User" enum="ExtensionType"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Installs grouped by Extension::HistogramType for "user profiles"
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed). Emitted once per extension
install.
</summary>
</histogram>
<histogram name="Extensions.IsRenderedIconSufficientlyVisibleTime"
units="microseconds" expires_after="2019-12-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The amount of elapsed time taken to render an icon against a specified
background color and determine whether it would be visible to the user.
Recorded every time the analysis code is called.
</summary>
</histogram>
<histogram name="Extensions.LoadAll" units="units" expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
The number of extensions and themes loaded at profile open.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadAll2" units="units" expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of extensions and themes loaded at "user profile"
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed) open.
</summary>
</histogram>
<histogram name="Extensions.LoadAllComponentTime" units="ms"
expires_after="2023-07-07">
<owner>[email protected]</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.
Histogram is in the process of being removed in favor of its new versions
(Extensions.LoadAllComponentTime.NonUser and
Extensions.LoadAllComponentTime.User) that emit only on profile open for
"user" profiles (profiles where people can install extensions,
specifically profiles that can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadAllComponentTime.NonUser" units="ms"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Time taken to load all component extensions at profile open for
non-"user profiles" (profiles where people cannot install
extensions, specifically profiles that can only have component extensions
installed). This happens as part of the total initialization time of
ExtensionService, measured in Extensions.ExtensionServiceInitTime. Emitted
once per profile open.
</summary>
</histogram>
<histogram name="Extensions.LoadAllComponentTime.User" units="ms"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Time taken to load all component extensions at profile open for "user
profiles" (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed). This happens as
part of the total initialization time of ExtensionService, measured in
Extensions.ExtensionServiceInitTime. Emitted once per profile open.
</summary>
</histogram>
<histogram name="Extensions.LoadAllTime2" units="ms" expires_after="2023-07-07">
<owner>[email protected]</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.
Histogram is in the process of being removed in favor of its new versions
(Extensions.LoadAllTime2.NonUser and Extensions.LoadAllTime2.User) that emit
only on profile open for "user" profiles (profiles where people
can install extensions, specifically profiles that can have non-component
extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadAllTime2.NonUser" units="ms"
expires_after="never">
<!-- expires-never: Monitoring core extensions system performance. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Time taken to load all non-component extensions at profile open and record
metrics for non-"user profiles" (profiles where people cannot
install extensions, specifically profiles that can only have component
extensions installed). This happens as part of the total initialization time
of ExtensionService, measured in Extensions.ExtensionServiceInitTime.
Emitted once per profile open.
</summary>
</histogram>
<histogram name="Extensions.LoadAllTime2.User" units="ms" expires_after="never">
<!-- expires-never: Monitoring core extensions system performance. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Time taken to load all non-component extensions at profile open and record
metrics for "user profiles" (profiles where people can install
extensions, specifically profiles that can have non-component extensions
installed). This happens as part of the total initialization time of
ExtensionService, measured in Extensions.ExtensionServiceInitTime. Emitted
once per profile open.
</summary>
</histogram>
<histogram name="Extensions.LoadApp" units="units" expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
The number of apps loaded by each user at profile open.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadApp2" units="units" expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of apps loaded by each user at "user profile" (profiles
where people can install extensions, specifically profiles that can have
non-component extensions installed) open.
</summary>
</histogram>
<histogram name="Extensions.LoadAppExternal" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of externally managed apps loaded by each user at profile open.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadAppExternal2" units="units"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<summary>
The number of externally managed apps loaded by each user at "user
profile" (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed) open.
</summary>
</histogram>
<histogram name="Extensions.LoadAppUser" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
The number of user-installed apps loaded by each user at profile open.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadAppUser2" units="units" expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of user-installed apps loaded by each user at "user
profile" (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed) open.
</summary>
</histogram>
<histogram name="Extensions.LoadBrowserAction" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
The number of browser action extensions loaded at profile open.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadBrowserAction2" units="units"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of browser action extensions loaded at "user profile"
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed) open.
</summary>
</histogram>
<histogram name="Extensions.LoadExtension" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
The number of extensions loaded at profile open.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadExtension2" units="units" expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of extensions loaded at profile open for "user"
profiles (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadExtensionExternal" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of externally managed extensions loaded at profile open.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadExtensionExternal2" units="units"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<summary>
The number of externally managed extensions loaded at "user
profile" (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed) open.
</summary>
</histogram>
<histogram name="Extensions.LoadExtensionUser2" units="units"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of user-installed extensions loaded at "user profile"
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed) open.
</summary>
</histogram>
<histogram name="Extensions.LoadExternal" units="units" expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<summary>
The number of externally managed extensions and apps loaded at profile open.
</summary>
</histogram>
<histogram name="Extensions.LoadHostedApp" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
The number of hosted apps loaded by each user at profile open.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadHostedApp2" units="units" expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of hosted apps loaded by each user at "user profile"
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed) open.
</summary>
</histogram>
<histogram name="Extensions.LoadNoExtensionAction" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
The number of extensions that had neither a page nor browser action
specified in their manifest. Recorded at profile open.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadNoExtensionAction2" units="units"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of extensions that had neither a page nor browser action
specified in their manifest. Recorded at "user profile" (profiles
where people can install extensions, specifically profiles that can have
non-component extensions installed) open.
</summary>
</histogram>
<histogram name="Extensions.LoadOffStoreItems" units="Number of items"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</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.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadOffStoreItems2" units="Number of items"
expires_after="never">
<!-- expires-never: Monitoring core extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of enabled extensions or apps the user has installed that do not
update from the Chrome Web Store. Recorded during "user profile"
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed) initialization.
</summary>
</histogram>
<histogram name="Extensions.LoadPackagedApp" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
The number of legacy packaged apps loaded by each user at profile open.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadPackagedApp2" units="units"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<summary>
The number of legacy packaged apps loaded by each user at "user
profile" (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed) open.
</summary>
</histogram>
<histogram name="Extensions.LoadPlatformApp" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
The number of platform apps loaded at profile open.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadPlatformApp2" units="units"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<summary>
The number of platform apps loaded at "user profile" (profiles
where people can install extensions, specifically profiles that can have
non-component extensions installed) open.
</summary>
</histogram>
<histogram name="Extensions.LoadTheme" units="units" expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of themes loaded at profile open.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadTheme2" units="units"
expires_after="2025-01-26">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of themes loaded at "user profile" (profiles where
people can install extensions, specifically profiles that can have
non-component extensions installed) open.
</summary>
</histogram>
<histogram name="Extensions.LoadType" enum="ExtensionType"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of extensions loaded at profile open grouped by
Extension::HistogramType.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadType2" enum="ExtensionType"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of extensions loaded at "user profile" (profiles where
people can install extensions, specifically profiles that can have
non-component extensions installed) open grouped by
Extension::HistogramType.
</summary>
</histogram>
<histogram name="Extensions.LoadUserScript" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of converted user scripts loaded at profile open.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.LoadUserScript2" units="units"
expires_after="2025-02-16">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of converted user scripts loaded at "user profile"
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed) open.
</summary>
</histogram>
<histogram name="Extensions.Management_Refresh" units="ms"
expires_after="2023-05-07">
<owner>[email protected]</owner>
<owner>[email protected]</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.ManifestVersion" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
The manifest version of each loaded extension.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.ManifestVersion2" units="units"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The manifest version of each loaded extension. Emitted for each extension at
"user profils" (profiles where people can install extensions,
specifically profiles that can have non-component extensions installed)
open.
</summary>
</histogram>
<histogram name="Extensions.ManifestVersion2Count.{ManifestLocation}"
units="number of extensions" expires_after="2025-02-16">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of enabled manifest version 2 {ManifestLocation}. Emitted once on
profile startup for user profiles (profiles where users can install
extensions, specifically profiles that can have non-component extensions
installed).
</summary>
<token key="ManifestLocation" variants="ManifestLocationGroup"/>
</histogram>
<histogram name="Extensions.ManifestVersion3Count.{ManifestLocation}"
units="number of extensions" expires_after="2024-10-13">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of enabled manifest version 3 {ManifestLocation}. Emitted once on
profile startup for user profiles (profiles where users can install
extensions, specifically profiles that can have non-component extensions
installed).
</summary>
<token key="ManifestLocation" variants="ManifestLocationGroup"/>
</histogram>
<histogram name="Extensions.ManifestVersionByLocation.{ManifestLocation}"
units="manifest version" expires_after="2025-02-16">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The manifest version of an enabled {ManifestLocation}. Emitted for every
enabled extension (not for other extension-y items, like platform apps) on
profile startup for user profiles (profiles where users can install
extensions, specifically profiles that can have non-component extensions
installed).
</summary>
<token key="ManifestLocation" variants="ManifestLocationGroup"/>
</histogram>
<histogram name="Extensions.ManifestVersionPopulationSplit.{ManifestLocation}"
enum="ManifestVersionPopulationSplit" expires_after="2024-12-15">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The type of population split of the user's installed {ManifestLocation}.
Emitted on profile startup for user profiles (profiles where users can
install extensions, specifically profiles that can have non-component
extensions installed).
</summary>
<token key="ManifestLocation" variants="ManifestLocationGroupWithCombos"/>
</histogram>
<histogram
name="Extensions.Messaging.ExtensionPortsCreated{ExtensionMessagingPortCreationTime}"
units="number of ports" expires_after="M85">
<owner>[email protected]</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>[email protected]</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>[email protected]</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.SetPortIdTime{ExtensionMessagingPortType}"
units="ms" expires_after="M85">
<owner>[email protected]</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.MV2Deprecation.MV2ExtensionState.{ManifestLocation}"
enum="MV2ExtensionState" expires_after="2025-06-01">
<owner>[email protected]</owner>
<owner>src/extensions/OWNERS</owner>
<summary>
The state of a given MV2 extension on a user's device. Emitted once after
profile initialization for user profiles (profiles where users can install
extensions, specifically profiles that can have non-component extensions
installed). Emitted only if the user is in an MV2 experiment stage that can
disable MV2 extensions. Only emitted for non-component MV2 extensions.
</summary>
<token key="ManifestLocation" variants="ManifestLocationGroup"/>
</histogram>
<histogram name="Extensions.Navigation.Scheme" enum="ExtensionNavigationScheme"
expires_after="2024-11-17">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Counts usage of various schemes (e.g. file:, chrome:, http:) when a
navigation is triggered from an extension (such as through tabs API).
</summary>
</histogram>
<histogram name="Extensions.NetworkDelay" units="ms" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</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>[email protected]</owner>
<owner>src/extensions/OWNERS</owner>
<summary>
Percentage of total lifetime a network request was blocked due to an
extension.
</summary>
</histogram>
<histogram name="Extensions.NewTabPageOverrides" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of enabled extensions with a New Tab Page override specified in
their manifest. Recorded once per profile at profile initialization.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.NewTabPageOverrides2" units="units"
expires_after="2024-09-15">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of enabled extensions with a New Tab Page override specified in
their manifest. Recorded once per "user profile" (profiles where
people can install extensions, specifically profiles that can have
non-component extensions installed) at profile open.
</summary>
</histogram>
<histogram name="Extensions.NonWebstoreLocation" enum="ExtensionLocation"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
The number of apps/extensions with a non-webstore update_url loaded on
profile open and grouped by Extension::Location.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.NonWebstoreLocation2" enum="ExtensionLocation"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of apps/extensions with a non-webstore update_url loaded on
profile open grouped by Extension::Location. Emitted per "user
profiles" (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed) open.
</summary>
</histogram>
<histogram
name="Extensions.NonWebstoreLocationWith{DeveloperModeState}{ExtensionState}3"
enum="ExtensionLocation" expires_after="2025-02-23">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of {ExtensionState} non-webstore extensions with a non-webstore
update_url loaded on profile open and {DeveloperModeState}. Grouped by
Extension::Location. Emitted on every profile open only for "user
profiles" (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed).
This replaces the previous histogram,
NonWebstoreLocationWith{DeveloperModeState}{ExtensionState}2, due to missing
data from M126.
</summary>
<token key="DeveloperModeState" variants="DeveloperModeState"/>
<token key="ExtensionState" variants="ExtensionState"/>
</histogram>
<histogram name="Extensions.NonWebStoreNewTabPageOverrides" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<summary>
Number of non-WebStore extensions on profile open that override the new tab
page.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.NonWebStoreNewTabPageOverrides2" units="units"
expires_after="2025-01-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Number of non-WebStore extensions on profile open for "user
profiles" (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed) that override the
new tab page.
</summary>
</histogram>
<histogram name="Extensions.NotAllowlistedDisabled" units="extensions"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</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.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.NotAllowlistedDisabled2" units="extensions"
expires_after="2025-01-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The total number of disabled extensions that are not present in the Enhanced
Safe Browsing CRX allowlist. Recorded for "user profiles"
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed) on profile initialization.
</summary>
</histogram>
<histogram name="Extensions.NotAllowlistedDisabledAndEsbUser"
units="extensions" expires_after="2023-10-01">
<owner>[email protected]</owner>
<owner>[email protected]</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.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.NotAllowlistedDisabledAndEsbUser2"
units="extensions" expires_after="2025-01-01">
<owner>[email protected]</owner>
<owner>[email protected]</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 "user profile" (profiles where people can install
extensions, specifically profiles that can have non-component extensions
installed) initialization.
</summary>
</histogram>
<histogram name="Extensions.NotAllowlistedEnabled" units="extensions"
expires_after="2023-10-01">
<owner>[email protected]</owner>
<owner>[email protected]</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.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.NotAllowlistedEnabled2" units="extensions"
expires_after="2025-01-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The total number of enabled extensions that are not present in the Enhanced
Safe Browsing CRX allowlist. Recorded for "user profiles"
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed) on profile initialization.
</summary>
</histogram>
<histogram name="Extensions.NotAllowlistedEnabledAndEsbUser" units="extensions"
expires_after="2023-10-01">
<owner>[email protected]</owner>
<owner>[email protected]</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.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.NotAllowlistedEnabledAndEsbUser2"
units="extensions" expires_after="2025-01-01">
<owner>[email protected]</owner>
<owner>[email protected]</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 "user profile" (profiles where people can install
extensions, specifically profiles that can have non-component extensions
installed) initialization.
</summary>
</histogram>
<histogram name="Extensions.Permissions_Install3" enum="ExtensionPermission3"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</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.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.Permissions_Install4" enum="ExtensionPermission3"
expires_after="never">
<!-- expires-never: Monitoring extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The permissions present in an extension when it was installed. To find
places where this histogram may be emitted, look for calls to
ExtensionService::RecordPermissionMessagesHistogram with the argument
Install. Emitted once per "user profile" (profiles where people
can install extensions, specifically profiles that can have non-component
extensions installed) open. For Sync users, this is reported for each
device.
</summary>
</histogram>
<histogram name="Extensions.Permissions_Load3" enum="ExtensionPermission3"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</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.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.Permissions_Load4" enum="ExtensionPermission3"
expires_after="never">
<!-- expires-never: Monitoring core extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The permissions present in an extension when it was loaded (which happens at
profile open or extension install). Only emitted for quot;user
profiles" (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed). To find places
where this histogram may be emitted, look for calls to
ExtensionService::RecordPermissionMessagesHistogram with the argument Load.
</summary>
</histogram>
<histogram name="Extensions.ProcessManagerStartupHostsTime2" units="ms"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</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.RuntimeHostPermissions.ExtensionHasWithheldHosts"
enum="BooleanHasWithheldHosts" expires_after="2023-07-07">
<owner>[email protected]</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).
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.RuntimeHostPermissions.ExtensionHasWithheldHosts2"
enum="BooleanHasWithheldHosts" expires_after="never">
<!-- expires-never: Monitors core extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Whether an extension had host permissions withheld as a result of the
RuntimeHostPermissions feature. Recorded once per extension at "user
profile" (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed) initialization if
and only if the RuntimeHostPermissions feature is enabled and the extension
requests any host permissions (i.e., could be affected by the feature).
</summary>
</histogram>
<histogram name="Extensions.RuntimeHostPermissions.GrantedHostCount"
units="Granted hosts" expires_after="2023-07-07">
<owner>[email protected]</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.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.RuntimeHostPermissions.GrantedHostCount2"
units="Granted hosts" expires_after="never">
<!-- expires-never: Monitors core extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</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 "user
profile" (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed) initialization if
and only if the RuntimeHostPermissions feature is enabled and the extension
has had host permissions withheld. See also
Extensions.RuntimeHostPermissions.ExtensionHasWithheldHosts.
</summary>
</histogram>
<histogram name="Extensions.SandboxedPageLoad.IsWebAccessibleResource"
enum="BooleanVisible" expires_after="2024-11-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Logs if the requested extension subresource is a Web Accessible Resource
that is "visible" 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>[email protected]</owner>
<owner>[email protected]</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.SandboxUnpackSuccess" units="units"
expires_after="never">
<!-- expires-never: Monitors core extension installation flows. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>Count the number of times a sandboxed CRX unpack succeeds.</summary>
</histogram>
<histogram name="Extensions.SearchEngineOverrides" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of enabled extensions with a search engine override specified in
their manifest. Recorded once per profile at profile initialization.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.SearchEngineOverrides2" units="units"
expires_after="2025-02-16">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of enabled extensions with a search engine override specified in
their manifest. Recorded once per "user profile" (profiles where
people can install extensions, specifically profiles that can have
non-component extensions installed) at profile initialization.
</summary>
</histogram>
<histogram
name="Extensions.ServiceWorkerBackground.AddPendingTaskForRunningWorker3"
enum="Boolean" expires_after="2024-09-15">
<!-- expires-never: Monitors core extension system health. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
It is emitted every time we add a pending task for a worker. Records true if
the worker was ready to run tasks when pendings tasks are added (this is not
optimal). Records false if the worker was not ready to run tasks when the
pending task was added (this is the optimal expected state). `false` is
recorded if the task is added when the extension is unloaded.
Note: this histogram was incremented May, 2024 since it additionally started
emmitting when the extension is unloaded.
</summary>
</histogram>
<histogram
name="Extensions.ServiceWorkerBackground.FinishedExternalRequest_Result"
enum="ServiceWorkerExternalRequestResult" expires_after="never">
<!-- expires-never: Monitors core extension system health. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Tracks the result (ServiceWorkerExternalRequestResult) of when we attempt to
remove (finish) an external request for the extension service worker.
Emitted when we attempt to finish the external request after the browser has
received an ack from the renderer that it fired the event in the service
worker.
</summary>
</histogram>
<histogram
name="Extensions.ServiceWorkerBackground.FinishedExternalRequest_Result_PostReturn"
enum="ServiceWorkerExternalRequestResult" expires_after="2024-12-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Tracks the result (ServiceWorkerExternalRequestResult) of when we attempt to
remove (finish) an external request for the extension service worker.
Emitted when we attempt to finish the external request after the browser has
received an ack from the renderer that it fired the event in the service
worker. Specifically the emit is delayed until *after* we've attempted to
return early for either a stopped worker or the starting of the external
request failing.
</summary>
</histogram>
<histogram name="Extensions.ServiceWorkerBackground.MultiWorkerVersionIdMatch"
enum="Boolean" expires_after="2025-02-23">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
When Extensions.ServiceWorkerBackground.WorkerCountAfterAdd == 2, this emits
whether the previous and new worker added to WorkerIdSet had the same
service worker version id.
</summary>
</histogram>
<histogram
name="Extensions.ServiceWorkerBackground.MultiWorkerVersionStatus.{WorkerType}"
enum="ServiceWorkerVersionStatus" expires_after="2025-02-23">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The content::ServiceWorkerRunningInfo::ServiceWorkerVersionStatus for the
{WorkerType} WorkerIdSet. Only emitted when
Extensions.ServiceWorkerBackground.WorkerCountAfterAdd == 2. This ensures
there will be a new and previous worker to emit for.
</summary>
<token key="WorkerType">
<variant name="NewWorker" summary="new worker that we've just added to"/>
<variant name="PreviousWorker"
summary="previous worker that was recorded before we added a new
worker to"/>
</token>
</histogram>
<histogram
name="Extensions.ServiceWorkerBackground.ProcessManagerFinishedExternalRequestResultWithSuccessfulStart"
enum="ServiceWorkerExternalRequestResult" expires_after="2024-10-06">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The result from the extension process manager notifying the
ServiceWorkerContext of a service worker-based extension that an external
request that started with a result of "OK" has finished. Emitted
immediately after the call to notify the ServiceWorkerContext is made as
part of decrementing the service worker keepalive count.
</summary>
</histogram>
<histogram
name="Extensions.ServiceWorkerBackground.ProcessManagerFinishedExternalRequestResultWithUnsuccessfulStart"
enum="ServiceWorkerExternalRequestResult" expires_after="2024-10-06">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The result from the extension process manager notifying the
ServiceWorkerContext of a service worker-based extension that an external
request that started with a result of anything other than "OK" has
finished. Emitted immediately after the call to notify the
ServiceWorkerContext is made as part of decrementing the service worker
keepalive count.
</summary>
</histogram>
<histogram
name="Extensions.ServiceWorkerBackground.ProcessManagerStartingExternalRequestResult"
enum="ServiceWorkerExternalRequestResult" expires_after="2025-07-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The result from the extension process manager notifying the
ServiceWorkerContext of a service worker-based extension that an external
request has started as part of incrementing the service worker keepalive
count. Emitted immediately after the call to to notify the
ServiceWorkerContext is made.
</summary>
</histogram>
<histogram name="Extensions.ServiceWorkerBackground.Registration_FailStatus2"
enum="ServiceWorkerStatusCode" expires_after="2025-02-15">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Tracks when a background service worker fails to register what is the
ServiceWorkerStatusCode that occurred. Logged each time a service worker
fails to register.
Note: incremented Aug, 2024 due to the implementation of worker registration
retries which could change the number of emits of this metric.
</summary>
</histogram>
<histogram
name="Extensions.ServiceWorkerBackground.RegistrationMismatchLocation"
enum="ExtensionLocation" expires_after="2025-03-25">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when Service Worker registration wasn't found for an existing
extension when attempting to verify that persisted-to-prefs (ExtensionPrefs)
worker registration. It records the manifest location of the extension.
Note: this histogram expired between 2023-04 and 2024-04, it will be missing
data between those dates.
</summary>
</histogram>
<histogram
name="Extensions.ServiceWorkerBackground.RegistrationMismatchMitigated2"
enum="Boolean" expires_after="2025-03-25">
<owner>[email protected]</owner>
<owner>[email protected]</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.
Note: incremented Aug, 2024 due to the implementation of worker registration
retries which could increase the number of emits of this metric.
</summary>
</histogram>
<histogram
name="Extensions.ServiceWorkerBackground.RegistrationMismatchMitigated_FailStatus2"
enum="ServiceWorkerStatusCode" expires_after="2025-01-15">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
When a mitigation for a mismatched registration state between ExtensionPrefs
and the content service worker layer fails, this records the status that was
returned by the content service worker layer for the registration request
failure.
Emitted when
Extensions.ServiceWorkerBackground.RegistrationMismatchMitigated is false.
Note: incremented Aug, 2024 due to the implementation of worker registration
retries which could increase the number of emits of this metric.
</summary>
</histogram>
<histogram name="Extensions.ServiceWorkerBackground.RegistrationTime"
units="ms" expires_after="2025-03-25">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The amount of time it takes to register a service worker background script
with the content service worker layer.
Measured in milliseconds from 1ms up to 10 seconds.
</summary>
</histogram>
<histogram name="Extensions.ServiceWorkerBackground.RegistrationWhenExpected"
enum="Boolean" expires_after="2025-03-25">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Whether or not a Service Worker registration was found in the content
service worker layer after finding a registration for the worker in
ExtensionPrefs.
Emitted immediately after the content service worker layer has tried to
search for the registration.
</summary>
</histogram>
<histogram
name="Extensions.ServiceWorkerBackground.RequestedWorkerStartForStartedWorker3"
enum="Boolean" expires_after="never">
<!-- expires-never: Monitors core extension system health. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
When we're about to request a worker to start to run an event/task this is
emitted to indicate if the start was unneeded/redundant. Emitted just before
we know that we are going to attempt to start a worker. A `true` value means
that we will redundantly reqeust to start a worker when it was already
running and could've processed the event without the request to start. A
`false` value means that we correctly started the worker because it was not
ready to run events. `false` is recorded if the worker start is requested
when the extension is unloaded.
Note: this histogram was incremented May, 2024 since it additionally started
emmitting when the extension is unloaded.
</summary>
</histogram>
<histogram
name="Extensions.ServiceWorkerBackground.StartingExternalRequest_Result"
enum="ServiceWorkerExternalRequestResult" expires_after="never">
<!-- expires-never: Monitors core extension system health. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Tracks the result (ServiceWorkerExternalRequestResult) of when we attempt to
add (start) an external request for the extension service worker. Logged
each time an external request is added prior to dispatching the event to the
service worker.
</summary>
</histogram>
<histogram name="Extensions.ServiceWorkerBackground.StartWorker_FailStatus"
enum="ServiceWorkerStatusCode" expires_after="never">
<!-- expires-never: Monitors core extension system health. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Tracks when a background service worker fails to start what is the
ServiceWorkerStatusCode that occurred. Logged each time a service worker
fails to start when we attempt to start it for extension tasks.
</summary>
</histogram>
<histogram name="Extensions.ServiceWorkerBackground.StartWorkerStatus"
enum="Boolean" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Tracks whether background service worker starting succeeded or not. Logged
each time a service worker has been started for extension tasks.
</summary>
</histogram>
<histogram name="Extensions.ServiceWorkerBackground.StartWorkerTime" units="ms"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The amount of time it takes to start the background service worker of an
extension that succeeded in starting. Logged when we've confirmed the
service worker is started for extension tasks to run.
</summary>
</histogram>
<histogram name="Extensions.ServiceWorkerBackground.StartWorkerTime_Fail"
units="ms" expires_after="2024-11-03">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The amount of time it takes to start the background service worker of an
extension that failed in starting. Logged when we've confirmed the service
worker has failed for extension tasks to run.
</summary>
</histogram>
<histogram name="Extensions.ServiceWorkerBackground.WorkerCountAfterAdd"
units="registered workers" expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The count of active workers registered in the extension ProcessManager for a
given service worker-based extension. Reported immediately after a new
worker is registered for the extension.
</summary>
</histogram>
<histogram name="Extensions.ServiceWorkerBackground.WorkerCountAfterRemove"
units="registered workers" expires_after="2025-02-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The count of active workers registered in the extension ProcessManager for a
given service worker-based extension. Reported immediately after a worker
for the extension is removed from the active set.
</summary>
</histogram>
<histogram
name="Extensions.ServiceWorkerBackground.WorkerRegistrationRetryAttemptsResult"
enum="Boolean" expires_after="2025-02-06">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
When an extension requests that its service worker be registered with the
content layer it can fail due to
blink::ServiceWorkerStatusCode::kErrorTimeout. When this happens we retry
multiple times to try to make the registration succeed.
Emits true if the retry results in a successful registration. Emits false if
either all retry attempts have been exhausted without success or a retry
resulted in a status code that is not
blink::ServiceWorkerStatusCode::kErrorTimeout.
</summary>
</histogram>
<histogram name="Extensions.ServiceWorkerBackground.WorkerRegistrationState2"
enum="Boolean" expires_after="2025-02-23">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Tracks whether background service worker registration succeeded or not. It
is emitted whenever an extension is enabled (including updates).
Note: incremented Aug, 2024 due to the implementation of worker registration
retries which will likely increase the number of emits of this metric.
</summary>
</histogram>
<histogram name="Extensions.ServiceWorkerBackground.WorkerScriptFetchNetError"
enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-02-01">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records the underlying net::Error that was encountered when the content
service worker layer tries to fetch the worker script (from disk) but
encounters a network error.
It is emitted each time a worker script fetch fails for a
blink::ServiceWorkerBackground::kErrorNetwork reason.
</summary>
</histogram>
<histogram
name="Extensions.ServiceWorkerBackground.WorkerUnregistrationFailureStatus{UnregistrationType}3"
enum="ServiceWorkerStatusCode" expires_after="2025-03-25">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The ServiceWorkerStatusCode when unregistering a worker for an extension
fails.
Emitted when Extensions.ServiceWorkerBackground.WorkerRegistrationState is
false.
It is emitted when this failure happens in two scenarios when a worker may
be unregistered:
1. due to an extension update to potentially unregister the old worker or
2. due to the extension being deactivated (due to disable, uninstall, or
terminate)
#1 and #2 can both occur for an extension update.
#2 can occur independently outside of an extension update.
{UnregistrationType}
Note: This metric was incremented Aug, 2024 due to the #2 case no longer
emitting the not found error if there was no previous worker registered. The
logic for #2 does not check if a worker was previously registered before
attempting to unregister it so the error is not considered a failure.
</summary>
<token key="UnregistrationType" variants="UnregistrationType"/>
</histogram>
<histogram
name="Extensions.ServiceWorkerBackground.WorkerUnregistrationState{UnregistrationType}2"
enum="Boolean" expires_after="2025-01-15">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The success (true) or failure (false) of attempting to unregister a worker
for an extension.
This is emitted for two scenarios when a worker may be unregistered:
1. due to an extension update to potentially unregister the old worker or
2. due to the extension being deactivated (due to disable, uninstall, or
terminate)
#1 and #2 can both occur for an extension update.
#2 can occur independently outside of an extension update.
{UnregistrationType}
Note: This metric was incremented Aug, 2024 due to the #2 case emitting true
if the error status is not found and there was no previous worker registered
(instead of the previous false). The logic for #2 does not check if a worker
was previously registered before attempting to unregister it so the error is
considered an unregistration success.
</summary>
<token key="UnregistrationType" variants="UnregistrationType"/>
</histogram>
<histogram
name="Extensions.ServiceWorkerRenderer.ExtensionLoadStatusInWorkerScriptEvaluation"
enum="ExtensionLoadStatusOnScriptEval" expires_after="2025-02-15">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
This records the state of the extension loading in the (renderer) extension
registry during the process of service worker script evaluation. Loaded
means the extension is in the extension registry. Unloaded means the
extension was loaded, but is now unloaded (disabled). Unknown means that
there is no record of the extension in the renderer.
It is emitted potentially after the worker thread is started and the worker
script will soon or already is evaluating, but it is before the worker's
extension bindings sytem is created.
</summary>
</histogram>
<histogram
name="Extensions.SettingsOverridden.BackToGoogleNtpOverriddenDialogResult"
enum="SettingsOverriddenDialogResult" expires_after="2024-12-15">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-12-15">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-12-15">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-12-15">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-12-15">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The action taken on the settings overridden dialog that was shown to alert
the user of an extension overriding the default search provider, when the
dialog shown is the generic version. Recorded once per instance of the
dialog being shown, after the action is taken.
</summary>
</histogram>
<histogram name="Extensions.StartupPagesOverrides" units="units"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of enabled extensions with startup page overrides specified in
their manifest. Recorded once per profile at profile initialization.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.StartupPagesOverrides2" units="units"
expires_after="2024-12-15">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of enabled extensions with startup page overrides specified in
their manifest. Recorded once per "user profile" (profiles where
people can install extensions, specifically profiles that can have
non-component extensions installed) at profile initialization.
</summary>
</histogram>
<histogram name="Extensions.SyncBlockedByDefaultWebAppMigration" enum="Boolean"
expires_after="2024-02-08">
<owner>[email protected]</owner>
<owner>[email protected]</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.
Warning: This histogram was expired from 2023-08-08 to 2023-10-16; data may
be missing.
</summary>
</histogram>
<histogram name="Extensions.Toolbar.ExtensionsActivatedFromRequestAccessButton"
units="Extension Count" expires_after="2025-01-15">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The number of extensions in the request access button that were granted site
access after the user clicked on the request access button.
</summary>
</histogram>
<histogram name="Extensions.Toolbar.InvocationSource"
enum="ExtensionActionInvocationSource" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</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>[email protected]</owner>
<owner>[email protected]</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>[email protected]</owner>
<owner>[email protected]</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.UninstallSource" enum="ExtensionUninstallSource"
expires_after="never">
<!-- expires-never: Monitoring core extension usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</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
"cleanups"). Note: this is no longer emitted for web app
uninstalls as of M113.
</summary>
</histogram>
<histogram name="Extensions.UninstallType" enum="ExtensionType"
expires_after="never">
<!-- expires-never: Monitoring core extension usage behaviors. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>Uninstalls grouped by Extension::HistogramType.</summary>
</histogram>
<histogram
name="Extensions.WebRequest.BeforeRequestDeclarativeNetRequestEvaluationTime"
units="ms" expires_after="2025-06-30">
<owner>[email protected]</owner>
<owner>src/extensions/OWNERS</owner>
<summary>
The total amount of time taken to evaluate declarativeNetRequest rules in
the onBeforeRequest stage, measured in milliseconds. Recorded once per
request if and only if at least one declarativeNetRequest rule is present.
</summary>
</histogram>
<histogram
name="Extensions.WebRequest.BeforeRequestDeclarativeNetRequestEvaluationTimeInMicroseconds"
units="microseconds" expires_after="2025-02-23">
<owner>[email protected]</owner>
<owner>src/extensions/OWNERS</owner>
<summary>
The total amount of time taken to evaluate declarativeNetRequest rules in
the onBeforeRequest stage, measured in microseconds. Recorded once per
request if and only if at least one declarativeNetRequest rule is present.
This is only emitted for users with high resolution clocks.
</summary>
</histogram>
<histogram
name="Extensions.WebRequest.BeforeRequestListenerEvaluationTime.{HandlerTypes}"
units="ms" expires_after="2024-12-15">
<owner>[email protected]</owner>
<owner>src/extensions/OWNERS</owner>
<summary>
The total amount of time, measured in milliseconds, between when an event is
dispatched to webRequest listeners and when all responses are received and
handled for an onBeforeRequest event. Emitted when there are {HandlerTypes}
for the request. Recorded once per request if the request completes.
</summary>
<token key="HandlerTypes">
<variant name="WebRequestAndDeclarativeNetRequest"
summary="both webRequest listeners and declarativeNetRequest rules"/>
<variant name="WebRequestOnly" summary="only webRequest listeners"/>
</token>
</histogram>
<histogram
name="Extensions.WebRequest.BeforeRequestListenerEvaluationTimeInMicroseconds.{HandlerTypes}"
units="microseconds" expires_after="2025-02-23">
<owner>[email protected]</owner>
<owner>src/extensions/OWNERS</owner>
<summary>
The total amount of time, measured in microseconds, between when an event is
dispatched to webRequest listeners and when all responses are received and
handled for an onBeforeRequest event. Emitted when there are {HandlerTypes}
for the request. Recorded once per request if the request completes. This is
only emitted for users with high resolution clocks.
</summary>
<token key="HandlerTypes">
<variant name="WebRequestAndDeclarativeNetRequest"
summary="both webRequest listeners and declarativeNetRequest rules"/>
<variant name="WebRequestOnly" summary="only webRequest listeners"/>
</token>
</histogram>
<histogram name="Extensions.WebRequest.EventListenerFlag"
enum="WebRequestEventListenerFlag" expires_after="never">
<!-- expires-never: For monitoring Web Request API usage statistics. -->
<owner>[email protected]</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="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Whether and how keepalive requests are blocked. There is a similar histgoram
Net.KeepaliveRequest.BlockStatus. See there for the difference between the
two histograms.
</summary>
</histogram>
<histogram name="Extensions.WebRequest.RequestHeaderAdded"
enum="WebRequest.RequestHeader" expires_after="never">
<!-- expires-never: For monitoring Web Request API usage. -->
<owner>[email protected]</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>[email protected]</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>[email protected]</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>[email protected]</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>[email protected]</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>[email protected]</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>[email protected]</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>[email protected]</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>[email protected]</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>[email protected]</owner>
<owner>src/extensions/OWNERS</owner>
<summary>
Counts the number of times an action is requested by extensions as part of
the Web Request API. For a given web request stage, multiple actions may be
logged.
</summary>
</histogram>
<histogram name="Extensions.WebRequestBlockingCount" units="extensions"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>src/extensions/OWNERS</owner>
<summary>
Number of enabled extensions which have requested the
"webRequestBlocking" permission. Includes all kinds of extensions,
including component and unpacked extensions. Recorded during profile
initialization.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.WebRequestBlockingCount2" units="extensions"
expires_after="never">
<!-- expires-never: For monitoring Web request API usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Number of enabled extensions which have requested the
"webRequestBlocking" permission. Includes all kinds of extensions,
including component and unpacked extensions. Recorded during "user
profile" (profiles where people can install extensions, specifically
profiles that can have non-component extensions installed) initialization.
</summary>
</histogram>
<histogram name="Extensions.WebRequestCount" units="extensions"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>src/extensions/OWNERS</owner>
<summary>
Number of enabled extensions which have requested the "webRequest"
permission. Includes all kinds of extensions, including component and
unpacked extensions. Recorded during profile initialization.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="Extensions.WebRequestCount2" units="extensions"
expires_after="never">
<!-- expires-never: For monitoring Web request API usage. -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Number of enabled extensions which have requested the "webRequest"
permission. Includes all kinds of extensions, including component and
unpacked extensions. Recorded during "user profile" (profiles
where people can install extensions, specifically profiles that can have
non-component extensions installed) initialization.
</summary>
</histogram>
<histogram name="Extensions.WebStoreInstall.EsbAllowlistParameter"
enum="WebStoreInstallAllowlistParameter" expires_after="2024-02-04">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Reports the Safe Browsing CRX allowlist state received from Chrome Web Store
when a user presses on "Add to Chrome" in Chrome Web Store.
</summary>
</histogram>
<histogram
name="Extensions.WebStoreInstall.NotAllowlistedInstalledWithFriction"
enum="Boolean" expires_after="2024-04-28">
<owner>[email protected]</owner>
<owner>[email protected]</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="2024-04-28">
<owner>[email protected]</owner>
<owner>[email protected]</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>[email protected]</owner>
<owner>[email protected]</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>[email protected]</owner>
<owner>[email protected]</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="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</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}ForceInstalledFailureReason3"
enum="ExtensionInstallationFailureReason" expires_after="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The reason why enterprise policy forced extensions were not installed
{ExtensionSource}. Recorded for each forced extension that failed to install
after 5 minutes. Recorded together with
"Extensions.ForceInstalledTimedOutCount" 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>
<token key="ExtensionSource">
<variant name="" summary="for all extension sources"/>
<variant name="OffStore_"
summary="for extensions hosted off the Chrome Web Store"/>
<variant name="WebStore_"
summary="for extensions from the Chrome Web Store"/>
</token>
</histogram>
<histogram
name="Extensions.{ExtensionSource}ForceInstalled{ErrorType}HttpErrorCode2"
enum="HttpResponseCode" expires_after="never">
<!-- expires-never: Monitoring outcomes of admin installed extensions -->
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
HTTP error code for the last retry attempt when for enterprise policy forced
extensions failed with {ErrorType}. Recorded for each forced extension that
failed to install after 5 minutes with
Extensions.`OffStore,WebStore`_ForceInstalledFailureReason3 equal to
{ErrorType} and a HTTP response code was received. HTTP response code is
received only if there was no network error. Replaced
Extensions.ForceInstalledHttpErrorCode because error codes are now reported
only when network error code is HTTP_RESPONSE_CODE_FAILURE.
</summary>
<token key="ExtensionSource">
<variant name=""
summary="Aggregated detailed failure reason for any type of extension"/>
<variant name="OffStore_"
summary="Detailed failure reason for OffStore extensions"/>
<variant name="WebStore_"
summary="Detailed failure reason for WebStore extensions"/>
</token>
<token key="ErrorType">
<variant name="" summary="CRX_FETCH_FAILED failure reason."/>
<variant name="CrxFetchRetry" summary="CRX_DOWNLOAD_RETRY stage."/>
<variant name="ManifestFetchFailed"
summary="MANIFEST_FETCH_FAILED failure reason."/>
<variant name="ManifestFetchRetry"
summary="MANIFEST_DOWNLOAD_RETRY stage."/>
</token>
</histogram>
<histogram name="ExtensionToolbarModel.BrowserActionsCount" units="actions"
expires_after="2023-07-07">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
The total number of extensions that have an icon in the extension toolbar,
including those that are unpinned and only show in the extensions menu.
Measured once per (non-incognito) profile open.
Histogram is in the process of being removed in favor of its incremented
version that emits only on profile open for "user" profiles
(profiles where people can install extensions, specifically profiles that
can have non-component extensions installed).
</summary>
</histogram>
<histogram name="ExtensionToolbarModel.BrowserActionsCount2" units="actions"
expires_after="never">
<!-- expires-never: Monitoring core user behavior with extensions. -->
<owner>[email protected]</owner>
<owner>[email protected]</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 "user" profile (profiles where people can
install extensions, specifically profiles that can have non-component
extensions installed) open.
</summary>
</histogram>
<histogram name="GuestView.GuestViewCreated" enum="GuestViewType"
expires_after="2025-01-10">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<owner>src/components/guest_view/OWNERS</owner>
<summary>
Indicates the type of guest view created. Emitted once per guest view
object.
</summary>
</histogram>
</histograms>
</histogram-configuration>