Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 779ea20764c10a3831aa4ab5b19e7574729b828f
      
https://github.com/WebKit/WebKit/commit/779ea20764c10a3831aa4ab5b19e7574729b828f
  Author: Nikolas Zimmermann <[email protected]>
  Date:   2026-09-19 (Sat, 19 Sep 2026)

  Changed paths:
    M LayoutTests/TestExpectations
    M 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/WEB_FEATURES.yml
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-001-expected.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-001-ref.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-001.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-002-expected.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-002-ref.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-002.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-003-expected.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-003-ref.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-003.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-computed-style-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-computed-style.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-dynamic-001-expected.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-dynamic-001-ref.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-dynamic-001.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-dynamic-002-expected.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-dynamic-002-ref.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-dynamic-002.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-individual-transform-properties-001-expected.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-individual-transform-properties-001-ref.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-individual-transform-properties-001.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-scrollable-overflow-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-scrollable-overflow.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-stacking-context-001-expected.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-stacking-context-001-ref.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-stacking-context-001.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-svg-dom-001-expected.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-svg-dom-001-ref.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-svg-dom-001.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-zoom-001-expected.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-zoom-001-ref.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-zoom-001.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-zoom-002-expected.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-zoom-002-ref.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-zoom-002.html
    M LayoutTests/platform/mac-tahoe-wk2-lbse-text/TestExpectations
    A 
LayoutTests/svg/transforms/outermost-svg-transform-attribute-computed-style-expected.txt
    A 
LayoutTests/svg/transforms/outermost-svg-transform-attribute-computed-style.html
    A 
LayoutTests/svg/transforms/outermost-svg-transform-attribute-svg-dom-reparent-computed-style-expected.txt
    A 
LayoutTests/svg/transforms/outermost-svg-transform-attribute-svg-dom-reparent-computed-style.html
    M Source/WebCore/rendering/RenderLayerModelObject.cpp
    M Source/WebCore/rendering/RenderLayerModelObject.h
    M Source/WebCore/rendering/svg/RenderSVGViewportContainer.cpp
    M Source/WebCore/svg/SVGSVGElement.cpp
    M Source/WebCore/svg/SVGSVGElement.h

  Log Message:
  -----------
  The transform attribute on the outermost <svg> element is ignored or misplaced
https://bugs.webkit.org/show_bug.cgi?id=324426

Reviewed by Simon Fraser.

The transform attribute on an outermost <svg> element should transform its CSS
box, like the CSS transform property does. Blink/Gecko support this, but WebKit
failed -- we still followed the original SVG 1.1 model there this wasn't
allowed. Both the legacy SVG engine and LBSE failed: the legacy SVG engine
ignores the attribute, and LBSE applies it _inside_ the viewBox-space
leading to wrong results.

The easiest way to support this is to turn the attribute into the CSS transform
property, one CSS function per SVG function. Only rotate(a, cx, cy) needs a
an exception: "translate(cx, cy) rotate(a) translate(-cx, -cy)", because CSS
rotate() has no 3-value variant including center position.

Unlike other SVG attribute <-> CSS property mappings we manually build
the CSSTransformListValue in 
SVGSVGElement::collectExtraStyleForPresentationalHints
instead of going through the CSSParser-machinery. In general, we're
handling the SVG transform attribute without mapping to CSS transform
properties, due to performance concerns: our transform updating /
repainting mechanism (at least for LBSE) is layout-free and style-recalc
free, and more performant than mapping SVG trafos to CSS trafos. We will
need to revisit this topic, and re-profile, but it's out-of-scope for
this PR.

Fixes a WPT testcase 
imported/w3c/web-platform-tests/svg/struct/reftests/outer-svg-transform.svg.
Added more coverage for cases that lacked WPT coverage -- the new tests
are intended to be exported to WPT.

* LayoutTests/TestExpectations:
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/WEB_FEATURES.yml:
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-001-expected.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-001-ref.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-001.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-002-expected.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-002-ref.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-002.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-003-expected.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-003-ref.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-003.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-computed-style-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-computed-style.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-dynamic-001-expected.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-dynamic-001-ref.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-dynamic-001.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-dynamic-002-expected.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-dynamic-002-ref.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-dynamic-002.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-individual-transform-properties-001-expected.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-individual-transform-properties-001-ref.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-individual-transform-properties-001.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-scrollable-overflow-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-scrollable-overflow.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-stacking-context-001-expected.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-stacking-context-001-ref.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-stacking-context-001.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-svg-dom-001-expected.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-svg-dom-001-ref.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-svg-dom-001.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-zoom-001-expected.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-zoom-001-ref.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-zoom-001.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-zoom-002-expected.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-zoom-002-ref.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/coordinate-systems/outer-svg-transform-attribute-zoom-002.html:
 Added.
* LayoutTests/platform/mac-tahoe-wk2-lbse-text/TestExpectations:
* 
LayoutTests/svg/transforms/outermost-svg-transform-attribute-computed-style-expected.txt:
 Added.
* 
LayoutTests/svg/transforms/outermost-svg-transform-attribute-computed-style.html:
 Added.
* 
LayoutTests/svg/transforms/outermost-svg-transform-attribute-svg-dom-reparent-computed-style-expected.txt:
 Added.
* 
LayoutTests/svg/transforms/outermost-svg-transform-attribute-svg-dom-reparent-computed-style.html:
 Added.
* Source/WebCore/rendering/RenderLayerModelObject.cpp:
(WebCore::RenderLayerModelObject::applySVGTransform const):
* Source/WebCore/rendering/RenderLayerModelObject.h:
* Source/WebCore/rendering/svg/RenderSVGViewportContainer.cpp:
(WebCore::RenderSVGViewportContainer::applyTransform const):
* Source/WebCore/svg/SVGSVGElement.cpp:
(WebCore::SVGSVGElement::svgAttributeChanged):
(WebCore::SVGSVGElement::collectExtraStyleForPresentationalHints):
(WebCore::SVGSVGElement::insertionSteps):
(WebCore::SVGSVGElement::removingSteps):
(WebCore::SVGSVGElement::hasTransformRelatedAttributes const):
* Source/WebCore/svg/SVGSVGElement.h:

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



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

Reply via email to