<!--
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 Navigation 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="FrameTypes">
  <variant name="MainFrame"/>
  <variant name="Subframe"/>
</variants>

<variants name="NavigationThrottleEvents">
  <variant name="WillFailRequest"/>
  <variant name="WillProcessResponse"/>
  <variant name="WillRedirectRequest"/>
  <variant name="WillStartRequest"/>
</variants>

<variants name="PrerenderTriggerType">
<!-- Should be kept in sync with variants PagePrerenderTriggerType in
  tools/metrics/histograms/metadata/page/histograms.xml.
-->

  <variant name=".Embedder_BookmarkBar"/>
  <variant name=".Embedder_DefaultSearchEngine"/>
  <variant name=".Embedder_DirectURLInput"/>
  <variant name=".SpeculationRule"/>
  <variant name=".SpeculationRuleFromIsolatedWorld"/>
</variants>

<variants name="RegularOrMHTMLType">
  <variant name="MHTML"/>
  <variant name="Regular"/>
</variants>

<variants name="SiteRelation">
  <variant name="CrossSite"/>
  <variant name="SameSite"/>
</variants>

<histogram name="BackForwardCache.AllSites.EvictedAfterDocumentRestoredReason"
    enum="BackForwardCacheEvictedAfterDocumentRestoredReason"
    expires_after="2024-03-03">
  <owner>fergal@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    Records the reason why the page is evicted from the back-forward cache but
    after the document is restored. This happens when there is a race between
    eviction and restoring. This also records when the page is restored to
    calculate how often this eviction happens.

    This is recorded for all websites regardless whether back-forward cache is
    enabled or not.
  </summary>
</histogram>

<histogram name="BackForwardCache.AllSites.HistoryNavigationOutcome"
    enum="BackForwardCacheHistoryNavigationOutcome" expires_after="2024-03-03">
  <owner>fergal@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    When navigating back to a page in the session history, this records whether
    the page was restored from the BackForwardCache or not.

    This is recorded for all websites regardless whether back-forward cache is
    enabled or not.
  </summary>
</histogram>

<histogram
    name="BackForwardCache.AllSites.HistoryNavigationOutcome.BlocklistedFeature"
    enum="WebSchedulerTrackedFeature" expires_after="2024-03-03">
  <owner>fergal@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    When navigating back to a page in the session history, this records what
    blocklisted features were used when the page was loaded and prevented this
    page from being stored in the back-forward cache. Multiple blocklisted
    features can be recorded for the same page.

    This is recorded for all websites regardless whether back-forward cache is
    enabled or not.
  </summary>
</histogram>

<histogram
    name="BackForwardCache.AllSites.HistoryNavigationOutcome.BrowsingInstanceNotSwappedReason"
    enum="BackForwardCacheBrowsingInstanceNotSwappedReason"
    expires_after="2024-03-03">
  <owner>fergal@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    When navigating back to a page in the session history and the
    BackForwardCache wasn't used because of the other active WebContents objects
    in the BrowsingInstance, this records the reason why the browsing instance
    wasn't swapped.

    This is recorded for all websites regardless whether back-forward cache is
    enabled or not.
  </summary>
</histogram>

<histogram
    name="BackForwardCache.AllSites.HistoryNavigationOutcome.DisabledForRenderFrameHostReason2"
    enum="BackForwardCacheDisabledForRenderFrameHostReason2"
    expires_after="2023-12-31">
  <owner>fergal@chromium.org</owner>
  <owner>rakina@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    For history navigations, records the reason passed to
    BackForwardCache::DisableForRenderFrameHost calls.

    The metric is recorded when a history navigation commits and emits a sample
    for each reason. Compare this with
    BackForwardCache.HistoryNavigationOutcome, which contains the total number
    of navigations which where not cached

    This is recorded for all websites regardless whether back-forward cache is
    enabled or not.
  </summary>
</histogram>

<histogram
    name="BackForwardCache.AllSites.HistoryNavigationOutcome.NotRestoredReason"
    enum="BackForwardCacheNotRestoredReason" expires_after="2024-03-03">
  <owner>fergal@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    When navigating back to a page in the session history, record why it wasn't
    restored from the cache. The page might not have entered the back-forward in
    the first place based on the features used, or it might have been evicted
    while being in the cache.

    This is recorded for all websites regardless of whether back-forward cache
    is enabled or not.
  </summary>
</histogram>

<histogram name="BackForwardCache.CountEntriesWithoutRendererAck" units="count"
    expires_after="2021-10-01">
  <owner>yuzus@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    This metric is emitted when we try to enforce the cache size limit, which is
    1) when a page enters BackForwardCache and 2) when a page entering
    BackForwardCache receives an acknowledgement from the renderer.

    This reports the number of the entries that have not received an
    acknowledgement from the renderer.
  </summary>
</histogram>

<histogram name="BackForwardCache.EvictedAfterDocumentRestoredReason"
    enum="BackForwardCacheEvictedAfterDocumentRestoredReason"
    expires_after="2024-03-03">
  <owner>fergal@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    Records the reason why the page is evicted from the back-forward cache but
    after the document is restored. This happens when there is a race between
    eviction and restoring. This also records when the page is restored to
    calculate how often this eviction happens.

    This is recorded when back-forward cache is enabled for this navigation
    (back-forward cache feature is enabled and the domain is in the scope of the
    experiment).
  </summary>
</histogram>

<histogram name="BackForwardCache.Eviction.Renderer"
    enum="BackForwardCacheRendererEvictionReason" expires_after="2024-03-03">
  <owner>rakina@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    Records the reason of renderer-initiated back-forward cache eviction.
    Emitted when renderer evicts the page from back-forward cache.
  </summary>
</histogram>

<histogram name="BackForwardCache.Eviction.TimeUntilProcessKilled" units="ms"
    expires_after="2024-03-03">
  <owner>fergal@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    Records the time duration between the last time when the entry goes to the
    back-forward cache and the time when the process is killed.
  </summary>
</histogram>

<histogram
    name="BackForwardCache.Experimental.UnexpectedIPCMessagePostedToCachedFrame.MethodHash"
    enum="MojoInterfaceName" expires_after="2024-03-03">
  <owner>fergal@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    Track number of times an unexpected IPC message is posted to frames in the
    renderer process while they are frozen in the back-forward cache. IPC tasks
    are denoted by md5 hash of the mojo bindings method name or message hash for
    legacy IPCs.

    Recorded when an IPC task is posted to frames that have already been stored
    in the back-forward cache, after a 15 second delay to account for completion
    of all freezing-related operations.
  </summary>
</histogram>

<histogram
    name="BackForwardCache.Experimental.UnexpectedIPCMessagePostedToCachedFrame.TimeUntilIPCReceived"
    units="ms" expires_after="2023-12-31">
  <owner>fergal@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    Duration between start of page being stored in the back-forward cache and
    when the unexpected IPC call is received by a frame while in the cache.

    Recorded when an IPC task is posted to frames that have already been stored
    in the back-forward cache, after a 15 second delay to account for completion
    of all freezing-related operations.
  </summary>
</histogram>

<histogram name="BackForwardCache.HistoryNavigationOutcome"
    enum="BackForwardCacheHistoryNavigationOutcome" expires_after="2024-03-03">
  <owner>fergal@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    When navigating back to a page in the session history, this records whether
    the page was restored from the BackForwardCache or not.

    This is recorded when back-forward cache is enabled for this navigation
    (back-forward cache feature is enabled and the domain is in the scope of the
    experiment).
  </summary>
</histogram>

<histogram name="BackForwardCache.HistoryNavigationOutcome.BlocklistedFeature"
    enum="WebSchedulerTrackedFeature" expires_after="2024-03-03">
  <owner>fergal@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    When navigating back to a page in the session history, this records what
    blocklisted features were used when the page was loaded and prevented this
    page from being stored in the back-forward cache. Multiple blocklisted
    features can be recorded for the same page.

    This is recorded when back-forward cache is enabled for this navigation
    (back-forward cache feature is enabled and the domain is in the scope of the
    experiment).
  </summary>
</histogram>

<histogram
    name="BackForwardCache.HistoryNavigationOutcome.BrowsingInstanceNotSwappedReason"
    enum="BackForwardCacheBrowsingInstanceNotSwappedReason"
    expires_after="2024-03-03">
  <owner>fergal@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    When navigating back to a page in the session history and the
    BackForwardCache wasn't used because of the other active WebContents objects
    in the BrowsingInstance, this records the reason why the browsing instance
    wasn't swapped.

    This is recorded when back-forward cache is enabled for this navigation
    (back-forward cache feature is enabled and the domain is in the scope of the
    experiment).
  </summary>
</histogram>

<histogram
    name="BackForwardCache.HistoryNavigationOutcome.DisabledForRenderFrameHostReason2"
    enum="BackForwardCacheDisabledForRenderFrameHostReason2"
    expires_after="2024-03-03">
  <owner>fergal@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    For history navigations, records the reason passed to
    BackForwardCache::DisableForRenderFrameHost calls.

    The metric is recorded when a history navigation commits and emits a sample
    for each reason. Compare this with
    BackForwardCache.HistoryNavigationOutcome, which contains the total number
    of navigations which where not cached

    This is recorded for all websites regardless whether back-forward cache is
    enabled or not.
  </summary>
</histogram>

<histogram
    name="BackForwardCache.HistoryNavigationOutcome.DisallowActivationReason"
    enum="InactiveFrameDisallowActivationReason" expires_after="2024-03-03">
  <owner>fergal@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    For history navigations, records the reason passed to
    RenderFrameHost::IsInactiveAndDisallowActivation calls.

    The metric is recorded when a history navigation commits and emits a sample
    for each reason. Compare this with
    BackForwardCache.HistoryNavigationOutcome, which contains the total number
    of navigations which where not cached

    This is recorded for all websites regardless whether back-forward cache is
    enabled or not.
  </summary>
</histogram>

