[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