Title: [238651] trunk
Revision
238651
Author
[email protected]
Date
2018-11-28 17:29:54 -0800 (Wed, 28 Nov 2018)

Log Message

Updating href on linearGradient and radialGradient doesn't update its rendering
https://bugs.webkit.org/show_bug.cgi?id=191934

Patch by Said Abou-Hallawa <[email protected]> on 2018-11-28
Reviewed by Ryosuke Niwa.

Source/WebCore:

Mark the gradient renderer for repaint when the value of the 'href'
attribute changes.

Tests: fast/shadow-dom/svg-linear-gradient-dynamic-update-href-in-shadow-tree.html
       fast/shadow-dom/svg-radial-gradient-dynamic-update-href-in-shadow-tree.html
       svg/dynamic-updates/SVGLinearGradientElement-svgdom-href-prop.html
       svg/dynamic-updates/SVGRadialGradientElement-svgdom-href-prop.html

* svg/SVGGradientElement.cpp:
(WebCore::SVGGradientElement::svgAttributeChanged):

LayoutTests:

* fast/shadow-dom/svg-linear-gradient-dynamic-update-href-in-shadow-tree-expected.html: Added.
* fast/shadow-dom/svg-linear-gradient-dynamic-update-href-in-shadow-tree.html: Added.
* fast/shadow-dom/svg-radial-gradient-dynamic-update-href-in-shadow-tree-expected.html: Added.
* fast/shadow-dom/svg-radial-gradient-dynamic-update-href-in-shadow-tree.html: Added.
* svg/dynamic-updates/SVGLinearGradientElement-svgdom-href-prop-expected.html: Added.
* svg/dynamic-updates/SVGLinearGradientElement-svgdom-href-prop.html: Added.
* svg/dynamic-updates/SVGRadialGradientElement-svgdom-href-prop-expected.html: Added.
* svg/dynamic-updates/SVGRadialGradientElement-svgdom-href-prop.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (238650 => 238651)


--- trunk/LayoutTests/ChangeLog	2018-11-29 01:22:19 UTC (rev 238650)
+++ trunk/LayoutTests/ChangeLog	2018-11-29 01:29:54 UTC (rev 238651)
@@ -1,3 +1,19 @@
+2018-11-28  Said Abou-Hallawa  <[email protected]>
+
+        Updating href on linearGradient and radialGradient doesn't update its rendering
+        https://bugs.webkit.org/show_bug.cgi?id=191934
+
+        Reviewed by Ryosuke Niwa.
+
+        * fast/shadow-dom/svg-linear-gradient-dynamic-update-href-in-shadow-tree-expected.html: Added.
+        * fast/shadow-dom/svg-linear-gradient-dynamic-update-href-in-shadow-tree.html: Added.
+        * fast/shadow-dom/svg-radial-gradient-dynamic-update-href-in-shadow-tree-expected.html: Added.
+        * fast/shadow-dom/svg-radial-gradient-dynamic-update-href-in-shadow-tree.html: Added.
+        * svg/dynamic-updates/SVGLinearGradientElement-svgdom-href-prop-expected.html: Added.
+        * svg/dynamic-updates/SVGLinearGradientElement-svgdom-href-prop.html: Added.
+        * svg/dynamic-updates/SVGRadialGradientElement-svgdom-href-prop-expected.html: Added.
+        * svg/dynamic-updates/SVGRadialGradientElement-svgdom-href-prop.html: Added.
+
 2018-11-28  Truitt Savell  <[email protected]>
 
         [ Mojave WK1 ] Layout Test fast/images/animated-image-different-dest-size.html fast/images/animated-image-loop-count.html is failing

Added: trunk/LayoutTests/fast/shadow-dom/svg-linear-gradient-dynamic-update-href-in-shadow-tree-expected.html (0 => 238651)


--- trunk/LayoutTests/fast/shadow-dom/svg-linear-gradient-dynamic-update-href-in-shadow-tree-expected.html	                        (rev 0)
+++ trunk/LayoutTests/fast/shadow-dom/svg-linear-gradient-dynamic-update-href-in-shadow-tree-expected.html	2018-11-29 01:29:54 UTC (rev 238651)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<style>
+    #host {
+        width: 100px;
+        height: 100px;
+        background-color: green;
+    }
+</style>
+<body>
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
+    <div id="host"></div>
+</body>
+</html>

Added: trunk/LayoutTests/fast/shadow-dom/svg-linear-gradient-dynamic-update-href-in-shadow-tree.html (0 => 238651)


