[webkit-changes] [WebKit/WebKit] 34cb73: Invalidate SVG filter results in SVGResourcesCache...

Commit Queue noreply at github.com
Thu Mar 28 16:07:41 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 34cb73b0f69df082842d0ab58ae7a05a530afba7
      https://github.com/WebKit/WebKit/commit/34cb73b0f69df082842d0ab58ae7a05a530afba7
  Author: Ahmad Saleem <ahmad.saleem792 at gmail.com>
  Date:   2024-03-28 (Thu, 28 Mar 2024)

  Changed paths:
    A LayoutTests/svg/foreignObject/filter-repaint-expected.svg
    A LayoutTests/svg/foreignObject/filter-repaint.svg
    M Source/WebCore/rendering/svg/SVGResourcesCache.cpp

  Log Message:
  -----------
  Invalidate SVG filter results in SVGResourcesCache::clientLayoutChanged()

https://bugs.webkit.org/show_bug.cgi?id=271449

Reviewed by Simon Fraser.

This patch is to align WebKit with Gecko / Firefox and Blink / Chromium.

Merge: https://chromium.googlesource.com/chromium/blink/+/25d72ebd50bec9a4caa426e735e5ee7292c4da69

^ Also import `skipped` test from Blink / Chromium upstream.

This patch effectively fix regression introduced by 91851 at main.

For the SVG tree, filter result invalidation is handled by LegacyRenderSVGResource::markForLayoutAndParentResourceInvalidation.
But non-SVG content (such as a <foreignObject> HTML subtree) does not call markForLayoutAndParentResourceInvalidation
and instead uses the regular setNeedsLayout() invalidation path.

Hence, changes in the HTML subtree do not invalidate cached results for filters applied on
ancestor SVG elements. In order to cover this case, clientLayoutChanged() needs to
invalidate filter results even if the SVG element itself does not need a re-layout. Note
that prior to 91851 at main the method used to do exactly that, but the branch was removed on
the assumption that markForLayoutAndParentResourceInvalidation() is already taking care of
it. Obviously, the assumption doesn't hold for non-SVG content.

* Source/WebCore/rendering/svg/SVGResourcesCache.cpp:
(SVGResourcesCache::clientLayoutChanged():
* LayoutTests/svg/foreignObject/filter-repaint.svg: Add Test Case
* LayoutTests/svg/foreignObject/filter-repaint-expected.svg: Add Test Case Expectation

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



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list