Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 2e0c7a1325e77dfe9a67c60778af5ce27efa4c78
      
https://github.com/WebKit/WebKit/commit/2e0c7a1325e77dfe9a67c60778af5ce27efa4c78
  Author: Matt Woodrow <[email protected]>
  Date:   2024-05-02 (Thu, 02 May 2024)

  Changed paths:
    M LayoutTests/TestExpectations
    A 
LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/dialog-in-rtl-iframe-old-expected.html
    A 
LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/dialog-in-rtl-iframe-old-ref.html
    A 
LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/dialog-in-rtl-iframe-old.html
    A 
LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/support/dialog-in-rtl-iframe-child-old.html
    M LayoutTests/platform/glib/TestExpectations
    M LayoutTests/platform/gtk/TestExpectations
    M Source/WebCore/dom/Document.cpp
    M Source/WebCore/dom/Document.h
    M Source/WebCore/dom/ViewTransition.cpp
    M Source/WebCore/dom/ViewTransition.h
    M Source/WebCore/rendering/RenderElement.cpp
    M Source/WebCore/rendering/RenderElement.h
    M Source/WebCore/rendering/RenderLayer.cpp
    M Source/WebCore/rendering/RenderLayerBacking.cpp
    M Source/WebCore/rendering/RenderLayerBacking.h
    M Source/WebCore/rendering/RenderLayerCompositor.cpp

  Log Message:
  -----------
  [view-transitions] Support view transitions on top layer elements
https://bugs.webkit.org/show_bug.cgi?id=265169
<rdar://118667007>

Reviewed by Tim Nguyen.

If the captured element is the document element, then the captured images 
should be
of the RenderView instead.

We already adjust the sizing to that of the view, this changes the actual 
snapshots to
happen from the view so that the top layer is included.

Changes the layer parenting for the new snapshot so that the RenderView's layer 
gets added
to the ::view-transition-new(pseudo), and the ::view-transition root pseudo get 
directly
parented in place of the RenderView.

The render tree for this situation is this:

Content-root
     |
 RenderView
   /     \
<html>   ::view-transition
            \
           ::view-transition-group(root)
             |
           ::view-transition-image-pair(root)
             |
           ::view-transition-new(root)

We want to build a GraphicsLayer tree where the RenderView and all its contents 
(except the view-transition
tree) are attached to the ::view-transition-new.

Content-root
     |
::view-transition
     |
::view-transition-group(root)
     |
::view-transition-image-pair(root)
     |
::view-transition-new(root)
     |
 RenderView
     |
   <html>

This happens by:

RenderLayerCompositor::collectViewTransitionNewContentLayers detects when the 
captured element is the <html>,
and adjusts to reparent the RenderView instead. This ensures the 'top layer' is 
included, as required.

RenderLayerCompositor::updateBackingAndHierarchy skips attaching the 
::view-transition's GraphicsLayer
to the parent obtained via the RenderLayer hierarchy (the RenderView's layer).

RenderLayerBacking::childForSuperlayers detects when it's a RenderView and will 
already be attached to
the ::view-transition-new, and forwards the request through to the 
::view-transition's RenderLayer,
so that ::view-transition gets attached to the parent of the RenderView instead.

Adds a new test for the ::view-transition-old(root) case.

* 
LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/dialog-in-rtl-iframe-old-expected.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/dialog-in-rtl-iframe-old-ref.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/dialog-in-rtl-iframe-old.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/support/dialog-in-rtl-iframe-child-old.html:
 Added.
* Source/WebCore/dom/Document.cpp:
(WebCore::Document::activeViewTransitionCapturedDocumentElement const):
* Source/WebCore/dom/Document.h:
* Source/WebCore/dom/ViewTransition.cpp:
(WebCore::snapshotElementVisualOverflowClippedToViewport):
(WebCore::ViewTransition::documentElementIsCaptured const):
* Source/WebCore/dom/ViewTransition.h:
* Source/WebCore/rendering/RenderElement.cpp:
(WebCore::RenderElement::isViewTransitionRoot const):
* Source/WebCore/rendering/RenderElement.h:
* Source/WebCore/rendering/RenderLayer.cpp:
(WebCore::RenderLayer::paintList):
* Source/WebCore/rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::childForSuperlayers const):
(WebCore::RenderLayerBacking::childForSuperlayersExcludingViewTransitions 
const):
* Source/WebCore/rendering/RenderLayerBacking.h:
* Source/WebCore/rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::collectViewTransitionNewContentLayers):
(WebCore::RenderLayerCompositor::updateBackingAndHierarchy):

Canonical link: https://commits.webkit.org/278256@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to