<histogram
    name="BackForwardCache.HistoryNavigationOutcome.NotRestoredDueToAccessibility.AXEventType"
    enum="AXEventType" expires_after="2022-10-31">
  <owner>yuzus@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    For history navigations, records the AX event type that caused
    RenderFrameHost::IsInactiveAndDisallowActivation calls. The value refers to
    AX enum in ui/accessibility/ax_enums.mojom.

    The metric is recorded when a history navigation commits and emits the
    breakdown of a specific bucket in HistoryNavigationOutcome.NotRestoredReason
    (AXEvent). Compare this with BackForwardCache.HistoryNavigationOutcome,
    which contains the total number of navigations which were not cached.

    This is recorded for all websites regardless whether back-forward cache is
    enabled or not.
  </summary>
</histogram>

<histogram name="BackForwardCache.HistoryNavigationOutcome.NotRestoredReason"
    enum="BackForwardCacheNotRestoredReason" expires_after="2024-03-03">
  <owner>fergal@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    When navigating back to a page in the session history, record why it wasn't
    restored from the cache. The page might not have entered the back-forward in
    the first place based on the features used, or it might have been evicted
    while being in the cache.

    This is recorded when back-forward cache is enabled for this navigation
    (back-forward cache feature is enabled and the domain is in the scope of the
    experiment).
  </summary>
</histogram>

<histogram
    name="BackForwardCache.HistoryNavigationOutcome.RelatedActiveContents.Count2"
    units="count" expires_after="2024-02-25">
  <owner>rakina@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    When navigating back to a page in the session history and the
    BackForwardCache wasn't used because of other active WebContents objects in
    the BrowsingInstance, this records the number of other active pages/related
    active contents using the same BrowsingInstance.
  </summary>
</histogram>

<histogram
    name="BackForwardCache.HistoryNavigationOutcome.RelatedActiveContents.IsPotentiallySyncAccessible2"
    enum="RelatedActiveContentsSyncAccessInfo" expires_after="2024-02-25">
  <owner>rakina@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    When navigating back to a page in the session history and the
    BackForwardCache wasn't used because of other active WebContents objects in
    the BrowsingInstance, this Records whether the page was potentially
    synchronously accessible by other pages/related active contents using the
    same BrowsingInstance, at the time the page was navigated away from.
  </summary>
</histogram>

<histogram name="BackForwardCache.MainFrameHasPageshowListenersOnRestore"
    enum="BooleanPresent" expires_after="M82">
  <owner>altimin@chromium.org</owner>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    Records whether a page restored from the back-forward cache has pageshow
    handlers installed in its main frame. Recorded when the renderer resumes
    page when restoring it from the back-forward cache.
  </summary>
</histogram>

<histogram name="BackForwardCache.PageWithForm.RestoreResult"
    enum="BackForwardCacheHistoryNavigationOutcome" expires_after="2024-03-24">
  <owner>wenyufu@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    Record for a page that has form attached is about to restored from the back
    forward cache, to understand the success rate for bfcaching a page that has
    form / input entry attached. This is recorded for page with form attached
    only.

    Recorded during a cross-page history navigation. If a page with form is
    restored from the cache, &quot;PageRestored&quot; will be recorded; if the
    page is not egligible to be restored due to any reason,
    &quot;PageNotRestored&quot; will be recorded.
  </summary>
</histogram>

<histogram name="BackForwardCache.PageWithForm.Storable"
    enum="BackForwardCachePageWithFormStorable" expires_after="2024-03-24">
  <owner>wenyufu@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    Record for a page that has form attached is egligible to be stored in back
    forwad cache, to understand the success rate for bfcaching a page that has
    form / input entry attached. This is recorded for page with form attached
    only.

    Recorded when a navigation is committed. If a page has form attached
    &quot;PageSeen&quot; will be recorded; if the page is egligible to be stored
    in the back forward cache, &quot;PageStored&quot; will be recorded.
  </summary>
</histogram>

<histogram name="BackForwardCache.ProcessReuse.{SiteRelation}" units="count"
    expires_after="2024-01-15">
  <owner>rakina@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    Whether a back/forward cached page shares the same process as the page that
    we're navigating to (i.e. whether the new active page reuses the process of
    the back/forward cached page).

    Recorded when navigating away from a page, after the navigation commits and
    we're about to put the previous page into the back/forward cache.
  </summary>
  <token key="SiteRelation" variants="SiteRelation"/>
</histogram>

<histogram name="BackForwardCache.Restore.NavigationToFirstPaint" units="ms"
    expires_after="2024-03-17">
  <owner>sreejakshetty@chromium.org</owner>
  <owner>altimin@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    Duration between start of navigation restoring a document from back-forward
    cache and the first paint.

    This is recorded when a history navigation is served from back-forward cache
    but in a foreground tab.
  </summary>
</histogram>

<histogram
    name="BackForwardCache.UnexpectedRendererToBrowserMessage.InterfaceName"
    enum="MojoInterfaceName" expires_after="2023-12-31">
  <owner>fergal@google.com</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    Hash (base::HashMetricName) of a mojo interface name.

    A sample is recorded for every message the browser receives from a renderer
    for a page that is in the back-forward cache. Logging can be disabled via
    the back-forward cache feature parameter
    &quot;message_handling_when_cached&quot;.

    Renderers should not be sending messages back to the browser for pages that
    are in the back-forward cache. Eventually we will be killing such renderers
    (as we could assume that it is misbehaving because it got compromised). But
    first we must make sure that we are not sending messages by mistake (i.e.
    bugs in the renderer).
  </summary>
</histogram>

<histogram name="Navigation.AnonymousIframeIsSandboxed" enum="Boolean"
    expires_after="2023-10-01">
  <owner>arthursonzogni@chromium.org</owner>
  <owner>chrome-security-owp-team@google.com</owner>
  <summary>
    Record whether iframe with the anonymous attribute contains sandboxed
    document or not.
  </summary>
</histogram>

<histogram name="Navigation.AutomaticBeaconOutcome"
    enum="AutomaticBeaconOutcome" expires_after="2024-10-01">
  <owner>lbrady@google.com</owner>
  <owner>shivanisha@chromium.org</owner>
  <summary>
    Record if a 'reserved.top_navigation' automatic beacon was sent out, or the
    reason for not sending the beacon if it was not sent out.
  </summary>
</histogram>

<histogram name="Navigation.BackForward.CacheFlags" enum="NavigationCacheEnum"
    expires_after="M85">
  <owner>clamy@chromium.org</owner>
  <summary>The cache flags set on back-forward navigations.</summary>
</histogram>

<histogram name="Navigation.BackForward.NavigatingToEntryMarkedToBeSkipped"
    enum="Boolean" expires_after="2019-12-31">
  <owner>shivanisha@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric logs true if the existing entry being navigated to is marked to
    be skipped on back/forward UI. This is logged at the start of navigation
    initiated using long-press back/forward button.
  </summary>
</histogram>

<histogram
    name="Navigation.BackForward.TimeFromOpenBackNavigationMenuToActivateItem"
    units="ms" expires_after="2024-02-25">
  <owner>leimy@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    The time spent between the back navigation menu model's opening and the
    activation of a menu item. This is recorded when the back navigation menu
    model receives signal that indicates the item from the menu is activated.
    See `BackForwardMenuModel::MenuWillShow()` and
    `BackForwardMenuModel::ActivatedAt()` for more details.
  </summary>
</histogram>

<histogram
    name="Navigation.BackForward.TimeFromOpenBackNavigationMenuToCloseMenu"
    units="ms" expires_after="2024-02-25">
  <owner>leimy@chromium.org</owner>
  <owner>bfcache-dev@chromium.org</owner>
  <summary>
    The time spent between the back navigation menu model's opening and the
    closing. There might or might not be a menu item activation in between. This
    is recorded when the back navigation menu model receives signal that
    indicates it will be closed. See `BackForwardMenuModel::MenuWillShow()` and
    `BackForwardMenuModel::MenuWillClose()` for details.
  </summary>
</histogram>

<histogram name="Navigation.BackForward.WasCached"
    enum="NavigationWasServedFromCache" expires_after="M85">
  <owner>clamy@chromium.org</owner>
  <summary>Whether the back-forward navigation was served from cache.</summary>
</histogram>

<histogram name="Navigation.BrowserMappedUrnUuidInIframeOrFencedFrame"
    enum="NavigationBrowserMappedUrnUuidInIframeOrFencedFrame"
    expires_after="2024-03-03">
  <owner>xiaochenzh@chromium.org</owner>
  <owner>shivanisha@chromium.org</owner>
  <summary>
    For navigation requests with FLEDGE or SharedStorage generated urn:uuid,
    record whether it is rendered in a fenced frame or iframe. Recorded when
    navigation requests begin (i.e. during
    NavigationRequest::BeginNavigation()).
  </summary>
</histogram>

<histogram name="Navigation.CodeCacheTime.{CodeCacheType}" units="ms"
    expires_after="2023-06-15">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <summary>
    Measures how long it takes to fetch from the code cache. Logged every time
    the code cache is fetched for the navigation body or a resource.
  </summary>
  <token key="CodeCacheType">
    <variant name="MainFrame"/>
    <variant name="Resource"/>
    <variant name="Subframe"/>
  </token>
</histogram>

<histogram name="Navigation.DidCommitSameDocumentNavigation.Duration"
    units="ms" expires_after="2024-02-20">
  <owner>peilinwang@google.com</owner>
  <owner>woa-performance-bugs+jank@google.com</owner>
  <summary>
    Measures the amount of time it takes to call
    RenderFrameHostImpl::DidCommitSameDocumentNavigation(). Logged once per call
    to RenderFrameHostImpl::DidCommitSameDocumentNavigation().
  </summary>
</histogram>

<histogram name="Navigation.DownloadPolicy.LogArbitraryPolicyPerDownload"
    enum="NavigationDownloadPolicy" expires_after="2020-11-01">
  <owner>csharrison@chromium.org</owner>
  <owner>yaoxia@chromium.org</owner>
  <summary>
    When a navigation results in a download, logs the download policy applied to
    that navigation. This is logged once per download and when multiple policies
    exist, an arbitrary one will be chosen.
  </summary>
</histogram>

