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

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

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

<histogram-configuration>

<histograms>

<variants name="AdsPageLoadMetricVisibilityType">
  <variant name="Clients.Ads" summary="Includes all ad iframes."/>
  <variant name="Clients.Ads.NonVisible"
      summary="Only includes ad frames that have a display: none style, or
               have an area less than or equal to 16 pixels."/>
  <variant name="Clients.Ads.Visible"
      summary="Only includes ad frames that have a display != none style and
               have an area greater than 16 pixels."/>
</variants>

<variants name="BackgroundSuffix">
  <variant name="" summary="never backgrounded during the navigation"/>
  <variant name=".WasAppBackgrounded"
      summary="app backgrounded at least once during the navigation"/>
  <variant name=".WasBackgrounded"
      summary="backgrounded at least once during the navigation (this was
               renamed to WasAppBackgrounded)"/>
</variants>

<variants name="BrowserInitializationStatus">
  <variant name="" summary="any"/>
  <variant name=".IsBrowserStarting"
      summary="browser initialization in progress"/>
</variants>

<!-- LINT.IfChange(CaptchaProvider) -->

<variants name="CaptchaProvider">
  <variant name="CloudflareTurnstile" summary="Cloudflare Turnstile"/>
  <variant name="HCaptcha"/>
  <variant name="ReCaptcha"/>
  <variant name="UnknownCaptchaProvider" summary="an unknown CAPTCHA provider"/>
</variants>