--- trunk/LayoutTests/fast/shadow-dom/svg-linear-gradient-dynamic-update-href-in-shadow-tree.html	                        (rev 0)
+++ trunk/LayoutTests/fast/shadow-dom/svg-linear-gradient-dynamic-update-href-in-shadow-tree.html	2018-11-29 01:29:54 UTC (rev 238651)
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+<style>
+    #host {
+        width: 100px;
+        height: 100px;
+    }
+</style>
+<body>
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
+    <div id="host"></div>
+    <svg>
+        <linearGradient id="gradient">
+            <stop offset="0" stop-color="red" />
+        </linearGradient>
+    </svg>
+    <template>
+        <svg viewbox="0 0 100 100">
+            <linearGradient id="gradient">
+                <stop offset="0" stop-color="green" />
+            </linearGradient>
+            <linearGradient id="blue-gradient">
+                <stop offset="0" stop-color="blue" />
+            </linearGradient>
+            <linearGradient id="gradientUse" fill="red" href="" />
+            <rect id="rect" width="100" height="100" fill="url(#gradientUse)" />
+        </svg>
+    </template>
+    <script>
+        window._onload_ = () => {
+            if (window.testRunner)
+                testRunner.waitUntilDone();
+
+            const shadowRoot = host.attachShadow({mode: 'closed'});
+            shadowRoot.appendChild(document.querySelector('template').content.cloneNode(true));
+
+            requestAnimationFrame(() => {
+                shadowRoot.querySelector('#gradientUse').setAttribute('href', '#gradient');
+                if (window.testRunner)
+                    testRunner.notifyDone();
+            });
+        }
+    </script>
+</body>
+</html>

Added: trunk/LayoutTests/fast/shadow-dom/svg-radial-gradient-dynamic-update-href-in-shadow-tree-expected.html (0 => 238651)


--- trunk/LayoutTests/fast/shadow-dom/svg-radial-gradient-dynamic-update-href-in-shadow-tree-expected.html	                        (rev 0)
+++ trunk/LayoutTests/fast/shadow-dom/svg-radial-gradient-dynamic-update-href-in-shadow-tree-expected.html	2018-11-29 01:29:54 UTC (rev 238651)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<style>
+    #host {
+        width: 100px;
+        height: 100px;
+        background-color: green;
+    }
+</style>
+<body>
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
+    <div id="host"></div>
+</body>
+</html>

Added: trunk/LayoutTests/fast/shadow-dom/svg-radial-gradient-dynamic-update-href-in-shadow-tree.html (0 => 238651)


--- trunk/LayoutTests/fast/shadow-dom/svg-radial-gradient-dynamic-update-href-in-shadow-tree.html	                        (rev 0)
+++ trunk/LayoutTests/fast/shadow-dom/svg-radial-gradient-dynamic-update-href-in-shadow-tree.html	2018-11-29 01:29:54 UTC (rev 238651)
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+<style>
+    #host {
+        width: 100px;
+        height: 100px;
+    }
+</style>
+<body>
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
+    <div id="host"></div>
+    <svg>
+        <radialGradient id="gradient">
+            <stop offset="0" stop-color="red" />
+        </radialGradient>
+    </svg>
+    <template>
+        <svg viewbox="0 0 100 100">
+            <radialGradient id="gradient">
+                <stop offset="0" stop-color="green" />
+            </radialGradient>
+            <radialGradient id="blue-gradient">
+                <stop offset="0" stop-color="blue" />
+            </radialGradient>
+            <radialGradient id="gradientUse" fill="red" href="" />
+            <rect id="rect" width="100" height="100" fill="url(#gradientUse)" />
+        </svg>
+    </template>
+    <script>
+        window._onload_ = () => {
+            if (window.testRunner)
+                testRunner.waitUntilDone();
+
+            const shadowRoot = host.attachShadow({mode: 'closed'});
+            shadowRoot.appendChild(document.querySelector('template').content.cloneNode(true));
+
+            requestAnimationFrame(() => {
+                shadowRoot.querySelector('#gradientUse').setAttribute('href', '#gradient');
+                if (window.testRunner)
+                    testRunner.notifyDone();
+            });
+        }
+    </script>
+</body>
+</html>

Added: trunk/LayoutTests/svg/dynamic-updates/SVGLinearGradientElement-svgdom-href-prop-expected.html (0 => 238651)


--- trunk/LayoutTests/svg/dynamic-updates/SVGLinearGradientElement-svgdom-href-prop-expected.html	                        (rev 0)
+++ trunk/LayoutTests/svg/dynamic-updates/SVGLinearGradientElement-svgdom-href-prop-expected.html	2018-11-29 01:29:54 UTC (rev 238651)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<style>
+    #container {
+        width: 100px;
+        height: 100px;
+        background-color: green;
+    }
+</style>
+<body>
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
+    <div id="container"></div>
+</body>
+</html>

Added: trunk/LayoutTests/svg/dynamic-updates/SVGLinearGradientElement-svgdom-href-prop.html (0 => 238651)