<histogram name="Navigation.DownloadPolicy.LogPerPolicyApplied"
    enum="NavigationDownloadPolicy" expires_after="2020-11-01">
  <owner>csharrison@chromium.org</owner>
  <owner>yaoxia@chromium.org</owner>
  <summary>
    When a navigation results in a download, for each download policy applied to
    that navigation, logs the policy.
  </summary>
</histogram>

<histogram name="Navigation.Earlyhints.EarlyHintsToResponseStartTime"
    units="ms" expires_after="2024-01-28">
  <owner>bashi@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Time from a navigation request received the first early hints to the
    response started. Recorded per navigation when both early hints and the
    final response are received.
  </summary>
</histogram>

<histogram name="Navigation.Earlyhints.WillStartRequestToEarlyHintsTime"
    units="ms" expires_after="2024-01-28">
  <owner>bashi@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Time from a navigation request will start to the first early hints is
    received. Recorded per navigation when both early hints and the final
    response are received.
  </summary>
</histogram>

<histogram name="Navigation.EarlyRenderFrameHostSwap.HasCommitted"
    enum="Boolean" expires_after="2024-08-03">
  <owner>alexmos@chromium.org</owner>
  <owner>creis@chromium.org</owner>
  <summary>
    If a navigation swaps to the destination RenderFrameHost early, this records
    whether or not the navigation actually ended up committing a document. This
    will be true for most navigations, but false for downloads and 204
    responses. Recorded once for every navigation that performs an early
    RenderFrameHost swap.
  </summary>
</histogram>

<histogram name="Navigation.EarlyRenderFrameHostSwap.IsInOutermostMainFrame"
    enum="BooleanMainFrame" expires_after="2024-08-03">
  <owner>alexmos@chromium.org</owner>
  <owner>creis@chromium.org</owner>
  <summary>
    If a navigation swaps to the destination RenderFrameHost early, this records
    whether the navigation was in an outermost main frame. Recorded once per
    early RenderFrameHost swap.
  </summary>
</histogram>

<histogram name="Navigation.EarlyRenderFrameHostSwapType"
    enum="EarlyRFHSwapType" expires_after="2024-08-03">
  <owner>alexmos@chromium.org</owner>
  <owner>creis@chromium.org</owner>
  <summary>
    This records whether a navigation swapped to the destination RenderFrameHost
    early (prior to commit), as well as the reason for this swap. Recorded once
    at the end of every navigation, when NavigationRequest is destroyed.
  </summary>
</histogram>

<histogram name="Navigation.EngagementTime.HTTP" units="ms"
    expires_after="never">
<!-- expires-never: Underlies a public transparency report graph https://transparencyreport.google.com/https/overview?hl=en -->

  <owner>estark@chromium.org</owner>
  <owner>security-enamel@chromium.org</owner>
  <summary>
    The amount of time that an HTTP page was in the foreground. Recorded on
    every page close/transition. This metric is exposed publicly on the HTTPS
    Transparency Report at
    https://transparencyreport.google.com/https/overview?hl=en.
  </summary>
</histogram>

<histogram name="Navigation.EngagementTime.HTTPS" units="ms"
    expires_after="never">
<!-- expires-never: Underlies a public transparency report graph https://transparencyreport.google.com/https/overview?hl=en -->

  <owner>estark@chromium.org</owner>
  <owner>security-enamel@chromium.org</owner>
  <summary>
    The amount of time that an HTTPS page was in the foreground. Recorded on
    every page close/transition. This metric is exposed publicly on the HTTPS
    Transparency Report at
    https://transparencyreport.google.com/https/overview?hl=en.
  </summary>
</histogram>

<histogram name="Navigation.EngagementTime.Ratio" units="%"
    expires_after="2024-02-20">
  <owner>estark@chromium.org</owner>
  <owner>security-enamel@chromium.org</owner>
  <summary>
    The percentage of time that HTTPS pages were in the foreground, as compared
    to total foreground time. Recorded whenever user metrics are uploaded.
  </summary>
</histogram>