<!-- LINT.ThenChange(//chrome/browser/page_load_metrics/observers/captcha_provider_manager.h:CaptchaProvider) -->

<!-- LINT.IfChange(ConnectionProtocolType) -->

<variants name="ConnectionProtocolType">
  <variant name="" summary="any connection"/>
  <variant name=".Http1" summary="Http1 connection"/>
  <variant name=".Http2" summary="Http2 connection"/>
  <variant name=".Http3" summary="Http3 connection"/>
  <variant name=".Other" summary="Other connection"/>
</variants>

<!-- LINT.ThenChange(//net/http/http_connection_info.cc) -->

<variants name="Gap">
  <variant name="1000ms"/>
</variants>

<!-- LINT.IfChange(GWSFontFallbackScript) -->

<variants name="GWSFontFallbackScript">
  <variant name="Arab" summary="Arabic"/>
  <variant name="Beng" summary="Bengali"/>
  <variant name="Cyrl" summary="Cyrillic"/>
  <variant name="Deva" summary="Devanagari"/>
  <variant name="Emoji" summary="Emoji"/>
  <variant name="Hang" summary="Hangul"/>
  <variant name="Hani" summary="Han"/>
  <variant name="Hira" summary="Hiragana"/>
  <variant name="Kana" summary="Katakana"/>
  <variant name="Latn" summary="Latin"/>
  <variant name="Other" summary="Other scripts"/>
  <variant name="Zyyy" summary="Common (Symbols, Math)"/>
</variants>

<!-- LINT.ThenChange(//components/page_load_metrics/common/page_load_metrics.mojom:ScriptType) -->

<variants name="GWSFontLoadingMilestone">
  <variant name="AFTEnd"
      summary="up to the Above the Fold End (AFTEnd) performance mark.
               Recorded when the AFTEnd mark is observed"/>
  <variant name="Complete"
      summary="during the lifetime of the page. Recorded when the page load
               is completed (e.g., on navigation, tab closure, or
               backgrounding)"/>
  <variant name="FCP"
      summary="up to First Contentful Paint (FCP). Recorded when FCP is
               reached"/>
</variants>

<variants name="HiddenSuffix">
  <variant name="" summary="never hidden during the navigation"/>
  <variant name=".TabWasHiddenAtStartLaterShown"
      summary="hidden at navigation start and shown later"/>
  <variant name=".TabWasHiddenAtStartStaysHidden"
      summary="hidden at navigation start and stays hidden"/>
  <variant name=".TabWasHiddenLaterShown"
      summary="tab hidden at least once during the navigation, after
               navigation start, and is later shown again"/>
  <variant name=".TabWasHiddenStaysHidden"
      summary="tab hidden at least once during the navigation, after
               navigation start, and stays hidden"/>
  <variant name=".WasHidden"
      summary="hidden at least once during the navigation (this was renamed
               to TabWasHidden*)"/>
</variants>

<variants name="IncognitoSuffix">
  <variant name=""
      summary="the navigation opened in any profile, which includes incognito
               or guest mode"/>
  <variant name=".Incognito"
      summary="the navigation opened in an incognito mode"/>
</variants>

<variants name="InitiatorOfNavigation">
  <variant name=".BrowserInitiated" summary="browser-initiated navigation"/>
  <variant name=".RendererInitiated" summary="renderer-initiated navigation"/>
</variants>

<variants name="LoadedIdleVisibility">
  <variant name="" summary="all pages"/>
  <variant name=".Background"
      summary="pages that were hidden during the navigation"/>
  <variant name=".Foreground"
      summary="pages that were visible during the navigation"/>
  <variant name=".MixedBGFG"
      summary="pages that were hidden for only part of the navigation"/>
</variants>

<variants name="MaxWindowSize">
  <variant name="5000ms"/>
</variants>

<variants name="NavigationAbandonReason">
  <variant name="" summary="any reason"/>
  <variant name=".AppBackgrounded" summary="AppBackgrounded"/>
  <variant name=".ErrorPage" summary="ErrorPage"/>
  <variant name=".ExplicitCancellation" summary="ExplicitCancellation"/>
  <variant name=".FrameRemoved" summary="FrameRemoved"/>
  <variant name=".Hidden" summary="Hidden"/>
  <variant name=".InternalCancellation" summary="InternalCancellation"/>
  <variant name=".NewDuplicateNavigation" summary="NewDuplicateNavigation"/>
  <variant name=".NewHistoryNavigation" summary="NewHistoryNavigation"/>
  <variant name=".NewOtherNavigationBrowserInitiated"
      summary="NewOtherNavigationBrowserInitiated"/>
  <variant name=".NewOtherNavigationRendererInitiated"
      summary="NewOtherNavigationRendererInitiated"/>
  <variant name=".NewReloadNavigation" summary="NewReloadNavigation"/>
  <variant name=".RenderProcessGone" summary="RenderProcessGone"/>
</variants>

<variants name="NavigationAbandonReasonNoDot">
  <variant name="" summary="any reason"/>
  <variant name="AppBackgrounded" summary="AppBackgrounded"/>
  <variant name="ErrorPage" summary="ErrorPage"/>
  <variant name="ExplicitCancellation" summary="ExplicitCancellation"/>
  <variant name="FrameRemoved" summary="FrameRemoved"/>
  <variant name="Hidden" summary="Hidden"/>
  <variant name="InternalCancellation" summary="InternalCancellation"/>
  <variant name="NewDuplicateNavigation" summary="NewDuplicateNavigation"/>
  <variant name="NewHistoryNavigation" summary="NewHistoryNavigation"/>
  <variant name="NewOtherNavigationBrowserInitiated"
      summary="NewOtherNavigationBrowserInitiated"/>
  <variant name="NewOtherNavigationRendererInitiated"
      summary="NewOtherNavigationRendererInitiated"/>
  <variant name="NewReloadNavigation" summary="NewReloadNavigation"/>
  <variant name="RenderProcessGone" summary="RenderProcessGone"/>
</variants>

<variants name="NavigationCountType">
  <variant name="IsFirstNavigation"
      summary="first navigation after browser started"/>
  <variant name="IsSubsequentNavigation"
      summary="subsequent navigation after browser started"/>
</variants>

<!-- LINT.IfChange(NavigationMilestone) -->

<variants name="NavigationMilestone">
  <variant name="AFTEnd"/>
  <variant name="AFTStart"/>
  <variant name="BodyChunkEnd" summary="BodyChunkEnd (added in M129)"/>
  <variant name="BodyChunkStart" summary="BodyChunkStart (added inM129)"/>
  <variant name="CommitReceived"/>
  <variant name="CommitSent"/>
  <variant name="DidCommit"/>
  <variant name="DOMContentLoaded"/>
  <variant name="FirstContentfulPaint"/>
  <variant name="HeaderChunkEnd" summary="HeaderChunkEnd (added in M129)"/>
  <variant name="HeaderChunkStart" summary="HeaderChunkStart (added in M129)"/>
  <variant name="LargestContentfulPaint"
      summary="LargestContentfulPaint (Warning: There were some duplicated
               records in M128-129, crrev.com/c/5802697 for more details)"/>
  <variant name="LoaderStart"/>
  <variant name="LoadEventStarted"/>
  <variant name="NavigationStart"/>
  <variant name="NonRedirectedRequestStart"/>
  <variant name="NonRedirectResponseLoaderCallback"/>
  <variant name="NonRedirectResponseStart"/>
  <variant name="ParseStart"/>
</variants>

<!-- LINT.ThenChange(//components/page_load_metrics/browser/observers/abandoned_page_load_metrics_observer.h:NavigationMilestone) -->

<variants name="NavigationScenario">
  <variant name=".NewWindow"
      summary="recorded for page loads in a newly created browser window
               (excluding startup)."/>
  <variant name=".SameWindow"
      summary="recorded for page loads in an existing browser window
               (including subsequent navigations in the same tab, and page
               loads in newly opened tabs within an existing window)."/>
  <variant name=".Startup"
      summary="recorded for page loads during browser startup."/>
</variants>

<variants name="NavigationTypeForAbandonment">
  <variant name="BrowserNav"/>
  <variant name="HistoryNav"/>
  <variant name="ReloadNav"/>
  <variant name="RendererNav"/>
  <variant name="RestoreNav"/>
</variants>

<variants name="ObservedNavigation">
  <variant name="" summary="all navigations"/>
  <variant name=".GoogleSearch" summary="SRP navigations"/>
</variants>

<variants name="PageActionType">
  <variant name="AiMode"/>
  <variant name="BookmarksStar"/>
  <variant name="ClickToCall"/>
  <variant name="CookieControls"/>
  <variant name="Discounts"/>
  <variant name="FileSystemAccess"/>
  <variant name="Find"/>
  <variant name="Indigo"/>
  <variant name="IntentPicker"/>
  <variant name="JsOptimizations"/>
  <variant name="LensOverlay"/>
  <variant name="LensOverlayHomework"/>
  <variant name="LocalCardMigration"/>
  <variant name="ManagePasswords"/>
  <variant name="MandatoryReauth"/>
  <variant name="MemorySaver"/>
  <variant name="OptimizationGuide"/>
  <variant name="PaymentsOfferNotification"/>
  <variant name="PriceInsights"/>
  <variant name="PriceTracking"/>
  <variant name="PWAInstall"/>
  <variant name="QRCodeGenerator"/>
  <variant name="ReadAnything"
      summary="ReadAnything (Obsolete, Deprecated Jun 06, 2024)"/>
  <variant name="ReaderMode"/>
  <variant name="ReadingMode"/>
  <variant name="SaveAutofillAddress"/>
  <variant name="SaveCard"/>
  <variant name="SaveIban"/>
  <variant name="SendTabToSelf"/>
  <variant name="SharingHub"/>
  <variant name="SideSearch"/>
  <variant name="SMSRemoteFetcher"/>
  <variant name="Translate"/>
  <variant name="VirtualCardEnroll"/>
  <variant name="VirtualCardManualFeedback"/>
  <variant name="Zoom"/>
</variants>

<variants name="PageActionVisualState">
  <variant name="Chip"/>
  <variant name="Icon"/>
</variants>

<variants name="PageLoadType">
  <variant name="" summary="regular"/>
  <variant name=".AfterBackForwardCacheRestore" summary="bfcache restoration"/>
  <variant name=".Prerender" summary="prerendered"/>
</variants>

<!-- LINT.IfChange(PagePreloadingTriggerType) -->

<variants name="PagePreloadingTriggerType">
  <variant name=".Embedder_BookmarkBar"/>
  <variant name=".Embedder_DefaultSearchEngine"/>
  <variant name=".Embedder_DirectURLInput"/>
  <variant name=".Embedder_NewTabPage"/>
  <variant name=".Embedder_PrewarmDefaultSearchEngine"/>
  <variant name=".Embedder_WebView"/>
  <variant name=".SpeculationRule"/>
  <variant name=".SpeculationRuleFromAutoSpeculationRules"/>
  <variant name=".SpeculationRuleFromIsolatedWorld"/>
</variants>

<!-- LINT.ThenChange(//tools/metrics/histograms/metadata/navigation/histograms.xml:PagePreloadingTriggerType) -->

<variants name="PrerenderStatus">
  <variant name="" summary="prerender and non-prerender navigations"/>
  <variant name=".NonPrerender" summary="non-prerender navigations"/>
  <variant name=".Prerender" summary="prerender navigations"/>
</variants>

<variants name="PrivacySandboxAdsApi">
  <variant name="FencedFrames"/>
  <variant name="PrivateAggregation"/>
  <variant name="SharedStorage"/>
  <variant name="Topics"/>
</variants>

<!-- LINT.IfChange(RequestDestination) -->

<variants name="RequestDestination">
  <variant name="audio"/>
  <variant name="audioworklet"/>
  <variant name="compression-dictionary"/>
  <variant name="document"/>
  <variant name="embed"/>
  <variant name="empty"/>
  <variant name="fencedframe"/>
  <variant name="font"/>
  <variant name="frame"/>
  <variant name="iframe"/>
  <variant name="image"/>
  <variant name="manifest"/>
  <variant name="object"/>
  <variant name="paintworklet"/>
  <variant name="report"/>
  <variant name="script"/>
  <variant name="serviceworker"/>
  <variant name="sharedstorageworklet"
      summary="(obsolete) Shared storage worklet"/>
  <variant name="sharedworker"/>
  <variant name="style"/>
  <variant name="track"/>
  <variant name="video"/>
  <variant name="webbundle"/>
  <variant name="worker"/>
  <variant name="xslt"/>
</variants>

<!-- LINT.ThenChange(//tools/metrics/histograms/metadata/blink/histograms.xml:BlinkRequestDestination) -->

<variants name="ResponseFromCache">
  <variant name="" summary="any"/>
  <variant name=".ResponseFromCache" summary="response from cache"/>
</variants>

<variants name="SoftNavigationStatus">
  <variant name="Emitted" summary="Emitted"/>
  <variant name="NotEmittedInsufficientPaint"
      summary="Not Emitted due to Insufficient Paint"/>
  <variant name="NotEmittedUrlEmpty"
      summary="Not Emitted because the URL was empty (normal interaction)"/>
</variants>

<variants name="SyntheticResponseSuffix">
  <variant name="" summary=""/>
  <variant name=".SyntheticResponse"
      summary="and the response is returned with the synthetic response"/>
</variants>

<variants name="TabInitializationStatus">
  <variant name="" summary="any"/>
  <variant name=".FromNewTabPage" summary="navigation from new tab page"/>
</variants>

<variants name="TraverseRestoreType">
  <variant name="" summary="All traverse page loads"/>
  <variant name=".NotRestored" summary="Traverse but non-restore page loads"/>
  <variant name=".Restored" summary="Restored page loads"/>
</variants>

<variants name="WebUIHost">
  <variant name=""/>
  <variant name=".access-code-cast"/>
  <variant name=".accessibility"/>
  <variant name=".accessory-update"/>
  <variant name=".account-manager-error"/>
  <variant name=".account-migration-welcome"/>
  <variant name=".actor-overlay"/>
  <variant name=".add-supervision"/>
  <variant name=".ai-overlay-dialog"/>
  <variant name=".app-disabled"/>
  <variant name=".app-install-dialog"/>
  <variant name=".app-service-internals"/>
  <variant name=".app-settings"/>
  <variant name=".apps"/>
  <variant name=".arc-overview-tracing"/>
  <variant name=".arc-power-control"/>
  <variant name=".audio"/>
  <variant name=".autofill-internals"/>
  <variant name=".batch-upload"/>
  <variant name=".bluetooth-internals"/>
  <variant name=".bluetooth-pairing"/>
  <variant name=".boca-app"/>
  <variant name=".bookmarks"/>
  <variant name=".bookmarks-side-panel.top-chrome"/>
  <variant name=".borealis-credits"/>
  <variant name=".borealis-installer"/>
  <variant name=".borealis-motd"/>
  <variant name=".browser-switch"/>
  <variant name=".camera-app"/>
  <variant name=".cast-feedback"/>
  <variant name=".certificate-manager"/>
  <variant name=".chrome-signin"/>
  <variant name=".chrome-urls"/>
  <variant name=".class-tools-remote-display"/>
  <variant name=".cloud-upload"/>
  <variant name=".color-internals"/>
  <variant name=".comments-side-panel.top-chrome"/>
  <variant name=".compare"/>
  <variant name=".components"/>
  <variant name=".compose"/>
  <variant name=".confirm-password-change"/>
  <variant name=".conflicts"/>
  <variant name=".connection-help"/>
  <variant name=".connection-monitoring-detected"/>
  <variant name=".connectivity-diagnostics"/>
  <variant name=".connectors-internals"/>
  <variant name=".constrained-test"/>
  <variant name=".content-settings"/>
  <variant name=".context-hub"/>
  <variant name=".contextual-cueing-internals"/>
  <variant name=".contextual-tasks"/>
  <variant name=".crashes"/>
  <variant name=".credits"/>
  <variant name=".crosh"/>
  <variant name=".cross-device-signin-qr-bubble"/>
  <variant name=".crostini-credits"/>
  <variant name=".crostini-installer"/>
  <variant name=".cryptohome"/>
  <variant name=".customize-chrome-side-panel.top-chrome"/>
  <variant name=".data-sharing"/>
  <variant name=".debug-webuis-disabled"/>
  <variant name=".default-browser"/>
  <variant name=".default-browser-modal"/>
  <variant name=".demo-mode-app"/>
  <variant name=".device-emulator"/>
  <variant name=".device-log"/>
  <variant name=".diagnostics"/>
  <variant name=".dlp-internals"/>
  <variant name=".downloads"/>
  <variant name=".drive-internals"/>
  <variant name=".drive-picker-host"/>
  <variant name=".drive-picker-host-untrusted"/>
  <variant name=".eche-app"/>
  <variant name=".emoji-picker"/>
  <variant name=".enterprise-reporting"/>
  <variant name=".extended-updates-dialog"/>
  <variant name=".extensions"/>
  <variant name=".extensions-zero-state"/>
  <variant name=".feature-showcase"/>
  <variant name=".feedback"/>
  <variant name=".file-manager"/>
  <variant name=".files-internals"/>
  <variant name=".flags"/>
  <variant name=".floating-workspace"/>
  <variant name=".focus-mode-media"/>
  <variant name=".focus-mode-player"/>
  <variant name=".gcm-internals"/>
  <variant name=".glic"/>
  <variant name=".glic-experimental-opt-in"/>
  <variant name=".glic-fre"/>
  <variant name=".gpu"/>
  <variant name=".graduation"/>
  <variant name=".growth-internals"/>
  <variant name=".healthd-internals"/>
  <variant name=".help-app"/>
  <variant name=".help-app-kids-magazine"/>
  <variant name=".histograms"/>
  <variant name=".history"/>
  <variant name=".history-clusters-side-panel.top-chrome"/>
  <variant name=".history-side-panel.top-chrome"/>
  <variant name=".history-sync-optin"/>
  <variant name=".indexeddb-internals"/>
  <variant name=".inspect"/>
  <variant name=".internals"/>
  <variant name=".internet-config-dialog"/>
  <variant name=".internet-detail-dialog"/>
  <variant name=".intro"/>
  <variant name=".iwa-dev"/>
  <variant name=".kerberos-in-browser"/>
  <variant name=".launcher-internals"/>
  <variant name=".lens"/>
  <variant name=".lens-overlay"/>
  <variant name=".linux-proxy-config"/>
  <variant name=".local-files-migration"/>
  <variant name=".lock-network"/>
  <variant name=".lock-reauth"/>
  <variant name=".mako"/>
  <variant name=".mall"/>
  <variant name=".manage-mirrorsync"/>
  <variant name=".managed-user-profile-notice"/>
  <variant name=".management"/>
  <variant name=".media-app"/>
  <variant name=".media-engagement"/>
  <variant name=".media-internals"/>
  <variant name=".metrics-internals"/>
  <variant name=".mobilesetup"/>
  <variant name=".multidevice-internals"/>
  <variant name=".multidevice-setup"/>
  <variant name=".nearby"/>
  <variant name=".nearby-internals"/>
  <variant name=".net-export"/>
  <variant name=".net-internals"/>
  <variant name=".network"/>
  <variant name=".new-tab-page"/>
  <variant name=".new-tab-page-third-party"/>
  <variant name=".newtab"/>
  <variant name=".newtab-footer"/>
  <variant name=".notification-tester"/>
  <variant name=".ntp-microsoft-auth"/>
  <variant name=".ntp-tiles-internals"/>
  <variant name=".office-fallback"/>
  <variant name=".omnibox-everywhere.top-chrome"/>
  <variant name=".omnibox-popup.top-chrome"/>
  <variant name=".on-device-translation-internals"/>
  <variant name=".oobe"/>
  <variant name=".organizer-panel.top-chrome"/>
  <variant name=".os-credits"/>
  <variant name=".os-feedback"/>
  <variant name=".os-print"/>
  <variant name=".os-settings"/>
  <variant name=".parent-access"/>
  <variant name=".password-change"/>
  <variant name=".password-manager"/>
  <variant name=".password-manager-internals"/>
  <variant name=".personalization"/>
  <variant name=".policy"/>
  <variant name=".power"/>
  <variant name=".predictors"/>
  <variant name=".print"/>
  <variant name=".print-management"/>
  <variant name=".privacy-sandbox-base-dialog"/>
  <variant name=".privacy-sandbox-dialog"/>
  <variant name=".private-ai-internals"/>
  <variant name=".process-internals"/>
  <variant name=".profile-customization"/>
  <variant name=".profile-picker"/>
  <variant name=".projector"/>
  <variant name=".projector-annotator"/>
  <variant name=".proximity-auth"/>
  <variant name=".quota-internals"/>
  <variant name=".read-anything-side-panel.top-chrome"/>
  <variant name=".read-later.top-chrome"/>
  <variant name=".recorder-app"/>
  <variant name=".regional-capabilities-internals"/>
  <variant name=".reset-password"/>
  <variant name=".sample-system-web-app"/>
  <variant name=".sandbox"/>
  <variant name=".sanitize"/>
  <variant name=".saved-tab-groups-unsupported"/>
  <variant name=".scalable-iph-debug"/>
  <variant name=".scanner-feedback"/>
  <variant name=".scanning"/>
  <variant name=".search-engine-choice"/>
  <variant name=".security-curtain"/>
  <variant name=".segmentation-internals"/>
  <variant name=".sensor-info"/>
  <variant name=".serviceworker-internals"/>
  <variant name=".set-time"/>
  <variant name=".settings"/>
  <variant name=".shimless-rma"/>
  <variant name=".shopping-insights-side-panel.top-chrome"/>
  <variant name=".shortcut-customization"/>
  <variant name=".signin-dice-web-intercept.top-chrome"/>
  <variant name=".signin-email-confirmation"/>
  <variant name=".signin-error"/>
  <variant name=".signin-internals"/>
  <variant name=".signin-qrcode-bar"/>
  <variant name=".signout-confirmation"/>
  <variant name=".site-engagement"/>
  <variant name=".skills"/>
  <variant name=".slow"/>
  <variant name=".slow_trace"/>
  <variant name=".smb-credentials-dialog"/>
  <variant name=".smb-share-dialog"/>
  <variant name=".status-area-internals"/>
  <variant name=".subresource-filter-internals"/>
  <variant name=".suggest-internals"/>
  <variant name=".support-tool"/>
  <variant name=".sync-confirmation"/>
  <variant name=".sync-internals"/>
  <variant name=".sys-internals"/>
  <variant name=".system"/>
  <variant name=".tab-group-home"/>
  <variant name=".tab-search.top-chrome"/>
  <variant name=".tab-strip.top-chrome"/>
  <variant name=".tabs-from-other-devices.top-chrome"/>
  <variant name=".terminal"/>
  <variant name=".terms"/>
  <variant name=".topics-internals"/>
  <variant name=".traces"/>
  <variant name=".traces-internals"/>
  <variant name=".translate-internals"/>
  <variant name=".updater"/>
  <variant name=".urgent-password-expiry-notification"/>
  <variant name=".usb-internals"/>
  <variant name=".vc-background"/>
  <variant name=".version"/>
  <variant name=".view-cert"/>
  <variant name=".vm"/>
  <variant name=".watermark"/>
  <variant name=".web-app-internals"/>
  <variant name=".webnn-internals"/>
  <variant name=".webrtc-internals"/>
  <variant name=".webui-browser"/>
  <variant name=".webui-toolbar.top-chrome"/>
  <variant name=".whats-new"/>
</variants>

<!-- LINT.IfChange(TopChromeWebUIName) -->

<variants name="WebUIName">
  <variant name=""/>
  <variant name=".BookmarksSidePanel"/>
  <variant name=".CommentsSidePanel"/>
  <variant name=".Compose"/>
  <variant name=".ContextualTasks"/>
  <variant name=".CustomizeChrome"/>
  <variant name=".DataSharingBubble"/>
  <variant name=".DefaultBrowserModal"/>
  <variant name=".Emoji"/>
  <variant name=".ExtensionsWebStoreZeroStatePromo"/>
  <variant name=".Feed"/>
  <variant name=".Feedback"/>
  <variant name=".HistoryClustersSidePanel"/>
  <variant name=".HistorySidePanel"/>
  <variant name=".LensOverlayUntrusted"/>
  <variant name=".LensSidePanelUntrusted"/>
  <variant name=".MakoUntrusted"/>
  <variant name=".NewTabFooter"/>
  <variant name=".OmniboxEverywhere"/>
  <variant name=".OmniboxPopup"/>
  <variant name=".PerformanceSidePanel"/>
  <variant name=".ReadAnythingUntrusted"/>
  <variant name=".ReadingList"/>
  <variant name=".ReloadButtonUI"/>
  <variant name=".ShoppingInsightsSidePanel"/>
  <variant name=".TabSearch"/>
  <variant name=".TabsFromOtherDevicesSidePanel"/>
  <variant name=".UserEducation"/>
</variants>

<!-- LINT.ThenChange(//tools/metrics/histograms/metadata/ui/histograms.xml:TopChromeWebUIName) -->

<variants name="Window">
  <variant name="SessionWindow"/>
</variants>

<histogram name="PageActionController.ActionTypeShown2"
    enum="PageActionIconType" expires_after="2027-01-31">
  <owner>emshack@chromium.org</owner>
  <owner>koretadaniel@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The type of Page Action currently shown. Logged once per ephemeral page
    action the first time it becomes visible on a given page. Tab switches will
    only trigger logging for any page actions that have not already been logged
    as visible on this page.
  </summary>
</histogram>

<histogram name="PageActionController.ActiveSuggestionChips" units="chips"
    expires_after="2027-02-07">
  <owner>yeroshkin@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The number of Page Action Suggestion Chips currently active. Measured each
    time a new suggestion chip is shown.
  </summary>
</histogram>

<histogram name="PageActionController.Chip.CollapsedDueToSpace.ActionType"
    enum="PageActionIconType" expires_after="2027-06-01">
  <owner>yeroshkin@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The type of Page Action suggestion chip that was shown in a collapsed state
    (icon only) due to insufficient space in the omnibox. Logged once when the
    chip is originally shown.
  </summary>
</histogram>

<histogram name="PageActionController.Chip.CollapsedDueToSpace.PreferredWidth"
    units="DIPs" expires_after="2027-06-01">
  <owner>yeroshkin@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The preferred width of the Page Action suggestion chip that was shown in a
    collapsed state due to insufficient space in the omnibox. Logged once when
    the chip is originally shown.
  </summary>
</histogram>

<histogram name="PageActionController.ChipCollapseAnalysisCount.ActionType"
    enum="PageActionIconType" expires_after="2027-06-01">
  <owner>yeroshkin@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The type of Page Action suggestion chip that was shown. Logged once when the
    chip is originally shown, regardless of whether it was collapsed or
    expanded. Used as a denominator for CollapsedDueToSpace.ActionType to
    calculate the collapse rate.
  </summary>
</histogram>

<histogram name="PageActionController.ChipTypeShown" enum="PageActionIconType"
    expires_after="2027-01-31">
  <owner>emshack@chromium.org</owner>
  <owner>koretadaniel@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The type of Page Action currently shown as a chip. Logged once per ephemeral
    page action the first time it becomes visible on a given page. Tab switches
    will only trigger logging for any page actions that have not already been
    logged as visible on this page.
  </summary>
</histogram>

<histogram name="PageActionController.NumberActionsShown2" units="actions"
    expires_after="2027-01-31">
  <owner>emshack@chromium.org</owner>
  <owner>koretadaniel@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The number of ephemeral Page Actions currently shown. Measured each time a
    new page is loaded, and then again when each new page action appears on the
    same page.
  </summary>
</histogram>

<histogram name="PageActionController.NumberActionsShown3" units="actions"
    expires_after="2027-02-07">
  <owner>koretadaniel@chromium.org</owner>
  <owner>alsan@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The number of ephemeral Page Actions currently shown. Measured each time a
    new page is loaded, and then again when each new page action appears on the
    same page. This recorded only for the new page action framework.
  </summary>
</histogram>

<histogram name="PageActionController.PagesWithActionsShown2"
    enum="PageActionPageEvent" expires_after="2027-01-31">
  <owner>emshack@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records events related to percentage of pages with actions calculation.

    The percentage of pages with at least one ephemeral action shown can be
    calculated by computing &quot;Action Shown&quot; / &quot;Page Shown&quot;.
    The percentage of pages with multiple ephemeral actions shown can be
    calculated by computing &quot;Multiple Actions Shown&quot; / &quot;Page
    Shown&quot;. &quot;Page Shown&quot; is logged once when a given page is
    first loaded, &quot;Action Shown&quot; is logged when the first page action
    is displayed on a given page, and &quot;Multiple Actions Shown&quot; is
    logged the first time a page action appears on a given page alongside a
    second page action.
  </summary>
</histogram>

<histogram name="PageActionController.PagesWithActionsShown3"
    enum="PageActionPageEvent" expires_after="2027-01-31">
  <owner>koretadaniel@chromium.org</owner>
  <owner>alsan@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records events related to percentage of pages with actions calculation.

    The percentage of pages with at least one ephemeral action shown can be
    calculated by computing &quot;Action Shown&quot; / &quot;Page Shown&quot;.
    The percentage of pages with multiple ephemeral actions shown can be
    calculated by computing &quot;Multiple Actions Shown&quot; / &quot;Page
    Shown&quot;. &quot;Page Shown&quot; is logged once when a given page is
    first loaded, &quot;Action Shown&quot; is logged when the first page action
    is displayed on a given page, and &quot;Multiple Actions Shown&quot; is
    logged the first time a page action appears on a given page alongside a
    second page action. This recorded only for the new page action framework.
  </summary>
</histogram>

<histogram name="PageActionController.{PageActionType}.ShownPerNavigation"
    enum="BooleanShown" expires_after="2027-02-07">
  <owner>koretadaniel@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records whether the {PageActionType} page action was shown at least once
    during a navigation. Logged once per navigation when the user navigates away
    or the tab is closed.
  </summary>
  <token key="PageActionType" variants="PageActionType"/>
</histogram>

<histogram name="PageActionController.{PageActionType}.{State}.CTR2"
    enum="PageActionCTREvent" expires_after="2027-01-31">
  <owner>koretadaniel@chromium.org</owner>
  <owner>emshack@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records events related to {PageActionType} page action click through rate
    (CTR) calculation.

    The CTR can be calculated by computing &quot;Clicked&quot; /
    &quot;Shown&quot;. &quot;Clicked&quot; means the page action was clicked.
    &quot;Shown&quot; means that the page action was displayed.
    &quot;Shown&quot; is logged once per page action the first time it becomes
    visible on a given page, and &quot;Clicked&quot; is logged once per click.
  </summary>
  <token key="PageActionType" variants="PageActionType"/>
  <token key="State" variants="PageActionVisualState"/>
</histogram>

<histogram name="PageActionController.{State}.CTR2" enum="PageActionCTREvent"
    expires_after="2027-01-31">
  <owner>emshack@chromium.org</owner>
  <owner>koretadaniel@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records events related to overall ephemeral page action click through rate
    (CTR) calculation.

    The CTR can be calculated by computing &quot;Clicked&quot; /
    &quot;Shown&quot;. &quot;Clicked&quot; means the page action was clicked.
    &quot;Shown&quot; means that the page action was displayed.
    &quot;Shown&quot; is logged once per page action the first time it becomes
    visible on a given page, and &quot;Clicked&quot; is logged once per click.
  </summary>
  <token key="State" variants="PageActionVisualState"/>
</histogram>

<histogram name="PageActionController.{State}.NumberActionsShownWhenClicked"
    units="actions" expires_after="2027-01-31">
  <owner>emshack@chromium.org</owner>
  <owner>koretadaniel@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    The number of ephemeral Page Actions currently shown. Measured each time a
    page action is clicked.
  </summary>
  <token key="State" variants="PageActionVisualState"/>
</histogram>

<histogram name="PageLoad.BackForwardCache.Event"
    enum="PageLoadBackForwardCacheEvent" expires_after="2027-01-17">
  <owner>bmcquade@chromium.org</owner>
  <owner>hajimehoshi@chromium.org</owner>
  <summary>
    Counts the events related to the back-forward cache, like when the page is
    put into the back-forward cache.
  </summary>
</histogram>

<histogram name="PageLoad.BeforeSoftNavigation.CumulativeLayoutShift"
    units="ms" expires_after="2027-01-24">
  <owner>sullivan@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>haoliuk@chromium.org</owner>
  <summary>
    Measures the maximum cumulative layout shift (bit.ly/cls-explainer) that has
    occurred in a session window before any soft navigation happens. The gap
    between two consecutive shifts in a window is not bigger than 1000ms and the
    maximum window size is 5000ms. This metric's integral value is 100x the
    fractional cumulative layout shift score described in the explainer.
  </summary>
</histogram>

<histogram name="PageLoad.BeforeSoftNavigation.InteractionToNextPaint"
    units="ms" expires_after="2027-01-24">
  <owner>sullivan@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>haoliuk@chromium.org</owner>
  <summary>
    An approximation of a high percentile of user interaction latency of a page
    load before any soft navigation happens, in ms. For this metric, we measure
    the latency of user interactions as described here: https://web.dev/inp
  </summary>
</histogram>

<histogram name="PageLoad.BeforeSoftNavigation.LargestContentfulPaint2"
    units="ms" expires_after="2027-01-24">
  <owner>sullivan@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <owner>johannes@chromium.org</owner>
  <summary>
    Measures the largest contentful paint (https://web.dev/lcp) that has
    happened prior to any soft navigation.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.Ads.AdClick.EtldPlusOneHistoryQueryCount2"
    units="count" expires_after="2027-07-26">
  <owner>zhouzj@google.com</owner>
  <owner>kurtosis-team@google.com</owner>
  <summary>
    Records the number of times a eTLD+1 URL for an ad appears in the last
    thirty days of history when a page load is initiated from an user activation
    of an ad. The metric is recorded during an ad page load.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.Ads.AdClick.HistoryQueryCount2" units="count"
    expires_after="2027-07-26">
  <owner>zhouzj@google.com</owner>
  <owner>kurtosis-team@google.com</owner>
  <summary>
    Records the number of times a URL for an ad appears in the last thirty days
    of history when a page load is initiated from an user activation of an ad.
    When querying browser history, the ad's URL is matched without regard to the
    URL filename, query values, or fragment. The metric is recorded during an ad
    page load.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.Ads.AdPaintTiming.TopFrameNavigationToFirstAdFirstContentfulPaint"
    units="ms" expires_after="2027-07-26">
  <owner>jkarlin@chromium.org</owner>
  <owner>alexmt@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <summary>
    Records the time from the top frame navigation until the first ad-frame on
    the page reaches FirstContentfulPaint. Note that offscreen iframes don't
    reach FCP until they're scrolled into view, so it can be long.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.Ads.AdPaintTiming.TopFrameNavigationToFirstAdFirstContentfulPaintAfterNoAuction"
    units="ms" expires_after="2027-07-26">
  <owner>abigailkatcoff@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <summary>
    Records the time from the top frame navigation until the first ad-frame on
    the page reaches FirstContentfulPaint. Only recorded if no Fledge auction
    (on-device or server) was completed before the frame was painted (but an
    auction could have been aborted). Note that offscreen iframes don't reach
    FCP until they're scrolled into view, so it can be long.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.Ads.AdPaintTiming.TopFrameNavigationToFirstAdFirstContentfulPaintAfterServerAndDeviceAuctions"
    units="ms" expires_after="2027-07-26">
  <owner>abigailkatcoff@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <summary>
    Records the time from the top frame navigation until the first ad-frame on
    the page reaches FirstContentfulPaint. Only recorded if both a server and an
    on-device Fledge auction completed with or without a winner (and was not
    aborted). This could have been multiple auctions or a single hybrid auction.
    Note that offscreen iframes don't reach FCP until they're scrolled into
    view, so it can be long.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.Ads.AdPaintTiming.TopFrameNavigationToFirstAdFirstContentfulPaintAfter{Result}{AuctionType}Auction"
    units="ms" expires_after="2027-07-26">
  <owner>abigailkatcoff@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <summary>
    Records the time from the top frame navigation until the first ad-frame on
    the page reaches FirstContentfulPaint. Only recorded if a Fledge
    {AuctionType} auction completed (and was not aborted) and no
    non-{AuctionType} auction was completed before the frame was painted.
    {Result} Note that offscreen iframes don't reach FCP until they're scrolled
    into view, so it can be long.
  </summary>
  <token key="AuctionType">
    <variant name="Device" summary="on-device"/>
    <variant name="Server" summary="server"/>
  </token>
  <token key="Result">
    <variant name=""
        summary="Completed auctions may or may not have had winners."/>
    <variant name="Winning"
        summary="Only recorded if every completed (non-aborted) auction had a
                 winner."/>
  </token>
</histogram>

<histogram name="PageLoad.Clients.Ads.AllPages.NonAdNetworkBytes" units="KB"
    expires_after="2027-07-26">
  <owner>alexmt@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    Total number of network bytes that went towards loading non-ad resources for
    a single page over its entire lifetime. This includes resources that did not
    finish or were canceled. Only recorded for pages with non-zero total bytes,
    including those without an ad frame and pages with no ad resources. Recorded
    when the page is destroyed.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.Ads.AllPages.PercentNetworkBytesAds"
    units="%" expires_after="2027-07-26">
  <owner>alexmt@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    The percentage of network bytes loaded by the page that are attributed to ad
    resources (including ad resources in the main frame) across the entire page
    load. Only recorded for pages with non-zero network bytes, including those
    without an ad frame and pages with no ad resources. Recorded when the page
    is destroyed.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.Ads.AllPages.PercentTotalBytesAds" units="%"
    expires_after="2027-07-26">
  <owner>alexmt@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    The percentage of all bytes loaded by the page that are attributed to ad
    resources (including ad resources in the main frame) across the entire page
    load. Only recorded for pages with non-zero total bytes, including those
    without an ad frame and pages with no ad resources. Recorded when the page
    is destroyed.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.Ads.AverageViewportAdCountX100" units="count"
    expires_after="2027-07-26">
  <owner>yaoxia@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    The estimated average viewport ad count. This metric takes the average of
    the ad counts accumulated over the page load time, multiplied by 100 and
    rounded to the nearest integer. This allows for 2 decimal places of
    precision. Recorded when the page is destroyed.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.Ads.AverageViewportAdDensity" units="%"
    expires_after="2027-07-26">
  <owner>yaoxia@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    The estimated average viewport ad density. Each density sample value is
    calculated as the area of (iframe and img) ads within the viewport * 100 /
    viewport area, where each overlapping area is counted once. And this metric
    takes the average of the densities accumulated over the page load time
    rounded to the nearest integer. Recorded when the page is destroyed.

    Warning: This histogram has incomplete data. It expired in 08/2025 and was
    unexpired in 10/2025.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.Ads.HeavyAds.DisallowedByBlocklist"
    enum="BooleanBlocked" expires_after="2027-07-26">
  <owner>jkarlin@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    Records whether the heavy ad intervention was disallowed by the blocklist on
    a frame. Only recorded when the heavy ad blocklist is enabled and available
    (e.g. this is not recorded in incognito mode).
  </summary>
</histogram>

<histogram name="PageLoad.Clients.Ads.HeavyAds.NetworkBytesAtFrameUnload"
    units="bytes" expires_after="2027-07-26">
  <owner>alexmt@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    Records the number of network bytes used by a heavy ad unloaded due to
    network usage by the heavy ad intervention. It is recorded at the time of
    unload and the value may be larger than the heavy ads threshold due to the
    delay in unloading an ad.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.Ads.Resources.Bytes.Ads2" units="KB"
    expires_after="2027-07-26">
  <owner>jkarlin@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    Total number of network bytes that went towards loading ad resources for a
    single page over it's entire lifetime. This includes resources that did not
    finish or were canceled. Only recorded for pages with non-zero ad bytes.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.AMP.Experimental.PageTiming.InputToNavigation.Subframe"
    units="ms" expires_after="2027-07-03">
  <owner>iclelland@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    The time from the user input that triggers the top-level navigation for an
    AMP document to the time that the navigation for the AMP document is
    initiated in the AMP frame. This gives insight into how often AMP documents
    are navigated to via same document navigations without being prerendered.

    This histogram has incomplete data. It expired after M78 and was re-added in
    M90.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.AMP.InteractiveTiming.NumInteractions.Subframe"
    units="Count" expires_after="2027-07-03">
  <owner>iclelland@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    The number of interactions of a page load, in AMP subframe. Definition of an
    interaction:
    https://web.dev/better-responsiveness-metric/#group-events-into-interactions
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.AMP.InteractiveTiming.{NormalizedResponsivenessMetric}.{UserInteractionLatency}.Subframe{FullNavigation}"
    units="ms" expires_after="2027-07-03">
  <owner>iclelland@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    The {NormalizedResponsivenessMetric} of a page load, in AMP subframes, in
    ms. For this metric, we measure the latency of a user interaction by the
    {UserInteractionLatency} within the user interaction. Full navigation means
    we only include non-same-document navigations, otherwise we only include
    same-document navigations.

    Recorded at the end of the AMP document lifetime, such as when the document
    is being navigated away from.
  </summary>
  <token key="FullNavigation">
    <variant name=""/>
    <variant name=".FullNavigation"/>
  </token>
  <token key="NormalizedResponsivenessMetric">
    <variant name="UserInteractionLatency.HighPercentile2"/>
    <variant name="WorstUserInteractionLatency"/>
  </token>
  <token key="UserInteractionLatency">
    <variant name="MaxEventDuration"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.AMP.LayoutInstability.MaxCumulativeShiftScore.Subframe.SessionWindow.Gap1000ms.Max5000ms2"
    units="scorex10000" expires_after="never">
<!-- expires-never: used in server pipeline to derive additional metrics -->

  <owner>iclelland@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures the maximum cumulative layout shift (bit.ly/cls-explainer) that has
    occurred in the AMP subframe. The gap between two consecutive shifts in a
    window is not bigger than 1000ms and the maximum window size is 5000ms. This
    metric's integral value is 10000x the fractional cumulative layout shift
    score described in the explainer. If {Bfcache} is triggered, we record the
    metric when the user navigates away or closes the page after the page was
    restored from back-forward cache. Otherwise, we record it at the end of the
    page lifetime, such as when the page is being navigated away from or when a
    tab is being closed.

    Recorded for non same-document AMP navigations in the main frame, at the end
    of the AMP document lifetime, such as when the document is being navigated
    away from.

    Replaces
    PageLoad.Clients.AMP.LayoutInstability.MaxCumulativeShiftScore.Subframe.SessionWindow.Gap1000ms.Max5000ms
    and increases granularity in order to get more coverage for ~40% of the
    values in the 0-0.1 range.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.AMP.LayoutInstability.MaxCumulativeShiftScore.Subframe.{Navigation}{Window}.Gap{Gap}.Max{MaxWindowSize}"
    units="scorex10" expires_after="2027-07-03">
  <owner>iclelland@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures the maximum cumulative layout shift (bit.ly/cls-explainer) that has
    occurred in a {Window}, in the AMP subframe. The gap between two consecutive
    shifts in a window is not bigger than {Gap} and the maximum window size is
    {MaxWindowSize}. This metric's integral value is 100x the fractional
    cumulative layout shift score described in the explainer. If the
    {Navigation} is FullNavigation, we record the metric for non same-document
    AMP navigations in the main frame, at the end of the AMP document lifetime,
    such as when the document is being navigated away from. Otherwise, only
    same-document navigations are included.
  </summary>
  <token key="Navigation">
    <variant name=""/>
    <variant name="FullNavigation."/>
  </token>
  <token key="Window" variants="Window">
    <variant name=""/>
  </token>
  <token key="Gap" variants="Gap">
    <variant name=""/>
  </token>
  <token key="MaxWindowSize" variants="MaxWindowSize">
    <variant name=""/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.AMP.PaintTiming.InputToFirstContentfulPaint.Subframe"
    units="ms" expires_after="2027-07-03">
  <owner>iclelland@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    The time from user input to first &quot;contentful&quot; paint in an AMP
    subframe document. Will be zero or near-zero in cases where the AMP subframe
    document was prerendered. Only same-document navigations are included.

    This histogram has incomplete data. It expired after M78 and was re-added in
    M90.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.AMP.PaintTiming.InputToFirstContentfulPaint.Subframe.FullNavigation"
    units="ms" expires_after="2027-07-03">
  <owner>iclelland@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    The time from user input to first &quot;contentful&quot; paint in an AMP
    subframe document. Only non-same-document navigations are included.

    This histogram has incomplete data. It expired after M78 and was re-added in
    M90.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.AMP.PaintTiming.InputToLargestContentfulPaint.Subframe"
    units="ms" expires_after="2027-07-03">
  <owner>iclelland@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    The time from user input to largest &quot;contentful&quot; paint in an AMP
    subframe document. Only same-document navigations are included.

    Excludes any content painted after user input. The value is recorded at the
    end of each page load unless there is an abort or user input before text or
    image paint. See http://bit.ly/fcp_plus_plus for details.

    Will be zero or near-zero in cases where the AMP subframe document was
    prerendered.

    This histogram has incomplete data. It expired after M78 and was re-added in
    M90.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.AMP.PaintTiming.InputToLargestContentfulPaint.Subframe.FullNavigation"
    units="ms" expires_after="2027-07-03">
  <owner>iclelland@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    The time from user input to largest &quot;contentful&quot; paint in an AMP
    subframe document. Only non-same-document navigations are included.

    Excludes any content painted after user input. The value is recorded at the
    end of each page load unless there is an abort or user input before text or
    image paint. See http://bit.ly/fcp_plus_plus for details.

    This histogram has incomplete data. It expired after M78 and was re-added in
    M90, also after 2022-12-11 until M111, and also after 2023-06-18 until M121.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.CaptchaFrameActivation"
    enum="CaptchaFrameAgentContext" expires_after="2027-01-31">
  <owner>ryankalla@google.com</owner>
  <owner>potassium-anti-fraud-team@google.com</owner>
  <summary>
    Records when a frame from a known CAPTCHA provider is activated by the
    client. This could mean the user clicked or tapped on the frame.

    CAPTCHA frames are determined by matching the frame's src url against a list
    of known CAPTCHA frame url patterns. The list of known CAPTCHA url patterns
    is served via the component updater.

    This histogram is split by whether an AI agent was active on the tab at the
    time of the frame activation. AI agent activity is determined by
    ActorKeyedService::IsActiveOnTab(), which is used by the Glic Agent.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.CaptchaFrameActivation.{CaptchaProvider}"
    enum="CaptchaFrameAgentContext" expires_after="2026-12-01">
  <owner>ryankalla@google.com</owner>
  <owner>potassium-anti-fraud-team@google.com</owner>
  <summary>
    Records when a frame from {CaptchaProvider} is activated by the client. This
    could mean the user clicked or tapped on the frame.

    CAPTCHA frames are determined by matching the frame's src url against a list
    of known CAPTCHA frame url patterns. The list of known CAPTCHA url patterns
    is served via the component updater.

    This histogram is split by whether an AI agent was active on the tab at the
    time of the frame activation. AI agent activity is determined by
    ActorKeyedService::IsActiveOnTab(), which is used by the Glic Agent.
  </summary>
  <token key="CaptchaProvider" variants="CaptchaProvider"/>
</histogram>

<histogram name="PageLoad.Clients.CaptchaFrameLoad"
    enum="CaptchaFrameAgentContext" expires_after="2027-01-31">
  <owner>ryankalla@google.com</owner>
  <owner>potassium-anti-fraud-team@google.com</owner>
  <summary>
    Records when a sub-frame is loaded from a known CAPTCHA provider.

    CAPTCHA frames are determined by matching the frame's src url against a list
    of known CAPTCHA frame url patterns. The list of known CAPTCHA url patterns
    is served via the component updater.

    This histogram is split by whether an AI agent was active on the tab at the
    time of the frame load. AI agent activity is determined by
    ActorKeyedService::IsActiveOnTab(), which is used by the Glic Agent.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.CaptchaFrameLoad.{CaptchaProvider}"
    enum="CaptchaFrameAgentContext" expires_after="2027-02-07">
  <owner>ryankalla@google.com</owner>
  <owner>potassium-anti-fraud-team@google.com</owner>
  <summary>
    Records when a sub-frame is loaded from {CaptchaProvider}.

    CAPTCHA frames are determined by matching the frame's src url against a list
    of known CAPTCHA frame url patterns. The list of known CAPTCHA url patterns
    is served via the component updater.

    This histogram is split by whether an AI agent was active on the tab at the
    time of the frame load. AI agent activity is determined by
    ActorKeyedService::IsActiveOnTab(), which is used by the Glic Agent.
  </summary>
  <token key="CaptchaProvider" variants="CaptchaProvider"/>
</histogram>

<histogram
    name="PageLoad.Clients.FencedFrames.InteractiveTiming.FirstInputDelay4"
    units="ms" expires_after="2026-10-08">
  <owner>lbrady@google.com</owner>
  <owner>shivanisha@chromium.org</owner>
  <owner>dom@chromium.org</owner>
  <summary>
    Measures First Input Delay, the duration between the hardware timestamp and
    the start of event processing on the main thread for the first meaningful
    input per navigation. Recorded on first FencedFrames' page interaction. See
    https://goo.gl/tr1oTZ for a detailed explanation. Excludes scrolls.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.FencedFrames.LayoutInstability.CumulativeShiftScore"
    units="scorex10" expires_after="2026-10-08">
  <owner>shivanisha@chromium.org</owner>
  <owner>mparch-dev@chromium.org</owner>
  <summary>
    Measures the cumulative layout shift score (bit.ly/lsm-explainer) that has
    occurred on the FencedFrames page (including all subframes). Higher values
    correspond to greater instability, which is bad. Recorded at the end of the
    page lifetime, such as when the page is being navigated away from or when a
    tab is being closed. On Android it's done when the browser is backgrounded.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.FencedFrames.LayoutInstability.CumulativeShiftScore.MainFrame"
    units="scorex10" expires_after="2026-10-08">
  <owner>lbrady@google.com</owner>
  <owner>shivanisha@chromium.org</owner>
  <owner>dom@chromium.org</owner>
  <summary>
    Measures the cumulative layout shift score (bit.ly/lsm-explainer) that has
    occurred in the FencedFrames page's main frame. Recorded at the end of the
    page lifetime, such as when the page is being navigated away from or when a
    tab is being closed. On Android, it's done when the browser is backgrounded.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.FencedFrames.PaintTiming.NavigationToFirstContentfulPaint"
    units="ms" expires_after="2026-10-08">
  <owner>shivanisha@chromium.org</owner>
  <owner>mparch-dev@chromium.org</owner>
  <summary>
    The time from navigation start to first &quot;contentful&quot; paint. This
    metric does not include all FencedFrames' page loads. Recorded iff the page
    loads and the event happens in the foreground.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.FencedFrames.PaintTiming.NavigationToFirstImagePaint"
    units="ms" expires_after="2026-10-08">
  <owner>lbrady@google.com</owner>
  <owner>shivanisha@chromium.org</owner>
  <owner>dom@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    first image is painted, for FencedFrames' main frame documents. For images
    that render progressively, this is recorded as soon as any image pixels have
    been drawn iff the page loads and the event happens in the foreground.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.FencedFrames.PaintTiming.NavigationToFirstPaint"
    units="ms" expires_after="2026-10-08">
  <owner>shivanisha@chromium.org</owner>
  <owner>mparch-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    first paint is performed, for FencedFrames' main frame documents. Recorded
    iff the page loads and the event happens in the foreground.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.FencedFrames.PaintTiming.NavigationToLargestContentfulPaint2"
    units="ms" expires_after="2026-10-08">
  <owner>shivanisha@chromium.org</owner>
  <owner>mparch-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    largest content (text or image) is first painted, across all frames under
    the FencedFrames root. Excludes any content painted after user input.
    Includes content that has been removed from the page. See web.dev/lcp for
    more details.

    The value is recorded at the end of each page load or the latest time when
    we can reliably record: when the page is navigated away, the browser is
    closed, or on Android when the browser is backgrounded, iff the page loads
    and the event happens in the foreground.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleHomepage.DomainLookupTiming.NavigationToDomainLookupEnd.{NavigationCountType}{BrowserInitializationStatus}"
    units="ms" expires_after="2027-07-01">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time for {NavigationCountType} ({BrowserInitializationStatus})
    from navigation start to the time the domain lookup ended, for Google
    Homepage loads. Only recorded for Homepage navigations that start in the
    foreground and stay in the foreground until domain lookup end. This metric
    is recorded when the browser finished conducting DNS lookup.

    In cases where navigation start occurs after connect start (e.g. pre-fetch,
    pre-connect), this metric will contain zero.

    This histogram has been expired between 2026-05-17 and 2026-07-01, thus does
    not contain data for this period.
  </summary>
  <token key="NavigationCountType" variants="NavigationCountType"/>
  <token key="BrowserInitializationStatus"
      variants="BrowserInitializationStatus"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleHomepage.DomainLookupTiming.NavigationToDomainLookupStart.{NavigationCountType}{BrowserInitializationStatus}"
    units="ms" expires_after="2026-09-30">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time for {NavigationCountType} ({BrowserInitializationStatus})
    from navigation start to the time the domain lookup started, for Google
    Homepage loads. Only recorded for Homepage navigations that start in the
    foreground and stay in the foreground until domain lookup start. This metric
    is recorded when the browser started to conduct DNS lookup.

    In cases where navigation start occurs after connect start (e.g. pre-fetch,
    pre-connect), this metric will contain zero.
  </summary>
  <token key="NavigationCountType" variants="NavigationCountType"/>
  <token key="BrowserInitializationStatus"
      variants="BrowserInitializationStatus"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleHomepage.NavigationTiming.NavigationToConnectStart.{NavigationCountType}{BrowserInitializationStatus}"
    units="ms" expires_after="2027-09-20">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time for {NavigationCountType} ({BrowserInitializationStatus})
    from navigation start to connect start, for Google Homepage loads. Only
    recorded for Homepage navigations that start in the foreground and stay in
    the foreground until connect start. This metric is recorded when the browser
    started to establish connection.

    In cases where navigation start occurs after connect start (e.g. pre-fetch,
    pre-connect), this metric will contain zero.
  </summary>
  <token key="NavigationCountType" variants="NavigationCountType"/>
  <token key="BrowserInitializationStatus"
      variants="BrowserInitializationStatus"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleHomepage.ParseTiming.NavigationToParseStart.{NavigationCountType}{BrowserInitializationStatus}"
    units="ms" expires_after="2026-11-29">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time for {NavigationCountType} ({BrowserInitializationStatus})
    from navigation start to parse start, for Google Homepage loads. Only
    recorded for Homepage navigations that start in the foreground and stay in
    the foreground until parse start. This metric is recorded when the parser
    started.

    In cases where navigation start occurs after connect start (e.g. pre-fetch,
    pre-connect), this metric will contain zero.
  </summary>
  <token key="NavigationCountType" variants="NavigationCountType"/>
  <token key="BrowserInitializationStatus"
      variants="BrowserInitializationStatus"/>
</histogram>

<histogram name="PageLoad.Clients.GoogleSearch.AcceptCHFrameReceived{Profile}"
    enum="Boolean" expires_after="2027-02-07">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Whether an Accept-CH frame was received during the connection for the main
    resource of a main frame navigation, for Google Search page loads. Recorded
    when the navigation is completed or the app is backgrounded on Android.
  </summary>
  <token key="Profile">
    <variant name="" summary="normal and incognito modes"/>
    <variant name=".Incognito" summary="incognito mode"/>
  </token>
</histogram>

<histogram name="PageLoad.Clients.GoogleSearch.ActualNavigationStartToAFTEnd"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the &quot;actual&quot; navigation starts which
    can begin before beforeunload handlers run to b) AFT end event is sent,
    excluding the time spent waiting for user interaction in beforeunload
    dialogs. This includes the time spent running beforeunload JavaScript
    handlers. This is recorded for Google Search page loads.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ActualNavigationStartToAFTEndWithPreNavigationLatency"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the &quot;actual&quot; navigation starts which
    can begin before beforeunload handlers run to b) AFT end event is sent,
    including pre-navigation latency (e.g. SGL) but excluding the time spent
    waiting for user interaction in beforeunload dialogs. This includes the time
    spent running beforeunload JavaScript handlers. This is recorded for Google
    Search page loads.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ActualNavigationStartToDOMContentLoadedEventFired"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the &quot;actual&quot; navigation starts which
    can begin before beforeunload handlers run to b) the time the
    DOMContentLoaded event is fired, excluding the time spent waiting for user
    interaction in beforeunload dialogs. This includes the time spent running
    beforeunload JavaScript handlers. This is recorded for Google Search page
    loads.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ActualNavigationStartToFirstContentfulPaint"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the &quot;actual&quot; navigation starts which
    can begin before beforeunload handlers run to b) the first contentful paint,
    excluding the time spent waiting for user interaction in beforeunload
    dialogs. This includes the time spent running beforeunload JavaScript
    handlers. This is recorded for Google Search page loads.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ActualNavigationStartToLargestContentfulPaint"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the &quot;actual&quot; navigation starts which
    can begin before beforeunload handlers run to b) the largest contentful
    paint, excluding the time spent waiting for user interaction in beforeunload
    dialogs. This includes the time spent running beforeunload JavaScript
    handlers. This is recorded for Google Search page loads.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ActualNavigationStartToNavigationCommitSent"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the &quot;actual&quot; navigation starts which
    can begin before beforeunload handlers run to b) the time the navigation
    commit request is sent to the renderer, excluding the time spent waiting for
    user interaction in beforeunload dialogs. This includes the time spent
    running beforeunload JavaScript handlers. This is recorded for Google Search
    page loads.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ActualNavigationStartToNavigationStart"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the &quot;actual&quot; navigation starts which
    can start before the beforeunload handler runs to b) when the (existing
    regular) navigation starts, excluding the time spent waiting for user
    interaction in beforeunload dialogs. This includes the time spent running
    beforeunload JavaScript handlers. This is recorded for Google Search page
    loads.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ActualNavigationStartToParseStart"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the &quot;actual&quot; navigation starts which
    can begin before beforeunload handlers run to b) the time the parser
    started, excluding the time spent waiting for user interaction in
    beforeunload dialogs. This includes the time spent running beforeunload
    JavaScript handlers. This is recorded for Google Search page loads.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.AdvertisedAltSvcState{QuicAvailability}{IncognitoSuffix}"
    enum="AdvertisedAltSvcState" expires_after="2027-02-07">
  <owner>bashi@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Measures the state of advertised Alt-Svc for a Google search navigation.
    This is only recorded for Search navigations and is recorded once after
    navigation commit.
  </summary>
  <token key="QuicAvailability">
    <variant name=".QuicDisabled"/>
    <variant name=".QuicEnabled"/>
  </token>
  <token key="IncognitoSuffix" variants="IncognitoSuffix"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.AIO.AsyncStartTo{PerformanceMark}{CompletionStatus}"
    units="ms" expires_after="2027-04-01">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from AIO async start to {PerformanceMark}, for Google
    Search page loads. Records the time between the AIO async start and the
    timing of {CompletionStatus}. This is only recorded in the outermost main
    frame, right before the page is being navigated away.
  </summary>
  <token key="PerformanceMark">
    <variant name="InitialContentTime"/>
    <variant name="ViewportEndTime"/>
  </token>
  <token key="CompletionStatus">
    <variant name="Complete"
        summary="when the performance mark was set, since the mark was set
                 successfully."/>
    <variant name="Incomplete"
        summary="when the page is being navigated away, since the performance
                 mark was not set."/>
  </token>
