[webkit-changes] [WebKit/WebKit] bbebc5: [LBSE] Unbreak clipping (last minute regression)

Nikolas Zimmermann noreply at github.com
Sun Nov 5 10:32:16 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: bbebc590512613655555a348725daf9abd23e75f
      https://github.com/WebKit/WebKit/commit/bbebc590512613655555a348725daf9abd23e75f
  Author: Nikolas Zimmermann <nzimmermann at 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




More information about the webkit-changes mailing list