[webkit-changes] [WebKit/WebKit] 89749a: Move Page::renderingUpdateCompleted call to outsid...
Alex Christensen
noreply at github.com
Wed May 31 13:23:11 PDT 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 89749ad62db146e79a4ae1c307efee7fba9a94ec
https://github.com/WebKit/WebKit/commit/89749ad62db146e79a4ae1c307efee7fba9a94ec
Author: Alex Christensen <achristensen at apple.com>
Date: 2023-05-31 (Wed, 31 May 2023)
Changed paths:
M Source/WebCore/page/Page.cpp
M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm
Log Message:
-----------
Move Page::renderingUpdateCompleted call to outside loop in Page::finalizeRenderingUpdate
https://bugs.webkit.org/show_bug.cgi?id=257127
rdar://109664043
Reviewed by Tim Horton.
This is a retry of 264330 at main with a line that prevents drawing pages that have no root frames,
which can happen after the last LocalFrame in a process is removed with a stack like this:
1 WebKit::RemoteLayerTreeDrawingArea::startRenderingUpdateTimer()
2 WebKit::RemoteLayerTreeDrawingArea::triggerRenderingUpdate()
3 WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer(WebCore::Frame&, WebCore::GraphicsLayer*)
4 WebKit::WebPage::exitAcceleratedCompositingMode(WebCore::Frame&)
5 WebKit::WebChromeClient::attachRootGraphicsLayer(WebCore::LocalFrame&, WebCore::GraphicsLayer*)
6 WebCore::RenderLayerCompositor::detachRootLayer()
7 WebCore::RenderLayerCompositor::setIsInWindow(bool)
8 WebCore::RenderView::setIsInWindow(bool)
9 WebCore::LocalFrameView::setIsInWindow(bool)
10 WebCore::Document::documentWillBecomeInactive()
11 WebCore::Document::destroyRenderTree()
12 WebCore::Document::willBeRemovedFromFrame()
13 WebCore::LocalFrame::setView(...)
14 WebKit::WebFrame::didCommitLoadInAnotherProcess(...)
Even preventing the timer from being started doesn't prevent the assertions. We need to catch
it when the timer fires, then check if there are any root frames, and exit early if there are none.
This will once again not affect any behavior with site isolation off because there will always be
exactly one root frame in that case, the main frame.
* Source/WebCore/page/Page.cpp:
(WebCore::Page::finalizeRenderingUpdate):
(WebCore::Page::finalizeRenderingUpdateForRootFrame):
* Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
(WebKit::RemoteLayerTreeDrawingArea::updateRendering):
Canonical link: https://commits.webkit.org/264751@main
More information about the webkit-changes
mailing list