</histogram>

<histogram name="PageLoad.Clients.GoogleSearch.AIO.Has{PerformanceMark}"
    enum="Boolean" expires_after="2027-04-01">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records whether the {PerformanceMark} was set for Google Search page loads.
    This is only recorded in the outermost main frame, right before the page is
    being navigated away.
  </summary>
  <token key="PerformanceMark">
    <variant name="InitialContentTime"/>
    <variant name="ViewportEndTime"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ConnectionReuseStatus{ConnectionProtocolType}{Profile}"
    enum="ConnectionReuseStatus" expires_after="2027-01-03">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The possible status of connection reuse for Google search page loads for
    {Profile} with {ConnectionProtocolType}. This is only recorded for Search
    navigations and is recorded once after navigation commit.
  </summary>
  <token key="ConnectionProtocolType" variants="ConnectionProtocolType"/>
  <token key="Profile">
    <variant name="" summary="normal and incognito modes"/>
    <variant name=".Incognito" summary="incognito mode"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ConnectTiming.FinalRequestConnectDelay{ConnectionProtocolType}"
    units="ms" expires_after="2026-11-29">
  <owner>horo@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The delay caused by connection establishment for the final HTTP request
    which is sent for the main resource of a main frame navigation, for Google
    Search page loads with {ConnectionProtocolType}. Only recorded for Search
    navigations that happen entirely in the foreground. The metric is emitted
    when the navigation is completed or the app is backgrounded on Android.
  </summary>
  <token key="ConnectionProtocolType" variants="ConnectionProtocolType"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ConnectTiming.FinalRequestDomainLookupDelay{ConnectionProtocolType}"
    units="ms" expires_after="2026-11-29">
  <owner>horo@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The delay caused by domain lookup for the final HTTP request which is sent
    for the main resource of a main frame navigation, for Google Search page
    loads with {ConnectionProtocolType}. Only recorded for Search navigations
    that happen entirely in the foreground. The metric is emitted when the
    navigation is completed or the app is backgrounded on Android.
  </summary>
  <token key="ConnectionProtocolType" variants="ConnectionProtocolType"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ConnectTiming.FinalRequestSslDelay{ConnectionProtocolType}"
    units="ms" expires_after="2026-11-29">
  <owner>horo@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The delay caused by SSL handshake for the final HTTP request which is sent
    for the main resource of a main frame navigation, for Google Search page
    loads with {ConnectionProtocolType}. Only recorded for Search navigations
    that happen entirely in the foreground. The metric is emitted when the
    navigation is completed or the app is backgrounded on Android.
  </summary>
  <token key="ConnectionProtocolType" variants="ConnectionProtocolType"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ConnectTiming.FirstRequestConnectDelay{ConnectionProtocolType}"
    units="ms" expires_after="2027-01-10">
  <owner>horo@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The delay caused by connection establishment for the first HTTP request
    which is sent for the main resource of a main frame navigation, for Google
    Search page loads with {ConnectionProtocolType}. Only recorded for Search
    navigations that happen entirely in the foreground. The metric is emitted
    when the navigation is completed or the app is backgrounded on Android.
  </summary>
  <token key="ConnectionProtocolType" variants="ConnectionProtocolType"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ConnectTiming.FirstRequestDohDetails.ConnectionInfo"
    enum="HttpConnectionInfoCoarse" expires_after="2026-09-06">
  <owner>bashi@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The coarse connection info used for the DNS-over-HTTPS resolution of the
    first HTTP request sent for the main resource of a main frame navigation,
    for Google Search page loads. Only recorded for Search navigations that
    happen entirely in the foreground.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ConnectTiming.FirstRequestDohDetails.SessionSource"
    enum="NetworkSessionSource" expires_after="2026-09-06">
  <owner>bashi@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The session source (e.g. new, existing) used for the DNS-over-HTTPS
    resolution of the first HTTP request sent for the main resource of a main
    frame navigation, for Google Search page loads. Only recorded for Search
    navigations that happen entirely in the foreground.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ConnectTiming.FirstRequestDomainLookupDelay.InsecureDns"
    units="ms" expires_after="2027-01-10">
  <owner>bashi@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The delay caused by domain lookup for the first HTTP request which is sent
    for the main resource of a main frame navigation, for Google Search page
    loads, when Insecure DNS was used. Only recorded for Search navigations that
    happen entirely in the foreground. The metric is emitted when the navigation
    is completed or the app is backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ConnectTiming.FirstRequestDomainLookupDelay.SecureDns"
    units="ms" expires_after="2027-01-10">
  <owner>bashi@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The delay caused by domain lookup for the first HTTP request which is sent
    for the main resource of a main frame navigation, for Google Search page
    loads, when Secure DNS (DoH) was used. Only recorded for Search navigations
    that happen entirely in the foreground. The metric is emitted when the
    navigation is completed or the app is backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ConnectTiming.FirstRequestDomainLookupDelay{ConnectionProtocolType}"
    units="ms" expires_after="2027-01-10">
  <owner>horo@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The delay caused by domain lookup for the first HTTP request which is sent
    for the main resource of a main frame navigation, for Google Search page
    loads with {ConnectionProtocolType}. Only recorded for Search navigations
    that happen entirely in the foreground. The metric is emitted when the
    navigation is completed or the app is backgrounded on Android.
  </summary>
  <token key="ConnectionProtocolType" variants="ConnectionProtocolType"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ConnectTiming.FirstRequestResolutionDetails.TaskCompletionDelay.{ResolutionSource}"
    units="ms" expires_after="2026-09-06">
  <owner>bashi@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The delay caused by non-caching asynchronous task completion for domain
    lookup in the first HTTP request sent for the main resource of a main frame
    navigation, for Google Search page loads, when {ResolutionSource} was used.
    Only recorded for Search navigations that happen entirely in the foreground.
  </summary>
  <token key="ResolutionSource">
    <variant name="InsecureDns" summary="Insecure DNS"/>
    <variant name="SecureDns" summary="Secure DNS (DoH)"/>
    <variant name="System" summary="System DNS"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ConnectTiming.FirstRequestSslDelay{ConnectionProtocolType}"
    units="ms" expires_after="2026-11-29">
  <owner>horo@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The delay caused by SSL handshake for the first HTTP request which is sent
    for the main resource of a main frame navigation, for Google Search page
    loads with {ConnectionProtocolType}. Only recorded for Search navigations
    that happen entirely in the foreground. The metric is emitted when the
    navigation is completed or the app is backgrounded on Android.
  </summary>
  <token key="ConnectionProtocolType" variants="ConnectionProtocolType"/>
</histogram>

<histogram name="PageLoad.Clients.GoogleSearch.CSI.{Event}" units="ms"
    expires_after="2027-01-31">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time {Event}, for Google Search page loads. The recorded values
    are calculated based on the metrics recorded by the JavaScript, which is
    done after the navigation commit phase in Search. The metric is emitted when
    the navigation is completed or the app is backgrounded on Android. This is
    only recorded in the outermost main frame.

    Note that this event is randomly sampled based on the JavaScript in the
    page, recorded at the frequency of 1%.
  </summary>
  <token key="Event">
    <variant name="HCT"
        summary="to process header chunk (2024-10-01: fixed to include the
                 time from response start time to header chunk start time)"/>
    <variant name="HST" summary="to reach the head chunk start"/>
    <variant name="SCT"
        summary="from the server response time to receive the body chunk"/>
    <variant name="SGL"
        summary="from the previous navigation to the reload that triggers
                 this navigation"/>
    <variant name="SRT"
        summary="from the navigation start to receive the HTTP headers"/>
    <variant name="TimeBetweenHCTAndSCT"
        summary="between HeadChunkContentTime and SearchContentTime"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.DomainLookupTiming.NavigationToDomainLookupEnd2.{NavigationCountType}{BrowserInitializationStatus}{TabInitializationStatus}"
    units="ms" expires_after="2027-01-03">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    domain lookup ended of {NavigationCountType} ({BrowserInitializationStatus},
    {TabInitializationStatus}), for Google Search page loads. Only recorded for
    Search navigations that start in the foreground and stay in the foreground
    until domain lookup end.

    In cases where navigation start occurs after connect start (e.g. pre-fetch,
    pre-connect), this metric will contain zero.
  </summary>
  <token key="NavigationCountType" variants="NavigationCountType"/>
  <token key="BrowserInitializationStatus"
      variants="BrowserInitializationStatus"/>
  <token key="TabInitializationStatus" variants="TabInitializationStatus"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.DomainLookupTiming.NavigationToDomainLookupStart2.{NavigationCountType}{BrowserInitializationStatus}{TabInitializationStatus}"
    units="ms" expires_after="2027-01-03">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    domain lookup started of {NavigationCountType}
    ({BrowserInitializationStatus}, {TabInitializationStatus}), for Google
    Search page loads. Only recorded for Search navigations that start in the
    foreground and stay in the foreground until domain lookup start.

    In cases where navigation start occurs after connect start (e.g. pre-fetch,
    pre-connect), this metric will contain zero.
  </summary>
  <token key="NavigationCountType" variants="NavigationCountType"/>
  <token key="BrowserInitializationStatus"
      variants="BrowserInitializationStatus"/>
  <token key="TabInitializationStatus" variants="TabInitializationStatus"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.FontLoading.FallbackCount.{GWSFontFallbackScript}.{GWSFontLoadingMilestone}"
    units="count" expires_after="2027-06-01">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The number of times a system fallback font was used for
    {GWSFontFallbackScript} character rendering for a Google Search page load,
    {GWSFontLoadingMilestone}. Recorded in batch at the milestone.
  </summary>
  <token key="GWSFontFallbackScript" variants="GWSFontFallbackScript"/>
  <token key="GWSFontLoadingMilestone" variants="GWSFontLoadingMilestone"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.FontLoading.FallbackCount.{GWSFontLoadingMilestone}"
    units="count" expires_after="2027-06-01">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The number of times a system fallback font was used for character rendering
    for a Google Search page load, {GWSFontLoadingMilestone}.
  </summary>
  <token key="GWSFontLoadingMilestone" variants="GWSFontLoadingMilestone"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.FontLoading.FallbackDuration2.{GWSFontLoadingMilestone}"
    units="ms" expires_after="2027-06-01">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The cumulative duration spent in system fallback font loading for character
    rendering for a Google Search page load, {GWSFontLoadingMilestone}.
  </summary>
  <token key="GWSFontLoadingMilestone" variants="GWSFontLoadingMilestone"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.FontLoading.InitialFallbackDuration2.Complete"
    units="ms" expires_after="2027-06-01">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The duration of the very first system fallback font load for character
    rendering during the lifetime of a Google Search page load. Recorded when
    the page load is completed.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.FontLoading.ShapeCacheHitRate.FCP"
    units="%" expires_after="2027-06-01">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The hit rate (hits / (hits + misses)) of the NGShapeCache up to First
    Contentful Paint (FCP) for a Google Search page load. Recorded when FCP is
    reached.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.GWSSession.PageLoadCount{SessionType}"
    units="count" expires_after="2027-02-07">
  <owner>toyoshim@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records the number of page loads that the user has done in the current
    session. This is recorded once per session when the user closes the last tab
    {SessionType}.
  </summary>
  <token key="SessionType">
    <variant name="" summary="for any session"/>
    <variant name=".OffTheRecord" summary="for incognito sessions"/>
    <variant name=".Regular" summary="for regular sessions"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.HadPriorPrewarmCommitStatus2{InitiatorOfNavigation}{PrerenderStatus}"
    enum="PriorPrewarmCommitStatus" expires_after="2027-02-07">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The status of whether the DSEPrewarm feature was ever triggered on the same
    renderer process host. This is recorded once, when a Google search page is
    committed for {InitiatorOfNavigation} and {PrerenderStatus}.
  </summary>
  <token key="InitiatorOfNavigation" variants="InitiatorOfNavigation"/>
  <token key="PrerenderStatus" variants="PrerenderStatus"/>
