Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 2fda965361be7922d1ab91a2d76a2c2acd0f9a1f
      
https://github.com/WebKit/WebKit/commit/2fda965361be7922d1ab91a2d76a2c2acd0f9a1f
  Author: Karl Dubost <[email protected]>
  Date:   2026-09-14 (Mon, 14 Sep 2026)

  Changed paths:
    M LayoutTests/TestExpectations
    M 
LayoutTests/imported/mozilla/svg/pattern-transform-presence-01-expected.svg
    M LayoutTests/imported/mozilla/svg/pattern-transform-presence-01.svg
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/gradient-transform-template-inheritance-expected.svg
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/gradient-transform-template-inheritance.svg
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/linear-gradient-transform-empty-attr-expected.svg
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/linear-gradient-transform-empty-attr.svg
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/pattern-transform-empty-attr-expected.svg
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/pattern-transform-empty-attr.svg
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/pattern-transform-template-inheritance-expected.svg
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/pattern-transform-template-inheritance.svg
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/radial-gradient-transform-empty-attr-expected.svg
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/radial-gradient-transform-empty-attr.svg
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/reference/gradient-transform-template-inheritance-ref.svg
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/reference/pattern-transform-template-inheritance-ref.svg
    M 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/reference/w3c-import.log
    M 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/w3c-import.log
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/scripted/linear-gradient-transform-clear-expected.svg
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/scripted/linear-gradient-transform-clear.svg
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/scripted/radial-gradient-transform-clear-expected.svg
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/scripted/radial-gradient-transform-clear.svg
    M 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/scripted/w3c-import.log
    R 
LayoutTests/svg/custom/gradient-transform-empty-or-invalid-not-inherited-expected.svg
    R 
LayoutTests/svg/custom/gradient-transform-empty-or-invalid-not-inherited.svg
    R 
LayoutTests/svg/custom/pattern-transform-empty-or-invalid-not-inherited-expected.svg
    R 
LayoutTests/svg/custom/pattern-transform-empty-or-invalid-not-inherited.svg
    M Source/WebCore/svg/SVGGradientElement.cpp
    M Source/WebCore/svg/SVGGradientElement.h
    M Source/WebCore/svg/SVGPatternElement.cpp
    M Source/WebCore/svg/SVGPatternElement.h

  Log Message:
  -----------
  SVG patternTransform.baseVal.clear() should cause patternTransform to be 
ignored
https://bugs.webkit.org/show_bug.cgi?id=308017
rdar://170518953

Reviewed by Nikolas Zimmermann.

A pattern element can point to another pattern with href. The attributes
it doesn't set itself are taken from the pattern it points to.

    <pattern id="p1" patternTransform="scale(2)"/>
    <pattern id="p" href="#p1" patternTransform=""> … </pattern>

Here #p should be scaled by 2, but it is not. The empty patternTransform
counts as setting a transform, so the one on #p1 is never used. Same
issue when the list is emptied from script with
patternTransform.baseVal.clear(). Gradients behave the same way with
gradientTransform.

The code was checking if the attribute is present before reading the
list. Since Bug 309642, concatenate() returns nothing for an empty list.
So the presence check is not needed anymore, and it is wrong. An empty
list is exactly the case which should fall back on the referenced
pattern.

Fix by removing the presence check and using the returned value only.
hasPatternTransformAttribute() and hasGradientTransformAttribute() have
no callers left, so they are removed too.

patternTransform and gradientTransform are presentation attributes for
the transform property. An empty or an invalid value makes the
declaration invalid, the declaration is ignored, and transform keeps its
initial value none. Nothing is specified, so the referenced element
provides the value. Blink and Gecko both behave this way.
See https://w3c.github.io/svgwg/svg2-draft/pservers.html#Patterns
and https://w3c.github.io/svgwg/svg2-draft/types.html#TermInvalidValue
and https://w3c.github.io/svgwg/svg2-draft/pservers.html#PaintServerTemplates

