[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

rwlbuis at webkit.org rwlbuis at webkit.org
Wed Dec 22 15:49:49 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 477cc172d7e0033a6c27292ed655934b04232906
Author: rwlbuis at webkit.org <rwlbuis at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Sat Nov 13 17:16:55 2010 +0000

    2010-11-13  Rob Buis  <rwlbuis at gmail.com>
    
            Reviewed by Dirk Schulze.
    
            requiredFeatures does not adapt to SVGStringList changes
            https://bugs.webkit.org/show_bug.cgi?id=40887
    
            Centralize logic of handling of SVGElement validity changes.
            The logic is to detach the SVGElement when changing from valid
            to invalid, and to attach when changing from invalid to valid.
    
            Tests: svg/dynamic-updates/SVGCircleElement-dom-requiredFeatures.html
                   svg/dynamic-updates/SVGCircleElement-svgdom-requiredFeatures.html
                   svg/dynamic-updates/SVGEllipseElement-dom-requiredFeatures.html
                   svg/dynamic-updates/SVGEllipseElement-svgdom-requiredFeatures.html
                   svg/dynamic-updates/SVGForeignObjectElement-dom-requiredFeatures.html
                   svg/dynamic-updates/SVGForeignObjectElement-svgdom-requiredFeatures.html
                   svg/dynamic-updates/SVGGElement-dom-requiredFeatures.html
                   svg/dynamic-updates/SVGGElement-svgdom-requiredFeatures.html
                   svg/dynamic-updates/SVGImageElement-dom-requiredFeatures.html
                   svg/dynamic-updates/SVGImageElement-svgdom-requiredFeatures.html
                   svg/dynamic-updates/SVGLineElement-dom-requiredFeatures.html
                   svg/dynamic-updates/SVGLineElement-svgdom-requiredFeatures.html
                   svg/dynamic-updates/SVGPathElement-dom-requiredFeatures.html
                   svg/dynamic-updates/SVGPathElement-svgdom-requiredFeatures.html
                   svg/dynamic-updates/SVGPolygonElement-dom-requiredFeatures.html
                   svg/dynamic-updates/SVGPolygonElement-svgdom-requiredFeatures.html
                   svg/dynamic-updates/SVGPolylineElement-dom-requiredFeatures.html
                   svg/dynamic-updates/SVGPolylineElement-svgdom-requiredFeatures.html
                   svg/dynamic-updates/SVGRectElement-dom-requiredFeatures.html
                   svg/dynamic-updates/SVGRectElement-svgdom-requiredFeatures.html
                   svg/dynamic-updates/SVGSVGElement-dom-requiredFeatures.html
                   svg/dynamic-updates/SVGSVGElement-svgdom-requiredFeatures.html
                   svg/dynamic-updates/SVGTextElement-dom-requiredFeatures.html
                   svg/dynamic-updates/SVGTextElement-svgdom-requiredFeatures.html
                   svg/dynamic-updates/SVGUseElement-dom-requiredFeatures.html
                   svg/dynamic-updates/SVGUseElement-svgdom-requiredFeatures.html
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71969 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 48b6276..fe44412 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,120 @@
+2010-11-13  Rob Buis  <rwlbuis at gmail.com>
+
+        Reviewed by Dirk Schulze.
+
+        requiredFeatures does not adapt to SVGStringList changes
+        https://bugs.webkit.org/show_bug.cgi?id=40887
+
+        Add tests for the handling of SVGTests validity changes.
+
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.checksum:
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.png:
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.txt:
+        * svg/dynamic-updates/SVGCircleElement-dom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGCircleElement-dom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGCircleElement-svgdom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGCircleElement-svgdom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGEllipseElement-dom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGEllipseElement-dom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGEllipseElement-svgdom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGEllipseElement-svgdom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGForeignObjectElement-dom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGForeignObjectElement-dom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGForeignObjectElement-svgdom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGForeignObjectElement-svgdom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGGElement-dom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGGElement-dom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGGElement-svgdom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGGElement-svgdom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGImageElement-dom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGImageElement-dom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGImageElement-svgdom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGImageElement-svgdom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGLineElement-dom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGLineElement-dom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGLineElement-svgdom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGLineElement-svgdom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGPathElement-dom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGPathElement-dom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGPathElement-svgdom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGPathElement-svgdom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGPolygonElement-dom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGPolygonElement-dom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGPolygonElement-svgdom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGPolygonElement-svgdom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGPolylineElement-dom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGPolylineElement-dom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGPolylineElement-svgdom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGPolylineElement-svgdom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGRectElement-dom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGRectElement-dom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGRectElement-svgdom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGRectElement-svgdom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGSVGElement-dom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGSVGElement-dom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGSVGElement-svgdom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGSVGElement-svgdom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGTextElement-dom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGTextElement-dom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGTextElement-svgdom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGTextElement-svgdom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGUseElement-dom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGUseElement-dom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/SVGUseElement-svgdom-requiredFeatures-expected.txt: Added.
+        * svg/dynamic-updates/SVGUseElement-svgdom-requiredFeatures.html: Added.
+        * svg/dynamic-updates/script-tests/SVGCircleElement-dom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGCircleElement-svgdom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGEllipseElement-dom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGEllipseElement-svgdom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGForeignObjectElement-dom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGForeignObjectElement-svgdom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGGElement-dom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGGElement-svgdom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGImageElement-dom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGImageElement-svgdom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGLineElement-dom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGLineElement-svgdom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGPathElement-dom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGPathElement-svgdom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGPolygonElement-dom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGPolygonElement-svgdom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGPolylineElement-dom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGPolylineElement-svgdom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGRectElement-dom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGRectElement-svgdom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGSVGElement-dom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGSVGElement-svgdom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGTextElement-dom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGTextElement-svgdom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGUseElement-dom-requiredFeatures.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGUseElement-svgdom-requiredFeatures.js: Added.
+        (executeTest):
+
 2010-11-13  Shinichiro Hamaji  <hamaji at chromium.org>
 
         Reviewed by Kent Tamura.
diff --git a/LayoutTests/platform/mac-leopard/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.checksum b/LayoutTests/platform/mac-leopard/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.checksum
deleted file mode 100644
index a6a479e..0000000
--- a/LayoutTests/platform/mac-leopard/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.checksum
+++ /dev/null
@@ -1 +0,0 @@
-75067bde302796fc224de015777d773d
\ No newline at end of file
diff --git a/LayoutTests/platform/mac-leopard/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.png b/LayoutTests/platform/mac-leopard/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.png
deleted file mode 100644
index d760119..0000000
Binary files a/LayoutTests/platform/mac-leopard/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.png and /dev/null differ
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.checksum b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.checksum
index 43631a4..52970ca 100644
--- a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.checksum
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.checksum
@@ -1 +1 @@
-c98f6eb728b877d82255ca19826a223a
\ No newline at end of file
+c5600ca889d42631b78c8fa50bfbbe11
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.png b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.png
index 8e1a5c4..dc0bcb8 100644
Binary files a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.png and b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.txt
index 0e0cd3e..8d17bb2 100644
--- a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.txt
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.txt
@@ -12,7 +12,6 @@ layer at (0,0) size 480x360
         RenderSVGPath {rect} at (80,100) size 100x100 [transform={m=((1.00,0.00)(0.00,1.00)) t=(80.00,100.00)}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
         RenderSVGPath {rect} at (190,100) size 100x100 [transform={m=((1.00,0.00)(0.00,1.00)) t=(190.00,100.00)}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
         RenderSVGPath {rect} at (300,100) size 100x100 [transform={m=((1.00,0.00)(0.00,1.00)) t=(300.00,100.00)}] [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
-      RenderSVGPath {rect} at (190,100) size 100x100 [transform={m=((1.00,0.00)(0.00,1.00)) t=(190.00,100.00)}] [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
       RenderSVGPath {rect} at (300,100) size 100x100 [transform={m=((1.00,0.00)(0.00,1.00)) t=(300.00,100.00)}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
       RenderSVGPath {rect} at (0,0) size 480x360 [x=0.00] [y=0.00] [width=480.00] [height=360.00]
     RenderSVGContainer {g} at (10,310) size 231x37
diff --git a/LayoutTests/svg/dynamic-updates/SVGCircleElement-dom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGCircleElement-dom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..bd350c3
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGCircleElement-dom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGCircleElement is initially displayed
+PASS document.defaultView.getComputedStyle(circleElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(circleElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(circleElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(circleElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(circleElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGCircleElement-dom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGCircleElement-dom-requiredFeatures.html
new file mode 100644
index 0000000..7f20518
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGCircleElement-dom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGCircleElement-dom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGCircleElement-svgdom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGCircleElement-svgdom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..bd350c3
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGCircleElement-svgdom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGCircleElement is initially displayed
+PASS document.defaultView.getComputedStyle(circleElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(circleElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(circleElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(circleElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(circleElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGCircleElement-svgdom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGCircleElement-svgdom-requiredFeatures.html
new file mode 100644
index 0000000..f77d119
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGCircleElement-svgdom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGCircleElement-svgdom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGEllipseElement-dom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGEllipseElement-dom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..ad7df27
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGEllipseElement-dom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGEllipseElement is initially displayed
+PASS document.defaultView.getComputedStyle(ellipseElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(ellipseElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(ellipseElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(ellipseElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(ellipseElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGEllipseElement-dom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGEllipseElement-dom-requiredFeatures.html
new file mode 100644
index 0000000..a8e5bb2
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGEllipseElement-dom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGEllipseElement-dom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGEllipseElement-svgdom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGEllipseElement-svgdom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..ad7df27
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGEllipseElement-svgdom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGEllipseElement is initially displayed
+PASS document.defaultView.getComputedStyle(ellipseElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(ellipseElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(ellipseElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(ellipseElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(ellipseElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGEllipseElement-svgdom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGEllipseElement-svgdom-requiredFeatures.html
new file mode 100644
index 0000000..c352ab5
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGEllipseElement-svgdom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGEllipseElement-svgdom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGForeignObjectElement-dom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGForeignObjectElement-dom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..7cbabf5
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGForeignObjectElement-dom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGForeignObjectElement is initially displayed
+PASS document.defaultView.getComputedStyle(foreignObjectElement, null).display is "block"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(foreignObjectElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(foreignObjectElement, null).display is "block"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(foreignObjectElement, null).display is "block"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(foreignObjectElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGForeignObjectElement-dom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGForeignObjectElement-dom-requiredFeatures.html
new file mode 100644
index 0000000..959062e
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGForeignObjectElement-dom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGForeignObjectElement-dom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGForeignObjectElement-svgdom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGForeignObjectElement-svgdom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..7cbabf5
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGForeignObjectElement-svgdom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGForeignObjectElement is initially displayed
+PASS document.defaultView.getComputedStyle(foreignObjectElement, null).display is "block"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(foreignObjectElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(foreignObjectElement, null).display is "block"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(foreignObjectElement, null).display is "block"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(foreignObjectElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGForeignObjectElement-svgdom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGForeignObjectElement-svgdom-requiredFeatures.html
new file mode 100644
index 0000000..d42dbb8
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGForeignObjectElement-svgdom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGForeignObjectElement-svgdom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGGElement-dom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGGElement-dom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..6ce15df
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGGElement-dom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGGElement is initially displayed
+PASS document.defaultView.getComputedStyle(gElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(gElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(gElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(gElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(gElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGGElement-dom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGGElement-dom-requiredFeatures.html
new file mode 100644
index 0000000..f67a982
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGGElement-dom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGGElement-dom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGGElement-svgdom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGGElement-svgdom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..6ce15df
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGGElement-svgdom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGGElement is initially displayed
+PASS document.defaultView.getComputedStyle(gElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(gElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(gElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(gElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(gElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGGElement-svgdom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGGElement-svgdom-requiredFeatures.html
new file mode 100644
index 0000000..2019ab4
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGGElement-svgdom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGGElement-svgdom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGImageElement-dom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGImageElement-dom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..e616d0d
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGImageElement-dom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGImageElement is initially displayed
+PASS document.defaultView.getComputedStyle(imageElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(imageElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(imageElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(imageElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(imageElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGImageElement-dom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGImageElement-dom-requiredFeatures.html
new file mode 100644
index 0000000..ea29786
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGImageElement-dom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGImageElement-dom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGImageElement-svgdom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGImageElement-svgdom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..e616d0d
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGImageElement-svgdom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGImageElement is initially displayed
+PASS document.defaultView.getComputedStyle(imageElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(imageElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(imageElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(imageElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(imageElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGImageElement-svgdom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGImageElement-svgdom-requiredFeatures.html
new file mode 100644
index 0000000..93a8678
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGImageElement-svgdom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGImageElement-svgdom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGLineElement-dom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGLineElement-dom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..c212be4
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGLineElement-dom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGLineElement is initially displayed
+PASS document.defaultView.getComputedStyle(lineElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(lineElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(lineElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(lineElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(lineElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGLineElement-dom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGLineElement-dom-requiredFeatures.html
new file mode 100644
index 0000000..9ca796b
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGLineElement-dom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGLineElement-dom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGLineElement-svgdom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGLineElement-svgdom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..8ab7c39
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGLineElement-svgdom-requiredFeatures-expected.txt
@@ -0,0 +1,18 @@
+SVG 1.1 dynamic update tests
+
+Check that setting requiredFeatures to something valid makes it render again
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS document.defaultView.getComputedStyle(lineElement, null).display is "inline"
+PASS document.defaultView.getComputedStyle(lineElement, null).display is ""
+PASS document.defaultView.getComputedStyle(lineElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(lineElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(lineElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGLineElement-svgdom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGLineElement-svgdom-requiredFeatures.html
new file mode 100644
index 0000000..f9cb305
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGLineElement-svgdom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGLineElement-svgdom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGPathElement-dom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGPathElement-dom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..ce54ba1
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGPathElement-dom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGPathElement is initially displayed
+PASS document.defaultView.getComputedStyle(pathElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(pathElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(pathElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(pathElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(pathElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGPathElement-dom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGPathElement-dom-requiredFeatures.html
new file mode 100644
index 0000000..b53815d
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGPathElement-dom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGPathElement-dom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGPathElement-svgdom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGPathElement-svgdom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..ce54ba1
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGPathElement-svgdom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGPathElement is initially displayed
+PASS document.defaultView.getComputedStyle(pathElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(pathElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(pathElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(pathElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(pathElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGPathElement-svgdom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGPathElement-svgdom-requiredFeatures.html
new file mode 100644
index 0000000..d02401d
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGPathElement-svgdom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGPathElement-svgdom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGPolygonElement-dom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGPolygonElement-dom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..7b9d016
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGPolygonElement-dom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGPolygonElement is initially displayed
+PASS document.defaultView.getComputedStyle(polygonElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(polygonElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(polygonElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(polygonElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(polygonElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGPolygonElement-dom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGPolygonElement-dom-requiredFeatures.html
new file mode 100644
index 0000000..5ae7c49
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGPolygonElement-dom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGPolygonElement-dom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGPolygonElement-svgdom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGPolygonElement-svgdom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..7b9d016
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGPolygonElement-svgdom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGPolygonElement is initially displayed
+PASS document.defaultView.getComputedStyle(polygonElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(polygonElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(polygonElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(polygonElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(polygonElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGPolygonElement-svgdom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGPolygonElement-svgdom-requiredFeatures.html
new file mode 100644
index 0000000..ca388bf
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGPolygonElement-svgdom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGPolygonElement-svgdom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGPolylineElement-dom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGPolylineElement-dom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..c86c5c1
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGPolylineElement-dom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGPolylineElement is initially displayed
+PASS document.defaultView.getComputedStyle(polylineElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(polylineElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(polylineElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(polylineElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(polylineElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGPolylineElement-dom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGPolylineElement-dom-requiredFeatures.html
new file mode 100644
index 0000000..6da2038
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGPolylineElement-dom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGPolylineElement-dom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGPolylineElement-svgdom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGPolylineElement-svgdom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..c86c5c1
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGPolylineElement-svgdom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGPolylineElement is initially displayed
+PASS document.defaultView.getComputedStyle(polylineElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(polylineElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(polylineElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(polylineElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(polylineElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGPolylineElement-svgdom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGPolylineElement-svgdom-requiredFeatures.html
new file mode 100644
index 0000000..dd89b4c
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGPolylineElement-svgdom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGPolylineElement-svgdom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGRectElement-dom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGRectElement-dom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..1aa4221
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGRectElement-dom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGRectElement is initially displayed
+PASS document.defaultView.getComputedStyle(rectElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(rectElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(rectElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(rectElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(rectElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGRectElement-dom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGRectElement-dom-requiredFeatures.html
new file mode 100644
index 0000000..75a5309
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGRectElement-dom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGRectElement-dom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGRectElement-svgdom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGRectElement-svgdom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..1aa4221
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGRectElement-svgdom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGRectElement is initially displayed
+PASS document.defaultView.getComputedStyle(rectElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(rectElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(rectElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(rectElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(rectElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGRectElement-svgdom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGRectElement-svgdom-requiredFeatures.html
new file mode 100644
index 0000000..f365188
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGRectElement-svgdom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGRectElement-svgdom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGSVGElement-dom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGSVGElement-dom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..71be0df
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGSVGElement-dom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGSVGElement is initially displayed
+PASS document.defaultView.getComputedStyle(svgElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(svgElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(svgElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(svgElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(svgElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGSVGElement-dom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGSVGElement-dom-requiredFeatures.html
new file mode 100644
index 0000000..430ba42
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGSVGElement-dom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGSVGElement-dom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGSVGElement-svgdom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGSVGElement-svgdom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..71be0df
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGSVGElement-svgdom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGSVGElement is initially displayed
+PASS document.defaultView.getComputedStyle(svgElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(svgElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(svgElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(svgElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(svgElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGSVGElement-svgdom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGSVGElement-svgdom-requiredFeatures.html
new file mode 100644
index 0000000..e08de4e
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGSVGElement-svgdom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGSVGElement-svgdom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGTextElement-dom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGTextElement-dom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..1485352
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGTextElement-dom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGTextElement is initially displayed
+PASS document.defaultView.getComputedStyle(textElement, null).display is "block"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(textElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(textElement, null).display is "block"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(textElement, null).display is "block"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(textElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGTextElement-dom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGTextElement-dom-requiredFeatures.html
new file mode 100644
index 0000000..3dc72c4
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGTextElement-dom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGTextElement-dom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGTextElement-svgdom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGTextElement-svgdom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..1485352
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGTextElement-svgdom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGTextElement is initially displayed
+PASS document.defaultView.getComputedStyle(textElement, null).display is "block"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(textElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(textElement, null).display is "block"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(textElement, null).display is "block"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(textElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGTextElement-svgdom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGTextElement-svgdom-requiredFeatures.html
new file mode 100644
index 0000000..46b92f0
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGTextElement-svgdom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGTextElement-svgdom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGUseElement-dom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGUseElement-dom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..8f604fe
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGUseElement-dom-requiredFeatures-expected.txt
@@ -0,0 +1,18 @@
+SVG 1.1 dynamic update tests
+
+Check that setting requiredFeatures to something valid makes it render again
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS document.defaultView.getComputedStyle(useElement, null).display is "inline"
+PASS document.defaultView.getComputedStyle(useElement, null).display is ""
+PASS document.defaultView.getComputedStyle(useElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(useElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(useElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGUseElement-dom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGUseElement-dom-requiredFeatures.html
new file mode 100644
index 0000000..ee36092
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGUseElement-dom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGUseElement-dom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGUseElement-svgdom-requiredFeatures-expected.txt b/LayoutTests/svg/dynamic-updates/SVGUseElement-svgdom-requiredFeatures-expected.txt
new file mode 100644
index 0000000..e1ec823
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGUseElement-svgdom-requiredFeatures-expected.txt
@@ -0,0 +1,16 @@
+SVG 1.1 dynamic update tests
+
+Check that SVGUseElement is initially displayed
+PASS document.defaultView.getComputedStyle(useElement, null).display is "inline"
+Check that setting requiredFeatures to something invalid makes it not render
+PASS document.defaultView.getComputedStyle(useElement, null).display is ""
+Check that setting requiredFeatures to something valid makes it render again
+PASS document.defaultView.getComputedStyle(useElement, null).display is "inline"
+Check that adding something valid to requiredFeatures keeps rendering the element
+PASS document.defaultView.getComputedStyle(useElement, null).display is "inline"
+Check that adding something invalid to requiredFeatures makes it not render
+PASS document.defaultView.getComputedStyle(useElement, null).display is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGUseElement-svgdom-requiredFeatures.html b/LayoutTests/svg/dynamic-updates/SVGUseElement-svgdom-requiredFeatures.html
new file mode 100644
index 0000000..3abc95d
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGUseElement-svgdom-requiredFeatures.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGUseElement-svgdom-requiredFeatures.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGCircleElement-dom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGCircleElement-dom-requiredFeatures.js
new file mode 100644
index 0000000..3367e8e
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGCircleElement-dom-requiredFeatures.js
@@ -0,0 +1,32 @@
+// [Name] SVGCircleElement-dom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var circleElement = createSVGElement("circle");
+circleElement.setAttribute("r", "200");
+
+rootSVGElement.appendChild(circleElement);
+
+function executeTest() {
+    debug("Check that SVGCircleElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(circleElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    circleElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(circleElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    circleElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Shape");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(circleElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    circleElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(circleElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    circleElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(circleElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(circleElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGCircleElement-svgdom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGCircleElement-svgdom-requiredFeatures.js
new file mode 100644
index 0000000..5938d20
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGCircleElement-svgdom-requiredFeatures.js
@@ -0,0 +1,32 @@
+// [Name] SVGCircleElement-svgdom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var circleElement = createSVGElement("circle");
+circleElement.setAttribute("r", "200");
+
+rootSVGElement.appendChild(circleElement);
+
+function executeTest() {
+    debug("Check that SVGCircleElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(circleElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    circleElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(circleElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    circleElement.requiredFeatures.replaceItem("http://www.w3.org/TR/SVG11/feature#Shape", 0);
+    shouldBeEqualToString("document.defaultView.getComputedStyle(circleElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    circleElement.requiredFeatures.appendItem("http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(circleElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    circleElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(circleElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(circleElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGEllipseElement-dom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGEllipseElement-dom-requiredFeatures.js
new file mode 100644
index 0000000..92eb533
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGEllipseElement-dom-requiredFeatures.js
@@ -0,0 +1,33 @@
+// [Name] SVGEllipseElement-dom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var ellipseElement = createSVGElement("ellipse");
+ellipseElement.setAttribute("rx", "200");
+ellipseElement.setAttribute("ry", "200");
+
+rootSVGElement.appendChild(ellipseElement);
+
+function executeTest() {
+    debug("Check that SVGEllipseElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(ellipseElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    ellipseElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(ellipseElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    ellipseElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Shape");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(ellipseElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    ellipseElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(ellipseElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    ellipseElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(ellipseElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(ellipseElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGEllipseElement-svgdom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGEllipseElement-svgdom-requiredFeatures.js
new file mode 100644
index 0000000..6104bb5
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGEllipseElement-svgdom-requiredFeatures.js
@@ -0,0 +1,33 @@
+// [Name] SVGEllipseElement-svgdom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var ellipseElement = createSVGElement("ellipse");
+ellipseElement.setAttribute("rx", "200");
+ellipseElement.setAttribute("ry", "200");
+
+rootSVGElement.appendChild(ellipseElement);
+
+function executeTest() {
+    debug("Check that SVGEllipseElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(ellipseElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    ellipseElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(ellipseElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    ellipseElement.requiredFeatures.replaceItem("http://www.w3.org/TR/SVG11/feature#Shape", 0);
+    shouldBeEqualToString("document.defaultView.getComputedStyle(ellipseElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    ellipseElement.requiredFeatures.appendItem("http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(ellipseElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    ellipseElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(ellipseElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(ellipseElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGForeignObjectElement-dom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGForeignObjectElement-dom-requiredFeatures.js
new file mode 100644
index 0000000..2ce4834
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGForeignObjectElement-dom-requiredFeatures.js
@@ -0,0 +1,38 @@
+// [Name] SVGForeignObjectElement-dom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var foreignObjectElement = createSVGElement("foreignObject");
+foreignObjectElement.setAttribute("width", "200");
+foreignObjectElement.setAttribute("height", "200");
+
+var htmlDivElement = document.createElementNS(xhtmlNS, "xhtml:div");
+htmlDivElement.setAttribute("style", "background-color: green; color: white; text-align: center");
+htmlDivElement.textContent = "Test passed";
+
+foreignObjectElement.appendChild(htmlDivElement);
+rootSVGElement.appendChild(foreignObjectElement);
+
+function executeTest() {
+    debug("Check that SVGForeignObjectElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(foreignObjectElement, null).display", "block");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    foreignObjectElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(foreignObjectElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    foreignObjectElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Shape");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(foreignObjectElement, null).display", "block");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    foreignObjectElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(foreignObjectElement, null).display", "block");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    foreignObjectElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(foreignObjectElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(foreignObjectElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGForeignObjectElement-svgdom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGForeignObjectElement-svgdom-requiredFeatures.js
new file mode 100644
index 0000000..9fb1f83
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGForeignObjectElement-svgdom-requiredFeatures.js
@@ -0,0 +1,38 @@
+// [Name] SVGForeignObjectElement-svgdom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var foreignObjectElement = createSVGElement("foreignObject");
+foreignObjectElement.setAttribute("width", "200");
+foreignObjectElement.setAttribute("height", "200");
+
+var htmlDivElement = document.createElementNS(xhtmlNS, "xhtml:div");
+htmlDivElement.setAttribute("style", "background-color: green; color: white; text-align: center");
+htmlDivElement.textContent = "Test passed";
+
+foreignObjectElement.appendChild(htmlDivElement);
+rootSVGElement.appendChild(foreignObjectElement);
+
+function executeTest() {
+    debug("Check that SVGForeignObjectElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(foreignObjectElement, null).display", "block");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    foreignObjectElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(foreignObjectElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    foreignObjectElement.requiredFeatures.replaceItem("http://www.w3.org/TR/SVG11/feature#Shape", 0);
+    shouldBeEqualToString("document.defaultView.getComputedStyle(foreignObjectElement, null).display", "block");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    foreignObjectElement.requiredFeatures.appendItem("http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(foreignObjectElement, null).display", "block");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    foreignObjectElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(foreignObjectElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(foreignObjectElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGGElement-dom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGGElement-dom-requiredFeatures.js
new file mode 100644
index 0000000..635b855
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGGElement-dom-requiredFeatures.js
@@ -0,0 +1,31 @@
+// [Name] SVGGElement-dom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var gElement = createSVGElement("g");
+
+rootSVGElement.appendChild(gElement);
+
+function executeTest() {
+    debug("Check that SVGGElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(gElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    gElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(gElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    gElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Shape");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(gElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    gElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(gElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    gElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(gElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(rootSVGElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGGElement-svgdom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGGElement-svgdom-requiredFeatures.js
new file mode 100644
index 0000000..74faac7
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGGElement-svgdom-requiredFeatures.js
@@ -0,0 +1,31 @@
+// [Name] SVGGElement-svgdom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var gElement = createSVGElement("g");
+
+rootSVGElement.appendChild(gElement);
+
+function executeTest() {
+    debug("Check that SVGGElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(gElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    gElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(gElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    gElement.requiredFeatures.replaceItem("http://www.w3.org/TR/SVG11/feature#Shape", 0);
+    shouldBeEqualToString("document.defaultView.getComputedStyle(gElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    gElement.requiredFeatures.appendItem("http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(gElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    gElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(gElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(rootSVGElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGImageElement-dom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGImageElement-dom-requiredFeatures.js
new file mode 100644
index 0000000..31ad28d
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGImageElement-dom-requiredFeatures.js
@@ -0,0 +1,33 @@
+// [Name] SVGImageElement-dom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var imageElement = createSVGElement("image");
+imageElement.setAttribute("width", "200");
+imageElement.setAttribute("height", "200");
+
+rootSVGElement.appendChild(imageElement);
+
+function executeTest() {
+    debug("Check that SVGImageElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(imageElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    imageElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(imageElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    imageElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Shape");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(imageElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    imageElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(imageElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    imageElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(imageElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(imageElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGImageElement-svgdom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGImageElement-svgdom-requiredFeatures.js
new file mode 100644
index 0000000..179c7ea
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGImageElement-svgdom-requiredFeatures.js
@@ -0,0 +1,33 @@
+// [Name] SVGImageElement-svgdom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var imageElement = createSVGElement("image");
+imageElement.setAttribute("width", "200");
+imageElement.setAttribute("height", "200");
+
+rootSVGElement.appendChild(imageElement);
+
+function executeTest() {
+    debug("Check that SVGImageElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(imageElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    imageElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(imageElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    imageElement.requiredFeatures.replaceItem("http://www.w3.org/TR/SVG11/feature#Shape", 0);
+    shouldBeEqualToString("document.defaultView.getComputedStyle(imageElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    imageElement.requiredFeatures.appendItem("http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(imageElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    imageElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(imageElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(imageElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGLineElement-dom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGLineElement-dom-requiredFeatures.js
new file mode 100644
index 0000000..b1f8e95
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGLineElement-dom-requiredFeatures.js
@@ -0,0 +1,36 @@
+// [Name] SVGLineElement-dom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var lineElement = createSVGElement("line");
+lineElement.setAttribute("x1", "20");
+lineElement.setAttribute("y1", "20");
+lineElement.setAttribute("x2", "200");
+lineElement.setAttribute("y2", "200");
+lineElement.setAttribute("fill", "green");
+
+rootSVGElement.appendChild(lineElement);
+
+function executeTest() {
+    debug("Check that SVGLineElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(lineElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    lineElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(lineElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    lineElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Shape");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(lineElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    lineElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(lineElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    lineElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(lineElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(lineElement, 20, 20);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGLineElement-svgdom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGLineElement-svgdom-requiredFeatures.js
new file mode 100644
index 0000000..2350445
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGLineElement-svgdom-requiredFeatures.js
@@ -0,0 +1,36 @@
+// [Name] SVGLineElement-svgdom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var lineElement = createSVGElement("line");
+lineElement.setAttribute("x1", "20");
+lineElement.setAttribute("y1", "20");
+lineElement.setAttribute("x2", "200");
+lineElement.setAttribute("y2", "200");
+lineElement.setAttribute("fill", "green");
+
+rootSVGElement.appendChild(lineElement);
+
+function executeTest() {
+    description("Check that SVGLineElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(lineElement, null).display", "inline");
+    description("Check that setting requiredFeatures to something invalid makes it not render");
+    lineElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(lineElement, null).display", "");
+    description("Check that setting requiredFeatures to something valid makes it render again");
+    lineElement.requiredFeatures.replaceItem("http://www.w3.org/TR/SVG11/feature#Shape", 0);
+    shouldBeEqualToString("document.defaultView.getComputedStyle(lineElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    lineElement.requiredFeatures.appendItem("http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(lineElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    lineElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(lineElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(lineElement, 20, 20);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGPathElement-dom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGPathElement-dom-requiredFeatures.js
new file mode 100644
index 0000000..10ebcfc
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGPathElement-dom-requiredFeatures.js
@@ -0,0 +1,32 @@
+// [Name] SVGPathElement-dom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var pathElement = createSVGElement("path");
+pathElement.setAttribute("d", "M0 0 L 200 0 L 200 200 L 0 200");
+
+rootSVGElement.appendChild(pathElement);
+
+function executeTest() {
+    debug("Check that SVGPathElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(pathElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    pathElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(pathElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    pathElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Shape");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(pathElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    pathElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(pathElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    pathElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(pathElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(pathElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGPathElement-svgdom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGPathElement-svgdom-requiredFeatures.js
new file mode 100644
index 0000000..3428346
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGPathElement-svgdom-requiredFeatures.js
@@ -0,0 +1,32 @@
+// [Name] SVGPathElement-svgdom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var pathElement = createSVGElement("path");
+pathElement.setAttribute("d", "M0 0 L 200 0 L 200 200 L 0 200");
+
+rootSVGElement.appendChild(pathElement);
+
+function executeTest() {
+    debug("Check that SVGPathElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(pathElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    pathElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(pathElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    pathElement.requiredFeatures.replaceItem("http://www.w3.org/TR/SVG11/feature#Shape", 0);
+    shouldBeEqualToString("document.defaultView.getComputedStyle(pathElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    pathElement.requiredFeatures.appendItem("http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(pathElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    pathElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(pathElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(pathElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGPolygonElement-dom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGPolygonElement-dom-requiredFeatures.js
new file mode 100644
index 0000000..87beaec
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGPolygonElement-dom-requiredFeatures.js
@@ -0,0 +1,32 @@
+// [Name] SVGPolygonElement-dom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var polygonElement = createSVGElement("polygon");
+polygonElement.setAttribute("points", "0,0 200,0 200,200 0, 200");
+
+rootSVGElement.appendChild(polygonElement);
+
+function executeTest() {
+    debug("Check that SVGPolygonElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polygonElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    polygonElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polygonElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    polygonElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Shape");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polygonElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    polygonElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polygonElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    polygonElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polygonElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(polygonElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGPolygonElement-svgdom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGPolygonElement-svgdom-requiredFeatures.js
new file mode 100644
index 0000000..9252fce
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGPolygonElement-svgdom-requiredFeatures.js
@@ -0,0 +1,32 @@
+// [Name] SVGPolygonElement-svgdom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var polygonElement = createSVGElement("polygon");
+polygonElement.setAttribute("points", "0,0 200,0 200,200 0, 200");
+
+rootSVGElement.appendChild(polygonElement);
+
+function executeTest() {
+    debug("Check that SVGPolygonElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polygonElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    polygonElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polygonElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    polygonElement.requiredFeatures.replaceItem("http://www.w3.org/TR/SVG11/feature#Shape", 0);
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polygonElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    polygonElement.requiredFeatures.appendItem("http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polygonElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    polygonElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polygonElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(polygonElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGPolylineElement-dom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGPolylineElement-dom-requiredFeatures.js
new file mode 100644
index 0000000..2f93c9e
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGPolylineElement-dom-requiredFeatures.js
@@ -0,0 +1,32 @@
+// [Name] SVGPolylineElement-dom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var polylineElement = createSVGElement("polyline");
+polylineElement.setAttribute("points", "0,0 200,0 200,200 0, 200");
+
+rootSVGElement.appendChild(polylineElement);
+
+function executeTest() {
+    debug("Check that SVGPolylineElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polylineElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    polylineElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polylineElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    polylineElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Shape");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polylineElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    polylineElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polylineElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    polylineElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polylineElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(polylineElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGPolylineElement-svgdom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGPolylineElement-svgdom-requiredFeatures.js
new file mode 100644
index 0000000..422c8d6
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGPolylineElement-svgdom-requiredFeatures.js
@@ -0,0 +1,32 @@
+// [Name] SVGPolylineElement-svgdom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var polylineElement = createSVGElement("polyline");
+polylineElement.setAttribute("points", "0,0 200,0 200,200 0, 200");
+
+rootSVGElement.appendChild(polylineElement);
+
+function executeTest() {
+    debug("Check that SVGPolylineElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polylineElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    polylineElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polylineElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    polylineElement.requiredFeatures.replaceItem("http://www.w3.org/TR/SVG11/feature#Shape", 0);
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polylineElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    polylineElement.requiredFeatures.appendItem("http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polylineElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    polylineElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(polylineElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(polylineElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGRectElement-dom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGRectElement-dom-requiredFeatures.js
new file mode 100644
index 0000000..bdbf6b2
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGRectElement-dom-requiredFeatures.js
@@ -0,0 +1,33 @@
+// [Name] SVGRectElement-dom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var rectElement = createSVGElement("rect");
+rectElement.setAttribute("width", "200");
+rectElement.setAttribute("height", "200");
+
+rootSVGElement.appendChild(rectElement);
+
+function executeTest() {
+    debug("Check that SVGRectElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    rectElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    rectElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Shape");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    rectElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    rectElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(rectElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGRectElement-svgdom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGRectElement-svgdom-requiredFeatures.js
new file mode 100644
index 0000000..b26d371
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGRectElement-svgdom-requiredFeatures.js
@@ -0,0 +1,33 @@
+// [Name] SVGRectElement-svgdom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var rectElement = createSVGElement("rect");
+rectElement.setAttribute("width", "200");
+rectElement.setAttribute("height", "200");
+
+rootSVGElement.appendChild(rectElement);
+
+function executeTest() {
+    debug("Check that SVGRectElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    rectElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    rectElement.requiredFeatures.replaceItem("http://www.w3.org/TR/SVG11/feature#Shape", 0);
+    shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    rectElement.requiredFeatures.appendItem("http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    rectElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(rectElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGSVGElement-dom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGSVGElement-dom-requiredFeatures.js
new file mode 100644
index 0000000..f8a191d
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGSVGElement-dom-requiredFeatures.js
@@ -0,0 +1,29 @@
+// [Name] SVGSVGElement-dom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var svgElement = rootSVGElement;
+
+function executeTest() {
+    debug("Check that SVGSVGElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(svgElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    svgElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(svgElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    svgElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Shape");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(svgElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    svgElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(svgElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    svgElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(svgElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(svgElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGSVGElement-svgdom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGSVGElement-svgdom-requiredFeatures.js
new file mode 100644
index 0000000..49a7e20
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGSVGElement-svgdom-requiredFeatures.js
@@ -0,0 +1,29 @@
+// [Name] SVGSVGElement-svgdom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var svgElement = rootSVGElement;
+
+function executeTest() {
+    debug("Check that SVGSVGElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(svgElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    svgElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(svgElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    svgElement.requiredFeatures.replaceItem("http://www.w3.org/TR/SVG11/feature#Shape", 0);
+    shouldBeEqualToString("document.defaultView.getComputedStyle(svgElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    svgElement.requiredFeatures.appendItem("http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(svgElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    svgElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(svgElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(svgElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGTextElement-dom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGTextElement-dom-requiredFeatures.js
new file mode 100644
index 0000000..93fe63b
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGTextElement-dom-requiredFeatures.js
@@ -0,0 +1,31 @@
+// [Name] SVGTextElement-dom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var textElement = createSVGElement("text");
+
+rootSVGElement.appendChild(textElement);
+
+function executeTest() {
+    debug("Check that SVGTextElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(textElement, null).display", "block");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    textElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(textElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    textElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Shape");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(textElement, null).display", "block");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    textElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(textElement, null).display", "block");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    textElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(textElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(rootSVGElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGTextElement-svgdom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGTextElement-svgdom-requiredFeatures.js
new file mode 100644
index 0000000..21d5963
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGTextElement-svgdom-requiredFeatures.js
@@ -0,0 +1,31 @@
+// [Name] SVGTextElement-svgdom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var textElement = createSVGElement("text");
+
+rootSVGElement.appendChild(textElement);
+
+function executeTest() {
+    debug("Check that SVGTextElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(textElement, null).display", "block");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    textElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(textElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    textElement.requiredFeatures.replaceItem("http://www.w3.org/TR/SVG11/feature#Shape", 0);
+    shouldBeEqualToString("document.defaultView.getComputedStyle(textElement, null).display", "block");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    textElement.requiredFeatures.appendItem("http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(textElement, null).display", "block");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    textElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(textElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(rootSVGElement, 0, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGUseElement-dom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGUseElement-dom-requiredFeatures.js
new file mode 100644
index 0000000..0c46379
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGUseElement-dom-requiredFeatures.js
@@ -0,0 +1,39 @@
+// [Name] SVGUseElement-dom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var useElement = createSVGElement("use");
+var defsElement = createSVGElement("defs");
+var rectElement = createSVGElement("rect");
+rectElement.setAttribute("width", "200");
+rectElement.setAttribute("height", "200");
+rectElement.setAttribute("id", "MyRect");
+useElement.setAttributeNS(xlinkNS, "xlink:href", "#MyRect");
+
+defsElement.appendChild(rectElement);
+rootSVGElement.appendChild(defsElement);
+rootSVGElement.appendChild(useElement);
+
+function executeTest() {
+    description("Check that SVGUseElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(useElement, null).display", "inline");
+    description("Check that setting requiredFeatures to something invalid makes it not render");
+    useElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(useElement, null).display", "");
+    description("Check that setting requiredFeatures to something valid makes it render again");
+    useElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Shape");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(useElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    useElement.setAttribute("requiredFeatures", "http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(useElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    useElement.setAttribute("requiredFeatures", "foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(useElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(useElement, 100, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGUseElement-svgdom-requiredFeatures.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGUseElement-svgdom-requiredFeatures.js
new file mode 100644
index 0000000..8be2ca9
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGUseElement-svgdom-requiredFeatures.js
@@ -0,0 +1,39 @@
+// [Name] SVGUseElement-svgdom-requiredFeatures.js
+// [Expected rendering result] a series of PASS messages
+
+createSVGTestCase();
+
+var useElement = createSVGElement("use");
+var defsElement = createSVGElement("defs");
+var rectElement = createSVGElement("rect");
+rectElement.setAttribute("width", "200");
+rectElement.setAttribute("height", "200");
+rectElement.setAttribute("id", "MyRect");
+useElement.setAttributeNS(xlinkNS, "xlink:href", "#MyRect");
+
+defsElement.appendChild(rectElement);
+rootSVGElement.appendChild(defsElement);
+rootSVGElement.appendChild(useElement);
+
+function executeTest() {
+    debug("Check that SVGUseElement is initially displayed");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(useElement, null).display", "inline");
+    debug("Check that setting requiredFeatures to something invalid makes it not render");
+    useElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(useElement, null).display", "");
+    debug("Check that setting requiredFeatures to something valid makes it render again");
+    useElement.requiredFeatures.replaceItem("http://www.w3.org/TR/SVG11/feature#Shape", 0);
+    shouldBeEqualToString("document.defaultView.getComputedStyle(useElement, null).display", "inline");
+    debug("Check that adding something valid to requiredFeatures keeps rendering the element");
+    useElement.requiredFeatures.appendItem("http://www.w3.org/TR/SVG11/feature#Gradient");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(useElement, null).display", "inline");
+    debug("Check that adding something invalid to requiredFeatures makes it not render");
+    useElement.requiredFeatures.appendItem("foo");
+    shouldBeEqualToString("document.defaultView.getComputedStyle(useElement, null).display", "");
+
+    completeTest();
+}
+
+startTest(useElement, 100, 100);
+
+var successfullyParsed = true;
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 087ecbe..e1a4843 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,73 @@
+2010-11-13  Rob Buis  <rwlbuis at gmail.com>
+
+        Reviewed by Dirk Schulze.
+
+        requiredFeatures does not adapt to SVGStringList changes
+        https://bugs.webkit.org/show_bug.cgi?id=40887
+
+        Centralize logic of handling of SVGElement validity changes.
+        The logic is to detach the SVGElement when changing from valid
+        to invalid, and to attach when changing from invalid to valid.
+
+        Tests: svg/dynamic-updates/SVGCircleElement-dom-requiredFeatures.html
+               svg/dynamic-updates/SVGCircleElement-svgdom-requiredFeatures.html
+               svg/dynamic-updates/SVGEllipseElement-dom-requiredFeatures.html
+               svg/dynamic-updates/SVGEllipseElement-svgdom-requiredFeatures.html
+               svg/dynamic-updates/SVGForeignObjectElement-dom-requiredFeatures.html
+               svg/dynamic-updates/SVGForeignObjectElement-svgdom-requiredFeatures.html
+               svg/dynamic-updates/SVGGElement-dom-requiredFeatures.html
+               svg/dynamic-updates/SVGGElement-svgdom-requiredFeatures.html
+               svg/dynamic-updates/SVGImageElement-dom-requiredFeatures.html
+               svg/dynamic-updates/SVGImageElement-svgdom-requiredFeatures.html
+               svg/dynamic-updates/SVGLineElement-dom-requiredFeatures.html
+               svg/dynamic-updates/SVGLineElement-svgdom-requiredFeatures.html
+               svg/dynamic-updates/SVGPathElement-dom-requiredFeatures.html
+               svg/dynamic-updates/SVGPathElement-svgdom-requiredFeatures.html
+               svg/dynamic-updates/SVGPolygonElement-dom-requiredFeatures.html
+               svg/dynamic-updates/SVGPolygonElement-svgdom-requiredFeatures.html
+               svg/dynamic-updates/SVGPolylineElement-dom-requiredFeatures.html
+               svg/dynamic-updates/SVGPolylineElement-svgdom-requiredFeatures.html
+               svg/dynamic-updates/SVGRectElement-dom-requiredFeatures.html
+               svg/dynamic-updates/SVGRectElement-svgdom-requiredFeatures.html
+               svg/dynamic-updates/SVGSVGElement-dom-requiredFeatures.html
+               svg/dynamic-updates/SVGSVGElement-svgdom-requiredFeatures.html
+               svg/dynamic-updates/SVGTextElement-dom-requiredFeatures.html
+               svg/dynamic-updates/SVGTextElement-svgdom-requiredFeatures.html
+               svg/dynamic-updates/SVGUseElement-dom-requiredFeatures.html
+               svg/dynamic-updates/SVGUseElement-svgdom-requiredFeatures.html
+
+        * svg/SVGCircleElement.cpp:
+        (WebCore::SVGCircleElement::svgAttributeChanged):
+        * svg/SVGEllipseElement.cpp:
+        (WebCore::SVGEllipseElement::svgAttributeChanged):
+        * svg/SVGForeignObjectElement.cpp:
+        (WebCore::SVGForeignObjectElement::svgAttributeChanged):
+        * svg/SVGGElement.cpp:
+        (WebCore::SVGGElement::svgAttributeChanged):
+        * svg/SVGImageElement.cpp:
+        (WebCore::SVGImageElement::svgAttributeChanged):
+        * svg/SVGLineElement.cpp:
+        (WebCore::SVGLineElement::svgAttributeChanged):
+        * svg/SVGPathElement.cpp:
+        (WebCore::SVGPathElement::svgAttributeChanged):
+        * svg/SVGPolyElement.cpp:
+        (WebCore::SVGPolyElement::svgAttributeChanged):
+        * svg/SVGRectElement.cpp:
+        (WebCore::SVGRectElement::svgAttributeChanged):
+        * svg/SVGSVGElement.cpp:
+        (WebCore::SVGSVGElement::svgAttributeChanged):
+        * svg/SVGTests.cpp:
+        (WebCore::knownAttribute):
+        (WebCore::SVGTests::isKnownAttribute):
+        (WebCore::SVGTests::handleAttributeChange): Centralized handling of SVGElement validity changes.
+        * svg/SVGTests.h:
+        * svg/SVGTextContentElement.cpp:
+        (WebCore::SVGTextContentElement::svgAttributeChanged):
+        (WebCore::SVGTextContentElement::isKnownAttribute):
+        * svg/SVGTextContentElement.h:
+        * svg/SVGUseElement.cpp:
+        (WebCore::SVGUseElement::svgAttributeChanged):
+
 2010-11-13  Andrey Kosyakov  <caseq at chromium.org>
 
         Reviewed by Pavel Feldman.
diff --git a/WebCore/svg/SVGCircleElement.cpp b/WebCore/svg/SVGCircleElement.cpp
index eb38b87..e983300 100644
--- a/WebCore/svg/SVGCircleElement.cpp
+++ b/WebCore/svg/SVGCircleElement.cpp
@@ -77,6 +77,9 @@ void SVGCircleElement::svgAttributeChanged(const QualifiedName& attrName)
     if (isLengthAttribute)
         updateRelativeLengthsInformation();
 
+    if (SVGTests::handleAttributeChange(const_cast<SVGCircleElement*>(this), attrName))
+        return;
+
     RenderSVGPath* renderer = static_cast<RenderSVGPath*>(this->renderer());
     if (!renderer)
         return;
@@ -93,8 +96,7 @@ void SVGCircleElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    if (SVGTests::isKnownAttribute(attrName)
-        || SVGLangSpace::isKnownAttribute(attrName)
+    if (SVGLangSpace::isKnownAttribute(attrName)
         || SVGExternalResourcesRequired::isKnownAttribute(attrName))
         RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
 }
diff --git a/WebCore/svg/SVGEllipseElement.cpp b/WebCore/svg/SVGEllipseElement.cpp
index 7615a24..9493328 100644
--- a/WebCore/svg/SVGEllipseElement.cpp
+++ b/WebCore/svg/SVGEllipseElement.cpp
@@ -82,6 +82,9 @@ void SVGEllipseElement::svgAttributeChanged(const QualifiedName& attrName)
 
     if (isLengthAttribute)
         updateRelativeLengthsInformation();
+ 
+    if (SVGTests::handleAttributeChange(const_cast<SVGEllipseElement*>(this), attrName))
+        return;
 
     RenderSVGPath* renderer = static_cast<RenderSVGPath*>(this->renderer());
     if (!renderer)
@@ -99,8 +102,7 @@ void SVGEllipseElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    if (SVGTests::isKnownAttribute(attrName)
-        || SVGLangSpace::isKnownAttribute(attrName)
+    if (SVGLangSpace::isKnownAttribute(attrName)
         || SVGExternalResourcesRequired::isKnownAttribute(attrName))
         RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
 }
diff --git a/WebCore/svg/SVGForeignObjectElement.cpp b/WebCore/svg/SVGForeignObjectElement.cpp
index e4f7096..f58fb9d 100644
--- a/WebCore/svg/SVGForeignObjectElement.cpp
+++ b/WebCore/svg/SVGForeignObjectElement.cpp
@@ -81,6 +81,9 @@ void SVGForeignObjectElement::svgAttributeChanged(const QualifiedName& attrName)
     if (isLengthAttribute)
         updateRelativeLengthsInformation();
 
+    if (SVGTests::handleAttributeChange(const_cast<SVGForeignObjectElement*>(this), attrName))
+        return;
+
     RenderObject* renderer = this->renderer();
     if (!renderer)
         return;
@@ -92,7 +95,6 @@ void SVGForeignObjectElement::svgAttributeChanged(const QualifiedName& attrName)
     }
 
     if (isLengthAttribute
-        || SVGTests::isKnownAttribute(attrName)
         || SVGLangSpace::isKnownAttribute(attrName)
         || SVGExternalResourcesRequired::isKnownAttribute(attrName))
         RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
diff --git a/WebCore/svg/SVGGElement.cpp b/WebCore/svg/SVGGElement.cpp
index a455cd5..f953d51 100644
--- a/WebCore/svg/SVGGElement.cpp
+++ b/WebCore/svg/SVGGElement.cpp
@@ -55,6 +55,9 @@ void SVGGElement::svgAttributeChanged(const QualifiedName& attrName)
 {
     SVGStyledTransformableElement::svgAttributeChanged(attrName);
 
+    if (SVGTests::handleAttributeChange(const_cast<SVGGElement*>(this), attrName))
+        return;
+
     RenderObject* renderer = this->renderer();
     if (!renderer)
         return;
@@ -65,8 +68,7 @@ void SVGGElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    if (SVGTests::isKnownAttribute(attrName)
-        || SVGLangSpace::isKnownAttribute(attrName)
+    if (SVGLangSpace::isKnownAttribute(attrName)
         || SVGExternalResourcesRequired::isKnownAttribute(attrName))
         RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
 }
diff --git a/WebCore/svg/SVGImageElement.cpp b/WebCore/svg/SVGImageElement.cpp
index fcfa54f..f2e2663 100644
--- a/WebCore/svg/SVGImageElement.cpp
+++ b/WebCore/svg/SVGImageElement.cpp
@@ -98,6 +98,9 @@ void SVGImageElement::svgAttributeChanged(const QualifiedName& attrName)
     if (isLengthAttribute)
         updateRelativeLengthsInformation();
 
+    if (SVGTests::handleAttributeChange(const_cast<SVGImageElement*>(this), attrName))
+        return;
+
     RenderObject* renderer = this->renderer();
     if (!renderer)
         return;
@@ -115,7 +118,6 @@ void SVGImageElement::svgAttributeChanged(const QualifiedName& attrName)
     }
 
     if (attrName == SVGNames::preserveAspectRatioAttr
-        || SVGTests::isKnownAttribute(attrName)
         || SVGLangSpace::isKnownAttribute(attrName)
         || SVGExternalResourcesRequired::isKnownAttribute(attrName))
         RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
diff --git a/WebCore/svg/SVGLineElement.cpp b/WebCore/svg/SVGLineElement.cpp
index 4ee5f0d..324f9e2 100644
--- a/WebCore/svg/SVGLineElement.cpp
+++ b/WebCore/svg/SVGLineElement.cpp
@@ -79,6 +79,9 @@ void SVGLineElement::svgAttributeChanged(const QualifiedName& attrName)
     if (isLengthAttribute)
         updateRelativeLengthsInformation();
 
+    if (SVGTests::handleAttributeChange(const_cast<SVGLineElement*>(this), attrName))
+        return;
+
     RenderSVGPath* renderer = static_cast<RenderSVGPath*>(this->renderer());
     if (!renderer)
         return;
@@ -95,8 +98,7 @@ void SVGLineElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    if (SVGTests::isKnownAttribute(attrName)
-        || SVGLangSpace::isKnownAttribute(attrName)
+    if (SVGLangSpace::isKnownAttribute(attrName)
         || SVGExternalResourcesRequired::isKnownAttribute(attrName))
         RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
 }
diff --git a/WebCore/svg/SVGPathElement.cpp b/WebCore/svg/SVGPathElement.cpp
index 920e947..e7cd6b5 100644
--- a/WebCore/svg/SVGPathElement.cpp
+++ b/WebCore/svg/SVGPathElement.cpp
@@ -201,6 +201,9 @@ void SVGPathElement::svgAttributeChanged(const QualifiedName& attrName)
 {
     SVGStyledTransformableElement::svgAttributeChanged(attrName);
 
+    if (SVGTests::handleAttributeChange(const_cast<SVGPathElement*>(this), attrName))
+        return;
+
     RenderSVGPath* renderer = static_cast<RenderSVGPath*>(this->renderer());
     if (!renderer)
         return;
@@ -218,7 +221,6 @@ void SVGPathElement::svgAttributeChanged(const QualifiedName& attrName)
     }
 
     if (attrName == SVGNames::pathLengthAttr
-        || SVGTests::isKnownAttribute(attrName)
         || SVGLangSpace::isKnownAttribute(attrName)
         || SVGExternalResourcesRequired::isKnownAttribute(attrName))
         RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
diff --git a/WebCore/svg/SVGPolyElement.cpp b/WebCore/svg/SVGPolyElement.cpp
index 7b95a32..a750669 100644
--- a/WebCore/svg/SVGPolyElement.cpp
+++ b/WebCore/svg/SVGPolyElement.cpp
@@ -66,6 +66,9 @@ void SVGPolyElement::svgAttributeChanged(const QualifiedName& attrName)
 {
     SVGStyledTransformableElement::svgAttributeChanged(attrName);
 
+    if (SVGTests::handleAttributeChange(const_cast<SVGPolyElement*>(this), attrName))
+        return;
+
     RenderSVGPath* renderer = static_cast<RenderSVGPath*>(this->renderer());
     if (!renderer)
         return;
@@ -82,8 +85,7 @@ void SVGPolyElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    if (SVGTests::isKnownAttribute(attrName)
-        || SVGLangSpace::isKnownAttribute(attrName)
+    if (SVGLangSpace::isKnownAttribute(attrName)
         || SVGExternalResourcesRequired::isKnownAttribute(attrName))
         RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
 }
diff --git a/WebCore/svg/SVGRectElement.cpp b/WebCore/svg/SVGRectElement.cpp
index 46ed8de..d7efdf4 100644
--- a/WebCore/svg/SVGRectElement.cpp
+++ b/WebCore/svg/SVGRectElement.cpp
@@ -94,6 +94,9 @@ void SVGRectElement::svgAttributeChanged(const QualifiedName& attrName)
     if (isLengthAttribute)
         updateRelativeLengthsInformation();
 
+    if (SVGTests::handleAttributeChange(const_cast<SVGRectElement*>(this), attrName))
+        return;
+
     RenderSVGPath* renderer = static_cast<RenderSVGPath*>(this->renderer());
     if (!renderer)
         return;
@@ -110,8 +113,7 @@ void SVGRectElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    if (SVGTests::isKnownAttribute(attrName)
-        || SVGLangSpace::isKnownAttribute(attrName)
+    if (SVGLangSpace::isKnownAttribute(attrName) 
         || SVGExternalResourcesRequired::isKnownAttribute(attrName))
         RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
 }
diff --git a/WebCore/svg/SVGSVGElement.cpp b/WebCore/svg/SVGSVGElement.cpp
index 8628b70..a9d5122 100644
--- a/WebCore/svg/SVGSVGElement.cpp
+++ b/WebCore/svg/SVGSVGElement.cpp
@@ -331,11 +331,13 @@ void SVGSVGElement::svgAttributeChanged(const QualifiedName& attrName)
         updateRelativeLengthsInformation();
     }
 
+    if (SVGTests::handleAttributeChange(const_cast<SVGSVGElement*>(this), attrName))
+        return;
+
     if (!renderer())
         return;
 
     if (updateRelativeLengths
-        || SVGTests::isKnownAttribute(attrName)
         || SVGLangSpace::isKnownAttribute(attrName)
         || SVGExternalResourcesRequired::isKnownAttribute(attrName)
         || SVGZoomAndPan::isKnownAttribute(attrName)
diff --git a/WebCore/svg/SVGTests.cpp b/WebCore/svg/SVGTests.cpp
index 3317964..87f9185 100644
--- a/WebCore/svg/SVGTests.cpp
+++ b/WebCore/svg/SVGTests.cpp
@@ -26,6 +26,7 @@
 #include "Attribute.h"
 #include "DOMImplementation.h"
 #include "Language.h"
+#include "SVGElement.h"
 #include "SVGNames.h"
 #include "SVGStringList.h"
 
@@ -82,13 +83,31 @@ bool SVGTests::parseMappedAttribute(Attribute* attr)
     return false;
 }
 
-bool SVGTests::isKnownAttribute(const QualifiedName& attrName)
+static bool knownAttribute(const QualifiedName& attrName)
 {
     return attrName == SVGNames::requiredFeaturesAttr
         || attrName == SVGNames::requiredExtensionsAttr
         || attrName == SVGNames::systemLanguageAttr;
 }
 
+bool SVGTests::isKnownAttribute(const QualifiedName& attrName)
+{
+    return knownAttribute(attrName);
+}
+
+bool SVGTests::handleAttributeChange(SVGElement* element, const QualifiedName& attrName)
+{
+    if (knownAttribute(attrName)) {
+        bool valid = element->isValid();
+        if (valid && !element->attached() && element->inDocument())
+            element->attach();
+        if (!valid && element->attached())
+            element->detach();
+        return true;
+    }
+    return false;
+}
+
 }
 
 #endif // ENABLE(SVG)
diff --git a/WebCore/svg/SVGTests.h b/WebCore/svg/SVGTests.h
index f662e9a..f6801cb 100644
--- a/WebCore/svg/SVGTests.h
+++ b/WebCore/svg/SVGTests.h
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann at kde.org>
- * Copyright (C) 2004, 2005, 2006 Rob Buis <buis at kde.org>
+ * Copyright (C) 2004, 2005, 2006, 2010 Rob Buis <buis at kde.org>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -28,6 +28,7 @@ namespace WebCore {
 
 class Attribute;
 class QualifiedName;
+class SVGElement;
 
 class SVGTests {
 public:
@@ -41,6 +42,8 @@ public:
     bool parseMappedAttribute(Attribute*);
     bool isKnownAttribute(const QualifiedName&);
 
+    static bool handleAttributeChange(SVGElement*, const QualifiedName&);
+
 protected:
     SVGTests();
 
diff --git a/WebCore/svg/SVGTextContentElement.cpp b/WebCore/svg/SVGTextContentElement.cpp
index cdb9d81..20f78ad 100644
--- a/WebCore/svg/SVGTextContentElement.cpp
+++ b/WebCore/svg/SVGTextContentElement.cpp
@@ -201,11 +201,20 @@ void SVGTextContentElement::synchronizeProperty(const QualifiedName& attrName)
         synchronizeExternalResourcesRequired();
 }
 
+void SVGTextContentElement::svgAttributeChanged(const QualifiedName& attrName)
+{
+    SVGStyledElement::svgAttributeChanged(attrName);
+
+    if (SVGTests::handleAttributeChange(const_cast<SVGTextContentElement*>(this), attrName))
+        return;
+
+    // FIXME: also handle attribute changes for lengthAdjust and textLength
+}
+
 bool SVGTextContentElement::isKnownAttribute(const QualifiedName& attrName)
 {
     return (attrName.matches(SVGNames::lengthAdjustAttr) ||
             attrName.matches(SVGNames::textLengthAttr) ||
-            SVGTests::isKnownAttribute(attrName) ||
             SVGLangSpace::isKnownAttribute(attrName) ||
             SVGExternalResourcesRequired::isKnownAttribute(attrName) ||
             SVGStyledElement::isKnownAttribute(attrName));
diff --git a/WebCore/svg/SVGTextContentElement.h b/WebCore/svg/SVGTextContentElement.h
index d3aa061..fd2e003 100644
--- a/WebCore/svg/SVGTextContentElement.h
+++ b/WebCore/svg/SVGTextContentElement.h
@@ -64,6 +64,7 @@ namespace WebCore {
         virtual bool isValid() const { return SVGTests::isValid(); }
 
         virtual void parseMappedAttribute(Attribute*);
+        virtual void svgAttributeChanged(const QualifiedName&);
         virtual void synchronizeProperty(const QualifiedName&);
 
         virtual bool selfHasRelativeLengths() const;
diff --git a/WebCore/svg/SVGUseElement.cpp b/WebCore/svg/SVGUseElement.cpp
index 75ed4c5..7781b8c 100644
--- a/WebCore/svg/SVGUseElement.cpp
+++ b/WebCore/svg/SVGUseElement.cpp
@@ -143,6 +143,9 @@ void SVGUseElement::svgAttributeChanged(const QualifiedName& attrName)
     if (isXYAttribute || isWidthHeightAttribute)
         updateRelativeLengthsInformation();
 
+    if (SVGTests::handleAttributeChange(const_cast<SVGUseElement*>(this), attrName))
+        return;
+
     RenderObject* object = renderer();
     if (!object)
         return;
@@ -180,8 +183,7 @@ void SVGUseElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
     }
 
-    if (SVGTests::isKnownAttribute(attrName)
-        || SVGLangSpace::isKnownAttribute(attrName)
+    if (SVGLangSpace::isKnownAttribute(attrName)
         || SVGExternalResourcesRequired::isKnownAttribute(attrName))
         invalidateShadowTree();
 }

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list