</histogram>

<histogram name="PageLoad.Clients.GoogleSearch.HttpNetworkSessionQuicEnabled"
    enum="Boolean" expires_after="2027-02-07">
  <owner>bashi@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Measures whether QUIC is enabled at the network stack for Google search
    navigation. This is only recorded for Search navigations and is recorded
    once after navigation commit.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.HttpStatusCode2{NavigationType}{IncognitoSuffix}"
    enum="HttpResponseCode" expires_after="2027-01-03">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The HTTP status code of Google search page loads for {NavigationType}
    {IncognitoSuffix}. This is only recorded for Search navigations and is
    recorded OnRedirect and OnCommit.
  </summary>
  <token key="NavigationType">
    <variant name=".NonPrewarm" summary="non prewarm page"/>
    <variant name=".Prewarm" summary="prewarm page"/>
  </token>
  <token key="IncognitoSuffix">
    <variant name="" summary="for any traffic"/>
    <variant name=".Incognito" summary="for incognito traffic"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.InteractionToActualNavigationStart"
    units="ms" expires_after="2027-04-01">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the OS-level timestamp of the user input event
    that started a navigation to b) when the &quot;actual&quot; navigation
    starts. Recorded at the point when a navigation finishes committing, i.e.
    finishes processing the DidCommitNavigation message. This is recorded only
    for main frame cross-document Google Search Page navigations where the user
    interaction timestamp is available.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.GoogleSearch.InteractionToAFTEnd" units="ms"
    expires_after="2026-09-24">
  <owner>gjc@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the OS-level timestamp of the user input event
    that started a navigation to b) when the Above the Fold (AFT) content is
    fully rendered, excluding the time spent waiting for user interaction in
    beforeunload dialogs. This includes the time spent running beforeunload
    JavaScript handlers. This is recorded for Google Search page loads.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.GoogleSearch.InteractionToNavigationStart"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the OS-level timestamp of the user input event
    that started a navigation to b) when the navigation starts, excluding the
    time spent waiting for user interaction in beforeunload dialogs. This
    includes the time spent running beforeunload JavaScript handlers. This is
    recorded for Google Search page loads.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.GoogleSearch.IsFirstNavigationForGWS"
    enum="Boolean" expires_after="2027-02-07">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records whether the first navigation is the navigation to GWS or not. This
    is recorded for the first navigation after the browser init, at commit. True
    indicates that the first navigation after browser init is to GWS, while as
    False indicates that the navigation was for elsewhere.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.Leakage2.{NavigationMilestone}ToAbandon{NavigationAbandonReason}{BackgroundSuffix}{HiddenSuffix}{ResponseFromCache}"
    units="ms" expires_after="2027-06-30">
  <owner>sisidovski@chromium.org</owner>
  <owner>rakina@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The time relative to the milestone {NavigationMilestone} that a navigation
    gets abandoned due to {NavigationAbandonReason}, on a main frame navigation
    for SRP navigations. Abandonment from backgrounding or hiding are
    non-terminal, while other abandonment for other reasons are terminal. This
    means this metric might be recorded multiple times if the navigation is only
    abandoned non-terminally before, but only once for each abandonment reason.
    Metrics logged after non-terminal abandonment will be marked with the
    suffixes {BackgroundSuffix} and/or {HiddenSuffix}. The milestone recorded
    will be the latest milestone (if there are multiple milestones reached
    before the abandonment). The metric is emitted when the navigation gets
    abandoned. The &quot;ResponseFromCache&quot; variant was disabled during
    M141.
  </summary>
  <token key="BackgroundSuffix" variants="BackgroundSuffix"/>
  <token key="HiddenSuffix" variants="HiddenSuffix"/>
  <token key="NavigationAbandonReason" variants="NavigationAbandonReason"/>
  <token key="NavigationMilestone" variants="NavigationMilestone"/>
  <token key="ResponseFromCache" variants="ResponseFromCache"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.Navigation.BeforeUnloadExecutionMode{SameOrCrossOrigin}"
    enum="BeforeUnloadExecutionMode" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records the execution mode of the beforeunload handlers for a Google Search
    navigation. This is a GWS-specific version of
    PageLoad.Navigation.BeforeUnloadExecutionMode{SameOrCrossOrigin}. Recorded
    at the time of navigation commit for cross-document {SameOrCrossOrigin}
    outermost main frame navigations.
  </summary>
  <token key="SameOrCrossOrigin">
    <variant name="" summary=""/>
    <variant name=".CrossOrigin" summary="cross-origin"/>
    <variant name=".SameOrigin" summary="same-origin"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationCommitSentToParseStart"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the time the navigation commit request is sent
    to the renderer to b) the time the renderer starts parsing the HTML. This is
    recorded for Google Search page loads.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationSourceType{ConnectionReuseStatus}"
    enum="NavigationSourceTypeEnum" expires_after="2027-01-03">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The type of source which the navigation started from, for Google Search page
    loads. This is only recorded for Search navigations and is recorded once
    after navigation commit. This metric is recorded {ConnectionReuseStatus}.
  </summary>
  <token key="ConnectionReuseStatus">
    <variant name="" summary="for any case"/>
    <variant name=".ConnectionReuse"
        summary="for possible connection reuse cases"/>
    <variant name=".DNSReuse" summary="for possible dns reuse cases"/>
    <variant name=".NonConnectionReuse"
        summary="for non connection reuse cases"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationStartToNavigationCommitSent"
    units="ms" expires_after="2027-04-01">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time relative to navigation start that navigation commit message for a
    main frame navigation is sent to a renderer process. This is recorded for
    Google Search page loads.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.ConnectedCallbackDelay2"
    units="ms" expires_after="2026-10-11">
  <owner>hayato@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time taken to call http network transaction connected callback,
    for Google Search page loads. Recorded every time the connected callback is
    called and completed, for Google Search page loads. Emitted when the
    navigation is completed or the app is backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.CreateStreamDelay2"
    units="ms" expires_after="2027-02-14">
  <owner>hayato@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time taken for HTTP stream creation to finish, for Google Search page
    loads. Recorded every time HttpStream::CreateStream() is called, for Google
    Search page loads. Emitted when the navigation is completed or the app is
    backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.FastFetch.OpportunityTime.FetchStart"
    units="ms" expires_after="2027-02-07">
  <owner>bashi@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Measures elapsed time from eligibility check in BeginNavigationImpl to the
    first fetch start time for eligible navigations, for Google Search page
    loads.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.FastFetch.OpportunityTime.LoaderStart"
    units="ms" expires_after="2027-02-07">
  <owner>bashi@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Measures elapsed time from eligibility check in BeginNavigationImpl to
    loader start time for eligible navigations, for Google Search page loads.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.FinalRequestStartToFinalResponseStart"
    units="ms" expires_after="2027-01-21">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from the final HTTP request start to the final HTTP response start
    for the main resource of a main frame navigation, for Google Search page
    loads. This measures the network latency of the final request, including any
    potential delay from offloading client hints checks to the network layer.
    Only recorded for Search navigations that happen entirely in the foreground.
    The metric is emitted when the navigation is completed or the app is
    backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.FirstFetchStartToFirstRequestStart"
    units="ms" expires_after="2027-01-03">
  <owner>hayato@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from navigation timing's first fetch start, the browser is
    ready to fetch the first HTTP request, to the first request start, the time
    the first HTTP request was sent for the main resource of a main frame
    navigation, for Google Search page loads. Only recorded for Search
    navigations that happen entirely in the foreground. The metric is emitted
    when the navigation is completed or the app is backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.FirstRequestStartToFinalResponseStart"
    units="ms" expires_after="2027-01-21">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from the first HTTP request start to the final HTTP response start
    for the main resource of a main frame navigation, for Google Search page
    loads. This measures the total network latency across all redirects,
    including any potential delay from offloading client hints checks to the
    network layer. Only recorded for Search navigations that happen entirely in
    the foreground. The metric is emitted when the navigation is completed or
    the app is backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.FirstRequestStartToFirstResponseStart"
    units="ms" expires_after="2027-01-21">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from the first HTTP request start to the first HTTP response start
    for the main resource of a main frame navigation, for Google Search page
    loads. This measures the network latency of the first request, including any
    potential delay from offloading client hints checks to the network layer.
    Only recorded for Search navigations that happen entirely in the foreground.
    The metric is emitted when the navigation is completed or the app is
    backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.InitializeStreamDelay"
    units="ms" expires_after="2027-09-13">
  <owner>hayato@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time taken for HTTP stream initialization to finish if the
    initialization was blocked, otherwise zero, for Google Search page loads.
    Recorded every time HttpStream::InitializeStream() is called, for Google
    Search page loads. Emitted when the navigation is completed or the app is
    backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.MaxStreamLimitPendingDelay{ConnectionProtocolType}"
    units="ms" expires_after="2026-09-06">
  <owner>bashi@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The delay caused by waiting for stream limit for the main resource of a main
    frame navigation, for Google Search page loads with
    {ConnectionProtocolType}. Only recorded for Search navigations. The metric
    is emitted when the navigation is completed or the app is backgrounded on
    Android.
  </summary>
  <token key="ConnectionProtocolType" variants="ConnectionProtocolType"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.NavigationStartToFinalLoaderCallback"
    units="ms" expires_after="2027-01-03">
  <owner>nidhijaju@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time relative to navigation start that a callback for the navigation
    loader is last invoked for the main resource of a main frame navigation, for
    Google Search page loads. Only recorded for Search navigations that happen
    entirely in the foreground. The metric is emitted when the navigation is
    completed or the app is backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.NavigationStartToFinalRequestStart"
    units="ms" expires_after="2027-01-03">
  <owner>nidhijaju@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time relative to navigation start that the final HTTP request is sent
    for the main resource of a main frame navigation, for Google Search page
    loads. Only recorded for Search navigations that happen entirely in the
    foreground. The metric is emitted when the navigation is completed or the
    app is backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.NavigationStartToFinalResponseStart"
    units="ms" expires_after="2027-01-03">
  <owner>nidhijaju@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time relative to navigation start that the headers of the final HTTP
    response is received for the main resource of a main frame navigation, for
    Google Search page loads. Only recorded for Search navigations that happen
    entirely in the foreground. The metric is emitted when the navigation is
    completed or the app is backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.NavigationStartToFirstFetchStart"
    units="ms" expires_after="2027-01-03">
  <owner>nidhijaju@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time relative to navigation start that the browser is ready to fetch the
    first HTTP request, for Google Search page loads. Only recorded for Search
    navigations that happen entirely in the foreground. The metric is emitted
    when the navigation is completed or the app is backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.NavigationStartToFirstLoaderCallback"
    units="ms" expires_after="2026-11-01">
  <owner>kouhei@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time relative to navigation start that a callback for the navigation
    loader is first invoked for the main resource of a main frame navigation,
    for Google Search page loads. Only recorded for Search navigations that
    happen entirely in the foreground. The metric is emitted when the navigation
    is completed or the app is backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.NavigationStartToFirstRequestStart"
    units="ms" expires_after="2027-01-03">
  <owner>kouhei@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time relative to navigation start that the first HTTP request is sent
    for the main resource of a main frame navigation, for Google Search page
    loads. Only recorded for Search navigations that happen entirely in the
    foreground. The metric is emitted when the navigation is completed or the
    app is backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.NavigationStartToFirstResponseStart"
    units="ms" expires_after="2027-01-03">
  <owner>kouhei@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time relative to navigation start that the headers of the first HTTP
    response is received for the main resource of a main frame navigation, for
    Google Search page loads. Only recorded for Search navigations that happen
    entirely in the foreground. The metric is emitted when the navigation is
    completed or the app is backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.NavigationStartToOnComplete"
    units="ms" expires_after="2027-01-17">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time relative to navigation start that the page load metrics observer is
    destructed (i.e. the page is closed), for Google Search page loads. The
    metric is emitted when the navigation is completed.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.NavigationTiming.NavigationToConnectStart2.{NavigationCountType}{BrowserInitializationStatus}{TabInitializationStatus}"
    units="ms" expires_after="2027-01-03">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    navigation start of {NavigationCountType} ({BrowserInitializationStatus},
    {TabInitializationStatus}), for Google Search page loads. Only recorded for
    Search navigations that start in the foreground and stay in the foreground
    until connect start.

    In cases where navigation start occurs after connect start (e.g. pre-fetch,
    pre-connect), this metric will contain zero.
  </summary>
  <token key="NavigationCountType" variants="NavigationCountType"/>
  <token key="BrowserInitializationStatus"
      variants="BrowserInitializationStatus"/>
  <token key="TabInitializationStatus" variants="TabInitializationStatus"/>
</histogram>

<histogram name="PageLoad.Clients.GoogleSearch.OnConnectedCalled{Profile}"
    enum="Boolean" expires_after="2027-02-07">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Whether the connected callback was called during the connection for the main
    resource of a main frame navigation, for Google Search page loads. Recorded
    when the navigation is completed or the app is backgrounded on Android.
  </summary>
  <token key="Profile">
    <variant name="" summary="normal and incognito modes"/>
    <variant name=".Incognito" summary="incognito mode"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.PaintTiming.AFTEndWithPreNavigationLatency.TraverseNavigation{TraverseRestoreType}"
    units="ms" expires_after="2027-01-10">
  <owner>lingqi@chromium.org</owner>
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Similar to
    PageLoad.Clients.GoogleSearch.PaintTiming.AFTEndWithPreNavigationLatency,
    but only track traverse navigations, with the breakdown of
    {TraverseRestoreType}. Note that as of M148, this metric will no longer
    contain non-activated, prerender navigations (which was the case before the
    fix).
  </summary>
  <token key="TraverseRestoreType" variants="TraverseRestoreType"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.PaintTiming.NavigationToFirstContentfulPaint.IgnoredDuplicateNavigation"
    units="ms" expires_after="2027-01-10">
  <owner>annasato@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Recorded when the first contentful paint (FCP) occurs on a Google Search
    page load.

    Measures the time in milliseconds from navigation timing's navigation start
    to the time when the page first paints content, for Google Search page loads
    where subsequent duplicate navigation requests were ignored. Only recorded
    for Search navigations that start in the foreground and stay in the
    foreground until the first contentful paint.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.PaintTiming.NavigationToFirstContentfulPaint{SyntheticResponseSuffix}"
    units="ms" expires_after="2027-01-03">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time in milliseconds from navigation timing's navigation start
    to the time when the page first paints content, for Google Search page loads
    {SyntheticResponseSuffix}. A contentful paint includes a paint of text,
    image, SVG, or canvas. Only recorded for Search navigations that start in
    the foreground and stay in the foreground until the first contentful paint.
  </summary>
  <token key="SyntheticResponseSuffix" variants="SyntheticResponseSuffix"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.PaintTiming.NavigationToLargestContentfulPaint"
    units="ms" expires_after="2027-01-03">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time in milliseconds from navigation timing's navigation start
    to the time when the page first paints the experimental largest content
    (text or image) within viewport, for Google Search page loads. See
    http://bit.ly/largest_contentful_paint_explainer for more details. Differs
    from SubFrame.PaintTiming.NavigationToLargestContentfulPaint in that removed
    content is still considered a valid candidate. Only recorded for Search
    navigations that happen entirely in the foreground. The metric is emitted
    when the navigation is completed or the app is backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.PaintTiming.NavigationToLargestContentfulPaint.ContextMenu"
    units="ms" expires_after="2027-01-10">
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Similar to
    PageLoad.Clients.GoogleSearch.PaintTiming.NavigationToLargestContentfulPaint,
    but only recorded when the navigation was started from the context menu.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.PaintTiming.NavigationToLargestContentfulPaint.TraverseNavigation{TraverseRestoreType}"
    units="ms" expires_after="2027-01-10">
  <owner>lingqi@chromium.org</owner>
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Similar to
    PageLoad.Clients.GoogleSearch.PaintTiming.NavigationToLargestContentfulPaint,
    but only track traverse navigations, with the breakdown of
    {TraverseRestoreType}.
  </summary>
  <token key="TraverseRestoreType" variants="TraverseRestoreType"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.PaintTiming.{MileStone}{PageLoadType}{IncognitoSuffix}{SyntheticResponseSuffix}"
    units="ms" expires_after="2027-01-03">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from navigation start to the time {MileStone}, for Google
    Search page loads on {PageLoadType} with
    {IncognitoSuffix}{SyntheticResponseSuffix}. The actual value is recorded via
    `startTime` in performance.mark()'s markOptions. If `startTime` is not set,
    this metric is not recorded. This is recorded by emitting
    `performance.mark()` in JavaScript, which is done after the navigation
    commit phase in Search. This is only recorded in the outermost main frame.
  </summary>
  <token key="MileStone">
    <variant name="AFTEnd2"
        summary="AFT end event is sent (Note that this metrics contains
                 non-activated prerender navigations as well)"/>
    <variant name="AFTEndWithPreNavigationLatency"
        summary="AFT end event is sent with pre-navigation latency (Note that
                 as of M148, this metric will no longer contain
                 non-activated, prerender navigations which was the case
                 before the fix.)"/>
    <variant name="AFTStart2" summary="AFT start event is sent"/>
    <variant name="AIOAsyncStart" summary="AIO async start"/>
    <variant name="AIOInitialContentTime" summary="AIO initial content time"/>
    <variant name="AIOViewportEndTime" summary="AIO viewport end time"/>
    <variant name="BodyChunkEnd2"
        summary="end of the header chunk start event is sent"/>
    <variant name="BodyChunkStart2" summary="beginning of the body chunk"/>
    <variant name="HeadChunkEnd"
        summary="end of the header chunk start event is sent"/>
    <variant name="HeadChunkStart" summary="beginning of the header chunk"/>
  </token>
  <token key="PageLoadType">
    <variant name="" summary="All page loads"/>
    <variant name=".NonPrerender" summary="Non-prerendered page load"/>
    <variant name=".Prerender" summary="Prerendered page load"/>
  </token>
  <token key="IncognitoSuffix" variants="IncognitoSuffix"/>
  <token key="SyntheticResponseSuffix" variants="SyntheticResponseSuffix"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ParseStartToDOMContentLoadedEventFired"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from the time the renderer starts parsing the HTML to
    the time the DOMContentLoaded event is fired. This is recorded for Google
    Search page loads.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ParseStartToFirstContentfulPaint"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from when the HTML parser started, to when the page first
    paints content. This is recorded for Google Search page loads.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ParseStartToLargestContentfulPaint"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from the time the renderer starts parsing the HTML to
    the time the largest contentful paint occurs. This is recorded for Google
    Search page loads.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.ParseTiming.NavigationToParseStart{SyntheticResponseSuffix}"
    units="ms" expires_after="2027-01-31">
  <owner>kouhei@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    parser started, for Google Search page loads{SyntheticResponseSuffix}. Only
    recorded for Search navigations that start in the foreground and stay in the
    foreground until parse start.

    This metric has incomplete data. It was expired between 2023-10-01 and M121.
  </summary>
  <token key="SyntheticResponseSuffix" variants="SyntheticResponseSuffix"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.Prerender.ActivationToFirstContentfulPaint{IncognitoSuffix}"
    units="ms" expires_after="2027-01-03">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from when a prerendered page is activated to the first
    contentful paint, for GWS page loads for {IncognitoSuffix}. Only recorded
    for GWS navigations that were prerendered and activated.
  </summary>
  <token key="IncognitoSuffix" variants="IncognitoSuffix"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.Prerender.ActivationToLargestContentfulPaint{IncognitoSuffix}"
    units="ms" expires_after="2027-01-03">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from when a prerendered page is activated to the largest
    contentful paint, for GWS page loads for {IncognitoSuffix}. Only recorded
    for GWS navigations that were prerendered and activated.
  </summary>
  <token key="IncognitoSuffix" variants="IncognitoSuffix"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.Prerender.HostReused{IncognitoSuffix}"
    enum="Boolean" expires_after="2027-02-07">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Whether the prerendering navigation is reusing a prerender host or not for
    {IncognitoSuffix}. This is recorded once, when a prerendered page is
    activated for Google search page loads.
  </summary>
  <token key="IncognitoSuffix" variants="IncognitoSuffix"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.Prerender.NavigationToActivation{IncognitoSuffix}"
    units="ms" expires_after="2027-01-03">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Measures the time from when a initial prerender navigation starts in the
    background to when the prerendered page is activated, for GWS page loads for
    {IncognitoSuffix}. Only recorded for GWS navigations that were prerendered
    and activated.
  </summary>
  <token key="IncognitoSuffix" variants="IncognitoSuffix"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.Prerender.PrewarmNavigationStatus2{InitiatorOfNavigation}{PrerenderStatus}"
    enum="PrerenderPrewarmNavigationStatus" expires_after="2027-02-07">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The status of whether the DSEPrewarm feature was triggered before the
    prerender host reuse happened. This is recorded once, when a prerendered
    page is activated for Google search page loads for {InitiatorOfNavigation}
    and {PrerenderStatus}.
  </summary>
  <token key="InitiatorOfNavigation" variants="InitiatorOfNavigation"/>
  <token key="PrerenderStatus" variants="PrerenderStatus"/>
</histogram>

<histogram name="PageLoad.Clients.GoogleSearch.Prewarm.WasResponseCached"
    enum="Boolean" expires_after="2027-02-07">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records whether the Google Search prewarm page load was served from the HTTP
    cache or network. Recorded once upon navigation commit of the prerendered
    prewarm page.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.SessionSource{ConnectionProtocolType}"
    enum="NetworkSessionSource" expires_after="2027-02-07">
  <owner>bashi@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Measures whether a navigation for Google search uses a new session or an
    existing session with {ConnectionProtocolType}. This is only recorded for
    Search navigations and is recorded once after navigation commit. Note that
    this is only recorded for HTTP/2 and HTTP/3.
  </summary>
  <token key="ConnectionProtocolType" variants="ConnectionProtocolType"/>
</histogram>

<histogram
    name="PageLoad.Clients.GoogleSearch.SiteInstanceProcessAssignment2{InitiatorOfNavigation}{PrerenderStatus}"
    enum="SiteInstanceProcessAssignment" expires_after="2027-02-07">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records how the main frame's SiteInstance was assigned a renderer process.
    This is recorded once, when a Google search page is committed for
    {InitiatorOfNavigation} and {PrerenderStatus}.
  </summary>
  <token key="InitiatorOfNavigation" variants="InitiatorOfNavigation"/>
  <token key="PrerenderStatus" variants="PrerenderStatus"/>
</histogram>

