mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Reduce the frequency of connection-related renderer crashes (see #3664)
- Use ResetWithReason to report intentional browser side disconnects of existing Mojo connections. Don't retry for those disconnects. - Add set_disconnect_with_reason_and_result_handler in Chromium/Mojo to expose the MojoResult code for failed connections, allowing identification of connections that are intentionally unbound on the browser side. - Optimize initial reconnect delay for known disconnect cases such as navigation-related and bfcache changes. - Remove connection timeout and increase total connection deadline by 100% to further reduce crash rates on slower machines. - Only fail fatally for main frames (not sub-frames) in cases where the connection fails or disconnects for unknown reasons. - Improve connection debug logging when running with `--enable-logging --vmodule=*frame*=1 --log-file=C:\temp\log.txt`
This commit is contained in:
@ -17,7 +17,12 @@
|
||||
CefBrowserFrame::CefBrowserFrame(
|
||||
content::RenderFrameHost* render_frame_host,
|
||||
mojo::PendingReceiver<cef::mojom::BrowserFrame> receiver)
|
||||
: FrameServiceBase(render_frame_host, std::move(receiver)) {}
|
||||
: CefFrameServiceBase(render_frame_host, std::move(receiver)) {
|
||||
DVLOG(1) << __func__ << ": frame "
|
||||
<< frame_util::GetFrameDebugString(
|
||||
render_frame_host->GetGlobalFrameToken())
|
||||
<< " bound";
|
||||
}
|
||||
|
||||
CefBrowserFrame::~CefBrowserFrame() = default;
|
||||
|
||||
@ -62,13 +67,15 @@ void CefBrowserFrame::FrameAttached(
|
||||
if (auto host = GetFrameHost(/*prefer_speculative=*/true, &is_excluded)) {
|
||||
host->FrameAttached(std::move(render_frame), reattached);
|
||||
} else if (is_excluded) {
|
||||
VLOG(1) << "frame "
|
||||
<< frame_util::GetFrameDebugString(
|
||||
render_frame_host()->GetGlobalFrameToken())
|
||||
<< " attach denied";
|
||||
DVLOG(1) << __func__ << ": frame "
|
||||
<< frame_util::GetFrameDebugString(
|
||||
render_frame_host()->GetGlobalFrameToken())
|
||||
<< " attach denied";
|
||||
mojo::Remote<cef::mojom::RenderFrame> render_frame_remote;
|
||||
render_frame_remote.Bind(std::move(render_frame));
|
||||
render_frame_remote->FrameAttachedAck(/*allow=*/false);
|
||||
render_frame_remote.ResetWithReason(
|
||||
static_cast<uint32_t>(frame_util::ResetReason::kExcluded), "Excluded");
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user