<histogram name="Navigation.FencedFrameTopNavigation"
    enum="FencedFrameNavigationState" expires_after="2024-10-01">
  <owner>lbrady@google.com</owner>
  <owner>shivanisha@chromium.org</owner>
  <summary>
    This records top-level navigations that originated from a fenced frame or
    URN iframe. At navigation start, a 'Begin' is logged. If the navigation
    commits (i.e. doesn't fail at some point in the navigation process), a
    'Commit' is logged. To get the percentage of top-level navigations
    originating from a fenced frame or URN iframe that successfully commit,
    divide the number of 'Commit' logs by the number of 'Begin' logs.
  </summary>
</histogram>

<histogram name="Navigation.GetFrameHostForNavigation.Duration" units="ms"
    expires_after="2024-02-20">
  <owner>peilinwang@google.com</owner>
  <owner>woa-performance-bugs+jank@google.com</owner>
  <summary>
    Measures the amount of time it takes to call
    RenderFrameHostManager::GetFrameHostForNavigation(). Logged once per call to
    RenderFrameHostManager::GetFrameHostForNavigation(), most often two times
    per navigation.
  </summary>
</histogram>

<histogram name="Navigation.Guest.IsHTTPOrHTTPS"
    enum="BooleanHttpBasedOrOtherScheme" expires_after="2024-03-24">
  <owner>alexmos@chromium.org</owner>
  <owner>creis@chromium.org</owner>
  <owner>wjmaclean@chromium.org</owner>
  <summary>
    Whether the committing guest navigation targets an HTTP(S) URL. Logged at
    ready-to-commit time for navigations in a webview tag (also known as
    &quot;guest&quot; in process model terminology), excluding same-document
    navigations and errors.
  </summary>
</histogram>

<histogram name="Navigation.Guest.IsMainFrame" enum="BooleanMainFrame"
    expires_after="2024-03-24">
  <owner>alexmos@chromium.org</owner>
  <owner>creis@chromium.org</owner>
  <owner>wjmaclean@chromium.org</owner>
  <summary>
    Whether the committing guest navigation is in a main frame. Logged at
    ready-to-commit time for navigations in a webview tag (also known as
    &quot;guest&quot; in process model terminology), excluding same-document
    navigations and errors.
  </summary>
</histogram>

<histogram name="Navigation.Home.IsChromeInternal" enum="Boolean"
    expires_after="never">
<!-- expires-never: part of top-line metric (internal: go/chrome-browser-nsm) -->

  <owner>mpearson@chromium.org</owner>
  <owner>amaralp@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <summary>
    Emitted every time a user uses a Home button to go to their home page.
    Records whether the page is chrome-internal (most likely the New Tab Page or
    about:blank) or not (most likely an actual web site). For the purpose of
    this histogram, about:, chrome: and chrome-native: are considered
    chrome-internal; everything else is not.

    The user action Navigation.Home.NotChromeInternal is also logged in the case
    that false is logged to this histogram.

    This histogram is of special interest to the chrome-analysis-team@. Do not
    change its semantics or retire it without talking to them first.
  </summary>
</histogram>

<histogram name="Navigation.HostnameHasDeviationCharacters" units="count"
    expires_after="2024-02-11">
  <owner>meacer@chromium.org</owner>
  <owner>chrome-trusty-transport@google.com</owner>
  <summary>
    Counts the number of typed and pasted main frame navigations to hostnames
    that contain characters that are treated differently between IDNA 2003 and
    IDNA 2008, aka deviation characters. Ignores reload navigations.
  </summary>
</histogram>

<histogram name="Navigation.IsGuest" enum="NavigationIsGuest"
    expires_after="2024-03-24">
  <owner>alexmos@chromium.org</owner>
  <owner>creis@chromium.org</owner>
  <owner>wjmaclean@chromium.org</owner>
  <summary>
    Whether the committing navigation is for a webview tag (also known as
    &quot;guest&quot; in process model terminology). Logged at ready-to-commit
    time for every navigation, excluding same-document navigations and errors.
  </summary>
</histogram>

<histogram name="Navigation.IsLockedProcess" enum="NavigationIsLockedProcess"
    expires_after="2023-11-10">
  <owner>alexmos@chromium.org</owner>
  <owner>lukasza@chromium.org</owner>
  <summary>
    Whether the navigation commits in a process that is locked to an origin.
    Logged at ready-to-commit time for every navigation excluding same-document
    navigations and errors.
  </summary>
</histogram>

<histogram name="Navigation.IsLockedProcess.HTTPOrHTTPS"
    enum="NavigationIsLockedProcess" expires_after="2023-11-10">
  <owner>alexmos@chromium.org</owner>
  <owner>lukasza@chromium.org</owner>
  <summary>
    Whether the navigation commits in a process that is locked to an origin.
    Logged at ready-to-commit time for every navigation that commits with a HTTP
    or HTTPS URL scheme, excluding same-document navigations and errors.
  </summary>
</histogram>

<histogram name="Navigation.IsSameBrowsingInstance"
    enum="NavigationIsSameBrowsingInstance" expires_after="2025-01-01">
  <owner>arthursonzogni@chromium.org</owner>
  <owner>clamy@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    Whether a main frame navigation led to a change of BrowsingInstance or not.
  </summary>
</histogram>

<histogram name="Navigation.IsSameSiteInstance"
    enum="NavigationIsSameSiteInstance" expires_after="2025-01-01">
  <owner>arthursonzogni@chromium.org</owner>
  <owner>clamy@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    Whether the navigation led to a change of SiteInstance or not.
  </summary>
</histogram>

<histogram name="Navigation.LatencyAblation.ExcessWaitTime" units="ms"
    expires_after="2023-08-08">
  <owner>ryansturm@chromium.org</owner>
  <owner>spelchat@chromium.org</owner>
  <summary>
    The time the user waits beyond what is configured for the latency ablation
    study. The enabled arms of the latency ablation study prescribe an amount of
    time to delay the navigation, and this histogram records the amount of time
    that was waited beyond that prescription. Recorded upon resuming the
    navigation after the ablation occurs. This ablation occurs for most
    navigations, but does not occur for subframes, prerenders, fenced frames,
    bf/restore style navigations, and client redirects. The experiment can be
    configured to only affect default search (or only affect non default
    search).
  </summary>
</histogram>

<histogram name="Navigation.LoadIfNecessaryType"
    enum="NavigationNeedsReloadType" expires_after="never">
<!-- expires-never: Generally useful metric on Android that tracks number of automatic tab reloads and their cause.  -->

  <owner>boliu@chromium.org</owner>
  <owner>alexmos@chromium.org</owner>
  <owner>src/base/android/OWNERS</owner>
  <summary>
    The type of the source of a load from LoadIfNecessary. Recorded when
    LoadIfNecessary starts a page load. For example, on Android,
    kRequestedByClient is recorded when user switch back to a tab with a dead
    renderer, which causes the tab to reload.
  </summary>
</histogram>

<histogram name="Navigation.MainFrame.FrameCount" units="frames"
    expires_after="2023-01-20">
  <owner>michaelpg@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    The number of frames that are present in a WebContents. Recorded once when
    the main frame finishes loading.
  </summary>
</histogram>

<histogram name="Navigation.MainFrame.MaxFrameCount" units="frames"
    expires_after="2024-01-21">
  <owner>michaelpg@chromium.org</owner>
  <owner>yilkal@chromium.org</owner>
  <owner>cros-families-eng@google.com</owner>
  <summary>
    The maximum number of loaded frames that are present in a WebContents.
    Recorded once when the main frame is moving away from current page. This can
    be when the WebContents is being destroyed or when it starts loading new
    content.
  </summary>
</histogram>

<histogram
    name="Navigation.MainFrame.RendererInitiated.InitiatorFramePresentAtStart"
    enum="BooleanPresent" expires_after="2023-10-01">
  <owner>yaoxia@chromium.org</owner>
  <owner>cammie@chromium.org</owner>
  <summary>
    Whether the initiator frame is present when a renderer-initiated primary
    main frame navigation has started. Recorded for each renderer-initiated
    primary main frame navigation when the navigation has started (i.e. during
    WebContentsObserver::DidStartNavigation()).
  </summary>
</histogram>

<histogram name="Navigation.MainFrame.SiteEngagementLevel"
    enum="SiteEngagementLevel" expires_after="2024-02-25">
  <owner>meacer@chromium.org</owner>
  <owner>security-enamel@chromium.org</owner>
  <summary>
    Site engagement level of the URL of the top frame of a navigation. Only
    counts HTTP or HTTPS URLs and ignores downloads.
  </summary>
</histogram>

<histogram name="Navigation.MainFrame.ThirdPartyCookieBlockingEnabled"
    enum="ThirdPartyCookieBlockState" expires_after="2024-02-25">
  <owner>dullweber@chromium.org</owner>
  <owner>feuunk@chromium.org</owner>
  <summary>
    Records whether third party cookie blocking was enabled for a site. Recorded
    for each main-frame navigation when that navigation commits. Only counts
    HTTP or HTTPS URLs and ignores downloads.
  </summary>
</histogram>

<histogram name="Navigation.MainFrameFormSubmission.SiteEngagementLevel"
    enum="SiteEngagementLevel" expires_after="2021-04-04">
  <owner>meacer@chromium.org</owner>
  <owner>security-enamel@chromium.org</owner>
  <summary>
    Site engagement level of the URL of the top frame of a form submission. This
    is a subset of Navigation.MainFrame.SiteEngagementLevel.
  </summary>
</histogram>

<histogram name="Navigation.MainFrameHasRTLDomain2" enum="Boolean"
    expires_after="2024-03-17">
  <owner>cthomp@chromium.org</owner>
  <owner>trusty-transport@chromium.org</owner>
  <summary>
    Whether the main-frame navigation was to a URL with an RTL domain name. This
    is only recorded for finished navigations and not attempts. Warning: this
    histogram was expired from M92 through M95; data may be missing.
  </summary>
</histogram>

<histogram name="Navigation.MainFrameHasRTLDomainDifferentPage2" enum="Boolean"
    expires_after="2024-03-17">
  <owner>cthomp@chromium.org</owner>
  <owner>trusty-transport@chromium.org</owner>
  <summary>
    Whether the main-frame navigation was to a URL with an RTL domain name,
    recorded for each main-frame avigation that replaces a document object. This
    is not reported for reference fragment navigations, pushState/replaceState
    or same page history navigation. This is only recorded for finished
    navigations and not attempts.
  </summary>
</histogram>

<histogram name="Navigation.MainFrameProfileType2" enum="BrowserProfileType"
    expires_after="2024-03-17">
  <owner>rhalavati@chromium.org</owner>
  <owner>chrome-privacy-core@google.com</owner>
  <summary>
    The browser profile type for each main-frame navigation, recorded after
    navigation completion, including NTP.
  </summary>
</histogram>

<histogram name="Navigation.MainFrameScheme2" enum="NavigationScheme"
    expires_after="2024-01-15">
  <owner>estark@chromium.org</owner>
  <owner>elawrence@chromium.org</owner>
  <owner>trusty-transport@chromium.org</owner>
  <summary>
    The scheme of the URL for each main-frame navigation. This is only recorded
    for finished navigations and not attempts. Warning: this histogram was
    expired from 2021-06-01 through M95; data may be missing.
  </summary>
</histogram>

<histogram name="Navigation.MainFrameSchemeDifferentPage2"
    enum="NavigationScheme" expires_after="never">
<!-- expires-never: Underlies a public transparency report graph https://transparencyreport.google.com/https/overview?hl=en -->

  <owner>estark@chromium.org</owner>
  <owner>elawrence@chromium.org</owner>
  <owner>trusty-transport@chromium.org</owner>
  <summary>
    The scheme of the URL for each main-frame navigation that replaces a
    document object. This is not reported for reference fragment navigations,
    pushState/replaceState or same page history navigation. This is only
    recorded for finished navigations and not attempts.
  </summary>
</histogram>

<histogram name="Navigation.MainFrameSchemeDifferentPageOTR2"
    enum="NavigationScheme" expires_after="2024-03-17">
  <owner>estark@chromium.org</owner>
  <owner>elawrence@chromium.org</owner>
  <owner>trusty-transport@chromium.org</owner>
  <summary>
    The scheme of the URL for each main-frame navigation that replaces a
    document object while in incognito. This is not reported for reference
    fragment navigations, pushState/replaceState or same page history
    navigation. This is only recorded for finished navigations and not attempts.
  </summary>
</histogram>

<histogram name="Navigation.MainFrameSchemeOTR2" enum="NavigationScheme"
    expires_after="2024-01-15">
  <owner>elawrence@chromium.org</owner>
  <owner>estark@chromium.org</owner>
  <summary>
    The scheme of the URL for each main-frame navigation while in incognito.
    This is only recorded for finished navigations and not attempts. Warning:
    this histogram was expired from 2021-06-01 through M97; data may be missing.
  </summary>
</histogram>

<histogram name="Navigation.NavigationRequestCreation.SpeculativeRFHExisted"
    enum="SpeculativeRenderFrameHostType" expires_after="2022-06-30">
  <obsolete>
    Obsolete after 2022-06-30.
  </obsolete>
  <owner>rakina@chromium.org</owner>
  <owner>dcheng@chromium.org</owner>
  <summary>
    Records whether a speculative RenderFrameHost for an older navigation
    existed when a new NavigationRequest is created, causing the speculative
    RenderFrameHost to be deleted.
  </summary>
</histogram>

<histogram name="Navigation.NavigationStartToBeforeUnloadForLegacy" units="ms"
    expires_after="2024-02-11">
  <owner>sky@chromium.org</owner>
  <owner>swarm-team@chromium.org</owner>
  <summary>
    Time from navigation start to before task is posted to continue with
    navigation. This is only logged if there are no before-unload handlers and a
    post task is used rather than synchronously continuing (referred to as
    for_legacy in code).
  </summary>
</histogram>

<histogram
    name="Navigation.NavigationStartToBeginWithAvoidUnnecessaryBeforeUnloadSync"
    units="ms" expires_after="2024-03-17">
  <owner>sky@chromium.org</owner>
  <owner>swarm-team@chromium.org</owner>
  <summary>
    Time from navigation start to calling NavigationRequest::BeginNavigation().
    This is only logged if before-unload handlers are skipped because the
    feature AvoidUnnecessaryBeforeUnloadCheckSync is enabled.
  </summary>
</histogram>

<histogram name="Navigation.OnBeforeUnloadBrowserToRendererIpcTime" units="ms"
    expires_after="2023-11-19">
  <owner>sky@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <summary>
    Time it takes for the renderer to receive the request to process
    before-unload handlers.
  </summary>
</histogram>

<histogram name="Navigation.OnBeforeUnloadLegacyPostTaskTime" units="ms"
    expires_after="2024-03-24">
  <owner>sky@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <summary>
    Time it takes for navigation to start when a PostTask() is used for legacy
    before-unload handlers. Only logged if the feature
    AvoidUnnecessaryBeforeUnloadCheck is enabled.
  </summary>
</histogram>

<histogram name="Navigation.OnBeforeUnloadOverheadTime" units="ms"
    expires_after="2024-03-10">
  <owner>clamy@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    Overhead time spent handling the OnBeforeUnload event from the browser
    standpoint. More precisely, it is the total time between dispatch and
    acknowledgment of the BeforeUnload event on the browser side, minus the
    actual time spent executing the BeforeUnload handlers on the renderer side.
  </summary>
</histogram>

<histogram name="Navigation.OnBeforeUnloadTotalTime" units="ms"
    expires_after="2024-02-11">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Milliseconds spent to process all the beforeunload events in JavaScript and
    waiting time for beforeunload dialog is closed if necessary. Recorded only
    when a non-reload navigation occurs.
  </summary>
</histogram>

<histogram name="Navigation.OriginAgentCluster.Result"
    enum="OriginAgentClusterEndResult" expires_after="2024-03-17">
  <owner>alexmos@chromium.org</owner>
  <owner>creis@chromium.org</owner>
  <owner>wjmaclean@chromium.org</owner>
  <summary>
    For every successful cross-document commit, this logs whether or how
    OriginAgentCluster was involved. It tracks whether it was requested, as well
    as whether the isolation was granted, which can be affected by other
    documents in the same browsing context group. If OriginAgentCluster-by-
    default is not enabled, the first four enum values track this state. If
    OriginAgentCluster-by-default is enabled, then the second (disjoint) set of
    six enum values tracks this state, plus the two additional cases where
    OriginAgentCluster was explicitly not requested, and was or wasn't granted.
  </summary>
</histogram>

<histogram
    name="Navigation.PendingCommit.BlockedCommitCount.{RegularOrMHTMLType}"
    units="count" expires_after="2023-12-31">
  <owner>dcheng@chromium.org</owner>
  <owner>rakina@chromium.org</owner>
  <summary>
    Records how many attempts to assign a final RenderFrameHost for a navigation
    were blocked due to a pre-existing speculative RenderFrameHost being in the
    kPendingCommit state. Collected when the navigation commits in
    DidCommitNavigation().
  </summary>
  <token key="RegularOrMHTMLType" variants="RegularOrMHTMLType"/>
</histogram>

<histogram name="Navigation.PendingCommit.BlockedCount.{RegularOrMHTMLType}"
    units="count" expires_after="2023-12-31">
  <owner>dcheng@chromium.org</owner>
  <owner>rakina@chromium.org</owner>
  <summary>
    Records how many attempts to assign RenderFrameHost (initial or final) for a
    navigation were blocked due to a pre-existing speculative RenderFrameHost
    being in the kPendingCommit state. Collected when the navigation commits in
    DidCommitNavigation().
  </summary>
  <token key="RegularOrMHTMLType" variants="RegularOrMHTMLType"/>
</histogram>

<histogram
    name="Navigation.PendingCommit.DidBlockGetFrameHostForNavigation.{RegularOrMHTMLType}"
    units="Boolean" expires_after="2023-12-31">
  <owner>dcheng@chromium.org</owner>
  <owner>rakina@chromium.org</owner>
  <summary>
    Records whether any calls to `GetFrameHostForNavigation()` that failed due
    to a pre-existing speculative RenderFrameHost being in the kPendingCommit
    state. Collected when the navigation commits in DidCommitNavigation().
  </summary>
  <token key="RegularOrMHTMLType" variants="RegularOrMHTMLType"/>
</histogram>

<histogram name="Navigation.PendingCommit.Duration.{RegularOrMHTMLType}"
    units="ms" expires_after="2023-12-31">
  <owner>dcheng@chromium.org</owner>
  <owner>rakina@chromium.org</owner>
  <summary>
    Measures the amount of time between the browser asking a speculative
    RenderFrameHost to commit a navigation in the renderer and the commit
    actually being recorded in the browser process. Collected when the
    navigation commits in DidCommitNavigation().
  </summary>
  <token key="RegularOrMHTMLType" variants="RegularOrMHTMLType"/>
</histogram>

<histogram name="Navigation.Preconnect.PreresolveJobQueueingTime" units="ms"
    expires_after="2023-08-08">
  <owner>alexilin@chromium.org</owner>
  <owner>blundell@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Measures the amount of time that a requested preresolve job spends queueing
    before being executed (e.g., due to a max # of preconnects being in flight).
    Recorded for each presolve job.
  </summary>
</histogram>

<histogram name="Navigation.Preconnect.PreresolveJobQueueLength" units="count"
    expires_after="2023-08-08">
  <owner>alexilin@chromium.org</owner>
  <owner>blundell@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Measures the length of the queue of preresolve jobs at the beginning of
    PreconnectManager processing this queue to execute jobs. Recorded each time
    that PreconnectManager processes the queue of pending jobs.
  </summary>
</histogram>

<histogram name="Navigation.Preconnect.ProxyLookupCallbackQueueingTime"
    units="ms" expires_after="2023-06-04">
  <owner>alexilin@chromium.org</owner>
  <owner>blundell@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Measures the amount of time that the task corresponding to the completion
    callback for a proxy lookup performed as part of navigation preconnect spent
    being queued before executing. Recorded for each proxy lookup.
  </summary>
</histogram>

<histogram name="Navigation.Preconnect.ProxyLookupLatency" units="ms"
    expires_after="2023-06-04">
  <owner>alexilin@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Measures the duration from initiation to completion for a proxy lookup
    performed as part of navigation preconnect. Recorded for each proxy lookup.
    Note: Does not capture any delay spent queuing *before* initiating the proxy
    lookup (e.g., due to a max # of preconnects being in flight).
  </summary>
</histogram>

<histogram name="Navigation.Preconnect.ResolveHostCallbackQueueingTime"
    units="ms" expires_after="2023-06-04">
  <owner>alexilin@chromium.org</owner>
  <owner>blundell@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Measures the amount of time that the task corresponding to the completion
    callback for a host resolution performed as part of navigation preconnect
    spent being queued before executing. Recorded for each host resolution.
  </summary>
</histogram>

<histogram name="Navigation.Preconnect.ResolveHostLatency" units="ms"
    expires_after="2023-06-04">
  <owner>alexilin@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Measures the duration from initiation to completion for a host resolution
    performed as part of navigation preconnect. Recorded for each host
    resolution. Note: Does not capture any delay spent queuing *before*
    initiating the host resolution (e.g., due to a max # of preconnects being in
    flight).
  </summary>
</histogram>

<histogram name="Navigation.Prefetch.PrefetchJobQueueingTime" units="ms"
    expires_after="2023-03-19">
  <owner>blundell@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <owner>sophiechang@chromium.org</owner>
  <summary>
    Measures the amount of time that a requested prefetch job spends queueing
    before being executed (e.g., due to a max # of prefetches being in flight).
    Recorded for each prefetch job.
  </summary>
</histogram>

<histogram name="Navigation.Prefetch.PrefetchJobQueueLength" units="count"
    expires_after="2023-03-19">
  <owner>blundell@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <owner>sophiechang@chromium.org</owner>
  <summary>
    Measures the length of the queue of prefetch jobs at the beginning of
    PrefetchManager processing this queue to execute jobs. Recorded each time
    that PrefetchManager processes the queue of pending jobs.
  </summary>
</histogram>

<histogram
    name="Navigation.Prerender.ActivationCommitDeferTime{PrerenderTriggerType}"
    units="ms" expires_after="2024-02-20">
  <owner>nhiroki@chromium.org</owner>
  <owner>chrome-prerendering@chromium.org</owner>
  <summary>
    Measures time a PrerenderCommitDeferringCondition defers activation waiting
    to commit an ongoing mainframe prerender navigation. Logged every time a
    PrerenderCommitDeferringCondition defers navigation.

    After 2023/05, this metric is used with PrerenderTriggerType key and records
    even when PrerenderCommitDeferringCondition doesn't delay navigation as zero
    delay. Previously the metric was only used without the key and recorded only
    when PrerenderCommitDeferringCondition deferred navigation.
  </summary>
  <token key="PrerenderTriggerType" variants="PrerenderTriggerType"/>
</histogram>

<histogram name="Navigation.QueueTime.{Method}.{FrameType}" units="ms"
    expires_after="2023-07-28">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <summary>
    Measures the amount of time the task to run {Method} was queued before
    running. Logged every time {Method} is run for a {FrameType} in
    NavigationURLLoaderImpl with a valid queue time.
  </summary>
  <token key="Method">
    <variant name="OnReceiveRedirect"/>
    <variant name="OnReceiveResponse"/>
  </token>
  <token key="FrameType" variants="FrameTypes"/>
</histogram>

<histogram name="Navigation.ReadyToCommitUntilCommit2" units="ms"
    expires_after="2023-03-05">
  <owner>clamy@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    The time needed to commit a navigation once it is ready to commit. This is
    the time between ReadyToCommit and DidFinishNavigation (for a navigation
    that commits).

    Warning: this histogram was expired after M85 and brought back 2021-04-13;
    data may be missing.
  </summary>
</histogram>

<histogram name="Navigation.RendererCommitDelay.{FrameType}" units="ms"
    expires_after="2023-05-05">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <summary>
    Measures the delay between when the navigation commit was sent by the
    browser to when it is received by the renderer. Recorded for every
    cross-document non-page activation navigation commit.
  </summary>
  <token key="FrameType" variants="FrameTypes"/>
</histogram>

<histogram name="Navigation.RendererCommitProcessWaitTime.{FrameType}"
    units="ms" expires_after="2023-05-05">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <summary>
    Measures how long the navigation commit was waiting for the renderer process
    to start before it was able to receive the commit. Recorded for every
    cross-document non-page activation navigation commit which waits on a
    process start.
  </summary>
  <token key="FrameType" variants="FrameTypes"/>
</histogram>

<histogram name="Navigation.RendererCommitQueueTime.{FrameType}" units="ms"
    expires_after="2023-05-05">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <summary>
    Measures queue time for the navigation commit mojo task on the renderer
    side. Recorded for every cross-document non-page activation navigation
    commit.
  </summary>
  <token key="FrameType" variants="FrameTypes"/>
</histogram>

<histogram name="Navigation.RendererDidNavigateTime.{FrameType}" units="ms"
    expires_after="2023-07-28">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <summary>
    Measures time it takes to call
    NavigationControllerImpl::RendererDidNavigate. Recorded for each navigation
    that is not a same document navigation.
  </summary>
  <token key="FrameType" variants="FrameTypes"/>
</histogram>

<histogram
    name="Navigation.RendererInitiatedCancellation.DeferStartToCancellationWindowEnd"
    units="ms" expires_after="2022-10-21">
  <obsolete>
    Obsolete after 2022-10-21. All cancellation window ends within 10000ms. See
    UMA result:
    https://docs.google.com/document/d/1VNmvEVuaiNH3ypt6YfrYPsJJp8okCTYjooekarOiWN8/edit#heading=h.tlh3g7tofz2
  </obsolete>
  <owner>rakina@chromium.org</owner>
  <owner>dcheng@chromium.org</owner>
  <summary>
    Measures the amount of time it takes from
    RendererCancellationThrottle::WillProcessResponse() to
    RendererCancellationThrottle::NavigationCancellationWindowEnded. Recorded
    for each navigation that gets deferred by RendererCancellationThrottle.
  </summary>
</histogram>

<histogram name="Navigation.RequiresDedicatedProcess"
    enum="NavigationRequiresDedicatedProcess" expires_after="2024-02-25">
  <owner>alexmos@chromium.org</owner>
  <owner>lukasza@chromium.org</owner>
  <summary>
    Whether the navigation commits in a SiteInstance that requires a dedicated
    process. Logged at ready-to-commit time for every navigation excluding
    same-document navigations and errors.
  </summary>
</histogram>

<histogram name="Navigation.RequiresDedicatedProcess.HTTPOrHTTPS"
    enum="NavigationRequiresDedicatedProcess" expires_after="2024-03-19">
  <owner>alexmos@chromium.org</owner>
  <owner>lukasza@chromium.org</owner>
  <summary>
    Whether the navigation commits in a SiteInstance that requires a dedicated
    process. Logged at ready-to-commit time for every navigation that commits
    with a HTTP or HTTPS URL scheme, excluding same-document navigations and
    errors.
  </summary>
</histogram>

<histogram name="Navigation.SendCommitNavigationTime.{FrameType}" units="ms"
    expires_after="2023-08-15">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <summary>
    Measures the time RenderFrameHostImpl::SendCommitNavigation takes to run.
    Recorded every time the method executes.
  </summary>
  <token key="FrameType" variants="FrameTypes"/>
</histogram>

<histogram name="Navigation.StartToCommit" units="ms"
    expires_after="2024-03-17">
  <owner>nasko@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The time delta between the start of a navigation and the time it is
    committed.

    Warning: this histogram was expired after M85 and brought back 2021-04-13;
    data may be missing.
  </summary>
</histogram>

<histogram name="Navigation.SuddenTerminationDisabler.{Origins}"
    enum="NavigationSuddenTerminationDisabler" expires_after="2024-02-20">
  <owner>fergal@chromium.org</owner>
  <owner>rakina@chromium.org</owner>
  <summary>
    Records the combination of mainframe/subframe and what sudden termination
    disablers were present. This is recorded on every cross-document navigation.
    Currently only covers Unload. The SameOrigin variant only considers a frame
    to be same origin as the main frame if it can be reached through a chain of
    same-origin frames. So e.g. in a-&gt;b-&gt;a, the second a is not
    same-origin.
  </summary>
  <token key="Origins">
    <variant name="AllOrigins"/>
    <variant name="SameOrigin"/>
  </token>
</histogram>

<histogram name="Navigation.ThrottleDeferTime.{Event}" units="ms"
    expires_after="2023-02-11">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <summary>
    Measures time a navigation throttle was deferred when on {Event}. Logged
    every time a throttle defers a navigation.
  </summary>
  <token key="Event" variants="NavigationThrottleEvents"/>
</histogram>

<histogram name="Navigation.ThrottleExecutionTime.{Event}" units="ms"
    expires_after="2023-02-11">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <summary>
    Measures time a navigation throttle took to execute {Event}. Logged every
    time a throttle runs.
  </summary>
  <token key="Event" variants="NavigationThrottleEvents"/>
</histogram>

<histogram name="Navigation.TimeToActivatePrerender{PrerenderTriggerType}"
    units="ms" expires_after="2024-04-27">
  <owner>nhiroki@chromium.org</owner>
  <owner>sreejakshetty@chromium.org</owner>
  <owner>chrome-prerendering@chromium.org</owner>
  <summary>
    The time needed to commit a navigation using prerender activation. This is
    the time from the beginning of NavigationStart to the end of
    DidCommitPageActivation.

    This metric is logged everytime prerender activation navigation commits.
  </summary>
  <token key="PrerenderTriggerType" variants="PrerenderTriggerType"/>
</histogram>

<histogram name="Navigation.TimeToReadyToCommit2" units="ms"
    expires_after="2024-03-17">
  <owner>clamy@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    The time delta between the start of a navigation and the time it is ready to
    commit.

    Warning: this histogram was expired after M85 and brought back 2021-04-13;
    data may be missing.
  </summary>
</histogram>

<histogram name="Navigation.TpcdMitigations.MetadataInstallationResult"
    enum="TpcdMetadataInstallationResult" expires_after="2024-07-01">
  <owner>njeunje@chromium.org</owner>
  <owner>src/chrome/browser/tpcd/OWNERS</owner>
  <summary>
    The outcome from Third Party Cookies Deprecation Metadata component
    installation.

    This metric is recorded at most once for every new metadata version
    installed.
  </summary>
</histogram>

<histogram name="Navigation.UndoCommit.IsSpeculativeRenderFrameLive"
    enum="BooleanPresent" expires_after="2022-06-30">
  <obsolete>
    Obsolete after 2022-06-30.
  </obsolete>
  <owner>rakina@chromium.org</owner>
  <owner>dcheng@chromium.org</owner>
  <summary>
    Records whether a speculative RenderFrame is live when UndoCommitNavigation
    is called.
  </summary>
</histogram>

<histogram name="Navigation.UserAgentStringType" enum="UserAgentStringType"
    expires_after="2024-03-10">
  <owner>miketaylr@chromium.org</owner>
  <owner>potassium-katabolism@google.com</owner>
  <summary>
    The type of the user agent string value sent in the User-Agent header on a
    navigation request. The reduced user agent string is sent when User-Agent
    reduction feature kReduceUserAgentMinorVersion is enabled. This histogram is
    recorded when a NavigationRequest is constructed, prior to sending the
    request to the network stack.
  </summary>
</histogram>

<histogram name="Navigation.VerifyDidCommitParams"
    enum="VerifyDidCommitParamsDifference" expires_after="2021-12-26">
  <owner>rakina@chromium.org</owner>
  <owner>altimin@chromium.org</owner>
  <summary>
    Logs inconsistencies between browser- vs renderer-calculated values of
    DidCommitProvisionalLoadParams which are detected in RenderFrameHostImpl's
    VerifyThatBrowserAndRendererCalculatedDidCommitParamsMatch(). This is used
    to trigger traces to be uploaded to analyze what happened in these
    navigations.
  </summary>
</histogram>

<histogram name="Navigation.{Stage}.{FrameType}" units="ms"
    expires_after="2023-05-06">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <summary>
    Measures the amount of time the {Stage} stage takes in early navigation.
    Logged for any navigation that reaches the stage.
  </summary>
  <token key="Stage">
    <variant name="BeginNavigationImpl"
        summary="NavigationRequest::BeginNavigationImpl"/>
    <variant name="DidStartLoading" summary="FrameTreeNode::DidStartLoading"/>
    <variant name="LoaderCreateToRequestStart"
        summary="NavigationURLLoaderImpl creation to network request start"/>
    <variant name="WillStartRequestToLoaderStart"
        summary="NavigationRequest::WillStartRequest to
                 NavigationURLLoader::Start"/>
  </token>
  <token key="FrameType" variants="FrameTypes"/>
</histogram>

<histogram name="NavigationSuggestion.Event2" enum="NavigationSuggestionEvent"
    expires_after="2023-06-04">
  <owner>meacer@chromium.org</owner>
  <owner>security-enamel@chromium.org</owner>
  <summary>
    Tracks events when the currently navigated domain name is a lookalike to one
    of the top 10K domains or a domain that the user interacted with, resulting
    in a navigation suggestion interstitial.

    Before M88, NavigationSuggestion.Event recorded a separate entry for each
    lookalike URL in a redirect chain. E.g. lookalike1.com -&gt; site.com -&gt;
    lookalike2.com recorded two events. This updated histogram only records an
    entry for the first or last URL in the redirect if any of those is a
    lookalike.
  </summary>
</histogram>

<histogram
    name="NavigationSuggestion.GetDomainInfoDelayBeforeAllowingNavigation"
    units="ms" expires_after="2024-02-25">
  <owner>meacer@chromium.org</owner>
  <owner>blundell@chromium.org</owner>
  <owner>security-enamel@chromium.org</owner>
  <summary>
    Records the time duration that PerformChecks() spent in calls to
    GetDomainInfo() before the navigation was ultimately allowed to proceed.
    Recorded only for navigations that
    LookalikeUrlNavigationThrottle::PerfomChecks() directly allows to proceed
    (i.e., not those that result in showing interstitials and/or digital asset
    manifest checks).
  </summary>
</histogram>

<histogram
    name="NavigationSuggestion.IsLookalikeUrlDelayBeforeAllowingNavigation"
    units="ms" expires_after="2024-02-25">
  <owner>meacer@chromium.org</owner>
  <owner>blundell@chromium.org</owner>
  <owner>security-enamel@chromium.org</owner>
  <summary>
    Records the time duration that PerformChecks() spent in calls to
    IsLookalikeUrl() before the navigation was ultimately allowed to proceed.
    Recorded only for navigations that
    LookalikeUrlNavigationThrottle::PerfomChecks() directly allows to proceed
    (i.e., not those that result in showing interstitials and/or digital asset
    manifest checks).
  </summary>
</histogram>

<histogram
    name="NavigationSuggestion.PerformChecksDelayBeforeAllowingNavigation"
    units="ms" expires_after="2024-02-25">
  <owner>meacer@chromium.org</owner>
  <owner>blundell@chromium.org</owner>
  <owner>security-enamel@chromium.org</owner>
  <summary>
    Records the time duration the navigation was deferred while PerformChecks()
    was executing before the navigation was ultimately allowed to proceed.
    Recorded only for navigations that
    LookalikeUrlNavigationThrottle::PerfomChecks() directly allows to proceed
    (i.e., not those that result in showing interstitials and/or digital asset
    manifest checks).
  </summary>
</histogram>

<histogram name="NavigationSuggestion.UpdateEngagedSitesDeferTime" units="ms"
    expires_after="2023-01-15">
  <owner>meacer@chromium.org</owner>
  <owner>cduvall@chromium.org</owner>
  <owner>security-enamel@chromium.org</owner>
  <summary>
    Records the time duration the navigation was deferred while waiting for
    engaged sites data. Recorded whenever a navigation is deferred waiting for
    engaged sites.
  </summary>
</histogram>

<histogram
    name="Prerender.CanceledForInactivePageRestriction.DisallowActivationReason{PrerenderTriggerType}"
    enum="InactiveFrameDisallowActivationReason" expires_after="2024-01-31">
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-prerendering@chromium.org</owner>
  <summary>
    Tracks the prerender cancellations caused by inactive RenderFrameHosts'
    restrictions, recording the reason passed to
    RenderFrameHost::IsInactiveAndDisallowActivation calls.

    This metric is recored when a RenderFrameHost is going to perform some
    actions that are not allowed for a prerendering RenderFrameHost, such as
    showing context menu. At that time, the detailed reason will be passed to
    RenderFrameHost::IsInactiveAndDisallowActivation, which will cancel
    prerendering and record this metric.

    Note: This histogram does not track prerender activation behavior, but to
    analyze PrerenderHostFinalStatus::kInactivePageRestriction.

    Warning: this histogram was expired from 2023-03-01 to 2023-03-29; data may
    be missing.
  </summary>
  <token key="PrerenderTriggerType" variants="PrerenderTriggerType"/>
</histogram>

<histogram
    name="Prerender.Experimental.ActivationHeadersMismatch{PrerenderTriggerType}"
    enum="PrerenderActivationHeaderMismatchType" expires_after="2024-01-31">
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Breakdown metric for
    PrerenderActivationNavigationParamsMatch::kHttpRequestHeader. We are
    considering whether we should loosen this restriction, so this metric is
    added to figure out the usage of headers during prerender navigation and
    activation navigation. See https://crbug.com/1378921 for more information.

    When we are attempting to activate a prerendered page, we compare the
    prerendered page's NavigationRequest's headers with the incoming
    NavigationRequest's (called activation navigation). If they mismatch,
    PrerenderHost will post a task. The task scans the two headers, and will
    report a mismatching record if it detects any differences between them. It
    records the hashed number of a mismatching header, together with the
    mismatching reason: Missing in prerendering navigation, missing in
    activation navigation, or the values mismatch.

    Warning: this histogram was expired from 2023-01-31 to 2023-03-29; data may
    be missing.
  </summary>
  <token key="PrerenderTriggerType" variants="PrerenderTriggerType"/>
</histogram>

<histogram name="Prerender.Experimental.ActivationIPCDelay" units="ms"
    expires_after="2024-01-28">
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Recorded by WebViewImpl::ActivatePrerenderedPage when renderer process
    starts to ask the receiver end of the prerender activation IPC to process
    this signal, i.e., when this method is invoked. This metric is used to
    measure the delay of when renderer process receives the signal and when it
    can process this signal. Recorded on the main document only.
  </summary>
</histogram>

<histogram
    name="Prerender.Experimental.ActivationNavigationParamsMatch{PrerenderTriggerType}"
    enum="PrerenderActivationNavigationParamsMatch" expires_after="2024-02-20">
  <owner>nhiroki@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Records the mismatched parameters between the prerender initial navigation
    parameters and the prerender activation navigation parameters. Recorded by
    PrerenderHost in the browser process when comparing these two parameters.
  </summary>
  <token key="PrerenderTriggerType" variants="PrerenderTriggerType"/>
</histogram>

<histogram
    name="Prerender.Experimental.ActivationTransitionMismatch{PrerenderTriggerType}"
    enum="PrerenderActivationTransitionMismatchType" expires_after="2024-02-20">
  <owner>nhiroki@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Breakdown metric for PrerenderActivationNavigationParamsMatch::kTransition.

    When we are attempting to activate a prerendered page, we compare the
    prerendered page's NavigationRequest's ui::PageTransition with the incoming
    NavigationRequest's (called activation navigation). If they mismatch, this
    metric records the transition of the activation navigation in
    RecordPrerenderActivationTransition().
  </summary>
  <token key="PrerenderTriggerType" variants="PrerenderTriggerType"/>
</histogram>

<histogram
    name="Prerender.Experimental.BookmarkBar.EnterToPressDuration{ButtonType}"
    units="ms" expires_after="2024-02-24">
  <owner>robertlin@chromium.org</owner>
  <owner>toyoshim@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    The metrics for preload bookmark to understand the distribution of delay to
    press {ButtonType}. Recorded when the mouse {ButtonType} is pressed.
  </summary>
  <token key="ButtonType">
    <variant name="" summary="any button"/>
    <variant name=".LeftButton" summary="the left button"/>
  </token>
</histogram>

<histogram
    name="Prerender.Experimental.BookmarkBar.HoverDuration{OriginType}.{ConversionResultType}"
    units="ms" expires_after="2024-02-24">
  <owner>robertlin@chromium.org</owner>
  <owner>toyoshim@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    The metrics for preload boomark to understand the distribution of mouse
    hovering duration from {OriginType}. It records mouse hovering duration time
    when mouse leaves the bookmark button areas without using it as NotTaken, or
    when the bookmark is actually clicked as Taken.
  </summary>
  <token key="OriginType">
    <variant name="" summary="the time mouse entering to the button"/>
    <variant name=".FromLastMouseMove" summary="the last time mouse move"/>
  </token>
  <token key="ConversionResultType">
    <variant name="NotTaken"/>
    <variant name="Taken"/>
  </token>
</histogram>

<histogram name="Prerender.Experimental.BookmarkBar.PredictionResult"
    enum="PrerenderPredictionResult" expires_after="2024-02-04">
  <owner>robertlin@chromium.org</owner>
  <owner>toyoshim@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    This metric is to count the combination of bookmark bar triggering
    prerender's predictor's decision and result. Recorded on mouse leaving a
    bookmark button in the bookmark bar.
  </summary>
</histogram>

<histogram name="Prerender.Experimental.BookmarkUrlButtonEvent"
    enum="PreloadBookmarkMetricsEvent" expires_after="2024-02-04">
  <owner>robertlin@chromium.org</owner>
  <owner>toyoshim@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    The metrics for preload bookmark to evaluate the ratio of mouseover and
    mousedown translating into full mouse click.
  </summary>
</histogram>

<histogram
    name="Prerender.Experimental.CrossOriginRedirectionProtocolChange{PrerenderTriggerType}"
    enum="PrerenderCrossOriginRedirectionProtocolChange"
    expires_after="2023-12-03">
  <owner>lingqi@chromium.org</owner>
  <owner>nhiroki@chromium.org</owner>
  <owner>src/content/browser/preloading/prerender/OWNERS</owner>
  <summary>
    A breakdown metric for analyzing cross-origin redirection cases during
    embedder-triggered prerendering, Recorded when redirections were caused due
    to HTTP protocol upgrades.

    Note that for now it is not used for prerendering that are triggered by
    speculation rules.
  </summary>
  <token key="PrerenderTriggerType" variants="PrerenderTriggerType"/>
</histogram>

<histogram
    name="Prerender.Experimental.DefaultSearchEngine.SearchTermExtractorCorrectness"
    enum="Boolean" expires_after="2023-10-31">
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Records whether the search terms obtained via the search_terms_args are the
    same as the search terms extracted from the URLs. This is recorded when
    PrerenderManager attempts to start a new prerender.
  </summary>
</histogram>

<histogram name="Prerender.Experimental.PredictionStatus.DefaultSearchEngine"
    enum="PrerenderPredictionStatus" expires_after="2024-02-25">
  <owner>asamidoi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Records the prediction status started by omnibox. In particular, this
    records whether they were used or not. It's recorded when omnibox-initiated
    navigation finishes. Consider it as a success when the prediction is correct
    and note that the activation of prerendering may fail.
  </summary>
</histogram>

<histogram name="Prerender.Experimental.PredictionStatus.DirectUrlInput"
    enum="PrerenderPredictionStatus" expires_after="2024-02-25">
  <owner>asamidoi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Records the prediction status started by omnibox. In particular, this
    records whether they were used or not. It's recorded when omnibox-initiated
    navigation finishes. Consider it as a success when the prediction is correct
    and note that the activation of prerendering may fail.
  </summary>
</histogram>

<histogram
    name="Prerender.Experimental.PrerenderCancelledInterface{PrerenderTriggerType}"
    enum="PrerenderCancelledInterface" expires_after="2024-02-20">
  <owner>nhiroki@chromium.org</owner>
  <owner>toyoshim@chromium.org</owner>
  <owner>lingqi@chromium.org</owner>
  <summary>
    Mojo interfaces that cause the cancellation of prerendering. Recorded by
    MojoBinderPolicyApplier in the browser process once it receives the binding
    request of a kCancel Mojo interface.
  </summary>
  <token key="PrerenderTriggerType" variants="PrerenderTriggerType"/>
</histogram>

<histogram
    name="Prerender.Experimental.PrerenderCancelledUnknownInterface{PrerenderTriggerType}"
    enum="PrerenderCancelledUnknownInterface" expires_after="2024-02-20">
  <owner>nhiroki@chromium.org</owner>
  <owner>toyoshim@chromium.org</owner>
  <owner>lingqi@chromium.org</owner>
  <summary>
    This histogram tracks the interfaces that
    Prerender.Experimental.PrerenderCancelledInterface fails to track. It is
    needed because:

    * Embedders can set their own policies, so Prerender2 cannot map all of them
    to enums.

    * Channel-associated interfaces' policies are set to kCancel implicitly.
    It's hard to track all of them, especially the newly added
    channel-associated interfaces.

    This sparse histogram allows Prerender2 to record all of these interfaces
    separately.

    It is recored by MojoBinderPolicyApplier in the browser process once it
    receives the binding request of a kCancel Mojo interface and cannot find an
    accurate enum type for this interface.
  </summary>
  <token key="PrerenderTriggerType" variants="PrerenderTriggerType"/>
</histogram>

<histogram
    name="Prerender.Experimental.PrerenderCrossOriginRedirectionMismatch{PrerenderTriggerType}"
    enum="PrerenderCrossOriginRedirectionMismatch" expires_after="2023-12-03">
  <owner>lingqi@chromium.org</owner>
  <owner>nhiroki@chromium.org</owner>
  <owner>src/content/browser/preloading/prerender/OWNERS</owner>
  <summary>
    A breakdown metric for analyzing cross-origin redirection cases during
    embedder-triggered prerendering. Recorded when the embedder-triggered
    prerendering was redirected to another origin that differs from the initial
    one.

    The cases are encoded into 3 bits(scheme mismatch, host mismatch, port
    mismatch).

    Note that for now it is not used for prerendering that are triggered by
    speculation rules.
  </summary>
  <token key="PrerenderTriggerType" variants="PrerenderTriggerType"/>
</histogram>

<histogram
    name="Prerender.Experimental.PrerenderHostFinalStatus{PrerenderTriggerType}"
    enum="PrerenderHostFinalStatus" expires_after="2024-02-20">
  <owner>nhiroki@chromium.org</owner>
  <owner>toyoshim@chromium.org</owner>
  <owner>lingqi@chromium.org</owner>
  <owner>asamidoi@chromium.org</owner>
  <summary>
    Final status for a prerendering attempt. Recorded by PrerenderHost or
    PrerenderHostRegistry in the browser process when the attempt finishes.
  </summary>
  <token key="PrerenderTriggerType" variants="PrerenderTriggerType"/>
</histogram>

<histogram
    name="Prerender.Experimental.PrerenderLoadingFailureError{PrerenderTriggerType}"
    enum="NetErrorCodes" expires_after="2024-02-20">
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Net error code is recorded by PrerenderCancellationReason when a prerender
    host is canceled due to kDidFailLoad.

    This metric is used to monitor whether preload cache intercepting logic
    causes extra page loading errors. Similar to
    PageLoad.Internal.Prerender2.ActivatedPageLoaderStatus{PrerenderTriggerType},
    but used to track the loading status of not activated prerendered pages.
  </summary>
  <token key="PrerenderTriggerType" variants="PrerenderTriggerType"/>
</histogram>

<histogram
    name="Prerender.Experimental.ReceivedPrerendersPerPrimaryPageChangedCount{PrerenderTriggerType}{EagernessCategory}"
    units="count" expires_after="2024-03-03">
  <owner>taiyo@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Records the number of eventually received speculation rules prerender
    triggers with eagerness per primary page changed, classified with their
    eagerness. This is coutend via started_prerenders_ on PrerendererImpl and
    recorded when primary page is changed and
    PrerendererImpl::CancelStartedPrerenders is called.

    Note that this metric only records where PrerenderTriggerType is
    SpeculationRule and SpeculationRuleFromIsolatedWorld.
  </summary>
  <token key="PrerenderTriggerType" variants="PrerenderTriggerType"/>
  <token key="EagernessCategory">
    <variant name=".Conservative"/>
    <variant name=".Eager"/>
    <variant name=".Moderate"/>
    <variant name=".NonEager"/>
    <variant name=".Total"/>
  </token>
</histogram>

<histogram
    name="Prerender.Experimental.ResourceLoadingBlockedByClientByType{PrerenderTriggerType}"
    enum="RequestDestination" expires_after="2023-12-03">
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Recorded by RecordBlockedByClientResourceType when prerender is cancelled
    due to the restriction that client blocks a resource loading.
  </summary>
  <token key="PrerenderTriggerType" variants="PrerenderTriggerType"/>
</histogram>

<histogram
    name="Prerender.Experimental.Search.FirstCorrectPrerenderHintReceivedToRealSearchNavigationStartedDuration"
    units="ms" expires_after="2023-10-31">
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    PrerenderManager records the duration period from the time to start
    prerendering with the search hints to the time to navigate the search hints.
    This duration is recorded when it finds the search hints predicts correctly,
    e.g. users do search and results in activating the prerendered page, or
    users do saerch the prerender hints but the prerendered page has been
    destroyed due to expiration.

    |====== HitFinishedSearchResultLifeTime=======|

    @ Timestamp X ------------------------------- @ Timestamp Y

    or

    |====== HitFinishedSearchResultLifeTime=============|

    @ Timestamp X ------------------------------------- @ Timestamp Z

    Where:

    * Timestamp X: Chrome receives the first prerender hints for a search term
    A.

    * Timestamp Y: User selects the search term A.

    * Timestamp Z: Timestamp X + Fixed period T.

    HitFinishedSearchResultLifeTime = min(Timestamp Y, Timestamp Z) - Timestamp
    X = min(Timestamp Y - Timestamp X, T).

    It aims to:

    1. Track the prerenders which were canceled due to expiration(Fixed period
    T).

    2. Gain the understanding of the duration between the moment when browser
    receives the first prerender hint and the moment when the hint is selected.
    This data will be used to determine the threshold of deciding whether to
    reuse a prefetched response or to resend a prefetch request.
  </summary>
</histogram>

<histogram name="Prerender.Experimental.Search.ResponseReuseCount"
    units="count" expires_after="2023-11-20">
  <owner>lingqi@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Recorded by StreamingSearchPrefetchURLLoader in its destructor. This
    instance is created per (non-duplicated) prefetch attempt. The destructor
    runs upon:

    - Case 1: A prefetched response is deleted upon expiration or network error.

    - Case 2: A prefetched response deletes itself after finishing serving to
    navigations. This will be executed asynchronously.

    See comments in StreamingSearchPrefetchURLLoader for more information.

    Indicates the number of prerendering DSE navigation that one prefetched
    response served to. In most cases, it should record 0 (which means the
    loader does not serve to any prerendering navigations) or 1 (served to one
    prerender). And we will track the count that is greater than 2 to determine
    whether the loader should be designed to target multiple serving
    destinations.

    This number should be quite small (0 or 1 in most cases), so the count is
    capped at 9 and put into 10 buckets, from 0 to 9.
  </summary>
</histogram>

<histogram name="Prerender.FinalStatus" enum="PrerenderFinalStatus"
    expires_after="2024-02-25">
  <owner>ryansturm@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Final status for prerender pages - either success, or why it was canceled.
  </summary>
</histogram>

<histogram name="Prerender.NetworkBytesTotalForProfile" units="bytes"
    expires_after="M77">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Number of bytes transferred on the network for URLRequests (not including
    HTTP/TLS/TCP/IP overhead). Reported on event of a PrerenderContents
    deletion. Includes prerender bytes. Bytes are only counted when prerendering
    is enabled and not in a control group. The sum of the distribution for a
    single user represents all of that user's network transfers for resource for
    that time period while prerendering was enabled.
  </summary>
</histogram>

<histogram name="Prerender.NetworkBytesWasted" units="bytes"
    expires_after="M77">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Number of bytes transferred on the network for URLRequests (not including
    HTTP/TLS/TCP/IP overhead) for a prerender that was not used. All
    nostate-prefetch bytes are currently counted as wasted because it is hard to
    track byte use in HTTP cache.
  </summary>
</histogram>

<histogram name="Prerender.NoStatePrefetchMainResourceRedirects"
    units="redirects" expires_after="M85">
  <owner>droger@chromium.org</owner>
  <owner>mattcary@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Length of the redirect chain for main resources loaded by NoStatePrefetch.
    Recorded when the final response in the chain is received.
  </summary>
</histogram>

<histogram name="Prerender.NoStatePrefetchResponseTypes"
    enum="NoStatePrefetchResponseType" expires_after="M85">
  <owner>droger@chromium.org</owner>
  <owner>mattcary@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Type of responses received by NoStatePrefetch, distinguishing cacheable
    resources from no-store resources, and main resources from sub-resources.
    Recorded when a response is received, including on each redirect.
  </summary>
</histogram>

<histogram name="Prerender.NoStatePrefetchSubResourceRedirects"
    units="redirects" expires_after="M85">
  <owner>droger@chromium.org</owner>
  <owner>mattcary@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Length of the redirect chain for sub-resources loaded by NoStatePrefetch.
    Recorded when the final response in the chain is received.
  </summary>
</histogram>

<histogram name="Prerender.PrerenderLoadComplete" enum="BooleanSuccess"
    expires_after="2024-02-26">
  <owner>gambard@chromium.org</owner>
  <owner>justincohen@chromium.org</owner>
  <summary>
    Whether the load was completed when the pre-render was used. If the
    prerender is cancelled, this is not logged. Only on iOS.
  </summary>
</histogram>

<histogram name="Prerender.PrerenderLoadedOnFirstNTP" enum="Boolean"
    expires_after="M81">
  <owner>justincohen@chromium.org</owner>
  <summary>
    Whether or not a successful prerender happens on a NTP with no history.
  </summary>
</histogram>

<histogram name="Prerender.PrerenderLoadedOnIndex" units="units"
    expires_after="M81">
  <owner>justincohen@chromium.org</owner>
  <summary>
    The last comitted index before a successful preload is committed. Recorded
    only on iOS.
  </summary>
</histogram>

<histogram name="Prerender.PrerendersPerSessionCount" units="units"
    expires_after="2021-04-22">
  <owner>ryansturm@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    The number of sessions that have at least X successful prerenders. Recorded
    only on iOS since 2017-09.
  </summary>
</histogram>

<histogram name="Prerender.PrerenderTimeSaved" units="ms"
    expires_after="2024-02-26">
  <owner>gambard@chromium.org</owner>
  <owner>justincohen@chromium.org</owner>
  <summary>
    This is the time from when a prerendered page begins to load to when it is
    swapped in as the main page load or to when the pre-loaded page is fully
    loaded, whichever came first. Recorded when the swap occurs, only on iOS.
  </summary>
</histogram>

<histogram name="Prerender.TabContentsDeleterTimeout"
    enum="BooleanCloseTimeout" expires_after="M85">
  <owner>pasko@chromium.org</owner>
  <summary>
    A boolean that indicates how often we fail to delete an old prerendered tab
    before the timeout.
  </summary>
</histogram>

</histograms>

</histogram-configuration>