<histogram name="PageLoad.Clients.GoogleSearch.WarmUpType" enum="GwsWarmUpType"
    expires_after="2027-02-07">
  <owner>toyoshim@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records the current cookie warm-up type of the browser session for the
    Google search page. This metric is emitted when the navigation is completed
    or the app is backgrounded on Android.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.LCPP.ImageLoadingPriority.ConfidenceOfActual{PositiveOrNegative}.2"
    units="%" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records the confidence value of ElementLocator that {PositiveOrNegative}
    actually.

    The metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data and only when LCP is recorded.
  </summary>
  <token key="PositiveOrNegative">
    <variant name="Negative" summary="didn't become LCP"/>
    <variant name="Positive" summary="became LCP"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.LCPP.ImageLoadingPriority.ConfidenceOfActual{PositiveOrNegative}.PerTotalFrequency.2"
    units="Count" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records a value (10 * normalized_total_frequency_0_to_9 +
    normalized_confidence_0_to_9) of ElementLocator per total-frequency that
    {PositiveOrNegative} actually.

    The metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data and only when LCP is recorded.
  </summary>
  <token key="PositiveOrNegative">
    <variant name="Negative" summary="didn't become LCP"/>
    <variant name="Positive" summary="became LCP"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.LCPP.ImageLoadingPriority.FrequencyOfActual{PositiveOrNegative}.2"
    units="Count" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records the frequency value of ElementLocator that {PositiveOrNegative}
    actually.

    The metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data and only when LCP is recorded.
  </summary>
  <token key="PositiveOrNegative">
    <variant name="Negative" summary="didn't become LCP"/>
    <variant name="Positive" summary="became LCP"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.LCPP.ImageLoadingPriority.TotalFrequencyOfActual{PositiveOrNegative}.PerConfidence.3"
    units="Count" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records a value (10 * normalized_confidence_0_to_9 +
    normalized_total_frequency_0_to_9) of ElementLocator per confidence that
    {PositiveOrNegative} actually.

    The metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data and only when LCP is recorded.
  </summary>
  <token key="PositiveOrNegative">
    <variant name="Negative" summary="didn't become LCP"/>
    <variant name="Positive" summary="became LCP"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.LCPP.ImageLoadingPriority.TotalFrequencyOfActual{PositiveOrNegative}.WithConfidence{Range}.2"
    units="Count" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records the total frequency of ElementLocator that {PositiveOrNegative}
    actually and it also has a confidence value between {Range}.

    The metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data and only when LCP is recorded.
  </summary>
  <token key="PositiveOrNegative">
    <variant name="Negative" summary="didn't become LCP"/>
    <variant name="Positive" summary="became LCP"/>
  </token>
  <token key="Range">
    <variant name="0To10" summary="0% to 10%"/>
    <variant name="10To20" summary="10% to 20%"/>
    <variant name="20To30" summary="20% to 30%"/>
    <variant name="30To40" summary="30% to 40%"/>
    <variant name="40To50" summary="40% to 50%"/>
    <variant name="50To60" summary="50% to 60%"/>
    <variant name="60To70" summary="60% to 70%"/>
    <variant name="70To80" summary="70% to 80%"/>
    <variant name="80To90" summary="80% to 90%"/>
    <variant name="90To100" summary="90% to 100%"/>
  </token>
</histogram>

<histogram name="PageLoad.Clients.LCPP.PaintTiming.ActualLCPIndex2"
    units="Index(1 origin)" expires_after="2025-12-22">
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records the actual index in learned element locators ordered by frequency up
    to &quot;max_lcpp_histogram_buckets&quot; in LCP timing prediction. If
    actual LCP is out of locators, that is recorded as
    &quot;max_lcpp_histogram_buckets&quot; + 1 value. The metric is emitted only
    for navigations that LCP Critical Path Predictor provided non-empty hint
    data and only once when the user navigates away from the page.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.LCPP.PaintTiming.ActualLCPIsImage"
    enum="BooleanEnabled" expires_after="2025-12-28">
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records if the actual LCP element is image or not.

    This metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data and only once when the user navigates away from
    the page.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.LCPP.PaintTiming.NavigationToFirstContentfulPaint"
    units="ms" expires_after="2026-06-28">
  <owner>kouhei@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Measures the time from navigation start to the first contentful paint. The
    metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.LCPP.PaintTiming.NavigationToLargestContentfulPaint"
    units="ms" expires_after="2026-08-30">
  <owner>kouhei@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Measures the time from navigation start to the largest contentful paint. The
    metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.LCPP.PaintTiming.PredictHitIndex2"
    units="Index(1 origin)" expires_after="2025-12-22">
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records the hit index in learned element locators ordered by frequency up to
    &quot;max_lcpp_histogram_buckets&quot; when LCP timing predictor succeeded.
    The metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data and only once when the user navigates away from
    the page.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.LCPP.PaintTiming.PredictLCPResult2"
    enum="LcppPredictResult" expires_after="2026-06-28">
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records the result of LCP timing predictor. The metric is emitted only for
    navigations that LCP Critical Path Predictor provided non-empty hint data
    and only once when the user navigates away from the page.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.LCPP.PaintTiming.PredictSuccess.NavigationToLargestContentfulPaint"
    units="ms" expires_after="2026-06-28">
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Measures the time from navigation start to the largest contentful paint. The
    metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data and only when LCPP prediction succeeded.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.LCPP.Subresource.ConfidenceOfActual{PositiveOrNegative}.PerTotalFrequency{Site}.3"
    units="Count" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records a value (10 * normalized_total_frequency_0_to_9 +
    normalized_confidence_0_to_9) of {Site} subresource url per total-frequency
    that {PositiveOrNegative} actually.

    The metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data and only when LCP is recorded.
  </summary>
  <token key="PositiveOrNegative">
    <variant name="Negative" summary="was not loaded"/>
    <variant name="Positive" summary="was actually loaded"/>
  </token>
  <token key="Site">
    <variant name="" summary="same-site and cross-site"/>
    <variant name=".CrossSite" summary="cross-site"/>
    <variant name=".SameSite" summary="same-site"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.LCPP.Subresource.ConfidenceOfActual{PositiveOrNegative}{Site}.2"
    units="%" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records the confidence value of {Site} subresource url that
    {PositiveOrNegative}.

    The metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data and only when LCP is recorded.
  </summary>
  <token key="PositiveOrNegative">
    <variant name="Negative" summary="was not loaded"/>
    <variant name="Positive" summary="was actually loaded"/>
  </token>
  <token key="Site">
    <variant name="" summary="same-site and cross-site"/>
    <variant name=".CrossSite" summary="cross-site"/>
    <variant name=".SameSite" summary="same-site"/>
  </token>
</histogram>

<histogram name="PageLoad.Clients.LCPP.Subresource.Count.Precision" units="%"
    expires_after="2026-05-24">
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records the subresource prediction precision of LCP critical path predictor
    (LCPP). For example, If LCPP predicts subresource type A, B, C and D for a
    page and the page actually loads A and E before LCP, then precision = [A] /
    [A, B, C, D] = 25%, and recall = [A] / [A, E] = 50%.

    The metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data and only once when the user navigates away from
    the page.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.LCPP.Subresource.Count.Recall" units="%"
    expires_after="2026-05-24">
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records the subresource prediction recall of LCP critical path predictor
    (LCPP). For example, If LCPP predicts subresource type A, B, C and D for a
    page and the page actually loads A and E before LCP, then precision = [A] /
    [A, B, C, D] = 25%, and recall = [A] / [A, E] = 50%.

    The metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data and only once when the user navigates away from
    the page.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.LCPP.Subresource.Count.SameSiteRatio"
    units="%" expires_after="2026-01-18">
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records the subresource's same site ratio of LCP critical path predictor
    (LCPP).

    The metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data and only once when the user navigates away from
    the page.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.LCPP.Subresource.Count.Type"
    enum="RequestDestination" expires_after="2026-01-18">
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records the subresource type distribution of LCP critical path predictor
    (LCPP).

    The metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data and only once when the user navigates away from
    the page.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.LCPP.Subresource.FrequencyOfActual{PositiveOrNegative}{Site}.2"
    units="Count" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records the frequency value of {Site} subresource url that
    {PositiveOrNegative}.

    The metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data and only when LCP is recorded.
  </summary>
  <token key="PositiveOrNegative">
    <variant name="Negative" summary="was not loaded"/>
    <variant name="Positive" summary="was actually loaded"/>
  </token>
  <token key="Site">
    <variant name="" summary="same-site and cross-site"/>
    <variant name=".CrossSite" summary="cross-site"/>
    <variant name=".SameSite" summary="same-site"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.LCPP.Subresource.TotalFrequencyOfActual{PositiveOrNegative}.PerConfidence{Site}.3"
    units="Count" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records a value (10 * normalized_confidence_0_to_9 +
    normalized_total_frequency_0_to_9) of {Site} subresource url per confidence
    that {PositiveOrNegative} actually.

    The metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data and only when LCP is recorded.
  </summary>
  <token key="PositiveOrNegative">
    <variant name="Negative" summary="was not loaded"/>
    <variant name="Positive" summary="was actually loaded"/>
  </token>
  <token key="Site">
    <variant name="" summary="same-site and cross-site"/>
    <variant name=".CrossSite" summary="cross-site"/>
    <variant name=".SameSite" summary="same-site"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.LCPP.Subresource.TotalFrequencyOfActual{PositiveOrNegative}.WithConfidence{Range}{Site}.2"
    units="Count" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records the total frequency of {Site} subresource url that
    {PositiveOrNegative} actually and it also has a confidence value between
    {Range}.

    The metric is emitted only for navigations that LCP Critical Path Predictor
    provided non-empty hint data and only when LCP is recorded.
  </summary>
  <token key="PositiveOrNegative">
    <variant name="Negative" summary="was not loaded"/>
    <variant name="Positive" summary="was actually loaded"/>
  </token>
  <token key="Range">
    <variant name="0To10" summary="0% to 10%"/>
    <variant name="10To20" summary="10% to 20%"/>
    <variant name="20To30" summary="20% to 30%"/>
    <variant name="30To40" summary="30% to 40%"/>
    <variant name="40To50" summary="40% to 50%"/>
    <variant name="50To60" summary="50% to 60%"/>
    <variant name="60To70" summary="60% to 70%"/>
    <variant name="70To80" summary="70% to 80%"/>
    <variant name="80To90" summary="80% to 90%"/>
    <variant name="90To100" summary="90% to 100%"/>
  </token>
  <token key="Site">
    <variant name="" summary="same-site and cross-site"/>
    <variant name=".CrossSite" summary="cross-site"/>
    <variant name=".SameSite" summary="same-site"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.MultiTabLoading{OtherLoadingCount}.{Timing}{Background}"
    units="ms" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>{Timing} {OtherLoadingCount} {Background}</summary>
  <token key="OtherLoadingCount">
    <variant name=""
        summary="Only recorded when there were 1 or more other loading tabs
                 (the same as '1OrMore')."/>
    <variant name=".1OrMore"
        summary="Only recorded when there were 1 or more other loading tabs."/>
    <variant name=".2OrMore"
        summary="Only recorded when there were 2 or more other loading tabs."/>
    <variant name=".5OrMore"
        summary="Only recorded when there were 5 or more other loading tabs."/>
    <variant name=".With_0_OtherLoading"
        summary="Only recorded when there was no other loading tab."/>
    <variant name=".With_1_OtherLoading"
        summary="Only recorded when there was 1 other loading tab."/>
    <variant name=".With_2_OtherLoading"
        summary="Only recorded when there were 2 other loading tabs."/>
    <variant name=".With_3_OtherLoading"
        summary="Only recorded when there were 3 other loading tabs."/>
    <variant name=".With_4_OtherLoading"
        summary="Only recorded when there were 4 other loading tabs."/>
    <variant name=".With_5_OtherLoading"
        summary="Only recorded when there were 5 other loading tabs."/>
    <variant name=".WithTabCount_0"
        summary="Only recorded when there was 0 tab."/>
    <variant name=".WithTabCount_1"
        summary="Only recorded when there was 1 tab."/>
    <variant name=".WithTabCount_2_or_3"
        summary="Only recorded when there were 2 or 3 tabs."/>
    <variant name=".WithTabCount_4_to_7"
        summary="Only recorded when there were 3 to 7 tabs."/>
    <variant name=".WithTabCount_8_to_15"
        summary="Only recorded when there were 8 to 15 tabs."/>
    <variant name=".WithTabCount_16_to_31"
        summary="Only recorded when there were 16 to 31 tabs."/>
    <variant name=".WithTabCount_32_to_63"
        summary="Only recorded when there were 32 to 63 tabs."/>
    <variant name=".WithTabCount_64_or_more"
        summary="Only recorded when there were 64 or more tabs."/>
  </token>
  <token key="Timing">
    <variant name="DocumentTiming.NavigationToDOMContentLoadedEventFired"
        summary="Measures the time from navigation timing's navigation start
                 to the time the DOMContentLoaded event is fired, for main
                 frame documents."/>
    <variant name="DocumentTiming.NavigationToLoadEventFired"
        summary="Measures the time from navigation timing's navigation start
                 to the time the load event is fired, for main frame
                 documents."/>
    <variant name="Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"
        summary="Measures the time from navigation start to first meaningful
                 paint."/>
    <variant name="PaintTiming.ForegroundToFirstContentfulPaint"
        summary="Measures the time from a background tab being switched to
                 the foreground to the time the first contentful paint is
                 performed, for main frame documents."/>
    <variant name="PaintTiming.NavigationToFirstContentfulPaint"
        summary="Measures the time from navigation start to first contentful
                 paint."/>
    <variant name="PaintTiming.NavigationToLargestContentfulPaint"
        summary="Measures the time from navigation timing's navigation start
                 to the time the largest content (text or image) is first
                 painted, across all frames. Excludes any content painted
                 after user input. Includes content that has been removed
                 from the page."/>
  </token>
  <token key="Background">
    <variant name="" summary=""/>
    <variant name=".Background"
        summary="The page was backgrounded at least once from navigation
                 start to this event."/>
  </token>
</histogram>

<histogram name="PageLoad.Clients.NavigationToFirstContentfulPaint.Timeout3"
    enum="Boolean" expires_after="2027-01-03">
  <owner>awillia@chromium.org</owner>
  <owner>sergiog@microsoft.com</owner>
  <owner>src/components/page_load_metrics/OWNERS</owner>
  <summary>
    Determines if a navigation has not been completed due to not resulting in
    painted content before the maximum timeout allowed. The histogram will be
    emitted with true value once timeout expires and first contentful paint is
    not reached, and it will be emitted with false value if first contentful
    paint is reached before expiring the timeout. The navigation is considered
    as suspended, and thus the timeout timer will be stopped, when page is going
    to back and forward cache or is hidden. Timeout timer will be restarted when
    page is restored from back and forward cache or is back to shown from hidden
    and first contentful paint was not yet reached. In case that navigation is
    started in background, the timeout timer will not be started until the page
    is moved to foreground.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.PerformanceManager.NavigationToLoadedIdle{LoadedIdleVisibility}"
    units="ms" expires_after="2027-04-05">
  <owner>joenotcharles@google.com</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Recorded for each navigation when its PerformanceManager loading state
    reaches PageNode::LoadingState::kLoadedIdle, with the time since navigation
    start. If a navigation is abandoned without ever reaching kLoadedIdle,
    PageLoad.Clients.PerformanceManager.NavigationWithoutLoadedIdle is recorded
    instead. This version of the metric is recorded for navigations in
    {LoadedIdleVisibility}.
  </summary>
  <token key="LoadedIdleVisibility" variants="LoadedIdleVisibility"/>
</histogram>

<histogram
    name="PageLoad.Clients.PerformanceManager.NavigationWithoutLoadedIdle{LoadedIdleVisibility}"
    units="ms" expires_after="2027-04-05">
  <owner>joenotcharles@google.com</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Recorded for each navigation that's abandoned without its PerformanceManager
    loading state reaching PageNode::LoadingState::kLoadedIdle, such as by the
    page closing or a new navigation starting. The value is the time from
    navigation start to the time it's abandoned. If the navigation reaches
    kLoadedIdle, PageLoad.Clients.PerformanceManager.NavigateToLoadedIdle is
    recorded instead. This version of the metric is recorded for navigations in
    {LoadedIdleVisibility}.
  </summary>
  <token key="LoadedIdleVisibility" variants="LoadedIdleVisibility"/>
</histogram>

<histogram name="PageLoad.Clients.Prerender.HostReused{PreloadingTriggerType}"
    enum="Boolean" expires_after="2027-01-31">
  <owner>suzukikeita@chromium.org</owner>
  <owner>src/content/browser/preloading/prerender/OWNERS</owner>
  <summary>
    Whether the prerendering navigation is reusing a prerender host or not. This
    is recorded once, when a prerendered page is activated.
  </summary>
  <token key="PreloadingTriggerType" variants="PagePreloadingTriggerType"/>
</histogram>

<histogram
    name="PageLoad.Clients.Prerender.InteractiveTiming.FirstInputDelay4{PreloadingTriggerType}"
    units="ms" expires_after="2027-01-31">
  <owner>nhiroki@chromium.org</owner>
  <owner>src/content/browser/preloading/prerender/OWNERS</owner>
  <summary>
    PageLoad.InteractiveTiming.FirstInputDelay4, but for page loads that were
    prerendered and were later activated. Note that prerendered page loads are
    excluded from PageLoad.InteractiveTiming.FirstInputDelay4.
  </summary>
  <token key="PreloadingTriggerType" variants="PagePreloadingTriggerType"/>
</histogram>

<histogram
    name="PageLoad.Clients.Prerender.LayoutInstability.CumulativeShiftScore.MainFrame{PreloadingTriggerType}"
    units="ms" expires_after="2027-02-07">
  <owner>nhiroki@chromium.org</owner>
  <owner>src/content/browser/preloading/prerender/OWNERS</owner>
  <summary>
    PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame, but for page
    loads that were prerendered and were later activated. Note that prerendered
    page loads are excluded from
    PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame.
  </summary>
  <token key="PreloadingTriggerType" variants="PagePreloadingTriggerType"/>
</histogram>

<histogram
    name="PageLoad.Clients.Prerender.LayoutInstability.CumulativeShiftScore{PreloadingTriggerType}"
    units="scorex10" expires_after="2027-01-31">
  <owner>nhiroki@chromium.org</owner>
  <owner>src/content/browser/preloading/prerender/OWNERS</owner>
  <summary>
    PageLoad.LayoutInstability.CumulativeShiftScore, but for page loads that
    were prerendered and were later activated. Note that prerendered page loads
    are excluded from PageLoad.LayoutInstability.CumulativeShiftScore.
  </summary>
  <token key="PreloadingTriggerType" variants="PagePreloadingTriggerType"/>
</histogram>

<histogram
    name="PageLoad.Clients.Prerender.NavigationToActivation{PreloadingTriggerType}"
    units="ms" expires_after="2027-02-07">
  <owner>nhiroki@chromium.org</owner>
  <owner>src/content/browser/preloading/prerender/OWNERS</owner>
  <summary>
    Measures the time from the start of initial prerendering navigation to the
    start of activation navigation. This corresponds to the activationStart
    attribute of PerformanceNavigationTiming. Recorded when a prerendered page
    is activated.
  </summary>
  <token key="PreloadingTriggerType" variants="PagePreloadingTriggerType"/>
</histogram>

<histogram
    name="PageLoad.Clients.Prerender.PaintTiming.ActivationToFirstContentfulPaint{PreloadingTriggerType}"
    units="ms" expires_after="2027-01-31">
  <owner>nhiroki@chromium.org</owner>
  <owner>src/content/browser/preloading/prerender/OWNERS</owner>
  <summary>
    PageLoad.PaintTiming.NavigationToFirstContentfulPaint, but for page loads
    that were prerendered and were later activated. This measures the time
    relative to the activation navigation start. Note that prerendered page
    loads are excluded from
    PageLoad.PaintTiming.NavigationToFirstContentfulPaint.
  </summary>
  <token key="PreloadingTriggerType" variants="PagePreloadingTriggerType"/>
</histogram>

<histogram
    name="PageLoad.Clients.Prerender.PaintTiming.ActivationToFirstPaint{PreloadingTriggerType}"
    units="ms" expires_after="2027-01-31">
  <owner>nhiroki@chromium.org</owner>
  <owner>src/content/browser/preloading/prerender/OWNERS</owner>
  <summary>
    PageLoad.PaintTiming.NavigationToFirstPaint, but for page loads that were
    prerendered and were later activated. This measures the time relative to the
    activation navigation start. Note that prerendered page loads are excluded
    from PageLoad.PaintTiming.NavigationToFirstPaint.
  </summary>
  <token key="PreloadingTriggerType" variants="PagePreloadingTriggerType"/>
</histogram>

<histogram
    name="PageLoad.Clients.Prerender.PaintTiming.ActivationToLargestContentfulPaint2{PreloadingTriggerType}"
    units="ms" expires_after="2027-01-31">
  <owner>nhiroki@chromium.org</owner>
  <owner>src/content/browser/preloading/prerender/OWNERS</owner>
  <summary>
    PageLoad.PaintTiming.NavigationToLargestContentfulPaint2, but for page loads
    that were prerendered and were later activated. This measures the time
    relative to the activation navigation start. Note that prerendered page
    loads are excluded from
    PageLoad.PaintTiming.NavigationToLargestContentfulPaint2.
  </summary>
  <token key="PreloadingTriggerType" variants="PagePreloadingTriggerType"/>
</histogram>

<histogram
    name="PageLoad.Clients.PrivacySandboxAds.InteractiveTiming.FirstInputDelay4.{PrivacySandboxAdsApi}"
    units="ms" expires_after="2026-06-28">
  <owner>linnan@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    PageLoad.InteractiveTiming.FirstInputDelay4, but recorded iff
    {PrivacySandboxAdsApi} was used in the page.
  </summary>
  <token key="PrivacySandboxAdsApi" variants="PrivacySandboxAdsApi"/>
</histogram>

<histogram
    name="PageLoad.Clients.PrivacySandboxAds.LayoutInstability.MaxCumulativeShiftScore.SessionWindow.Gap1000ms.Max5000ms2.{PrivacySandboxAdsApi}"
    units="ms" expires_after="2025-12-02">
  <owner>linnan@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    PageLoad.LayoutInstability.MaxCumulativeShiftScore.SessionWindow.Gap1000ms.Max5000ms2,
    but recorded iff {PrivacySandboxAdsApi} was used in the page.
  </summary>
  <token key="PrivacySandboxAdsApi" variants="PrivacySandboxAdsApi"/>
</histogram>

<histogram
    name="PageLoad.Clients.PrivacySandboxAds.PaintTiming.NavigationToFirstContentfulPaint.{PrivacySandboxAdsApi}"
    units="ms" expires_after="2026-02-04">
  <owner>linnan@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    PageLoad.PaintTiming.NavigationToFirstContentfulPaint, but recorded iff
    {PrivacySandboxAdsApi} was used in the page.
  </summary>
  <token key="PrivacySandboxAdsApi" variants="PrivacySandboxAdsApi"/>
</histogram>

<histogram
    name="PageLoad.Clients.PrivacySandboxAds.PaintTiming.NavigationToLargestContentfulPaint2.{PrivacySandboxAdsApi}"
    units="ms" expires_after="2026-02-22">
  <owner>linnan@chromium.org</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    PageLoad.PaintTiming.NavigationToLargestContentfulPaint2, but recorded iff
    {PrivacySandboxAdsApi} was used in the page.
  </summary>
  <token key="PrivacySandboxAdsApi" variants="PrivacySandboxAdsApi"/>
</histogram>

<histogram
    name="PageLoad.Clients.ServiceWorker2.PaintTiming.{Timing}.RaceNetworkRequestEligible"
    units="ms" expires_after="2026-10-11">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-worker@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The {Timing} time of pages with the Service Worker fetch handlers. Metrics
    won't be recorded if pages are not controlled by service workers. This is
    recorded only when the ServiceWorker script is eligible for the experiment.

    Warning: this histogram was expired from 2024-07-21 to 2024-11-18.
  </summary>
  <token key="Timing">
    <variant name="NavigationToFirstContentfulPaint"/>
    <variant name="NavigationToLargestContentfulPaint2"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.ServiceWorker2.PaintTiming.{Timing}.SyntheticResponse"
    units="ms" expires_after="2026-12-16">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-worker@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The {Timing} time of pages with the Service Worker fetch handlers. Metrics
    won't be recorded if pages are not controlled by service workers. This is
    recorded only when the response is created with the synthetic response.
  </summary>
  <token key="Timing">
    <variant name="NavigationToFirstContentfulPaint"/>
    <variant name="NavigationToLargestContentfulPaint2"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.ServiceWorker2.PaintTiming.{Timing}.{HandlerType}"
    units="ms" expires_after="2025-04-13">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-worker@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The {Timing} time of pages with the Service Worker fetch handlers. Metrics
    won't be recorded if pages are not controlled by service workers. The
    metrics are broken down by {HandlerType}. {HandlerType} only explains the
    page's handler type, and it does not mean the fetch handler is actually
    skipped or not.
  </summary>
  <token key="Timing">
    <variant name="NavigationToFirstContentfulPaint"/>
    <variant name="NavigationToLargestContentfulPaint2"/>
  </token>
  <token key="HandlerType">
    <variant name="NonSkippableFetchHandler"
        summary="The fetch handler is recognized as not skippable."/>
    <variant name="SkippableFetchHandler"
        summary="The fetch handler is recognized as skippable."/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients.ServiceWorker2.ParseTiming.NavigationToParseStart{SyntheticResponseSuffix}"
    units="ms" expires_after="2027-02-14">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-worker@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    parser started, for page controlled by service
    worker{SyntheticResponseSuffix}. Only recorded for navigations that start in
    the foreground and stay in the foreground until parse start. This metric is
    emitted when the parser starts for a navigation.
  </summary>
  <token key="SyntheticResponseSuffix" variants="SyntheticResponseSuffix"/>