Two tests in svg/custom added by 319280@main were asserting the old
behavior. They are replaced by WPT tests with the same cases, plus two
cases which had no coverage. No attribute at all, and a transform set
only from script, which does resolve and so is correctly not inherited.

The four gradient tests are removed from TestExpectations. They were not
failing on behavior. Each one compares a gradient with a solid fill of
the same stop color, and the two match with a difference of one unit per
channel. The fuzzy annotation keeps maxDifference at one, so a real
regression still fails. The number of pixels covers the full painted
area, because this number depends on the rasterizer and the scale, not
on the behavior. 3952 at 1x, 4344 at 2x.

Test: 
imported/w3c/web-platform-tests/svg/pservers/reftests/gradient-transform-template-inheritance.svg
      
imported/w3c/web-platform-tests/svg/pservers/reftests/linear-gradient-transform-empty-attr.svg
      
imported/w3c/web-platform-tests/svg/pservers/reftests/pattern-transform-empty-attr.svg
      
imported/w3c/web-platform-tests/svg/pservers/reftests/pattern-transform-template-inheritance.svg
      
imported/w3c/web-platform-tests/svg/pservers/reftests/radial-gradient-transform-empty-attr.svg
      
imported/w3c/web-platform-tests/svg/pservers/scripted/linear-gradient-transform-clear.svg
      
imported/w3c/web-platform-tests/svg/pservers/scripted/pattern-transform-clear.svg
      
imported/w3c/web-platform-tests/svg/pservers/scripted/radial-gradient-transform-clear.svg

* LayoutTests/TestExpectations:
* LayoutTests/imported/mozilla/svg/pattern-transform-presence-01-expected.svg:
* LayoutTests/imported/mozilla/svg/pattern-transform-presence-01.svg:
  Brought in line with Mozilla's own copy, which no longer
  distinguishes an empty patternTransform from an absent one.

* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/gradient-transform-template-inheritance-expected.svg:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/gradient-transform-template-inheritance.svg:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/linear-gradient-transform-empty-attr-expected.svg:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/linear-gradient-transform-empty-attr.svg:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/pattern-transform-empty-attr-expected.svg:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/pattern-transform-empty-attr.svg:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/pattern-transform-template-inheritance-expected.svg:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/pattern-transform-template-inheritance.svg:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/radial-gradient-transform-empty-attr-expected.svg:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/radial-gradient-transform-empty-attr.svg:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/reference/gradient-transform-template-inheritance-ref.svg:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/reference/pattern-transform-template-inheritance-ref.svg:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/reference/w3c-import.log:
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/reftests/w3c-import.log:
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/scripted/linear-gradient-transform-clear-expected.svg:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/scripted/linear-gradient-transform-clear.svg:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/scripted/radial-gradient-transform-clear-expected.svg:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/scripted/radial-gradient-transform-clear.svg:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/pservers/scripted/w3c-import.log:
* 
LayoutTests/svg/custom/gradient-transform-empty-or-invalid-not-inherited-expected.svg:
 Removed.
* LayoutTests/svg/custom/gradient-transform-empty-or-invalid-not-inherited.svg: 
Removed.
* 
LayoutTests/svg/custom/pattern-transform-empty-or-invalid-not-inherited-expected.svg:
 Removed.
* LayoutTests/svg/custom/pattern-transform-empty-or-invalid-not-inherited.svg: 
Removed.

* Source/WebCore/svg/SVGGradientElement.cpp:
(WebCore::SVGGradientElement::hasGradientTransformAttribute const): Deleted.
(WebCore::SVGGradientElement::collectCommonGradientAttributes):
* Source/WebCore/svg/SVGGradientElement.h:
* Source/WebCore/svg/SVGPatternElement.cpp:
(WebCore::SVGPatternElement::hasPatternTransformAttribute const): Deleted.
(WebCore::SVGPatternElement::collectOwnPatternAttributes const):
* Source/WebCore/svg/SVGPatternElement.h:

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



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

Reply via email to