--- trunk/LayoutTests/svg/dynamic-updates/SVGLinearGradientElement-svgdom-href-prop.html	                        (rev 0)
+++ trunk/LayoutTests/svg/dynamic-updates/SVGLinearGradientElement-svgdom-href-prop.html	2018-11-29 01:29:54 UTC (rev 238651)
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+<style>
+    #container {
+        width: 100px;
+        height: 100px;
+    }
+</style>
+<body>
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
+    <div id="container">
+        <svg>
+            <linearGradient id="red-gradient">
+                <stop offset="0" stop-color="red"/>
+            </linearGradient>
+            <linearGradient id="green-gradient">
+                <stop offset="0" stop-color="green"/>
+            </linearGradient>
+            <linearGradient id="gradientUse" href=""
+            <rect id="rect" width="100" height="100" fill="url(#gradientUse)"/>
+        </svg>
+    </div>
+    <script>
+        window._onload_ = () => {
+            if (window.testRunner)
+                testRunner.waitUntilDone();
+
+            requestAnimationFrame(() => {
+                gradientUse.setAttribute('href', '#green-gradient');
+                if (window.testRunner)
+                    testRunner.notifyDone();
+            });
+        }
+    </script>
+</body>
+</html>

Added: trunk/LayoutTests/svg/dynamic-updates/SVGRadialGradientElement-svgdom-href-prop-expected.html (0 => 238651)


--- trunk/LayoutTests/svg/dynamic-updates/SVGRadialGradientElement-svgdom-href-prop-expected.html	                        (rev 0)
+++ trunk/LayoutTests/svg/dynamic-updates/SVGRadialGradientElement-svgdom-href-prop-expected.html	2018-11-29 01:29:54 UTC (rev 238651)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<style>
+    #container {
+        width: 100px;
+        height: 100px;
+        background-color: green;
+    }
+</style>
+<body>
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
+    <div id="container"></div>
+</body>
+</html>

Added: trunk/LayoutTests/svg/dynamic-updates/SVGRadialGradientElement-svgdom-href-prop.html (0 => 238651)


--- trunk/LayoutTests/svg/dynamic-updates/SVGRadialGradientElement-svgdom-href-prop.html	                        (rev 0)
+++ trunk/LayoutTests/svg/dynamic-updates/SVGRadialGradientElement-svgdom-href-prop.html	2018-11-29 01:29:54 UTC (rev 238651)
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+<style>
+    #container {
+        width: 100px;
+        height: 100px;
+    }
+</style>
+<body>
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
+    <div id="container">
+        <svg>
+            <radialGradient id="red-gradient">
+                <stop offset="0" stop-color="red"/>
+            </radialGradient>
+            <radialGradient id="green-gradient">
+                <stop offset="0" stop-color="green"/>
+            </radialGradient>
+            <radialGradient id="gradientUse" href=""
+            <rect id="rect" width="100" height="100" fill="url(#gradientUse)"/>
+        </svg>
+    </div>
+    <script>
+        window._onload_ = () => {
+            if (window.testRunner)
+                testRunner.waitUntilDone();
+
+            requestAnimationFrame(() => {
+                gradientUse.setAttribute('href', '#green-gradient');
+                if (window.testRunner)
+                    testRunner.notifyDone();
+            });
+        }
+    </script>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (238650 => 238651)


--- trunk/Source/WebCore/ChangeLog	2018-11-29 01:22:19 UTC (rev 238650)
+++ trunk/Source/WebCore/ChangeLog	2018-11-29 01:29:54 UTC (rev 238651)
@@ -1,3 +1,22 @@
+2018-11-28  Said Abou-Hallawa  <[email protected]>
+
+        Updating href on linearGradient and radialGradient doesn't update its rendering
+        https://bugs.webkit.org/show_bug.cgi?id=191934
+
+        Reviewed by Ryosuke Niwa.
+
+        Mark the gradient renderer for repaint when the value of the 'href'
+        attribute changes.
+
+        Tests: fast/shadow-dom/svg-linear-gradient-dynamic-update-href-in-shadow-tree.html
+               fast/shadow-dom/svg-radial-gradient-dynamic-update-href-in-shadow-tree.html
+               svg/dynamic-updates/SVGLinearGradientElement-svgdom-href-prop.html
+               svg/dynamic-updates/SVGRadialGradientElement-svgdom-href-prop.html
+
+        * svg/SVGGradientElement.cpp:
+        (WebCore::SVGGradientElement::svgAttributeChanged):
+
+
 2018-11-28  Youenn Fablet  <[email protected]>
 
         imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-transceivers.https.html is flaky on iOS simulator

Modified: trunk/Source/WebCore/svg/SVGGradientElement.cpp (238650 => 238651)


--- trunk/Source/WebCore/svg/SVGGradientElement.cpp	2018-11-29 01:22:19 UTC (rev 238650)
+++ trunk/Source/WebCore/svg/SVGGradientElement.cpp	2018-11-29 01:29:54 UTC (rev 238651)
@@ -88,7 +88,7 @@
 
 void SVGGradientElement::svgAttributeChanged(const QualifiedName& attrName)
 {
-    if (isKnownAttribute(attrName)) {
+    if (isKnownAttribute(attrName) || SVGURIReference::isKnownAttribute(attrName)) {
         InstanceInvalidationGuard guard(*this);
         if (RenderObject* object = renderer())
             object->setNeedsLayout();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to