</histogram>

<histogram
    name="PageLoad.Clients.ThirdParty.Frames.NavigationToFirstContentfulPaint3"
    units="ms" expires_after="2025-12-07">
  <owner>jkarlin@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    The time from navigation start to the first contentful paint of third-party
    (in respect to scheme://eTLD+1) frames on pages. Note that this can be
    significantly delayed due to lazy loading.

    Note also that all of the PageLoad.Clients.ThirdParty.Frames metrics will
    only be recorded for the first kMaxRecordedFrames (50) active iframe
    RenderFrameHosts (at any given time).
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.ThirdParty.Frames.Opaque.NavigationToFirstContentfulPaint"
    units="ms" expires_after="2025-08-24">
  <owner>awillia@chromium.org</owner>
  <owner>djmitche@chromium.org</owner>
  <summary>
    The time from navigation start to the first contentful paint of third-party
    opaque origin frames on pages. Note that this metric is only collected when
    the top-level origin is not opaque. Also, this metric can be significantly
    delayed due to lazy loading.

    Note also that all of the PageLoad.Clients.ThirdParty.Frames metrics will
    only be recorded for the first kMaxRecordedFrames (50) active iframe
    RenderFrameHosts (at any given time).
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.ThirdParty.Frames.Opaque.NavigationToLargestContentfulPaint"
    units="ms" expires_after="2025-10-19">
  <owner>awillia@chromium.org</owner>
  <owner>djmitche@chromium.org</owner>
  <summary>
    The time from navigation start to the largest contentful paint of
    third-party opaque origin frames on pages. Note that this metric is only
    collected when the top-level origin is not opaque.

    Note also that all of the PageLoad.Clients.ThirdParty.Frames metrics will
    only be recorded for the first kMaxRecordedFrames (50) active iframe
    RenderFrameHosts (at any given time).
  </summary>
</histogram>

<histogram name="PageLoad.Clients.ThirdParty.Origins.CookieRead2" units="Count"
    expires_after="2025-06-08">
  <owner>jkarlin@chromium.org</owner>
  <owner>yaoxia@chromium.org</owner>
  <summary>
    The number of third party (in respect to scheme://eTLD+1) origins on a page
    that read cookies either via resource request headers or document.cookie.

    This metric was expired between May and August 2023 and may be missing data.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.WebView.PageAttemptResults"
    enum="WebViewPageAttemptResult" expires_after="2027-09-30">
  <owner>narms@google.com</owner>
  <owner>android-sre@google.com</owner>
  <summary>
    The result of attempting to load a page. Logs a success when the load
    reaches FirstContentfulPaint without being backgrounded, or a different
    result if the load ends before that for any reason.

    This histogram is intended to track the success rate of page loads in
    WebView, and only logs page loads while they are in the foreground.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.WebView.PageAttempts" enum="Boolean"
    expires_after="2027-09-30">
  <owner>narms@google.com</owner>
  <owner>android-sre@google.com</owner>
  <summary>
    The count of page loads that were attempted in WebView.

    This histogram is intended to track the success rate of page loads in
    WebView, and only logs page loads that start in the foreground. This
    histogram logs when a navigation is started and only logs to the
    &quot;true&quot; bucket.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.Zstd.PaintTiming.NavigationToFirstContentfulPaint"
    units="ms" expires_after="2026-06-25">
  <owner>nidhijaju@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    Measures the time in milliseconds from navigation timing's navigation start
    to the time when the page first paints content, for page loads that can use
    zstd. A contentful paint includes a paint of text, image, SVG, or canvas.
    Only recorded for navigations that start in the foreground and stay in the
    foreground until the first contentful paint.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.Zstd.PaintTiming.NavigationToLargestContentfulPaint"
    units="ms" expires_after="2026-06-25">
  <owner>nidhijaju@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    Measures the time in milliseconds from navigation timing's navigation start
    to the time when the page first paints the experimental largest content
    (text or image) within viewport, for page loads that can use zstd. See
    https://github.com/w3c/largest-contentful-paint for more details. Differs
    from SubFrame.PaintTiming.NavigationToLargestContentfulPaint in that removed
    content is still considered a valid candidate. Only recorded for navigations
    that happen entirely in the foreground. The metric is emitted when the
    navigation is completed or the app is backgrounded on Android.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.Zstd.ParseTiming.NavigationToParseStart"
    units="ms" expires_after="2026-06-25">
  <owner>nidhijaju@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    parser started, for page loads that can use zstd. Only recorded for
    navigations that start in the foreground and stay in the foreground until
    parse start. This metric is emitted when the parser starts for a navigation.

    Warning: this histogram was expired from 2025-04-07 to 2025-06-25; data may
    be missing.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.{Origin}.{MetricName}" units="ms"
    expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>loading-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>{MetricName}, but recorded only for {Origin} navigations.</summary>
  <token key="Origin">
    <variant name="CrossOrigin" summary="cross-origin"/>
    <variant name="SameOrigin" summary="same-origin"/>
  </token>
  <token key="MetricName">
    <variant name="FirstContentfulPaint"
        summary="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
    <variant name="InteractiveTiming.FirstInputDelay"
        summary="PageLoad.InteractiveTiming.FirstInputDelay4"/>
    <variant name="LargestContentfulPaint"
        summary="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2"/>
    <variant name="LayoutInstability.CumulativeShiftScore"
        summary="PageLoad.LayoutInstability.CumulativeShiftScore"/>
    <variant name="LayoutInstability.CumulativeShiftScore.MainFrame"
        summary="PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients{ObservedNavigation}.Leakage2.AbandonReasonAt.{NavigationMilestone}{BackgroundSuffix}{HiddenSuffix}{IncognitoSuffix}{ResponseFromCache}"
    enum="NavigationAbandonReasonEnum" expires_after="2027-08-30">
  <owner>sisidovski@chromium.org</owner>
  <owner>rakina@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Logs the navigation abandonment reason that happens when the last milestone
    is {NavigationMilestone} on a main frame navigation for {ObservedNavigation}
    with {ResponseFromCache} connection, with potentially some suffixes detaling
    the navigation {BackgroundSuffix}, {IncognitoSuffix} and/or {HiddenSuffix} .

    The metric is emitted when the navigation gets abandoned.
  </summary>
  <token key="BackgroundSuffix" variants="BackgroundSuffix"/>
  <token key="HiddenSuffix" variants="HiddenSuffix"/>
  <token key="IncognitoSuffix" variants="IncognitoSuffix"/>
  <token key="NavigationMilestone" variants="NavigationMilestone"/>
  <token key="ObservedNavigation" variants="ObservedNavigation"/>
  <token key="ResponseFromCache" variants="ResponseFromCache"/>
</histogram>

<histogram
    name="PageLoad.Clients{ObservedNavigation}.Leakage2.LastMilestoneBeforeAbandon{NavigationAbandonReason}{BackgroundSuffix}{HiddenSuffix}{IncognitoSuffix}{ResponseFromCache}"
    enum="NavigationMilestoneEnum2" expires_after="2027-01-10">
  <owner>sisidovski@chromium.org</owner>
  <owner>rakina@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Logs the last navigation milestone reason that was reached when a main frame
    navigation for {ObservedNavigation} is abandoned due to
    {NavigationAbandonReason}, with potentially some suffixes detaling the
    navigation {BackgroundSuffix}, {IncognitoSuffix} and/or {HiddenSuffix} . The
    metric is emitted when the navigation gets abandoned.
  </summary>
  <token key="BackgroundSuffix" variants="BackgroundSuffix"/>
  <token key="HiddenSuffix" variants="HiddenSuffix"/>
  <token key="IncognitoSuffix" variants="IncognitoSuffix"/>
  <token key="NavigationAbandonReason" variants="NavigationAbandonReason"/>
  <token key="ObservedNavigation" variants="ObservedNavigation"/>
  <token key="ResponseFromCache" variants="ResponseFromCache"/>
</histogram>

<histogram
    name="PageLoad.Clients{ObservedNavigation}.Leakage2.NavigationStartToRendererProcessInit{BackgroundSuffix}{HiddenSuffix}{IncognitoSuffix}{ResponseFromCache}"
    units="ms" expires_after="2027-02-07">
  <owner>sisidovski@chromium.org</owner>
  <owner>rakina@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time relative to the navigation start that the final renderer process is
    created for a main frame navigation for {ObservedNavigation} with
    potentially some suffixes detaling the navigation {BackgroundSuffix},
    {HiddenSuffix}, {IncognitoSuffix}, {ResponseFromCache}. The metric is
    emitted when the navigation's commit IPC is just sent out, if the renderer
    process is created after the navigation started.
  </summary>
  <token key="BackgroundSuffix" variants="BackgroundSuffix"/>
  <token key="HiddenSuffix" variants="HiddenSuffix"/>
  <token key="IncognitoSuffix" variants="IncognitoSuffix"/>
  <token key="ObservedNavigation" variants="ObservedNavigation"/>
  <token key="ResponseFromCache" variants="ResponseFromCache"/>
</histogram>

<histogram
    name="PageLoad.Clients{ObservedNavigation}.Leakage2.NavigationStartTo{NavigationMilestone}{BackgroundSuffix}{HiddenSuffix}{IncognitoSuffix}{ResponseFromCache}"
    units="ms" expires_after="2027-01-03">
  <owner>rakina@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time relative to navigation start that a navigation reaches the the
    milestone {NavigationMilestone} on a main frame navigation for
    {ObservedNavigation}, with potentially some suffixes detaling the navigation
    {BackgroundSuffix}, {HiddenSuffix}, {IncognitoSuffix}, {ResponseFromCache}.
    Only recorded for Search navigations that didn't get terminally abandoned at
    least until the relevant milestone. Note that abandonment from backgrounding
    or hiding are non-terminal, so milestones after those types of abandonments
    will still be logged. The metric is emitted when the navigation finishes
    committing or it gets abandoned (which can happen multiple times during the
    navigation if non-terminal, so only the milestones that haven't been logged
    will be logged).
  </summary>
  <token key="BackgroundSuffix" variants="BackgroundSuffix"/>
  <token key="HiddenSuffix" variants="HiddenSuffix"/>
  <token key="IncognitoSuffix" variants="IncognitoSuffix"/>
  <token key="NavigationMilestone" variants="NavigationMilestone"/>
  <token key="ObservedNavigation" variants="ObservedNavigation"/>
  <token key="ResponseFromCache" variants="ResponseFromCache"/>
</histogram>

<histogram
    name="PageLoad.Clients{ObservedNavigation}.Leakage2.NavigationStart{BackgroundSuffix}{HiddenSuffix}{IncognitoSuffix}{ResponseFromCache}"
    units="ms" expires_after="2026-11-29">
  <owner>rakina@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time relative to navigation start that a navigation takes to emit this
    metric, on a main frame navigation for {ObservedNavigation}. The metric is
    emitted when the navigation finishes committing or it gets abandoned for the
    first time.
  </summary>
  <token key="BackgroundSuffix" variants="BackgroundSuffix"/>
  <token key="HiddenSuffix" variants="HiddenSuffix"/>
  <token key="IncognitoSuffix" variants="IncognitoSuffix"/>
  <token key="ObservedNavigation" variants="ObservedNavigation"/>
  <token key="ResponseFromCache" variants="ResponseFromCache"/>
</histogram>

<histogram
    name="PageLoad.Clients{ObservedNavigation}.Leakage2.NetError{BackgroundSuffix}{HiddenSuffix}{IncognitoSuffix}{ResponseFromCache}{AbandonedTimeBucket}"
    enum="NetErrorCodes" expires_after="2027-02-07">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Network status codes recorded for the abandoned navigation request, with
    potentially some suffixes detaling the navigation {BackgroundSuffix},
    {HiddenSuffix}, {IncognitoSuffix}, {ResponseFromCache}.

    The metric is emitted when the navigation gets abandoned.
  </summary>
  <token key="BackgroundSuffix" variants="BackgroundSuffix"/>
  <token key="HiddenSuffix" variants="HiddenSuffix"/>
  <token key="IncognitoSuffix" variants="IncognitoSuffix"/>
  <token key="ObservedNavigation" variants="ObservedNavigation"/>
  <token key="ResponseFromCache" variants="ResponseFromCache"/>
  <token key="AbandonedTimeBucket">
    <variant name=""/>
    <variant name=".AbandonedTime100To2000"/>
    <variant name=".AbandonedTimeAbove2000"/>
    <variant name=".AbandonedTimeBelow100"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Clients{ObservedNavigation}.Leakage2.RendererProcessCreatedBeforeNav{BackgroundSuffix}{HiddenSuffix}{IncognitoSuffix}{ResponseFromCache}"
    enum="Boolean" expires_after="2027-06-30">
  <owner>sisidovski@chromium.org</owner>
  <owner>rakina@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Whether the renderer process for the navigation is already created before
    the navigation start or not, for a main frame navigation for
    {ObservedNavigation} with potentially some suffixes detaling the navigation
    {BackgroundSuffix}, {HiddenSuffix}, {IncognitoSuffix}, {ResponseFromCache}.
    The metric is emitted when the navigation's commit IPC is just sent out.
  </summary>
  <token key="BackgroundSuffix" variants="BackgroundSuffix"/>
  <token key="HiddenSuffix" variants="HiddenSuffix"/>
  <token key="IncognitoSuffix" variants="IncognitoSuffix"/>
  <token key="ObservedNavigation" variants="ObservedNavigation"/>
  <token key="ResponseFromCache" variants="ResponseFromCache"/>
</histogram>

<histogram
    name="PageLoad.Clients{ObservedNavigation}.Leakage2.TimeToAbandonFromNavigationStart.{NavigationMilestone}{BackgroundSuffix}{HiddenSuffix}{IncognitoSuffix}{ResponseFromCache}"
    units="ms" expires_after="2026-11-29">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The Duration from the navigation start time to the time that a navigation
    gets abandoned after the milestone {NavigationMilestone} on a main frame
    navigation for {ObservedNavigation} with {ResponseFromCache}. Only the
    abandonments due to backgrounding and hiding are non-terminal, and other
    abandonments are terminal. This means this metric might be recorded multiple
    times if the navigation is only abandoned non-terminally before, but only
    once for each abandonment reason. &quot;This is logged after non-terminal
    abandonment of pages which were {BackgroundSuffix}, {HiddenSuffix} and
    {IncognitoSuffix}. The milestone recorded will be the latest milestone (if
    there are multiple milestones reached before the abandonment). The metric is
    emitted when the navigation gets abandoned.
  </summary>
  <token key="BackgroundSuffix" variants="BackgroundSuffix"/>
  <token key="HiddenSuffix" variants="HiddenSuffix"/>
  <token key="IncognitoSuffix" variants="IncognitoSuffix"/>
  <token key="NavigationMilestone" variants="NavigationMilestone"/>
  <token key="ObservedNavigation" variants="ObservedNavigation"/>
  <token key="ResponseFromCache" variants="ResponseFromCache"/>
</histogram>

<histogram
    name="PageLoad.Clients{ObservedNavigation}.Leakage2.{NavigationType}To{NavigationAbandonReason}{BackgroundSuffix}{HiddenSuffix}{IncognitoSuffix}{ResponseFromCache}"
    units="ms" expires_after="2027-06-30">
  <owner>sisidovski@chromium.org</owner>
  <owner>rakina@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    For a navigation of type {NavigationType} that gets abandoned due to
    {NavigationAbandonReason} from the navigation's start time, for a main frame
    navigation for {ObservedNavigation} with {ResponseFromCache} connection,
    with potentially some suffixes detaling the navigation {BackgroundSuffix},
    {HiddenSuffix} and/or {IncognitoSuffix}.

    The metric is emitted when the navigation gets abandoned.
  </summary>
  <token key="BackgroundSuffix" variants="BackgroundSuffix"/>
  <token key="HiddenSuffix" variants="HiddenSuffix"/>
  <token key="IncognitoSuffix" variants="IncognitoSuffix"/>
  <token key="NavigationAbandonReason" variants="NavigationAbandonReasonNoDot"/>
  <token key="NavigationType" variants="NavigationTypeForAbandonment"/>
  <token key="ObservedNavigation" variants="ObservedNavigation"/>
  <token key="ResponseFromCache" variants="ResponseFromCache"/>
</histogram>

<histogram name="PageLoad.CommittedPageIsDseSerp" enum="Boolean"
    expires_after="2027-02-07">
  <owner>anunoy@chromium.org</owner>
  <summary>
    For each page load, records whether the page is a search results page from
    the default search engine. Recorded at the time of commit.
  </summary>
</histogram>

<histogram name="PageLoad.ConnectTiming.FirstRequestConnectDelay" units="ms"
    expires_after="2027-01-17">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The delay caused by connection establishment for the first HTTP request
    which is sent for the main resource of a main frame navigation. Only
    recorded for navigations that happen entirely in the foreground. The metric
    is emitted when the navigation is completed or the app is backgrounded on
    Android.
  </summary>
</histogram>

<histogram name="PageLoad.ConnectTiming.FirstRequestDomainLookupDelay"
    units="ms" expires_after="2027-01-17">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The delay caused by domain lookup for the first HTTP request which is sent
    for the main resource of a main frame navigation. Only recorded for
    navigations that happen entirely in the foreground. The metric is emitted
    when the navigation is completed or the app is backgrounded on Android.
  </summary>
</histogram>

<histogram name="PageLoad.ConnectTiming.FirstRequestSslDelay" units="ms"
    expires_after="2027-07-01">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The delay caused by SSL handshake for the first HTTP request which is sent
    for the main resource of a main frame navigation. Only recorded for
    navigations that happen entirely in the foreground. The metric is emitted
    when the navigation is completed or the app is backgrounded on Android.

    This histogram has been expired between 2026-05-03 and 2026-07-01, thus does
    not contain data for this period.
  </summary>
</histogram>

<histogram name="PageLoad.Cpu.TotalUsage" units="ms" expires_after="2027-07-26">
  <owner>alexmt@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    Recorded when the page is destroyed or the app is backgrounded on mobile.
    Records the total wall time of tasks attributable to the page across its
    lifetime. Considers both the CPU usage while the page is in the foreground
    and in the background.
  </summary>
</histogram>

<histogram name="PageLoad.Cpu.TotalUsageForegrounded" units="ms"
    expires_after="2027-07-26">
  <owner>alexmt@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    Recorded when the page is destroyed or the app is backgrounded on mobile.
    Records the total wall time of tasks attributable to the page across its
    lifetime. Does not consider CPU usage while a page is backgrounded.
  </summary>
</histogram>

<histogram
    name="PageLoad.DocumentTiming.ActualNavigationStartToDOMContentLoadedEventFired"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the &quot;actual&quot; navigation starts which
    can begin before beforeunload handlers run to b) the time the
    DOMContentLoaded event is fired, excluding the time spent waiting for user
    interaction in beforeunload dialogs. This includes the time spent running
    beforeunload JavaScript handlers. This is recorded for each page load.
  </summary>
</histogram>

<histogram
    name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"
    units="ms" expires_after="2027-01-17">
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    DOMContentLoaded event is fired, for main frame documents.
  </summary>
</histogram>

<histogram name="PageLoad.DocumentTiming.NavigationToLoadEventFired" units="ms"
    expires_after="2027-02-14">
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    load event is fired, for main frame documents.
  </summary>
</histogram>

<histogram
    name="PageLoad.DocumentTiming.ParseStartToDOMContentLoadedEventFired"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from the time the renderer starts parsing the HTML to
    the time the DOMContentLoaded event is fired. This is recorded for each page
    load.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.ClickInputBurst" units="count"
    expires_after="2026-11-01">
  <owner>dougarnett@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <summary>
    The maximum size click input burst for the page load. A click input burst is
    a sequence of user click inputs at approximately the same screen position
    where the clicks each occur soon after the previous one (e.g., within half
    second). This is intended to detect possible rage clicks by the user.

    Note: stat collection stopped in August 2021, and resumes in February 2023.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.InputTiming.InputToNavigationStart"
    units="ms" expires_after="2026-12-27">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <summary>
    The time between the OS-level input event that initiated a navigation, and
    the navigation actually starting.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.InputTiming.InputToNavigationStart.Coverage.{WithOrWithoutUserGesture}.{InitiatorOfNavigation}"
    enum="Boolean" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records true if PageLoad.Experimental.InputTiming.InputToNavigationStart is
    recorded for a {InitiatorOfNavigation} {WithOrWithoutUserGesture}, and false
    otherwise. This is recorded when the navigation actually starting.
  </summary>
  <token key="InitiatorOfNavigation">
    <variant name="BrowserInitiated" summary="browser-initiated navigation"/>
    <variant name="RendererInitiated" summary="renderer-initiated navigation"/>
  </token>
  <token key="WithOrWithoutUserGesture">
    <variant name="WithoutUserGesture" summary="without a user gesture"/>
    <variant name="WithUserGesture" summary="with a user gesture"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Experimental.InputTiming.InputToNavigationStart.FromFormSubmit"
    units="ms" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The time between the OS-level input event and navigation start, for the
    form-submit in the renderer. This is recorded when the navigation actually
    starting.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.InputTiming.InputToNavigationStart.FromLinkClick"
    units="ms" expires_after="2026-12-27">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <summary>
    The time between the OS-level click/tap event and navigation start, for
    clicks on links in the renderer.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.InputTiming.InputToNavigationStart.FromOmnibox"
    units="ms" expires_after="2026-12-27">
  <owner>spelchat@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <summary>
    The time between the OS-level keypress/tap event in the omnibox and
    navigation start, for navigations from the omnibox.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.NavigationTiming.NavigationStartToFinalLoaderCallback"
    units="ms" expires_after="2025-05-11">
  <owner>nhiroki@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The time relative to navigation start that a callback for the navigation
    loader is last invoked for the main resource of a main frame navigation.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.NavigationTiming.NavigationStartToFinalResponseStart"
    units="ms" expires_after="2027-01-24">
  <owner>nhiroki@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The time relative to navigation start that the headers of the final HTTP
    response is received for the main resource of a main frame navigation.

    This metric has incomplete data. It was expired between 2022-12-18 and M121.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.NavigationTiming.NavigationStartToFirstLoaderCallback"
    units="ms" expires_after="2024-10-06">
  <owner>nhiroki@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The time relative to navigation start that a callback for the navigation
    loader is first invoked for the main resource of a main frame navigation.

    This metric has incomplete data. It was expired between 2023-07-09 and M121.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.NavigationTiming.NavigationStartToFirstRequestStart"
    units="ms" expires_after="2027-01-17">
  <owner>nhiroki@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The time relative to navigation start that the first HTTP request is sent
    for the main resource of a main frame navigation.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.NavigationTiming.NavigationStartToFirstResponseStart"
    units="ms" expires_after="2027-01-03">
  <owner>nhiroki@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The time relative to navigation start that the headers of the first HTTP
    response is received for the main resource of a main frame navigation.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.NavigationTiming.NavigationStartToNavigationCommitSent"
    units="ms" expires_after="2027-01-24">
  <owner>nhiroki@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The time relative to navigation start that navigation commit message for a
    main frame navigation is sent to a renderer process.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.PageTiming.CachedResourceLoadTime.{RequestDestination}"
    units="ms" expires_after="2027-01-31">
  <owner>horo@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Measures the time from load start to when headers have been received for
    resource requests which come from the cache. Logged for every
    {RequestDestination} resource request from the cache.

    This metric has incomplete data. It was expired after 2023-08-07 until M121,
    and also after 2024-02-09 until M142.
  </summary>
  <token key="RequestDestination" variants="RequestDestination"/>
</histogram>

<histogram
    name="PageLoad.Experimental.PageTiming.CommitSentToFirstSubresourceLoadStart"
    units="ms" expires_after="2025-05-04">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <summary>
    Measures the time from when the navigation commit was sent to the renderer
    to the first subresource load start. Logged for every page load which has
    subresources.

    This metric has incomplete data. It was expired between 2023-02-12 and M121.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.PageTiming.NavigationToFirstSubresourceLoadStart"
    units="ms" expires_after="2025-06-08">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <summary>
    Measures the time from navigation start to the first subresource load start.
    Logged for every page load which has subresources.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.PageTiming.ResourceLoadTime.{RequestDestination}"
    units="ms" expires_after="2027-02-07">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <summary>
    Measures the time from load start to when headers have been received for
    resource requests which do not come from the cache. Logged for every
    {RequestDestination} resource request which is not from the cache.
  </summary>
  <token key="RequestDestination" variants="RequestDestination"/>
</histogram>

<histogram name="PageLoad.Experimental.PageVisitFinalStatus"
    enum="PageVisitFinalStatus" expires_after="2026-12-22">
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Determines the final status for this page load. That is, records whether the
    page was never foregrounded, was foregrounded but did not reach FCP, or did
    reach FCP. The metric is recorded at the end of each page load. As usual
    with PageLoad metrics, we consider app backgrounding on Android to be the
    end of page load as well as the app could be evicted by Android anytime
    after that happens.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.PaintTiming.InputToFirstContentfulPaint"
    units="ms" expires_after="2027-02-07">
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    The time between the OS-level input event that initiated a navigation, and
    the first contentful paint of the page that was loaded in the navigation.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.SoftNavigations.Count"
    units="Soft navigations" expires_after="2027-01-24">
  <owner>iclelland@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Records the number of soft navigations detected during a page load. Recorded
    by the SoftNavigationPageLoadMetricsObserver each time the page enters the
    back/forward cache, and also when the page is destroyed, with the number of
    soft navigations observed since the last recording.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.TotalForegroundDuration" units="ms"
    expires_after="2026-12-20">
  <owner>npm@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    The total amount of time the page spent in the foreground.

    Note that this metric adds all foreground durations occurring for the page.
    For example: if the page starts foregrounded during 1 second, then goes to
    the background for a while, then is foregrounded again for 2 seconds, and
    then is unloaded, this metric reports 3 seconds. The metric is recorded at
    the end of each page load. As usual with PageLoad metrics, we consider app
    backgrounding on Android to be the end of page load as well as the app could
    be evicted by Android anytime after that happens.
  </summary>
</histogram>

<histogram
    name="PageLoad.InteractiveTiming.FirstInputDelay.AfterBackForwardCacheRestore"
    units="ms" expires_after="never">
<!-- expires-never: used in server pipeline to derive additional metrics -->

  <owner>hajimehoshi@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures First Input Delay, the duration between the hardware timestamp and
    the start of event processing on the main thread for the first meaningful
    input per back-forward navigation. Recorded on first page interaction after
    the page is restored from the back-forward cache. See https://goo.gl/tr1oTZ
    for a detailed explanation. Excludes scrolls.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.

    Bucketing for this histogram should be kept in sync with bucketing for
    PageLoad.InteractiveTiming.FirstInputDelay4. These two histograms will be
    aggregated on the server to form the authoritative metric.
  </summary>
</histogram>

<histogram
    name="PageLoad.InteractiveTiming.FirstInputDelay.AfterBackForwardCacheRestore_iOSFixed"
    units="ms" expires_after="never">
<!-- expires-never: used in server pipeline to derive additional metrics -->

  <owner>hajimehoshi@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    iOS only. This is the same as
    PageLoad.InteractiveTiming.FirstInputDelay.AfterBackForwardCacheRestore, but
    uses the same bucketing on iOS as non-iOS platforms use in that metric.

    Measures First Input Delay, the duration between the hardware timestamp and
    the start of event processing on the main thread for the first meaningful
    input per back-forward navigation. Recorded on first page interaction after
    the page is restored from the back-forward cache. See https://goo.gl/tr1oTZ
    for a detailed explanation. Excludes scrolls.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.

    Bucketing for this histogram should be kept in sync with bucketing for
    PageLoad.InteractiveTiming.FirstInputDelay4_iOSFixed. These two histograms
    will be aggregated on the server to form the authoritative metric.
  </summary>
</histogram>

<histogram name="PageLoad.InteractiveTiming.FirstInputDelay4" units="ms"
    expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures First Input Delay, the duration between the hardware timestamp and
    the start of event processing on the main thread for the first meaningful
    input per navigation. Recorded on first page interaction. See
    https://goo.gl/tr1oTZ for a detailed explanation. Excludes scrolls.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.

    Bucketing for this histogram should be kept in sync with bucketing for
    PageLoad.InteractiveTiming.FirstInputDelay.AfterBackForwardCacheRestore.
    These two histograms will be aggregated on the server to form the
    authoritative metric.

    Log of major changes: http://bit.ly/chrome-speed-metrics-changelog
  </summary>
</histogram>

<histogram name="PageLoad.InteractiveTiming.FirstInputDelay4_iOSFixed"
    units="ms" expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <summary>
    iOS only. This is the same as PageLoad.InteractiveTiming.FirstInputDelay4,
    but uses the same bucketing on iOS as non-iOS platforms use in that metric.

    Measures First Input Delay, the duration between the hardware timestamp and
    the start of event processing on the main thread for the first meaningful
    input per navigation. Recorded on first page interaction. See
    https://goo.gl/tr1oTZ for a detailed explanation. Excludes scrolls.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.

    Bucketing for this histogram should be kept in sync with bucketing for
    PageLoad.InteractiveTiming.FirstInputDelay.AfterBackForwardCacheRestore_iOSFixed.
    These two histograms will be aggregated on the server to form the
    authoritative metric.

    Log of major changes: http://bit.ly/chrome-speed-metrics-changelog
  </summary>
</histogram>

<histogram name="PageLoad.InteractiveTiming.FirstInputTimestamp4" units="ms"
    expires_after="2027-01-03">
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    The duration between navigation start and the hardware timestamp of the
    first meaningful input per navigation. Recorded on first page interaction.
    See https://goo.gl/tr1oTZ for a detailed explanation. Excludes scrolls.
  </summary>
</histogram>

<histogram name="PageLoad.InteractiveTiming.INPOffset" units="offset"
    expires_after="2027-02-07">
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    The one-based offset of the interaction that is the INP
    (https://web.dev/inp).
  </summary>
</histogram>

<histogram name="PageLoad.InteractiveTiming.INPTime" units="ms"
    expires_after="2027-03-30">
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    The time, relative to navigation start, of the interaction that is the INP
    (https://web.dev/inp).
  </summary>
</histogram>

<histogram name="PageLoad.InteractiveTiming.InputDelay3" units="ms"
    expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The duration between the hardware timestamp and the start of event
    processing on the main thread for a meaningful input. Excludes scrolls.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.

    WARNING: The long tail of this metric is buggy on Mac (overflows for a
    subset of users) which can lead to surprising false regressions or
    improvements.
  </summary>
</histogram>

<histogram name="PageLoad.InteractiveTiming.InputTimestamp3" units="ms"
    expires_after="never">
<!-- expires-never: diagnostic to InputDelay3 guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    The duration between navigation start and the hardware timestamp of a
    meaningful input. Excludes scrolls.
  </summary>
</histogram>

<histogram name="PageLoad.InteractiveTiming.NumInteractions{PageLoadType}"
    units="Count" expires_after="2027-02-07">
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    The number of user interactions in a {PageLoadType} page load. Definition of
    interaction:
    https://web.dev/better-responsiveness-metric/#group-events-into-interactions
  </summary>
  <token key="PageLoadType" variants="PageLoadType"/>
</histogram>

<histogram name="PageLoad.InteractiveTiming.ProcessingTime" units="ms"
    expires_after="2027-01-24">
  <owner>iclelland@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    The duration between the start of event processing and the end of event
    processing on the main thread for a meaningful input. Excludes scrolls.

    This metric is recorded when users interact with the page, which may trigger
    input events such as pointerdown, keydown, click and mousedown.
  </summary>
</histogram>

<histogram name="PageLoad.InteractiveTiming.TimeToNextPaint" units="ms"
    expires_after="2027-07-31">
  <owner>iclelland@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    The duration between the end of event processing and the time when the first
    paint was performed on the main thread for a meaningful input. Excludes
    scrolls.

    This metric is recorded when users interact with the page, which may trigger
    input events such as pointerdown, keydown, click and mousedown.
  </summary>
</histogram>

<histogram
    name="PageLoad.InteractiveTiming.{NormalizedResponsivenessMetric}.{UserInteractionLatency}{PageLoadType}"
    units="ms" expires_after="2027-07-31">
  <owner>iclelland@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    The {NormalizedResponsivenessMetric} of a {PageLoadType} page load, in ms.
    For this metric, we measure the latency of a user interaction by the
    {UserInteractionLatency} within the user interaction.

    Recorded at the end of the page load lifetime, such as when users navigate
    to a new web page, except
    UserInteractionLatencyAtFirstOnHidden.HighPercentile2, which is recorded
    when a page is moved from the foreground to the background for the first
    time. UserInteractionLatencyAtFirstOnHidden.HighPercentile2 is trying to
    record the INP values which are not able to be recorded in
    UserInteractionLatency.HighPercentile2 for some reasons.
  </summary>
  <token key="PageLoadType" variants="PageLoadType"/>
  <token key="NormalizedResponsivenessMetric">
    <variant name="UserInteractionLatency.HighPercentile2"/>
    <variant name="UserInteractionLatencyAtFirstOnHidden.HighPercentile2"/>
    <variant name="WorstUserInteractionLatency"/>
  </token>
  <token key="UserInteractionLatency">
    <variant name="MaxEventDuration"/>
  </token>
</histogram>

<histogram name="PageLoad.Internal.ErrorCode" enum="InternalErrorLoadEvent"
    expires_after="2027-02-21">
  <owner>csharrison@chromium.org</owner>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Counts of various internal error conditions in the page_load_metrics system.
  </summary>
</histogram>

<histogram name="PageLoad.Internal.PageLoadTimingStatus{Condition}"
    enum="PageLoadTimingStatus" expires_after="2026-10-04">
  <owner>toyoshim@chromium.org</owner>
  <owner>src/components/page_load_metrics/OWNERS</owner>
  <owner>src/content/browser/preloading/prerender/OWNERS</owner>
  <summary>
    The status of validity check of PageLoadTiming structs received from the
    render process over IPC. Recorded when timing information is {Condition}.
    Warning: this histogram was expired from 2021-01-31 to 2023-01-13; data may
    be missing.
  </summary>
  <token key="Condition">
    <variant name="" summary="received on any page load"/>
    <variant name=".AtTimingCallbackDispatch"
        summary="dispatched on any page load"/>
    <variant name=".OnFencedFramesPage"
        summary="received on fenced frames pages"/>
    <variant name=".OnPrerenderPage" summary="received on prerender pages"/>
  </token>
</histogram>

<histogram
    name="PageLoad.Internal.PaintTiming.LargestContentfulPaint.ContentType"
    enum="LargestContentType" expires_after="2027-01-03">
  <owner>iclelland@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures whether the largest contentful paint, whose timestamp is measured
    by PageLoad.PaintTiming.NavigationToLargestContentfulPaint2, comes from text
    or image. This value is recorded whenever
    PageLoad.PaintTiming.NavigationToLargestContentfulPaint2 is recorded.
  </summary>
</histogram>

<histogram
    name="PageLoad.Internal.PaintTiming.LargestContentfulPaint.MainFrame.ContentType"
    enum="LargestContentType" expires_after="2026-10-01">
  <owner>iclelland@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures whether the largest contentful paint in the main frame, whose
    timestamp is measured by
    PageLoad.PaintTiming.NavigationToLargestContentfulPaint2.MainFrame, comes
    from text or image. This value is recorded whenever
    PageLoad.PaintTiming.NavigationToLargestContentfulPaint2.MainFrame is
    recorded.
  </summary>
</histogram>

<histogram
    name="PageLoad.Internal.Prerender2.ActivatedPageLoaderStatus{PreloadingTriggerType}"
    enum="NetErrorCodes" expires_after="2025-09-14">
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Records error codes for loading of a main resource of a main frame which
    belongs to a prerendered and then activated page when the page received
    loading completion event for the resource.

    This metric is used to monitor whether preload cache intercepting logic
    causes extra page loading errors.
  </summary>
  <token key="PreloadingTriggerType" variants="PagePreloadingTriggerType"/>
</histogram>

<histogram
    name="PageLoad.Internal.Prerender2.DomContentLoadedToActivation3{PreloadingTriggerType}"
    units="ms" expires_after="2026-10-04">
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Records the duration from DOMContentLoaded to activation for a prerendered
    and then activated page.

    Note that the duration is shifted by 1 minute (60000ms) when recording the
    metric, because UMA cannot record negative values.

    If the DOMContentLoaded event is fired after activation, the number will be
    less than 60000(ms).

    If the DOMContentLoaded event is fired before activation, the number will be
    greater than 60000(ms).

    This metric will be recorded when a session ends, at
    PrerenderPageLoadMetricsObserver::MaybeRecordDocumentLoadMetrics.
  </summary>
  <token key="PreloadingTriggerType" variants="PagePreloadingTriggerType"/>
</histogram>

<histogram name="PageLoad.Internal.Prerender2.Event"
    enum="PageLoadPrerenderEvent" expires_after="2025-02-10">
  <owner>kenoss@chromium.org</owner>
  <owner>src/content/browser/preloading/prerender/OWNERS</owner>
  <summary>
    Counts page load events related to Prerender2, like navigation in
    prerendered main frame and prerendering activation navigation. Recorded when
    those events are observed in PageLoadTracker.
  </summary>
</histogram>

<histogram
    name="PageLoad.Internal.Prerender2.MainResourceParseStartToActivation{PreloadingTriggerType}"
    units="ms" expires_after="2027-08-30">
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Records the duration from when to start parsing main resource to activation
    for a prerenderedand then activated page.

    Note that the duration is shifted by 1 minute (60000ms) when recording the
    metric, because UMA cannot record negative values.

    If the UA starts to parse the main resource after activation, the number
    will be less than 60000(ms).

    If the UA starts to parse the main resource before activation, the number
    will be greater than 60000(ms).

    This metric will be recorded when a session ends, at
    PrerenderPageLoadMetricsObserver::MaybeRecordDocumentLoadMetrics.
  </summary>
  <token key="PreloadingTriggerType" variants="PagePreloadingTriggerType"/>
</histogram>

<histogram name="PageLoad.Internal.SoftNavigation.{Status}.TotalPaintArea"
    units="pixels" expires_after="2027-02-14">
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Records the total paint area in pixels for a soft navigation. Recorded when
    the soft navigation context is exhausted. This metric is only recorded when
    the soft navigation was {Status}.
  </summary>
  <token key="Status" variants="SoftNavigationStatus"/>
</histogram>

<histogram
    name="PageLoad.Internal.SoftNavigation.{Status}.TotalPaintAreaPoints"
    units="Points" expires_after="2027-02-14">
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Records the total paint area as a percentage of the required paint area for
    a soft navigation, multiplied by 100 as &quot;points&quot;. The
    multiplication is to increase precision, which will be needed in the lowest
    values especially. Recorded when the soft navigation context is exhausted.
    This metric is only recorded when the soft navigation was {Status}.
  </summary>
  <token key="Status" variants="SoftNavigationStatus"/>
</histogram>

<histogram name="PageLoad.Internal.SoftNavigationOutcome"
    enum="SoftNavigationOutcome" expires_after="2027-01-24">
  <owner>iclelland@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Records the outcome of the soft navigation heuristics when the page's URL is
    changed through the history API. This is recorded at most once for each URL
    change. If the URL change was not attributable to a user interaction, that
    is recorded immediately. If a soft navigation is detected, then it is
    recorded as soon as we detect it (when all conditions are satisfied).
    Otherwise, to be sure that all tasks associated with the user interaction
    have completed, we wait until all TaskAttributionInfo objects created within
    the SoftNavigationHeuristics::EventScope are garbage-collected, and then
    record which of the conditions was not satisfied.
  </summary>
</histogram>

<histogram name="PageLoad.LayoutInstability.CumulativeShiftScore"
    units="scorex10" expires_after="2027-01-03">
  <owner>bmcquade@chromium.org</owner>
  <owner>skobes@chromium.org</owner>
  <summary>
    Measures the cumulative layout shift score (bit.ly/lsm-explainer) that has
    occurred on the page (including all subframes). Higher values correspond to
    greater instability, which is bad. Recorded at the end of the page lifetime,
    such as when the page is being navigated away from or when a tab is being
    closed. Stable since M79; previous versions are expermental and subject to
    fluctuation between releases.

    Bucketing for this histogram should be kept in sync with bucketing for
    PageLoad.LayoutInstability.CumulativeShiftScore.AfterBackForwardCacheRestore.
    These two histograms will be aggregated on the server to form the
    authoritative metric.

    Log of major changes: http://bit.ly/chrome-speed-metrics-changelog
  </summary>
</histogram>

<histogram
    name="PageLoad.LayoutInstability.CumulativeShiftScore.AfterBackForwardCacheRestore"
    units="scorex10" expires_after="never">
<!-- expires-never: used in server pipeline to derive additional metrics -->

  <owner>hajimehoshi@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    Measures the cumulative layout shift score (bit.ly/3fQz29y) that has
    occurred on the page (including all subframes) after the page is restored
    from the back-forward cache. Recorded when the user navigates away or closes
    the page after the page was restored from back-forward cache.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.

    Bucketing for this histogram should be kept in sync with bucketing for
    PageLoad.LayoutInstability.CumulativeShiftScore. These two histograms will
    be aggregated on the server to form the authoritative metric.
  </summary>
</histogram>

<histogram
    name="PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame.AfterBackForwardCacheRestore"
    units="scorex10" expires_after="2022-01-02">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    Measures the cumulative layout shift score (bit.ly/3fQz29y) that has
    occurred in the main frame after the page is restored from the back-forward
    cache. Recorded when the user navigates away or closes the page after the
    page was restored from back-forward cache.
  </summary>
</histogram>

<histogram
    name="PageLoad.LayoutInstability.CumulativeShiftScoreAtFirstOnHidden"
    units="scorex10" expires_after="2026-11-30">
  <owner>lanwei@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures the cumulative layout shift score (bit.ly/lsm-explainer) that has
    occurred on the page (including all subframes) until the first time the page
    moves from the foreground to the background. It is recorded when the tab is
    first hidden after it is first shown in foreground. This metric is trying to
    record the layout shift values which are not able to be recorded in
    PageLoad.LayoutInstability.CumulativeShiftScore for some reasons.
  </summary>
</histogram>

<histogram
    name="PageLoad.LayoutInstability.MaxCumulativeShiftScore.AfterBackForwardCacheRestore.SessionWindow.Gap1000ms.Max5000ms2"
    units="scorex10000" expires_after="never">
<!-- expires-never: used in server pipeline to derive additional metrics -->

  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures the maximum cumulative layout shift (bit.ly/cls-explainer) that has
    occurred in after back forward cache restore. The gap between two
    consecutive shifts in a window is not bigger than 1000ms and the maximum
    window size is 5000ms. This metric's integral value is 10000x the fractional
    cumulative layout shift score described in the explainer. If {Bfcache} is
    triggered, we record the metric when the user navigates away or closes the
    page after the page was restored from back-forward cache. Otherwise, we
    record it at the end of the page lifetime, such as when the page is being
    navigated away from or when a tab is being closed.

    Replaces
    PageLoad.LayoutInstability.MaxCumulativeShiftScore.AfterBackForwardCacheRestore.SessionWindow.Gap1000ms.Max5000ms
    and increases granularity in order to get more coverage for ~5% of values in
    the 0-0.1 range.
  </summary>
</histogram>

<histogram
    name="PageLoad.LayoutInstability.MaxCumulativeShiftScore.SessionWindow.Gap1000ms.Max5000ms2"
    units="scorex10000" expires_after="never">
<!-- expires-never: used in server pipeline to derive additional metrics -->

  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures the maximum cumulative layout shift (bit.ly/cls-explainer) that has
    occurred in a Window. The gap between two consecutive shifts in a window is
    not bigger than 1000ms and the maximum window size is 5000ms. This metric's
    integral value is 10000x the fractional cumulative layout shift score
    described in the explainer. If {Bfcache} is triggered, we record the metric
    when the user navigates away or closes the page after the page was restored
    from back-forward cache. Otherwise, we record it at the end of the page
    lifetime, such as when the page is being navigated away from or when a tab
    is being closed.

    Replaces
    PageLoad.LayoutInstability.MaxCumulativeShiftScore.SessionWindow.Gap1000ms.Max5000ms
    and increases granularity to get coverage for ~25% of the values in the
    0-0.1 range.
  </summary>
</histogram>

<histogram
    name="PageLoad.LayoutInstability.MaxCumulativeShiftScoreAtFirstOnHidden.SessionWindow.Gap1000ms.Max5000ms"
    units="scorex10000" expires_after="never">
<!-- expires-never: used in server pipeline to derive additional metrics -->

  <owner>lanwei@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures the maximum cumulative layout shift (bit.ly/cls-explainer) that has
    occurred in a Window until the first time the page moves from the foreground
    to the background. The gap between two consecutive shifts in a window is not
    bigger than 1000ms and the maximum window size is 5000ms. This metric's
    integral value is 10000x the fractional cumulative layout shift score
    described in the explainer. It is recorded when the tab is first hidden
    after it is first shown in foreground. This metric is trying to record the
    layout shift values which are not able to be recorded in
    PageLoad.LayoutInstability.MaxCumulativeShiftScore.SessionWindow.Gap1000ms.Max5000ms2
    for some reasons.

    Replaced
    Experimental.LayoutInstability.MaxCumulativeShiftScoreAtFirstOnHidden.SessionWindow.Gap1000ms.Max5000ms
    and increases granularity to get coverage for ~25% of the values in the
    0-0.1 range.
  </summary>
</histogram>

<histogram
    name="PageLoad.NavigationTiming.ActualNavigationStartToNavigationCommitSent"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the &quot;actual&quot; navigation starts which
    can begin before beforeunload handlers run to b) the time the navigation
    commit request is sent to the renderer, excluding the time spent waiting for
    user interaction in beforeunload dialogs. This includes the time spent
    running beforeunload JavaScript handlers. This is recorded for each HTTP or
    HTTPS page load.
  </summary>
</histogram>

<histogram
    name="PageLoad.NavigationTiming.ActualNavigationStartToNavigationStart"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the &quot;actual&quot; navigation starts which
    can start before the beforeunload handler runs to b) when the (existing
    regular) navigation starts, excluding the time spent waiting for user
    interaction in beforeunload dialogs. This includes the time spent running
    beforeunload JavaScript handlers. This is recorded for each HTTP or HTTPS
    page load.
  </summary>
</histogram>

<histogram name="PageLoad.NavigationTiming.InteractionToNavigationStart"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the OS-level timestamp of the user input event
    that started a navigation to b) when the navigation starts, excluding the
    time spent waiting for user interaction in beforeunload dialogs. This
    includes the time spent running beforeunload JavaScript handlers. This is
    recorded for each HTTP or HTTPS page load.
  </summary>
