Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: bbebc590512613655555a348725daf9abd23e75f
      
https://github.com/WebKit/WebKit/commit/bbebc590512613655555a348725daf9abd23e75f
  Author: Nikolas Zimmermann <nzimmerm...@igalia.com>
  Date:   2023-11-05 (Sun, 05 Nov 2023)

  Changed paths:
    M Source/WebCore/rendering/RenderLayer.cpp

  Log Message:
  -----------
  [LBSE] Unbreak clipping (last minute regression)
https://bugs.webkit.org/show_bug.cgi?id=264224

Reviewed by Rob Buis.

SVG clipping is broken, due to a last minute change in RenderLayer.

The intention to check if a renderer inherits from either 
RenderSVGResourceContainer
or RenderSVGHiddenContainer was tested using only one 
"dynamicDowncast<RenderSVGHiddenContainer">,
as RenderSVGResourceContainer also inherits from RenderSVGHiddenContainer.

However, the is<> mechanism, implemented using the RenderObject::isXYZ() 
methods, does not
work anymore like this, due to the introduction of the non-virtual type() 
method. Nowadays
is<RenderSVGHiddenContainer> boils down to:

    bool isSVGHiddenContainer() const { return type() == 
Type::SVGHiddenContainer; }

Any renderer that inherits from RenderSVGHiddenContainer, e.g. 
RenderSVGResourceClipper,
therefore returns 'false' for is<RenderSVGHiddenContainer>(), because 
RenderSVGResourceClipper
carries a different type() - here 'Type::SVGResourceClipper'.

--> One explicitly needs to check both is<RenderSVGResourceClipper>() || 
is<RenderSVGResourceContainer>())
to check if a renderer inherits from RenderSVGResourceClipper or 
RenderSVGResourceContainer -- not possible
with a single check, given the way isRenderSVGResourceContainer() is currently 
implemented.

Let's first fix this regression for now, and then discuss the correct future 
mechanism. Whether
we should respect the base-class hierarchy in is<> or not.

Covered by existing tests, when LBSE is activated.

* Source/WebCore/rendering/RenderLayer.cpp:
(WebCore::RenderLayer::updateAncestorDependentState):

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


_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to