Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 89749ad62db146e79a4ae1c307efee7fba9a94ec
      
https://github.com/WebKit/WebKit/commit/89749ad62db146e79a4ae1c307efee7fba9a94ec
  Author: Alex Christensen <[email protected]>
  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@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


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to