</histogram>

<histogram name="PageLoad.NavigationTiming.NavigationCommitSentToParseStart"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the time the navigation commit request is sent
    to the renderer to b) the time the renderer starts parsing the HTML. This is
    recorded for each page load.
  </summary>
</histogram>

<histogram name="PageLoad.PageTiming.ForegroundDuration" units="ms"
    expires_after="2027-01-17">
  <owner>bmcquade@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    For page loads that start in the foreground, measures the duration of time
    until one of the following events occurs: the load of the main resource
    fails, the page load is stopped, the tab hosting the page is closed, the
    render process hosting the page goes away, a new navigation which later
    commits is initiated in the same tab, or the tab hosting the page is
    backgrounded. This metric has a very long tail, for pages that spend a long
    period of time in the foreground. As such, use of the mean or tail values
    are not recommended.
  </summary>
</histogram>

<histogram name="PageLoad.PageTiming.NavigationToFirstForeground" units="ms"
    expires_after="2026-05-03">
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    user first foregrounds an initially backgrounded tab. Only measures
    navigations that started in the background.
  </summary>
</histogram>

<histogram name="PageLoad.PaidContent.State" enum="PaidContentState"
    expires_after="2026-12-27">
  <owner>gklassen@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <summary>
    Records the state of paid content detection for the page load. The state can
    be kUnknown (initial value), kHasPaidContent (paid content metadata found),
    or kNoPaidContentFound (no paid content metadata found), based on
    `isAccessibleForFree` document metadata.
  </summary>
