0
Files
src/content/common/debug_utils.h
Mingyu Lei 7956b8b330 Reset BFCache NavigationRequest synchronously if it'll be restarted
This CL makes the following changes:
- If an old NavigationRequest is restarted (asynchronously) because of
the BFCache eviction, we reset it synchronously to ensure it never
outlives the RenderFrameHost.
- Since the old NavigationRequest is reset before the restarting task
is run, the task must be posted to the FrameTreeNode so that it is
not cancelled when the old NavigationRequest is destroyed.
- Between resetting the old NavigationRequest and restarting a new one,
the FrameTreeNode will not be in the loading state. This will cause
some failures in the browser tests that relies on WaitForLoadStop to
ensure the completion of history navigation. These tests have been
updated to use TestNavigationManager instead.
- If a NavigationRequest's method cause a eviction during a history
navigation, it will now return immediately to avoid use-after-free, as
the NavigationRequest itself is deleted synchronously.

For more information, please refer to https://docs.google.com/document/d/1bF1YeC6Bd0GGd-EEi0eBkNgWi4D0hC4AxzYuYmYzYak

Bug: 1430653
Change-Id: I9f5764fe7eb87de14b08f7514536206ae137f209
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4401995
Reviewed-by: Rakina Zata Amni <rakina@chromium.org>
Commit-Queue: Mingyu Lei <leimy@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1174088}
2023-07-24 08:24:08 +00:00

74 lines
3.0 KiB
C++

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_COMMON_DEBUG_UTILS_H_
#define CONTENT_COMMON_DEBUG_UTILS_H_
namespace content {
// There are cases that require debugging of complex multiprocess scenarios in
// which tools such as DumpWithoutCrashing and tracing can be useful.
// The goal of this enum is to be able to log to UMA when such complex scenarios
// occur with two goals:
// * Get an idea of the magnitute of the problem, since just crash reports
// cannot express this, given they are throttled client side.
// * For clients which have continuous tracing enabled, upload a snapshot of the
// trace to aid understanding of the interactions between all processes.
//
// Usage: Add a new value to the DebugScenario enum below and call
// CaptureTraceForNavigationDebugScenario(YOUR_NEW_ENUM_VALUE);
// from the location where you are hitting the scenario you care about.
//
// NOTE: Do not renumber elements in this list. Add new entries at the end.
// Items may be renamed but do not change the values. We rely on the enum values
// in histograms.
enum class DebugScenario {
kDebugSameDocNavigationDocIdMismatch = 1,
// A non-main frame navigation with old_page_info set was detected.
kDebugNonMainFrameWithOldPageInfo = 2,
// Metrics and the bfcache situations do not match.
kDebugBackForwardCacheMetricsMismatch = 3,
// Detected a mismatch between the origin to commit as calculated on 1) the
// browser-side VS 2) the renderer-side.
kDebugBrowserVsRendererOriginToCommit = 4,
// Evict-Restore race in Back Forward Cache - Renderer requested a frame be
// evicted from cache, but the frame is no longer in the cache.
kDebugBackForwardCacheEvictRestoreRace = 5,
// HTTP response_head was unexpectedly nullptr even for HTTP or HTTPS schemes.
kDebugNoResponseHeadForHttpOrHttps = 6,
// RenderViewHost is not present when trying to create a new subframe's
// RenderFrameProxyHost.
kDebugSubframeProxyCreationWithNoRVH = 7,
// BackForwardCacheEntry exists for a subframe history navigation.
kDebugBackForwardCacheEntryExistsOnSubframeHistoryNav = 8,
// RenderFrameProxyHost does not exist when trying to call
// RenderFrameProxyHost::SetFocusedFrame().
// 9: kDebugNoRenderFrameProxyHostOnSetFocusedFrame was removed.
// The RenderFrameHost to be restored from the back/forward cache no longer
// exists for a navigation that is not marked as being restarted.
// 10: kDebugNoRestoredRFHOnNonRestartedNavigation was removed.
// After making changes, you MUST update the histograms xml by running:
// "python tools/metrics/histograms/update_debug_scenarios.py"
kMaxValue = kDebugBackForwardCacheEntryExistsOnSubframeHistoryNav,
};
// The tracing categories enabled for debugging navigation scenarios can be
// found in server-side studies config for slow reports.
void CaptureTraceForNavigationDebugScenario(DebugScenario scenario);
} // namespace content
#endif // CONTENT_COMMON_DEBUG_UTILS_H_