</histogram>

<histogram
    name="PageLoad.PaintTiming.ActualNavigationStartToFirstContentfulPaint"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the &quot;actual&quot; navigation starts which
    can begin before beforeunload handlers run to b) the first contentful paint,
    excluding the time spent waiting for user interaction in beforeunload
    dialogs. This includes the time spent running beforeunload JavaScript
    handlers. This is recorded for each HTTP or HTTPS page load.
  </summary>
</histogram>

<histogram
    name="PageLoad.PaintTiming.ActualNavigationStartToLargestContentfulPaint"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the &quot;actual&quot; navigation starts which
    can begin before beforeunload handlers run to b) the largest contentful
    paint, excluding the time spent waiting for user interaction in beforeunload
    dialogs. This includes the time spent running beforeunload JavaScript
    handlers. This is recorded for each HTTP or HTTPS page load.
  </summary>
</histogram>

<histogram name="PageLoad.PaintTiming.ForegroundToFirstContentfulPaint"
    units="ms" expires_after="2026-12-27">
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures the time from a background tab being switched to the foreground to
    the time the first contentful paint is performed, for main frame documents.
  </summary>
</histogram>

<histogram name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"
    units="ms" expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from navigation start to first &quot;contentful&quot; paint. This
    metric does not include all page loads. Specifically, it excludes:

    - Page loads which have not been in the foreground during the entire loading
    time. Use
    PageLoad.PaintTiming.NavigationToFirstContentfulPaint.Background.HttpsOrDataOrFileScheme
    histogram if you want to include those.

    - Page loads for non http(s) schemes. Use
    PageLoad.PaintTiming.NavigationToFirstContentfulPaint.{DataScheme,FileScheme}
    histograms for data for page loads for data:// and file:// schemes.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.

    Bucketing for this histogram should be kept in sync with bucketing for
    PageLoad.PaintTiming.NavigationToFirstPaint.AfterBackForwardCacheRestore.
    These two histograms will be aggregated on the server to form the
    authoritative metric.

    Log of major changes: http://bit.ly/chrome-speed-metrics-changelog
  </summary>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint.Background.HttpsOrDataOrFileScheme"
    units="ms" expires_after="2027-04-14">
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from navigation start to first &quot;contentful&quot; paint, where
    the page was backgrounded at least once from navigation start to this event.

    Includes page loads with http, https, data and file schemes.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.
  </summary>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint.ExcludeReloadAfterDiscard"
    units="ms" expires_after="2027-01-17">
  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    This is recorded at the same time and with the same value as
    PageLoad.PaintTiming.NavigationToFirstContentfulPaint, but only if the
    navigation isn't a post-discard reload.
  </summary>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint.NonTabWebUI{WebUIName}"
    units="ms" expires_after="2027-01-03">
  <owner>anthonyvd@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Measures the time from navigation start to first contentful paint. This is
    only recorded for non-tab webUI pages, such as side-panel content.
  </summary>
  <token key="WebUIName" variants="WebUIName"/>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint.WebUI{WebUIHost}"
    units="ms" expires_after="2027-02-07">
  <owner>anthonyvd@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Measures the time from navigation start to first contentful paint for webUI.
    This is only recorded for webUI pages that are not blocked if users do not
    visit chrome://about and enable debugging pages.
  </summary>
  <token key="WebUIHost" variants="WebUIHost"/>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint.{Scheme}"
    units="ms" expires_after="2027-02-07">
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from navigation start to first &quot;contentful&quot; paint for
    {Scheme}. This metric does not include all page loads. If you need all page
    loads for http, https, data and file schemes, add
    PageLoad.PaintTiming.NavigationToFirstContentfulPaint.Background.HttpsOrDataOrFileScheme.

    Some popular WebView apps such as Gmail use data or file schemes to load
    their content, and having page load metrics for those apps would be useful
    for performance investigations.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.
  </summary>
  <token key="Scheme">
    <variant name="DataScheme"/>
    <variant name="FileScheme"/>
  </token>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint{NavigationScenario}"
    units="ms" expires_after="2027-08-06">
  <owner>sullivan@chromium.org</owner>
  <owner>mych@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from navigation start to first contentful paint,
    {NavigationScenario}

    This is only logged on desktop, in addition to the main
    PageLoad.PaintTiming.NavigationToFirstContentfulPaint histogram.
  </summary>
  <token key="NavigationScenario" variants="NavigationScenario"/>
</histogram>

<histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint" units="ms"
    expires_after="2026-09-27">
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    first image is painted, for main frame documents. For images that render
    progressively, this is recorded as soon as any image pixels have been drawn.
  </summary>
</histogram>

<histogram name="PageLoad.PaintTiming.NavigationToFirstPaint" units="ms"
    expires_after="2027-02-14">
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    first paint is performed, for main frame documents.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org.
  </summary>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToFirstPaint.AfterBackForwardCacheRestore"
    units="ms" expires_after="2027-01-17">
  <owner>djw@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures the time from back-forward navigation timing's navigation start to
    the time the first paint is performed, for main frame documents. Recorded
    only when the page is restored from back-forward cache.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org.

    Bucketing for this histogram should be kept in sync with bucketing for
    PageLoad.PaintTiming.NavigationToFirstContentfulPaint.
  </summary>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToFirstPaint.BFCachePolyfill{Count}"
    units="ms" expires_after="never">
<!-- expires-never: used in server pipeline to derive additional metrics -->

  <owner>rakina@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures the time duration between the page restore from BFcache and the
    {Count} requestAnimationFrame time.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.

    Bucketing for this histogram should be kept in sync with bucketing for
    PageLoad.PaintTiming.NavigationToFirstContentfulPaint. These two histograms
    will be aggregated on the server to form the authoritative metric.
  </summary>
  <token key="Count">
    <variant name="First"/>
    <variant name="Second"/>
    <variant name="Third"/>
  </token>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint.WebUI{WebUIHost}"
    units="ms" expires_after="2027-02-07">
  <owner>anthonyvd@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Measures the time from navigation start to largest contentful paint for
    webUI. This is only recorded for webUI pages that are not blocked if users
    do not visit chrome://about and enable debugging pages.
  </summary>
  <token key="WebUIHost" variants="WebUIHost"/>
</histogram>

<histogram name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2"
    units="ms" expires_after="2027-01-31">
  <owner>iclelland@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    largest content (text or image) is first painted, across all frames.
    Excludes any content painted after user input. Includes content that has
    been removed from the page. See web.dev/lcp for more details.

    The value is recorded at the end of each page load or the latest time when
    we can reliably record: when the page is navigated away, the browser is
    closed, or on Android when the browser is backgrounded.

    This metric does not include all page loads. Specifically, it excludes:

    - Page loads which have not been in the foreground during the entire loading
    time. Use
    PageLoad.PaintTiming.NavigationToLargestContentfulPaint2.Background.HttpsOrDataOrFileScheme
    histogram if you want to include those.

    - Page loads for non http(s) schemes. Use
    PageLoad.PaintTiming.NavigationToLargestContentfulPaint2.{DataScheme,FileScheme}
    histograms for data for page loads for data:// and file:// schemes.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.

    Log of major changes: http://bit.ly/chrome-speed-metrics-changelog
  </summary>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2.Background.HttpsOrDataOrFileScheme"
    units="ms" expires_after="2027-04-14">
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from navigation start to first &quot;contentful&quot; paint, where
    the page was backgrounded at least once from navigation start to this event.

    Measures the time from navigation timing's navigation start to the time the
    largest content (text or image) is first painted, across all frames, where
    the page was backgrounded at least once from navigation start to this event.
    Excludes any content painted after user input. Includes content that has
    been removed from the page. See web.dev/lcp for more details.

    The value is recorded at the end of each page load or the latest time when
    we can reliably record: when the page is navigated away, the browser is
    closed, or on Android when the browser is backgrounded.

    Includes page loads with http, https, data and file schemes.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.
  </summary>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2.CrossSiteSubFrame"
    units="ms" expires_after="2027-01-03">
  <owner>sisidovski@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Similar to PaintTiming.NavigationToLargestContentfulPaint2, this measures
    the time in milliseconds from navigation timing's navigation start to the
    time when the page first paints the largest content (text or image) in the
    cross-site subframe which is the top candidate of largest contentful paint.
  </summary>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2.ExcludeReloadAfterDiscard"
    units="ms" expires_after="2027-01-17">
  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    This is recorded at the same time and with the same value as
    PageLoad.PaintTiming.NavigationToLargestContentfulPaint2, but only if the
    navigation isn't a post-discard reload.
  </summary>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2.MainFrame"
    units="ms" expires_after="2027-02-07">
  <owner>iclelland@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    largest content (text or image) is first painted, for main frame documents.
    See PageLoad.PaintTiming.NavigationToLargestContentfulPaint2 for more
    information.
  </summary>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2.NonTabWebUI{WebUIName}"
    units="ms" expires_after="2027-02-07">
  <owner>anthonyvd@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    largest content (text or image) is first painted, for main frame documents
    of non-tab webUI pages, such as side-panel content. See
    PageLoad.PaintTiming.NavigationToLargestContentfulPaint2 for more
    information.
  </summary>
  <token key="WebUIName" variants="WebUIName"/>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2.SetSpeculationRulesPrerender"
    units="ms" expires_after="2026-01-18">
  <owner>yoichio@chromium.org</owner>
  <owner>loading-dev@chromium.org</owner>
  <summary>
    Similar to PaintTiming.NavigationToLargestContentfulPaint2, this measures
    the time from navigation timing's navigation start to the time the largest
    content (text or image) is first painted only for pages using Speculation
    Rules API and calls Prerender2, across all frames. Excludes any content
    painted after user input. Includes content that has been removed from the
    page. See web.dev/lcp for more details.
  </summary>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2.{Scheme}"
    units="ms" expires_after="2026-09-22">
  <owner>iclelland@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    largest content (text or image) is first painted for {Scheme}, across all
    frames. Excludes any content painted after user input. Includes content that
    has been removed from the page. See web.dev/lcp for more details.

    The value is recorded at the end of each page load or the latest time when
    we can reliably record: when the page is navigated away, the browser is
    closed, or on Android when the browser is backgrounded.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.

    Log of major changes: http://bit.ly/chrome-speed-metrics-changelog
  </summary>
  <token key="Scheme">
    <variant name="DataScheme"/>
    <variant name="FileScheme"/>
  </token>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2AtFirstOnHidden"
    units="ms" expires_after="2027-03-01">
  <owner>lanwei@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    largest content (text or image) is first painted, across all frames.
    Recorded at the point when a page which has been opened in the foreground is
    moved to the background for the first time. Excludes any content painted
    after user input. Includes content that has been removed from the page. See
    web.dev/lcp for more details.

    This metric is trying to record the LCP values which are not able to be
    recorded in PageLoad.PaintTiming.NavigationToLargestContentfulPaint2 for
    some reasons.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.

    Log of major changes: http://bit.ly/chrome-speed-metrics-changelog
  </summary>
</histogram>

<histogram
    name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2{NavigationScenario}"
    units="ms" expires_after="2027-08-06">
  <owner>mych@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    largest content (text or image) is first painted, across all frames,
    {NavigationScenario}

    This is only logged on desktop, in addition to the main
    PageLoad.PaintTiming.NavigationToLargestContentfulPaint2 histogram.
  </summary>
  <token key="NavigationScenario" variants="NavigationScenario"/>
</histogram>

<histogram name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"
    units="ms" expires_after="2027-02-07">
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures the time from when the HTML parser started, to when the page first
    paints content.
  </summary>
</histogram>

<histogram name="PageLoad.PaintTiming.ParseStartToLargestContentfulPaint"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from the time the renderer starts parsing the HTML to
    the time the largest contentful paint occurs. This is recorded for each page
    load.
  </summary>
</histogram>

<histogram name="PageLoad.ParseTiming.ActualNavigationStartToParseStart"
    units="ms" expires_after="2027-02-04">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the duration from a) the &quot;actual&quot; navigation starts which
    can begin before beforeunload handlers run to b) the time the parser
    started, excluding the time spent waiting for user interaction in
    beforeunload dialogs. This includes the time spent running beforeunload
    JavaScript handlers. This is recorded for each HTTP or HTTPS page load.
  </summary>
</histogram>

<histogram name="PageLoad.ParseTiming.NavigationToParseStart" units="ms"
    expires_after="2027-02-14">
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    parser started, for main frame documents.
  </summary>
</histogram>

<histogram name="PageLoad.SoftNavigation.CumulativeLayoutShift" units="ms"
    expires_after="2027-01-24">
  <owner>sullivan@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>haoliuk@chromium.org</owner>
  <summary>
    Measures the maximum cumulative layout shift (bit.ly/cls-explainer) that has
    occurred from the time when the soft navigation happens to the time when the
    next soft navigation happens or the page load ends in a session window. The
    gap between two consecutive shifts in a window is not bigger than 1000ms and
    the maximum window size is 5000ms. This metric's integral value is 100x the
    fractional cumulative layout shift score described in the explainer.
  </summary>
</histogram>

<histogram name="PageLoad.SoftNavigation.InteractionToNextPaint" units="ms"
    expires_after="2027-01-24">
  <owner>sullivan@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>haoliuk@chromium.org</owner>
  <summary>
    An approximation of a high percentile of user interaction latency from the
    time when the soft navigation happens to the time when the next soft
    navigation happens or the page load end, in ms. For this metric, we measure
    the latency of user interactions as described here: https://web.dev/inp
  </summary>
</histogram>

<histogram name="PageLoad.SoftNavigation.LargestContentfulPaint" units="ms"
    expires_after="2027-01-24">
  <owner>sullivan@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <owner>haoliuk@chromium.org</owner>
  <summary>
    Measures the LargestContentfulPaint in milliseconds from the start time of
    the soft navigation to the LCP time.
  </summary>
</histogram>

<histogram
    name="PageLoad.SoftNavigation.SoftNavigationPageLoadMetricsObserverState"
    enum="SoftNavigationPageLoadMetricsObserverState"
    expires_after="2027-02-14">
  <owner>sullivan@chromium.org</owner>
  <owner>johannes@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Reports the state in which the SoftNavigationPageLoadMetricsObserver is when
    an OnSoftNavigation event arrives.
  </summary>
</histogram>

<histogram name="PageLoad.SoftNavigation.StartTime" units="ms"
    expires_after="2027-01-24">
  <owner>sullivan@chromium.org</owner>
  <owner>johannes@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Measures the start time of the soft navigation in milliseconds from the
    start of the hard navigation.
  </summary>
</histogram>

<histogram
    name="PageLoad.{AdsPageLoadMetricVisibilityType}.AdPaintTiming.NavigationToFirstContentfulPaint3"
    units="ms" expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>jkarlin@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Records the time from frame navigation start to FirstContentfulPaint of each
    ad frame that receives a FirstContentfulPaint. The time could be quite
    large, as some ads don't paint until they're scrolled into view. But the
    metric is still useful in aggregate.

    Recorded for all ad frames with non-zero bytes or cpu usage that receive a
    FirstContentfulPaint. Recorded when the ad frame or page is destroyed.

    Changes to how cross-origin content is loaded (e.g., security policies,
    network prioritization) or to iframes can certainly affect this metric.
    {AdsPageLoadMetricVisibilityType}

    Do not modify this metric in any way without contacting
    chrome-analysis-team@google.com.
  </summary>
</histogram>

<histogram
    name="PageLoad.{AdsPageLoadMetricVisibilityType}.AdPaintTiming.TopFrameNavigationToFirstContentfulPaint"
    units="ms" expires_after="2027-07-26">
  <owner>jkarlin@chromium.org</owner>
  <owner>alexmt@chromium.org</owner>
  <summary>
    Records the time from top frame navigation start to FirstContentfulPaint of
    each ad frame that receives a FirstContentfulPaint. The time could be quite
    large, as some ads don't paint until they're scrolled into view. But the
    metric is still useful in aggregate.

    Recorded for all ad frames with non-zero bytes or cpu usage that receive a
    FirstContentfulPaint. Recorded when the ad frame or page is destroyed.

    Changes to how cross-origin content is loaded (e.g., security policies,
    network prioritization) or to iframes can certainly affect this metric.
    {AdsPageLoadMetricVisibilityType}
  </summary>
</histogram>

<histogram name="PageLoad.{AdsPageLoadMetricVisibilityType}.Bytes" units="KB"
    expires_after="2027-07-26">
  <owner>jkarlin@chromium.org</owner>
  <owner>alexmt@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    Only recorded if the page has at least one identified ad frame. Recorded in
    PageLoadMetrics when the page is destroyed. Bytes include all bytes used by
    the network to load a resource and response body bytes for cached resources
    (from both the HTTP and memory caches). An ad frame consists of the
    identified ad frame and all of its children (which may also be ads, but are
    counted as part of the ancestor ad frame). Includes resources that did not
    finish loading. {AdsPageLoadMetricVisibilityType}
  </summary>
</histogram>

<histogram name="PageLoad.{AdsPageLoadMetricVisibilityType}.Cpu" units="units"
    expires_after="2027-07-26">
  <owner>jkarlin@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    Only recorded if the page has at least one identified ad frame. Recorded in
    PageLoadMetrics when the page is destroyed. Cpu measures the wall time of
    tasks attributable to a frame as reported by the MainThreadTaskScheduler as
    well as time spent servicing scripted animations by each document (not
    attributable by the MainThreadTaskScheduler). An ad frame consists of the
    identified ad frame and all of its children (which may also be ads, but are
    counted as part of the ancestor ad frame). Includes resources that did not
    finish loading. Does not consider time while a page is backgrounded.
    {AdsPageLoadMetricVisibilityType}

    Warning: This metric expired around 04/2022 and was unexpired 07/2023. Data
    may be missing.
  </summary>
</histogram>

<histogram
    name="PageLoad.{AdsPageLoadMetricVisibilityType}.FrameCounts.AdFrames.PerFrame.OriginStatus"
    enum="CrossOriginAdStatus" expires_after="2027-07-26">
  <owner>jkarlin@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    For each identified ad frame, whether the origin of the ad matches the
    origin of the main frame, differs from the origin of the main frame, or is
    indeterminable.

    An ad frame consists of the identified ad frame and all of its children
    (which may also be ads, but are counted as part of the ancestor ad frame).
    Frames of zero bytes (e.g., never had a document or their document was
    doc.written and no sub-resources were loaded) are not counted.
    {AdsPageLoadMetricVisibilityType}

    Warning: This metric expired around 04/2022 and unexpired 07/2023. Data may
    be missing.
  </summary>
</histogram>

<histogram
    name="PageLoad.{AdsPageLoadMetricVisibilityType}.FrameCounts.AdFrames.PerFrame.UserActivation"
    enum="AdUserActivationStatus" expires_after="2027-07-26">
  <owner>csharrison@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    For each identified ad frame, whether the sticky user activation bit was
    ever set on the frame. Recorded for each ad frame when the page is destroyed
    or navigated away from, including ad frames that no longer exist.

    An ad frame consists of the identified ad frame and all of its children
    (which may also be ads, but are counted as part of the ancestor ad frame).
    Frames of zero bytes (e.g., never had a document or their document was
    doc.written and no sub-resources were loaded) are not counted.
    {AdsPageLoadMetricVisibilityType}

    Warning: this histogram was expired from 2024-04-17 until 2025-05-27; data
    may be missing.
  </summary>
</histogram>

<histogram
    name="PageLoad.{AdsPageLoadMetricVisibilityType}.FrameCounts.AdFrames.Total"
    units="Ad frames" expires_after="2027-07-26">
  <owner>jkarlin@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    The number of frames on the page that have loaded more than 0 bytes of
    content or had non-zero CPU usage.

    For pages with zero ad frames, the other PageLoad.Clients.Ads metrics are
    not recorded unless otherwise specified. This metric is not recorded on
    sites where the subresource filter is enabled.

    Child frames of an ad frame are not included in the count.
    {AdsPageLoadMetricVisibilityType}
  </summary>
</histogram>

<histogram
    name="PageLoad.{AdsPageLoadMetricVisibilityType}.HeavyAds.ComputedTypeWithThresholdNoise"
    enum="HeavyAdStatus2" expires_after="2027-07-26">
  <owner>jkarlin@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    Records heavy ad type for each ad frame, as determined by the first
    threshold hit (see FrameData::HeavyadStatus). This is recorded regardless of
    feature flag or other conditions that prevent the heavy ad intervention from
    occurring. This includes 1 megabyte of random additive noise on the network
    threshold. As such, it is possible for this histogram to record different
    values for the same frame than PageLoad.HeavyAds.ComputedType2.

    Recorded for all ad frames with non-zero bytes. Recorded when the ad frame
    destroyed or when the page is destroyed.

    It is possible for multiple thresholds to be hit at the same time, with the
    higher valued enums winning those race conditions.
    {AdsPageLoadMetricVisibilityType}

    Warning: this histogram was expired from 2024-04-17 until 2025-05-27; data
    may be missing.
  </summary>
</histogram>

<histogram
    name="PageLoad.{AdsPageLoadMetricVisibilityType}.HeavyAds.InterventionType2"
    enum="HeavyAdStatus2" expires_after="2027-07-26">
  <owner>jkarlin@chromium.org</owner>
  <owner>chrome-ads-histograms@google.com</owner>
  <summary>
    Records the type of heavy ad unloaded by the heavy ad intervention. Heavy ad
    type is determined by the first threshold hit. This is not recorded for ad
    frames that are considered heavy but did not fulfill other criteria for the
    intervention. This includes the feature being enabled and being below the
    per-origin intervention cap.

    It is possible for multiple thresholds to be hit at the same time, with the
    higher valued enums winning those race conditions.
    {AdsPageLoadMetricVisibilityType}

    Warning: this histogram was expired from 2024-04-17 until 2025-05-27; data
    may be missing.
  </summary>
</histogram>

<histogram name="PageSerialization.Mhtml.Fetched.{ResourceType}"
    enum="BooleanSuccess" expires_after="2025-01-29">
  <owner>harringtond@chromium.org</owner>
  <owner>offline-dev@chromium.org</owner>
  <summary>
    Reports whether a resource fetch was successful while saving a page to
    MHTML. Reported for each resource fetched.
  </summary>
  <token key="ResourceType">
    <variant name="Font" summary="Font resource"/>
    <variant name="Style" summary="CSS resource"/>
  </token>
</histogram>

<histogram name="PageSerialization.Mhtml.FrameSerializerTime" units="ms"
    expires_after="2025-01-29">
  <owner>harringtond@chromium.org</owner>
  <owner>offline-dev@chromium.org</owner>
  <summary>
    Reports the time taken to serialize a single frame of an MHTML file.
    Includes only time taken by frame_serializer.cc. Reported when frame
    serialization completes.
  </summary>
</histogram>

</histograms>

</histogram-configuration>
