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

commit-queue at webkit.org commit-queue at webkit.org
Wed Dec 22 14:26:29 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit c33bbca5fd92c98941c9b16b517d6e1d49d16911
Author: commit-queue at webkit.org <commit-queue at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Oct 8 16:52:48 2010 +0000

    2010-10-08  Renata Hodovan  <reni at inf.u-szeged.hu>
    
            Reviewed by Andreas Kling.
    
            SVGFEColorMatrixElement doesn't support dynamic invalidation, when attributes change.
            https://bugs.webkit.org/show_bug.cgi?id=47342
    
            Adding layout tests for feColorMatrix dynamic changes.
    
            * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.checksum: Added.
            * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.png: Added.
            * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.checksum: Added.
            * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.png: Added.
            * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.checksum: Added.
            * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.png: Added.
            * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.checksum: Added.
            * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.png: Added.
            * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.checksum: Added.
            * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.png: Added.
            * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.checksum: Added.
            * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.png: Added.
            * svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.txt: Added.
            * svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr.html: Added.
            * svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.txt: Added.
            * svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr.html: Added.
            * svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.txt: Added.
            * svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr.html: Added.
            * svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.txt: Added.
            * svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop.html: Added.
            * svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.txt: Added.
            * svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop.html: Added.
            * svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.txt: Added.
            * svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop.html: Added.
            * svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-dom-in-attr.js: Added.
            (executeTest):
            * svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-dom-type-attr.js: Added.
            (executeTest):
            * svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-dom-values-attr.js: Added.
            (executeTest):
            * svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-svgdom-in-prop.js: Added.
            (executeTest):
            * svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-svgdom-type-prop.js: Added.
            (executeTest):
            * svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-svgdom-values-prop.js: Added.
            (SVGNumberListToString):
            (executeTest):
    2010-10-08  Renata Hodovan  <reni at inf.u-szeged.hu>
    
            Reviewed by Andreas Kling.
    
            SVGFEColorMatrixElement doesn't support dynamic invalidation, when attributes change.
            https://bugs.webkit.org/show_bug.cgi?id=47342
    
            The dynamic changes are captured by the svgAttributeChange function, and invalidate the filter primitive if necessary.
    
            Tests: svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr.html
                   svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr.html
                   svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr.html
                   svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop.html
                   svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop.html
                   svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop.html
    
            * svg/SVGFEColorMatrixElement.cpp:
            (WebCore::SVGFEColorMatrixElement::svgAttributeChanged):
            * svg/SVGFEColorMatrixElement.h:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@69409 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index f53eadc..a959366 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,50 @@
+2010-10-08  Renata Hodovan  <reni at inf.u-szeged.hu>
+
+        Reviewed by Andreas Kling.
+
+        SVGFEColorMatrixElement doesn't support dynamic invalidation, when attributes change.
+        https://bugs.webkit.org/show_bug.cgi?id=47342
+
+        Adding layout tests for feColorMatrix dynamic changes.
+
+        * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.checksum: Added.
+        * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.png: Added.
+        * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.checksum: Added.
+        * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.png: Added.
+        * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.checksum: Added.
+        * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.png: Added.
+        * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.checksum: Added.
+        * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.png: Added.
+        * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.checksum: Added.
+        * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.png: Added.
+        * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.checksum: Added.
+        * platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.png: Added.
+        * svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.txt: Added.
+        * svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr.html: Added.
+        * svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.txt: Added.
+        * svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr.html: Added.
+        * svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.txt: Added.
+        * svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr.html: Added.
+        * svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.txt: Added.
+        * svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop.html: Added.
+        * svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.txt: Added.
+        * svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop.html: Added.
+        * svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.txt: Added.
+        * svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop.html: Added.
+        * svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-dom-in-attr.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-dom-type-attr.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-dom-values-attr.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-svgdom-in-prop.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-svgdom-type-prop.js: Added.
+        (executeTest):
+        * svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-svgdom-values-prop.js: Added.
+        (SVGNumberListToString):
+        (executeTest):
+
 2010-10-08  Alexander Pavlov  <apavlov at chromium.org>
 
         Unreviewed, updating test expectations.
diff --git a/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.checksum b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.checksum
new file mode 100644
index 0000000..fd8fcc0
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.checksum
@@ -0,0 +1 @@
+93d6e02c8e310131a1884f02a2ffb49f
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.png b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.png
new file mode 100644
index 0000000..cafba52
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.checksum b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.checksum
new file mode 100644
index 0000000..6e26c87
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.checksum
@@ -0,0 +1 @@
+fd79aa6f00d1179baac27de998440cbb
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.png b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.png
new file mode 100644
index 0000000..6087311
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.checksum b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.checksum
new file mode 100644
index 0000000..7c507c5
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.checksum
@@ -0,0 +1 @@
+712a6e491e9858e9d58196515152bc3f
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.png b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.png
new file mode 100644
index 0000000..3a210da
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.checksum b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.checksum
new file mode 100644
index 0000000..0dac43c
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.checksum
@@ -0,0 +1 @@
+f608cb1c1551c4b03f9f8960dc9493ba
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.png b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.png
new file mode 100644
index 0000000..af43054
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.checksum b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.checksum
new file mode 100644
index 0000000..0af48d7
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.checksum
@@ -0,0 +1 @@
+08fe29beaa3454168d0ccb3b25904b45
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.png b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.png
new file mode 100644
index 0000000..f4c4939
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.checksum b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.checksum
new file mode 100644
index 0000000..b3146e4
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.checksum
@@ -0,0 +1 @@
+84a5f98925e4ffa494b1da0a296bd93c
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.png b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.png
new file mode 100644
index 0000000..cfe9d16
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.png differ
diff --git a/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.txt b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.txt
new file mode 100644
index 0000000..f2b0236
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.txt
@@ -0,0 +1,19 @@
+SVG 1.1 dynamic update tests
+
+Tests dynamic updates of the 'in' attribute of the SVGFEColorMatrixElement object
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS matrixElement.getAttribute('in') is "SourceAlpha"
+PASS saturateElement.getAttribute('in') is "SourceAlpha"
+PASS hueRotateElement.getAttribute('in') is "SourceAlpha"
+PASS luminanceToAlphaElement.getAttribute('in') is "SourceAlpha"
+PASS matrixElement.getAttribute('in') is "SourceGraphic"
+PASS saturateElement.getAttribute('in') is "SourceGraphic"
+PASS hueRotateElement.getAttribute('in') is "SourceGraphic"
+PASS luminanceToAlphaElement.getAttribute('in') is "SourceGraphic"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr.html b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr.html
new file mode 100644
index 0000000..26bba52
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr.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/SVGFEColorMatrixElement-dom-in-attr.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.txt b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.txt
new file mode 100644
index 0000000..47c0310
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.txt
@@ -0,0 +1,19 @@
+SVG 1.1 dynamic update tests
+
+Tests dynamic updates of the 'type' attribute of the SVGFEColorMatrixElement object
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS matrixElement.getAttribute('type') is "saturate"
+PASS saturateElement.getAttribute('type') is "hueRotate"
+PASS hueRotateElement.getAttribute('type') is "luminanceToAlpha"
+PASS luminanceToAlphaElement.getAttribute('type') is "matrix"
+PASS matrixElement.getAttribute('type') is "matrix"
+PASS saturateElement.getAttribute('type') is "saturate"
+PASS hueRotateElement.getAttribute('type') is "hueRotate"
+PASS luminanceToAlphaElement.getAttribute('type') is "luminanceToAlpha"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr.html b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr.html
new file mode 100644
index 0000000..e192238
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr.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/SVGFEColorMatrixElement-dom-type-attr.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.txt b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.txt
new file mode 100644
index 0000000..82edc03
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.txt
@@ -0,0 +1,17 @@
+SVG 1.1 dynamic update tests
+
+Tests dynamic updates of the 'values' attribute of the SVGFEColorMatrixElement object
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS matrixElement.getAttribute('values') is ".45 .45 .5 0 0 .13 .13 .13 0 0 .33 .13 .33 0 0 .99 .56 .33 0 0"
+PASS saturateElement.getAttribute('values') is "0.5"
+PASS hueRotateElement.getAttribute('values') is "10"
+PASS matrixElement.getAttribute('values') is ".33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0"
+PASS saturateElement.getAttribute('values') is "0.25"
+PASS hueRotateElement.getAttribute('values') is "90"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr.html b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr.html
new file mode 100644
index 0000000..9179b29
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr.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/SVGFEColorMatrixElement-dom-values-attr.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.txt b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.txt
new file mode 100644
index 0000000..8ffd289
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.txt
@@ -0,0 +1,19 @@
+SVG 1.1 dynamic update tests
+
+Tests dynamic updates of the 'in' property of the SVGFEColorMatrixElement object
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS matrixElement.in1.baseVal is "SourceAlpha"
+PASS saturateElement.in1.baseVal is "SourceAlpha"
+PASS hueRotateElement.in1.baseVal is "SourceAlpha"
+PASS luminanceToAlphaElement.in1.baseVal is "SourceAlpha"
+PASS matrixElement.in1.baseVal is "SourceGraphic"
+PASS saturateElement.in1.baseVal is "SourceGraphic"
+PASS hueRotateElement.in1.baseVal is "SourceGraphic"
+PASS luminanceToAlphaElement.in1.baseVal is "SourceGraphic"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop.html b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop.html
new file mode 100644
index 0000000..ab69c61
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop.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/SVGFEColorMatrixElement-svgdom-in-prop.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.txt b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.txt
new file mode 100644
index 0000000..9482b2b
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.txt
@@ -0,0 +1,19 @@
+SVG 1.1 dynamic update tests
+
+Tests dynamic updates of the 'type' property of the SVGFEColorMatrixElement object
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS matrixElement.getAttribute('type') is "saturate"
+PASS saturateElement.getAttribute('type') is "hueRotate"
+PASS hueRotateElement.getAttribute('type') is "luminanceToAlpha"
+PASS luminanceToAlphaElement.getAttribute('type') is "matrix"
+PASS matrixElement.type.baseVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX
+PASS saturateElement.type.baseVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_SATURATE
+PASS hueRotateElement.type.baseVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_HUEROTATE
+PASS luminanceToAlphaElement.type.baseVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop.html b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop.html
new file mode 100644
index 0000000..a8ba91c
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop.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/SVGFEColorMatrixElement-svgdom-type-prop.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.txt b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.txt
new file mode 100644
index 0000000..8210e64
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.txt
@@ -0,0 +1,17 @@
+SVG 1.1 dynamic update tests
+
+Tests dynamic updates of the 'values' property of the SVGFEColorMatrixElement object
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS SVGNumberListToString(matrixElement.values.baseVal) is "0.9 0.9 0.9 0 0 0.33 0.33 0.33 0 0 0.33 0.33 0.33 0 0 0.33 0.33 0.33 0 0 "
+PASS Math.round(saturateElement.values.baseVal.getItem(0).value * 1000) is 500
+PASS Math.round(hueRotateElement.values.baseVal.getItem(0).value * 1000) is 10000
+PASS SVGNumberListToString(matrixElement.values.baseVal) is "0.33 0.33 0.33 0 0 0.33 0.33 0.33 0 0 0.33 0.33 0.33 0 0 0.33 0.33 0.33 0 0 "
+PASS saturateElement.values.baseVal.getItem(0).value is 0.25
+PASS hueRotateElement.values.baseVal.getItem(0).value is 90
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop.html b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop.html
new file mode 100644
index 0000000..0a5c183
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop.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/SVGFEColorMatrixElement-svgdom-values-prop.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-dom-in-attr.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-dom-in-attr.js
new file mode 100644
index 0000000..e89a9d9
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-dom-in-attr.js
@@ -0,0 +1,187 @@
+// [Name] SVGFEColorMatrixElement-dom-in-attr.js
+// [Expected rendering result] Five lines with feColorMatrix filter - and a series of PASS messages
+
+description("Tests dynamic updates of the 'in' attribute of the SVGFEColorMatrixElement object")
+createSVGTestCase();
+
+var matrixElement = createSVGElement("feColorMatrix");
+matrixElement.setAttribute("in", "SourceAlpha");
+matrixElement.setAttribute("type", "matrix");
+matrixElement.setAttribute("values", ".33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0");
+
+var saturateElement = createSVGElement("feColorMatrix");
+saturateElement.setAttribute("in", "SourceAlpha");
+saturateElement.setAttribute("type", "saturate");
+saturateElement.setAttribute("values", "0.25");
+
+var hueRotateElement = createSVGElement("feColorMatrix");
+hueRotateElement.setAttribute("in", "SourceAlpha");
+hueRotateElement.setAttribute("type", "hueRotate");
+hueRotateElement.setAttribute("values", "90");
+
+var luminanceToAlphaElement = createSVGElement("feColorMatrix");
+luminanceToAlphaElement.setAttribute("in", "SourceAlpha");
+luminanceToAlphaElement.setAttribute("type", "luminanceToAlpha");
+luminanceToAlphaElement.setAttribute("result", "a");
+
+var compositeElement = createSVGElement("feComposite");
+compositeElement.setAttribute("in", "SourceGraphic");
+compositeElement.setAttribute("in2", "a");
+compositeElement.setAttribute("operator", "in");
+
+var matrixFilter = createSVGElement("filter");
+matrixFilter.setAttribute("id", "MatrixFilter");
+matrixFilter.setAttribute("filterUnits", "objectBoundingBox");
+matrixFilter.setAttribute("x", "-5%");
+matrixFilter.setAttribute("y", "-5%");
+matrixFilter.setAttribute("width", "110%");
+matrixFilter.setAttribute("height", "110%");
+matrixFilter.appendChild(matrixElement);
+
+var saturatedFilter = createSVGElement("filter");
+saturatedFilter.setAttribute("id", "SaturateFilter");
+saturatedFilter.setAttribute("filterUnits", "objectBoundingBox");
+saturatedFilter.setAttribute("x", "-5%");
+saturatedFilter.setAttribute("y", "-5%");
+saturatedFilter.setAttribute("width", "110%");
+saturatedFilter.setAttribute("height", "110%");
+saturatedFilter.appendChild(saturateElement);
+
+var hueRotateFilter = createSVGElement("filter");
+hueRotateFilter.setAttribute("id", "HueRotateFilter");
+hueRotateFilter.setAttribute("filterUnits", "objectBoundingBox");
+hueRotateFilter.setAttribute("x", "-5%");
+hueRotateFilter.setAttribute("y", "-5%");
+hueRotateFilter.setAttribute("width", "110%");
+hueRotateFilter.setAttribute("height", "110%");
+hueRotateFilter.appendChild(hueRotateElement);
+
+var luminanceToAlphaFilter = createSVGElement("filter");
+luminanceToAlphaFilter.setAttribute("id", "LuminanceToAlphaFilter");
+luminanceToAlphaFilter.setAttribute("filterUnits", "objectBoundingBox");
+luminanceToAlphaFilter.setAttribute("x", "-5%");
+luminanceToAlphaFilter.setAttribute("y", "-5%");
+luminanceToAlphaFilter.setAttribute("width", "110%");
+luminanceToAlphaFilter.setAttribute("height", "110%");
+luminanceToAlphaFilter.appendChild(luminanceToAlphaElement);
+luminanceToAlphaFilter.appendChild(compositeElement);
+
+var gradientElement = createSVGElement("linearGradient");
+gradientElement.setAttribute("id", "MyGradient");
+gradientElement.setAttribute("gradientUnits", "userSpaceOnUse");
+gradientElement.setAttribute("x1", "20");
+gradientElement.setAttribute("y1", "0");
+gradientElement.setAttribute("x2", "760");
+gradientElement.setAttribute("y2", "0");
+
+var stopElement1 = createSVGElement("stop");
+stopElement1.setAttribute("offset", "0");
+stopElement1.setAttribute("stop-color", "#dd00dd");
+
+var stopElement2 = createSVGElement("stop");
+stopElement2.setAttribute("offset", ".33");
+stopElement2.setAttribute("stop-color", "#22cc22");
+
+var stopElement3 = createSVGElement("stop");
+stopElement3.setAttribute("offset", ".67");
+stopElement3.setAttribute("stop-color", "#400000");
+
+var stopElement4 = createSVGElement("stop");
+stopElement4.setAttribute("offset", "1");
+stopElement4.setAttribute("stop-color", "#a0a0ff");
+
+gradientElement.appendChild(stopElement1);
+gradientElement.appendChild(stopElement2);
+gradientElement.appendChild(stopElement3);
+gradientElement.appendChild(stopElement4);
+
+var defsElement = createSVGElement("defs");
+defsElement.appendChild(saturatedFilter);
+defsElement.appendChild(matrixFilter);
+defsElement.appendChild(hueRotateFilter);
+defsElement.appendChild(luminanceToAlphaFilter);
+defsElement.appendChild(gradientElement);
+
+rootSVGElement.appendChild(defsElement);
+rootSVGElement.setAttribute("width", "800");
+rootSVGElement.setAttribute("height", "400");
+
+var rectElement = createSVGElement("rect");
+rectElement.setAttribute("width", 798);
+rectElement.setAttribute("height", 320);
+rectElement.setAttribute("x", "1");
+rectElement.setAttribute("y", "1");
+rectElement.setAttribute("fill", "none");
+rectElement.setAttribute("stroke", "blue");
+rectElement.setAttribute("filter", "url(#SaturateFilter)");
+
+var unfilteredRect = createSVGElement("rect");
+unfilteredRect.setAttribute("x", "20");
+unfilteredRect.setAttribute("y", "20");
+unfilteredRect.setAttribute("width", "760");
+unfilteredRect.setAttribute("height", "30");
+unfilteredRect.setAttribute("fill", "url(#MyGradient)");
+rootSVGElement.appendChild(unfilteredRect);
+
+var matrixRect = createSVGElement("rect");
+matrixRect.setAttribute("x", "20");
+matrixRect.setAttribute("y", "80");
+matrixRect.setAttribute("width", "760");
+matrixRect.setAttribute("height", "30");
+matrixRect.setAttribute("fill", "url(#MyGradient)");
+matrixRect.setAttribute("filter", "url(#MatrixFilter)");
+rootSVGElement.appendChild(matrixRect);
+
+var saturatedRect = createSVGElement("rect");
+saturatedRect.setAttribute("x", "20");
+saturatedRect.setAttribute("y", "140");
+saturatedRect.setAttribute("width", "760");
+saturatedRect.setAttribute("height", "30");
+saturatedRect.setAttribute("fill", "url(#MyGradient)");
+saturatedRect.setAttribute("filter", "url(#SaturateFilter)");
+rootSVGElement.appendChild(saturatedRect);
+
+var hueRotateRect = createSVGElement("rect");
+hueRotateRect.setAttribute("x", "20");
+hueRotateRect.setAttribute("y", "200");
+hueRotateRect.setAttribute("width", "760");
+hueRotateRect.setAttribute("height", "30");
+hueRotateRect.setAttribute("fill", "url(#MyGradient)");
+hueRotateRect.setAttribute("filter", "url(#HueRotateFilter)");
+rootSVGElement.appendChild(hueRotateRect);
+
+var luminanceToAlphaRect = createSVGElement("rect");
+luminanceToAlphaRect.setAttribute("x", "20");
+luminanceToAlphaRect.setAttribute("y", "260");
+luminanceToAlphaRect.setAttribute("width", "760");
+luminanceToAlphaRect.setAttribute("height", "30");
+luminanceToAlphaRect.setAttribute("fill", "url(#MyGradient)");
+luminanceToAlphaRect.setAttribute("filter", "url(#LuminanceToAlphaFilter)");
+rootSVGElement.appendChild(luminanceToAlphaRect);
+
+rootSVGElement.appendChild(rectElement);
+rootSVGElement.setAttribute("font-size", "20");
+rootSVGElement.setAttribute("font-family", "Verdana");
+
+shouldBeEqualToString("matrixElement.getAttribute('in')", "SourceAlpha");
+shouldBeEqualToString("saturateElement.getAttribute('in')", "SourceAlpha");
+shouldBeEqualToString("hueRotateElement.getAttribute('in')", "SourceAlpha");
+shouldBeEqualToString("luminanceToAlphaElement.getAttribute('in')", "SourceAlpha");
+
+function executeTest() {
+    matrixElement.setAttribute("in", "SourceGraphic");
+    saturateElement.setAttribute("in", "SourceGraphic");
+    hueRotateElement.setAttribute("in", "SourceGraphic");
+    luminanceToAlphaElement.setAttribute("in", "SourceGraphic");
+
+    shouldBeEqualToString("matrixElement.getAttribute('in')", "SourceGraphic");
+    shouldBeEqualToString("saturateElement.getAttribute('in')", "SourceGraphic");
+    shouldBeEqualToString("hueRotateElement.getAttribute('in')", "SourceGraphic");
+    shouldBeEqualToString("luminanceToAlphaElement.getAttribute('in')", "SourceGraphic");
+
+    completeTest();
+}
+
+startTest(rootSVGElement, 100, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-dom-type-attr.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-dom-type-attr.js
new file mode 100644
index 0000000..d675a22
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-dom-type-attr.js
@@ -0,0 +1,194 @@
+// [Name] SVGFEColorMatrixElement-dom-type-attr.js
+// [Expected rendering result] Five lines with feColorMatrix filter - and a series of PASS messages
+
+description("Tests dynamic updates of the 'type' attribute of the SVGFEColorMatrixElement object")
+createSVGTestCase();
+
+var matrixElement = createSVGElement("feColorMatrix");
+matrixElement.setAttribute("in", "SourceGraphic");
+matrixElement.setAttribute("type", "saturate");
+matrixElement.setAttribute("values", "0.25");
+
+var saturateElement = createSVGElement("feColorMatrix");
+saturateElement.setAttribute("in", "SourceGraphic");
+saturateElement.setAttribute("type", "hueRotate");
+saturateElement.setAttribute("values", "90");
+
+var hueRotateElement = createSVGElement("feColorMatrix");
+hueRotateElement.setAttribute("in", "SourceGraphic");
+hueRotateElement.setAttribute("type", "luminanceToAlpha");
+hueRotateElement.setAttribute("result", "a");
+
+var luminanceToAlphaElement = createSVGElement("feColorMatrix");
+luminanceToAlphaElement.setAttribute("in", "SourceGraphic");
+luminanceToAlphaElement.setAttribute("type", "matrix");
+luminanceToAlphaElement.setAttribute("values", ".33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0");
+
+var compositeElement = createSVGElement("feComposite");
+compositeElement.setAttribute("in", "SourceGraphic");
+compositeElement.setAttribute("in2", "a");
+compositeElement.setAttribute("operator", "in");
+
+var matrixFilter = createSVGElement("filter");
+matrixFilter.setAttribute("id", "MatrixFilter");
+matrixFilter.setAttribute("filterUnits", "objectBoundingBox");
+matrixFilter.setAttribute("x", "-5%");
+matrixFilter.setAttribute("y", "-5%");
+matrixFilter.setAttribute("width", "110%");
+matrixFilter.setAttribute("height", "110%");
+matrixFilter.appendChild(matrixElement);
+
+var saturatedFilter = createSVGElement("filter");
+saturatedFilter.setAttribute("id", "SaturateFilter");
+saturatedFilter.setAttribute("filterUnits", "objectBoundingBox");
+saturatedFilter.setAttribute("x", "-5%");
+saturatedFilter.setAttribute("y", "-5%");
+saturatedFilter.setAttribute("width", "110%");
+saturatedFilter.setAttribute("height", "110%");
+saturatedFilter.appendChild(saturateElement);
+
+var hueRotateFilter = createSVGElement("filter");
+hueRotateFilter.setAttribute("id", "HueRotateFilter");
+hueRotateFilter.setAttribute("filterUnits", "objectBoundingBox");
+hueRotateFilter.setAttribute("x", "-5%");
+hueRotateFilter.setAttribute("y", "-5%");
+hueRotateFilter.setAttribute("width", "110%");
+hueRotateFilter.setAttribute("height", "110%");
+hueRotateFilter.appendChild(hueRotateElement);
+
+var luminanceToAlphaFilter = createSVGElement("filter");
+luminanceToAlphaFilter.setAttribute("id", "LuminanceToAlphaFilter");
+luminanceToAlphaFilter.setAttribute("filterUnits", "objectBoundingBox");
+luminanceToAlphaFilter.setAttribute("x", "-5%");
+luminanceToAlphaFilter.setAttribute("y", "-5%");
+luminanceToAlphaFilter.setAttribute("width", "110%");
+luminanceToAlphaFilter.setAttribute("height", "110%");
+luminanceToAlphaFilter.appendChild(luminanceToAlphaElement);
+luminanceToAlphaFilter.appendChild(compositeElement);
+
+var gradientElement = createSVGElement("linearGradient");
+gradientElement.setAttribute("id", "MyGradient");
+gradientElement.setAttribute("gradientUnits", "userSpaceOnUse");
+gradientElement.setAttribute("x1", "20");
+gradientElement.setAttribute("y1", "0");
+gradientElement.setAttribute("x2", "760");
+gradientElement.setAttribute("y2", "0");
+
+var stopElement1 = createSVGElement("stop");
+stopElement1.setAttribute("offset", "0");
+stopElement1.setAttribute("stop-color", "#dd00dd");
+
+var stopElement2 = createSVGElement("stop");
+stopElement2.setAttribute("offset", ".33");
+stopElement2.setAttribute("stop-color", "#22cc22");
+
+var stopElement3 = createSVGElement("stop");
+stopElement3.setAttribute("offset", ".67");
+stopElement3.setAttribute("stop-color", "#400000");
+
+var stopElement4 = createSVGElement("stop");
+stopElement4.setAttribute("offset", "1");
+stopElement4.setAttribute("stop-color", "#a0a0ff");
+
+gradientElement.appendChild(stopElement1);
+gradientElement.appendChild(stopElement2);
+gradientElement.appendChild(stopElement3);
+gradientElement.appendChild(stopElement4);
+
+var defsElement = createSVGElement("defs");
+defsElement.appendChild(saturatedFilter);
+defsElement.appendChild(matrixFilter);
+defsElement.appendChild(hueRotateFilter);
+defsElement.appendChild(luminanceToAlphaFilter);
+defsElement.appendChild(gradientElement);
+
+rootSVGElement.appendChild(defsElement);
+rootSVGElement.setAttribute("width", "800");
+rootSVGElement.setAttribute("height", "350");
+
+var rectElement = createSVGElement("rect");
+rectElement.setAttribute("width", 798);
+rectElement.setAttribute("height", 320);
+rectElement.setAttribute("x", "1");
+rectElement.setAttribute("y", "1");
+rectElement.setAttribute("fill", "none");
+rectElement.setAttribute("stroke", "blue");
+rectElement.setAttribute("filter", "url(#SaturateFilter)");
+
+var unfilteredRect = createSVGElement("rect");
+unfilteredRect.setAttribute("x", "20");
+unfilteredRect.setAttribute("y", "20");
+unfilteredRect.setAttribute("width", "760");
+unfilteredRect.setAttribute("height", "30");
+unfilteredRect.setAttribute("fill", "url(#MyGradient)");
+rootSVGElement.appendChild(unfilteredRect);
+
+var matrixRect = createSVGElement("rect");
+matrixRect.setAttribute("x", "20");
+matrixRect.setAttribute("y", "80");
+matrixRect.setAttribute("width", "760");
+matrixRect.setAttribute("height", "30");
+matrixRect.setAttribute("fill", "url(#MyGradient)");
+matrixRect.setAttribute("filter", "url(#MatrixFilter)");
+rootSVGElement.appendChild(matrixRect);
+
+var saturatedRect = createSVGElement("rect");
+saturatedRect.setAttribute("x", "20");
+saturatedRect.setAttribute("y", "140");
+saturatedRect.setAttribute("width", "760");
+saturatedRect.setAttribute("height", "30");
+saturatedRect.setAttribute("fill", "url(#MyGradient)");
+saturatedRect.setAttribute("filter", "url(#SaturateFilter)");
+rootSVGElement.appendChild(saturatedRect);
+
+var hueRotateRect = createSVGElement("rect");
+hueRotateRect.setAttribute("x", "20");
+hueRotateRect.setAttribute("y", "200");
+hueRotateRect.setAttribute("width", "760");
+hueRotateRect.setAttribute("height", "30");
+hueRotateRect.setAttribute("fill", "url(#MyGradient)");
+hueRotateRect.setAttribute("filter", "url(#HueRotateFilter)");
+rootSVGElement.appendChild(hueRotateRect);
+
+var luminanceToAlphaRect = createSVGElement("rect");
+luminanceToAlphaRect.setAttribute("x", "20");
+luminanceToAlphaRect.setAttribute("y", "260");
+luminanceToAlphaRect.setAttribute("width", "760");
+luminanceToAlphaRect.setAttribute("height", "30");
+luminanceToAlphaRect.setAttribute("fill", "url(#MyGradient)");
+luminanceToAlphaRect.setAttribute("filter", "url(#LuminanceToAlphaFilter)");
+rootSVGElement.appendChild(luminanceToAlphaRect);
+
+rootSVGElement.appendChild(rectElement);
+rootSVGElement.setAttribute("font-size", "20");
+rootSVGElement.setAttribute("font-family", "Verdana");
+
+shouldBeEqualToString("matrixElement.getAttribute('type')", "saturate");
+shouldBeEqualToString("saturateElement.getAttribute('type')", "hueRotate");
+shouldBeEqualToString("hueRotateElement.getAttribute('type')", "luminanceToAlpha");
+shouldBeEqualToString("luminanceToAlphaElement.getAttribute('type')", "matrix");
+
+function executeTest() {
+    matrixElement.setAttribute("type", "matrix");
+    matrixElement.setAttribute("values", ".33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0");
+
+    saturateElement.setAttribute("type", "saturate");
+    saturateElement.setAttribute("values", "0.25");
+
+    hueRotateElement.setAttribute("type", "hueRotate");
+    hueRotateElement.setAttribute("values", "90");
+
+    luminanceToAlphaElement.setAttribute("type", "luminanceToAlpha");
+    luminanceToAlphaElement.setAttribute("result", "a");
+
+    shouldBeEqualToString("matrixElement.getAttribute('type')", "matrix");
+    shouldBeEqualToString("saturateElement.getAttribute('type')", "saturate");
+    shouldBeEqualToString("hueRotateElement.getAttribute('type')", "hueRotate");
+    shouldBeEqualToString("luminanceToAlphaElement.getAttribute('type')", "luminanceToAlpha");
+
+    completeTest();
+}
+
+startTest(rootSVGElement, 100, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-dom-values-attr.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-dom-values-attr.js
new file mode 100644
index 0000000..59a0bbe
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-dom-values-attr.js
@@ -0,0 +1,184 @@
+// [Name] SVGFEColorMatrixElement-dom-values-attr.js
+// [Expected rendering result] Five lines with feColorMatrix filter - and a series of PASS messages
+
+description("Tests dynamic updates of the 'values' attribute of the SVGFEColorMatrixElement object")
+createSVGTestCase();
+
+var matrixElement = createSVGElement("feColorMatrix");
+matrixElement.setAttribute("in", "SourceGraphic");
+matrixElement.setAttribute("type", "matrix");
+matrixElement.setAttribute("values", ".45 .45 .5 0 0 .13 .13 .13 0 0 .33 .13 .33 0 0 .99 .56 .33 0 0");
+
+var saturateElement = createSVGElement("feColorMatrix");
+saturateElement.setAttribute("in", "SourceGraphic");
+saturateElement.setAttribute("type", "saturate");
+saturateElement.setAttribute("values", "0.5");
+
+var hueRotateElement = createSVGElement("feColorMatrix");
+hueRotateElement.setAttribute("in", "SourceGraphic");
+hueRotateElement.setAttribute("type", "hueRotate");
+hueRotateElement.setAttribute("values", "10");
+
+var luminanceToAlphaElement = createSVGElement("feColorMatrix");
+luminanceToAlphaElement.setAttribute("in", "SourceGraphic");
+luminanceToAlphaElement.setAttribute("type", "luminanceToAlpha");
+luminanceToAlphaElement.setAttribute("result", "a");
+
+var compositeElement = createSVGElement("feComposite");
+compositeElement.setAttribute("in", "SourceGraphic");
+compositeElement.setAttribute("in2", "a");
+compositeElement.setAttribute("operator", "in");
+
+var matrixFilter = createSVGElement("filter");
+matrixFilter.setAttribute("id", "MatrixFilter");
+matrixFilter.setAttribute("filterUnits", "objectBoundingBox");
+matrixFilter.setAttribute("x", "-5%");
+matrixFilter.setAttribute("y", "-5%");
+matrixFilter.setAttribute("width", "110%");
+matrixFilter.setAttribute("height", "110%");
+matrixFilter.appendChild(matrixElement);
+
+var saturatedFilter = createSVGElement("filter");
+saturatedFilter.setAttribute("id", "SaturateFilter");
+saturatedFilter.setAttribute("filterUnits", "objectBoundingBox");
+saturatedFilter.setAttribute("x", "-5%");
+saturatedFilter.setAttribute("y", "-5%");
+saturatedFilter.setAttribute("width", "110%");
+saturatedFilter.setAttribute("height", "110%");
+saturatedFilter.appendChild(saturateElement);
+
+var hueRotateFilter = createSVGElement("filter");
+hueRotateFilter.setAttribute("id", "HueRotateFilter");
+hueRotateFilter.setAttribute("filterUnits", "objectBoundingBox");
+hueRotateFilter.setAttribute("x", "-5%");
+hueRotateFilter.setAttribute("y", "-5%");
+hueRotateFilter.setAttribute("width", "110%");
+hueRotateFilter.setAttribute("height", "110%");
+hueRotateFilter.appendChild(hueRotateElement);
+
+var luminanceToAlphaFilter = createSVGElement("filter");
+luminanceToAlphaFilter.setAttribute("id", "LuminanceToAlphaFilter");
+luminanceToAlphaFilter.setAttribute("filterUnits", "objectBoundingBox");
+luminanceToAlphaFilter.setAttribute("x", "-5%");
+luminanceToAlphaFilter.setAttribute("y", "-5%");
+luminanceToAlphaFilter.setAttribute("width", "110%");
+luminanceToAlphaFilter.setAttribute("height", "110%");
+luminanceToAlphaFilter.appendChild(luminanceToAlphaElement);
+luminanceToAlphaFilter.appendChild(compositeElement);
+
+var gradientElement = createSVGElement("linearGradient");
+gradientElement.setAttribute("id", "MyGradient");
+gradientElement.setAttribute("gradientUnits", "userSpaceOnUse");
+gradientElement.setAttribute("x1", "20");
+gradientElement.setAttribute("y1", "0");
+gradientElement.setAttribute("x2", "760");
+gradientElement.setAttribute("y2", "0");
+
+var stopElement1 = createSVGElement("stop");
+stopElement1.setAttribute("offset", "0");
+stopElement1.setAttribute("stop-color", "#dd00dd");
+
+var stopElement2 = createSVGElement("stop");
+stopElement2.setAttribute("offset", ".33");
+stopElement2.setAttribute("stop-color", "#22cc22");
+
+var stopElement3 = createSVGElement("stop");
+stopElement3.setAttribute("offset", ".67");
+stopElement3.setAttribute("stop-color", "#400000");
+
+var stopElement4 = createSVGElement("stop");
+stopElement4.setAttribute("offset", "1");
+stopElement4.setAttribute("stop-color", "#a0a0ff");
+
+gradientElement.appendChild(stopElement1);
+gradientElement.appendChild(stopElement2);
+gradientElement.appendChild(stopElement3);
+gradientElement.appendChild(stopElement4);
+
+var defsElement = createSVGElement("defs");
+defsElement.appendChild(saturatedFilter);
+defsElement.appendChild(matrixFilter);
+defsElement.appendChild(hueRotateFilter);
+defsElement.appendChild(luminanceToAlphaFilter);
+defsElement.appendChild(gradientElement);
+
+rootSVGElement.appendChild(defsElement);
+rootSVGElement.setAttribute("width", "800");
+rootSVGElement.setAttribute("height", "400");
+
+var rectElement = createSVGElement("rect");
+rectElement.setAttribute("width", 798);
+rectElement.setAttribute("height", 320);
+rectElement.setAttribute("x", "1");
+rectElement.setAttribute("y", "1");
+rectElement.setAttribute("fill", "none");
+rectElement.setAttribute("stroke", "blue");
+rectElement.setAttribute("filter", "url(#SaturateFilter)");
+
+var unfilteredRect = createSVGElement("rect");
+unfilteredRect.setAttribute("x", "20");
+unfilteredRect.setAttribute("y", "20");
+unfilteredRect.setAttribute("width", "760");
+unfilteredRect.setAttribute("height", "30");
+unfilteredRect.setAttribute("fill", "url(#MyGradient)");
+rootSVGElement.appendChild(unfilteredRect);
+
+var matrixRect = createSVGElement("rect");
+matrixRect.setAttribute("x", "20");
+matrixRect.setAttribute("y", "80");
+matrixRect.setAttribute("width", "760");
+matrixRect.setAttribute("height", "30");
+matrixRect.setAttribute("fill", "url(#MyGradient)");
+matrixRect.setAttribute("filter", "url(#MatrixFilter)");
+rootSVGElement.appendChild(matrixRect);
+
+var saturatedRect = createSVGElement("rect");
+saturatedRect.setAttribute("x", "20");
+saturatedRect.setAttribute("y", "140");
+saturatedRect.setAttribute("width", "760");
+saturatedRect.setAttribute("height", "30");
+saturatedRect.setAttribute("fill", "url(#MyGradient)");
+saturatedRect.setAttribute("filter", "url(#SaturateFilter)");
+rootSVGElement.appendChild(saturatedRect);
+
+var hueRotateRect = createSVGElement("rect");
+hueRotateRect.setAttribute("x", "20");
+hueRotateRect.setAttribute("y", "200");
+hueRotateRect.setAttribute("width", "760");
+hueRotateRect.setAttribute("height", "30");
+hueRotateRect.setAttribute("fill", "url(#MyGradient)");
+hueRotateRect.setAttribute("filter", "url(#HueRotateFilter)");
+rootSVGElement.appendChild(hueRotateRect);
+
+var luminanceToAlphaRect = createSVGElement("rect");
+luminanceToAlphaRect.setAttribute("x", "20");
+luminanceToAlphaRect.setAttribute("y", "260");
+luminanceToAlphaRect.setAttribute("width", "760");
+luminanceToAlphaRect.setAttribute("height", "30");
+luminanceToAlphaRect.setAttribute("fill", "url(#MyGradient)");
+luminanceToAlphaRect.setAttribute("filter", "url(#LuminanceToAlphaFilter)");
+rootSVGElement.appendChild(luminanceToAlphaRect);
+
+rootSVGElement.appendChild(rectElement);
+rootSVGElement.setAttribute("font-size", "20");
+rootSVGElement.setAttribute("font-family", "Verdana");
+
+shouldBeEqualToString("matrixElement.getAttribute('values')", ".45 .45 .5 0 0 .13 .13 .13 0 0 .33 .13 .33 0 0 .99 .56 .33 0 0");
+shouldBeEqualToString("saturateElement.getAttribute('values')", "0.5");
+shouldBeEqualToString("hueRotateElement.getAttribute('values')", "10");
+
+function executeTest() {
+    matrixElement.setAttribute("values", ".33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0");
+    saturateElement.setAttribute("values", "0.25");
+    hueRotateElement.setAttribute("values", "90");
+
+    shouldBeEqualToString("matrixElement.getAttribute('values')", ".33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0");
+    shouldBeEqualToString("saturateElement.getAttribute('values')", "0.25");
+    shouldBeEqualToString("hueRotateElement.getAttribute('values')", "90");
+
+    completeTest();
+}
+
+startTest(rootSVGElement, 100, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-svgdom-in-prop.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-svgdom-in-prop.js
new file mode 100644
index 0000000..ebeae07
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-svgdom-in-prop.js
@@ -0,0 +1,187 @@
+// [Name] SVGFEColorMatrixElement-svgdom-in-prop.js
+// [Expected rendering result] Five lines with feColorMatrix filter - and a series of PASS messages
+
+description("Tests dynamic updates of the 'in' property of the SVGFEColorMatrixElement object")
+createSVGTestCase();
+
+var matrixElement = createSVGElement("feColorMatrix");
+matrixElement.setAttribute("in", "SourceAlpha");
+matrixElement.setAttribute("type", "matrix");
+matrixElement.setAttribute("values", ".33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0");
+
+var saturateElement = createSVGElement("feColorMatrix");
+saturateElement.setAttribute("in", "SourceAlpha");
+saturateElement.setAttribute("type", "saturate");
+saturateElement.setAttribute("values", "0.25");
+
+var hueRotateElement = createSVGElement("feColorMatrix");
+hueRotateElement.setAttribute("in", "SourceAlpha");
+hueRotateElement.setAttribute("type", "hueRotate");
+hueRotateElement.setAttribute("values", "90");
+
+var luminanceToAlphaElement = createSVGElement("feColorMatrix");
+luminanceToAlphaElement.setAttribute("in", "SourceAlpha");
+luminanceToAlphaElement.setAttribute("type", "luminanceToAlpha");
+luminanceToAlphaElement.setAttribute("result", "a");
+
+var compositeElement = createSVGElement("feComposite");
+compositeElement.setAttribute("in", "SourceGraphic");
+compositeElement.setAttribute("in2", "a");
+compositeElement.setAttribute("operator", "in");
+
+var matrixFilter = createSVGElement("filter");
+matrixFilter.setAttribute("id", "MatrixFilter");
+matrixFilter.setAttribute("filterUnits", "objectBoundingBox");
+matrixFilter.setAttribute("x", "-5%");
+matrixFilter.setAttribute("y", "-5%");
+matrixFilter.setAttribute("width", "110%");
+matrixFilter.setAttribute("height", "110%");
+matrixFilter.appendChild(matrixElement);
+
+var saturatedFilter = createSVGElement("filter");
+saturatedFilter.setAttribute("id", "SaturateFilter");
+saturatedFilter.setAttribute("filterUnits", "objectBoundingBox");
+saturatedFilter.setAttribute("x", "-5%");
+saturatedFilter.setAttribute("y", "-5%");
+saturatedFilter.setAttribute("width", "110%");
+saturatedFilter.setAttribute("height", "110%");
+saturatedFilter.appendChild(saturateElement);
+
+var hueRotateFilter = createSVGElement("filter");
+hueRotateFilter.setAttribute("id", "HueRotateFilter");
+hueRotateFilter.setAttribute("filterUnits", "objectBoundingBox");
+hueRotateFilter.setAttribute("x", "-5%");
+hueRotateFilter.setAttribute("y", "-5%");
+hueRotateFilter.setAttribute("width", "110%");
+hueRotateFilter.setAttribute("height", "110%");
+hueRotateFilter.appendChild(hueRotateElement);
+
+var luminanceToAlphaFilter = createSVGElement("filter");
+luminanceToAlphaFilter.setAttribute("id", "LuminanceToAlphaFilter");
+luminanceToAlphaFilter.setAttribute("filterUnits", "objectBoundingBox");
+luminanceToAlphaFilter.setAttribute("x", "-5%");
+luminanceToAlphaFilter.setAttribute("y", "-5%");
+luminanceToAlphaFilter.setAttribute("width", "110%");
+luminanceToAlphaFilter.setAttribute("height", "110%");
+luminanceToAlphaFilter.appendChild(luminanceToAlphaElement);
+luminanceToAlphaFilter.appendChild(compositeElement);
+
+var gradientElement = createSVGElement("linearGradient");
+gradientElement.setAttribute("id", "MyGradient");
+gradientElement.setAttribute("gradientUnits", "userSpaceOnUse");
+gradientElement.setAttribute("x1", "20");
+gradientElement.setAttribute("y1", "0");
+gradientElement.setAttribute("x2", "760");
+gradientElement.setAttribute("y2", "0");
+
+var stopElement1 = createSVGElement("stop");
+stopElement1.setAttribute("offset", "0");
+stopElement1.setAttribute("stop-color", "#dd00dd");
+
+var stopElement2 = createSVGElement("stop");
+stopElement2.setAttribute("offset", ".33");
+stopElement2.setAttribute("stop-color", "#22cc22");
+
+var stopElement3 = createSVGElement("stop");
+stopElement3.setAttribute("offset", ".67");
+stopElement3.setAttribute("stop-color", "#400000");
+
+var stopElement4 = createSVGElement("stop");
+stopElement4.setAttribute("offset", "1");
+stopElement4.setAttribute("stop-color", "#a0a0ff");
+
+gradientElement.appendChild(stopElement1);
+gradientElement.appendChild(stopElement2);
+gradientElement.appendChild(stopElement3);
+gradientElement.appendChild(stopElement4);
+
+var defsElement = createSVGElement("defs");
+defsElement.appendChild(saturatedFilter);
+defsElement.appendChild(matrixFilter);
+defsElement.appendChild(hueRotateFilter);
+defsElement.appendChild(luminanceToAlphaFilter);
+defsElement.appendChild(gradientElement);
+
+rootSVGElement.appendChild(defsElement);
+rootSVGElement.setAttribute("width", "800");
+rootSVGElement.setAttribute("height", "400");
+
+var rectElement = createSVGElement("rect");
+rectElement.setAttribute("width", 798);
+rectElement.setAttribute("height", 320);
+rectElement.setAttribute("x", "1");
+rectElement.setAttribute("y", "1");
+rectElement.setAttribute("fill", "none");
+rectElement.setAttribute("stroke", "blue");
+rectElement.setAttribute("filter", "url(#SaturateFilter)");
+
+var unfilteredRect = createSVGElement("rect");
+unfilteredRect.setAttribute("x", "20");
+unfilteredRect.setAttribute("y", "20");
+unfilteredRect.setAttribute("width", "760");
+unfilteredRect.setAttribute("height", "30");
+unfilteredRect.setAttribute("fill", "url(#MyGradient)");
+rootSVGElement.appendChild(unfilteredRect);
+
+var matrixRect = createSVGElement("rect");
+matrixRect.setAttribute("x", "20");
+matrixRect.setAttribute("y", "80");
+matrixRect.setAttribute("width", "760");
+matrixRect.setAttribute("height", "30");
+matrixRect.setAttribute("fill", "url(#MyGradient)");
+matrixRect.setAttribute("filter", "url(#MatrixFilter)");
+rootSVGElement.appendChild(matrixRect);
+
+var saturatedRect = createSVGElement("rect");
+saturatedRect.setAttribute("x", "20");
+saturatedRect.setAttribute("y", "140");
+saturatedRect.setAttribute("width", "760");
+saturatedRect.setAttribute("height", "30");
+saturatedRect.setAttribute("fill", "url(#MyGradient)");
+saturatedRect.setAttribute("filter", "url(#SaturateFilter)");
+rootSVGElement.appendChild(saturatedRect);
+
+var hueRotateRect = createSVGElement("rect");
+hueRotateRect.setAttribute("x", "20");
+hueRotateRect.setAttribute("y", "200");
+hueRotateRect.setAttribute("width", "760");
+hueRotateRect.setAttribute("height", "30");
+hueRotateRect.setAttribute("fill", "url(#MyGradient)");
+hueRotateRect.setAttribute("filter", "url(#HueRotateFilter)");
+rootSVGElement.appendChild(hueRotateRect);
+
+var luminanceToAlphaRect = createSVGElement("rect");
+luminanceToAlphaRect.setAttribute("x", "20");
+luminanceToAlphaRect.setAttribute("y", "260");
+luminanceToAlphaRect.setAttribute("width", "760");
+luminanceToAlphaRect.setAttribute("height", "30");
+luminanceToAlphaRect.setAttribute("fill", "url(#MyGradient)");
+luminanceToAlphaRect.setAttribute("filter", "url(#LuminanceToAlphaFilter)");
+rootSVGElement.appendChild(luminanceToAlphaRect);
+
+rootSVGElement.appendChild(rectElement);
+rootSVGElement.setAttribute("font-size", "20");
+rootSVGElement.setAttribute("font-family", "Verdana");
+
+shouldBeEqualToString("matrixElement.in1.baseVal", "SourceAlpha");
+shouldBeEqualToString("saturateElement.in1.baseVal", "SourceAlpha");
+shouldBeEqualToString("hueRotateElement.in1.baseVal", "SourceAlpha");
+shouldBeEqualToString("luminanceToAlphaElement.in1.baseVal", "SourceAlpha");
+
+function executeTest() {
+    matrixElement.in1.baseVal = "SourceGraphic";
+    saturateElement.in1.baseVal = "SourceGraphic";
+    hueRotateElement.in1.baseVal = "SourceGraphic";
+    luminanceToAlphaElement.in1.baseVal = "SourceGraphic";
+
+    shouldBeEqualToString("matrixElement.in1.baseVal", "SourceGraphic");
+    shouldBeEqualToString("saturateElement.in1.baseVal", "SourceGraphic");
+    shouldBeEqualToString("hueRotateElement.in1.baseVal", "SourceGraphic");
+    shouldBeEqualToString("luminanceToAlphaElement.in1.baseVal", "SourceGraphic");
+
+    completeTest();
+}
+
+startTest(rootSVGElement, 100, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-svgdom-type-prop.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-svgdom-type-prop.js
new file mode 100644
index 0000000..20e2e9b
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-svgdom-type-prop.js
@@ -0,0 +1,200 @@
+// [Name] SVGFEColorMatrixElement-svgdom-type-prop.js
+// [Expected rendering result] Five lines with feColorMatrix filter - and a series of PASS messages
+
+description("Tests dynamic updates of the 'type' property of the SVGFEColorMatrixElement object")
+createSVGTestCase();
+
+var matrixElement = createSVGElement("feColorMatrix");
+matrixElement.setAttribute("in", "SourceGraphic");
+matrixElement.setAttribute("type", "saturate");
+matrixElement.setAttribute("values", "0.25");
+
+var saturateElement = createSVGElement("feColorMatrix");
+saturateElement.setAttribute("in", "SourceGraphic");
+saturateElement.setAttribute("type", "hueRotate");
+saturateElement.setAttribute("values", ".25");
+
+var hueRotateElement = createSVGElement("feColorMatrix");
+hueRotateElement.setAttribute("in", "SourceGraphic");
+hueRotateElement.setAttribute("type", "luminanceToAlpha");
+
+var luminanceToAlphaElement = createSVGElement("feColorMatrix");
+luminanceToAlphaElement.setAttribute("in", "SourceGraphic");
+luminanceToAlphaElement.setAttribute("type", "matrix");
+luminanceToAlphaElement.setAttribute("result", "a");
+luminanceToAlphaElement.setAttribute("values", ".33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0");
+
+var compositeElement = createSVGElement("feComposite");
+compositeElement.setAttribute("in", "SourceGraphic");
+compositeElement.setAttribute("in2", "a");
+compositeElement.setAttribute("operator", "in");
+
+var matrixFilter = createSVGElement("filter");
+matrixFilter.setAttribute("id", "MatrixFilter");
+matrixFilter.setAttribute("filterUnits", "objectBoundingBox");
+matrixFilter.setAttribute("x", "-5%");
+matrixFilter.setAttribute("y", "-5%");
+matrixFilter.setAttribute("width", "110%");
+matrixFilter.setAttribute("height", "110%");
+matrixFilter.appendChild(matrixElement);
+
+var saturatedFilter = createSVGElement("filter");
+saturatedFilter.setAttribute("id", "SaturateFilter");
+saturatedFilter.setAttribute("filterUnits", "objectBoundingBox");
+saturatedFilter.setAttribute("x", "-5%");
+saturatedFilter.setAttribute("y", "-5%");
+saturatedFilter.setAttribute("width", "110%");
+saturatedFilter.setAttribute("height", "110%");
+saturatedFilter.appendChild(saturateElement);
+
+var hueRotateFilter = createSVGElement("filter");
+hueRotateFilter.setAttribute("id", "HueRotateFilter");
+hueRotateFilter.setAttribute("filterUnits", "objectBoundingBox");
+hueRotateFilter.setAttribute("x", "-5%");
+hueRotateFilter.setAttribute("y", "-5%");
+hueRotateFilter.setAttribute("width", "110%");
+hueRotateFilter.setAttribute("height", "110%");
+hueRotateFilter.appendChild(hueRotateElement);
+
+var luminanceToAlphaFilter = createSVGElement("filter");
+luminanceToAlphaFilter.setAttribute("id", "LuminanceToAlphaFilter");
+luminanceToAlphaFilter.setAttribute("filterUnits", "objectBoundingBox");
+luminanceToAlphaFilter.setAttribute("x", "-5%");
+luminanceToAlphaFilter.setAttribute("y", "-5%");
+luminanceToAlphaFilter.setAttribute("width", "110%");
+luminanceToAlphaFilter.setAttribute("height", "110%");
+luminanceToAlphaFilter.appendChild(luminanceToAlphaElement);
+luminanceToAlphaFilter.appendChild(compositeElement);
+
+var gradientElement = createSVGElement("linearGradient");
+gradientElement.setAttribute("id", "MyGradient");
+gradientElement.setAttribute("gradientUnits", "userSpaceOnUse");
+gradientElement.setAttribute("x1", "20");
+gradientElement.setAttribute("y1", "0");
+gradientElement.setAttribute("x2", "760");
+gradientElement.setAttribute("y2", "0");
+
+var stopElement1 = createSVGElement("stop");
+stopElement1.setAttribute("offset", "0");
+stopElement1.setAttribute("stop-color", "#dd00dd");
+
+var stopElement2 = createSVGElement("stop");
+stopElement2.setAttribute("offset", ".33");
+stopElement2.setAttribute("stop-color", "#22cc22");
+
+var stopElement3 = createSVGElement("stop");
+stopElement3.setAttribute("offset", ".67");
+stopElement3.setAttribute("stop-color", "#400000");
+
+var stopElement4 = createSVGElement("stop");
+stopElement4.setAttribute("offset", "1");
+stopElement4.setAttribute("stop-color", "#a0a0ff");
+
+gradientElement.appendChild(stopElement1);
+gradientElement.appendChild(stopElement2);
+gradientElement.appendChild(stopElement3);
+gradientElement.appendChild(stopElement4);
+
+var defsElement = createSVGElement("defs");
+defsElement.appendChild(saturatedFilter);
+defsElement.appendChild(matrixFilter);
+defsElement.appendChild(hueRotateFilter);
+defsElement.appendChild(luminanceToAlphaFilter);
+defsElement.appendChild(gradientElement);
+
+rootSVGElement.appendChild(defsElement);
+rootSVGElement.setAttribute("width", "800");
+rootSVGElement.setAttribute("height", "350");
+
+var rectElement = createSVGElement("rect");
+rectElement.setAttribute("width", 798);
+rectElement.setAttribute("height", 320);
+rectElement.setAttribute("x", "1");
+rectElement.setAttribute("y", "1");
+rectElement.setAttribute("fill", "none");
+rectElement.setAttribute("stroke", "blue");
+rectElement.setAttribute("filter", "url(#SaturateFilter)");
+
+var unfilteredRect = createSVGElement("rect");
+unfilteredRect.setAttribute("x", "20");
+unfilteredRect.setAttribute("y", "20");
+unfilteredRect.setAttribute("width", "760");
+unfilteredRect.setAttribute("height", "30");
+unfilteredRect.setAttribute("fill", "url(#MyGradient)");
+rootSVGElement.appendChild(unfilteredRect);
+
+var matrixRect = createSVGElement("rect");
+matrixRect.setAttribute("x", "20");
+matrixRect.setAttribute("y", "80");
+matrixRect.setAttribute("width", "760");
+matrixRect.setAttribute("height", "30");
+matrixRect.setAttribute("fill", "url(#MyGradient)");
+matrixRect.setAttribute("filter", "url(#MatrixFilter)");
+rootSVGElement.appendChild(matrixRect);
+
+var saturatedRect = createSVGElement("rect");
+saturatedRect.setAttribute("x", "20");
+saturatedRect.setAttribute("y", "140");
+saturatedRect.setAttribute("width", "760");
+saturatedRect.setAttribute("height", "30");
+saturatedRect.setAttribute("fill", "url(#MyGradient)");
+saturatedRect.setAttribute("filter", "url(#SaturateFilter)");
+rootSVGElement.appendChild(saturatedRect);
+
+var hueRotateRect = createSVGElement("rect");
+hueRotateRect.setAttribute("x", "20");
+hueRotateRect.setAttribute("y", "200");
+hueRotateRect.setAttribute("width", "760");
+hueRotateRect.setAttribute("height", "30");
+hueRotateRect.setAttribute("fill", "url(#MyGradient)");
+hueRotateRect.setAttribute("filter", "url(#HueRotateFilter)");
+rootSVGElement.appendChild(hueRotateRect);
+
+var luminanceToAlphaRect = createSVGElement("rect");
+luminanceToAlphaRect.setAttribute("x", "20");
+luminanceToAlphaRect.setAttribute("y", "260");
+luminanceToAlphaRect.setAttribute("width", "760");
+luminanceToAlphaRect.setAttribute("height", "30");
+luminanceToAlphaRect.setAttribute("fill", "url(#MyGradient)");
+luminanceToAlphaRect.setAttribute("filter", "url(#LuminanceToAlphaFilter)");
+rootSVGElement.appendChild(luminanceToAlphaRect);
+
+rootSVGElement.appendChild(rectElement);
+rootSVGElement.setAttribute("font-size", "20");
+rootSVGElement.setAttribute("font-family", "Verdana");
+
+shouldBeEqualToString("matrixElement.getAttribute('type')", "saturate");
+shouldBeEqualToString("saturateElement.getAttribute('type')", "hueRotate");
+shouldBeEqualToString("hueRotateElement.getAttribute('type')", "luminanceToAlpha");
+shouldBeEqualToString("luminanceToAlphaElement.getAttribute('type')", "matrix");
+
+function executeTest() {
+    matrixElement.type.baseVal = SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX;
+
+    var matrixArray = new Array("0.33", "0.33", "0.33", "0", "0", "0.33", "0.33", "0.33", "0", "0", "0.33", "0.33", "0.33", "0", "0", "0.33", "0.33", "0.33", "0", "0");
+    matrixElement.values.baseVal.clear();
+    var number = rootSVGElement.createSVGNumber();
+    for (var i = 0; i < matrixArray.length; ++i) {
+        number.value = matrixArray[i];
+        matrixElement.values.baseVal.appendItem(number, i);
+    }
+
+    saturateElement.type.baseVal = SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_SATURATE;
+
+    hueRotateElement.type.baseVal = SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_HUEROTATE;
+    number.value = 90;
+    hueRotateElement.values.baseVal.appendItem(number, 0);
+
+    luminanceToAlphaElement.type.baseVal = SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA;
+
+    shouldBe("matrixElement.type.baseVal", "SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX");
+    shouldBe("saturateElement.type.baseVal", "SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_SATURATE");
+    shouldBe("hueRotateElement.type.baseVal", "SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_HUEROTATE");
+    shouldBe("luminanceToAlphaElement.type.baseVal", "SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA");
+
+    completeTest();
+}
+
+startTest(rootSVGElement, 100, 100);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-svgdom-values-prop.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-svgdom-values-prop.js
new file mode 100644
index 0000000..2e38c1c
--- /dev/null
+++ b/LayoutTests/svg/dynamic-updates/script-tests/SVGFEColorMatrixElement-svgdom-values-prop.js
@@ -0,0 +1,208 @@
+// [Name] SVGFEColorMatrixElement-svgdom-values-prop.js
+// [Expected rendering result] Five lines with feColorMatrix filter - and a series of PASS messages
+
+// SVGNumberListToString converts a list to a string.
+function SVGNumberListToString(list) {
+    var result = "";
+    for (var i = 0; i < list.numberOfItems; ++i) {
+        // We should multiply and round the value of listItem otherwise the expected value cannot be precisely represented as a floating point 
+        // number and later the comparison will fail.
+        var item = Math.round(list.getItem(i).value * 1000) / 1000;
+        result += item;
+        result += " ";
+    }
+    return result;
+}
+
+description("Tests dynamic updates of the 'values' property of the SVGFEColorMatrixElement object")
+createSVGTestCase();
+
+var matrixElement = createSVGElement("feColorMatrix");
+matrixElement.setAttribute("in", "SourceGraphic");
+matrixElement.setAttribute("type", "matrix");
+matrixElement.setAttribute("values", ".9 .9 .9 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0");
+
+var saturateElement = createSVGElement("feColorMatrix");
+saturateElement.setAttribute("in", "SourceGraphic");
+saturateElement.setAttribute("type", "saturate");
+saturateElement.setAttribute("values", "0.5");
+
+var hueRotateElement = createSVGElement("feColorMatrix");
+hueRotateElement.setAttribute("in", "SourceGraphic");
+hueRotateElement.setAttribute("type", "hueRotate");
+hueRotateElement.setAttribute("values", "10");
+
+var luminanceToAlphaElement = createSVGElement("feColorMatrix");
+luminanceToAlphaElement.setAttribute("in", "SourceGraphic");
+luminanceToAlphaElement.setAttribute("type", "luminanceToAlpha");
+luminanceToAlphaElement.setAttribute("result", "a");
+
+var compositeElement = createSVGElement("feComposite");
+compositeElement.setAttribute("in", "SourceGraphic");
+compositeElement.setAttribute("in2", "a");
+compositeElement.setAttribute("operator", "in");
+
+var matrixFilter = createSVGElement("filter");
+matrixFilter.setAttribute("id", "MatrixFilter");
+matrixFilter.setAttribute("filterUnits", "objectBoundingBox");
+matrixFilter.setAttribute("x", "-5%");
+matrixFilter.setAttribute("y", "-5%");
+matrixFilter.setAttribute("width", "110%");
+matrixFilter.setAttribute("height", "110%");
+matrixFilter.appendChild(matrixElement);
+
+var saturatedFilter = createSVGElement("filter");
+saturatedFilter.setAttribute("id", "SaturateFilter");
+saturatedFilter.setAttribute("filterUnits", "objectBoundingBox");
+saturatedFilter.setAttribute("x", "-5%");
+saturatedFilter.setAttribute("y", "-5%");
+saturatedFilter.setAttribute("width", "110%");
+saturatedFilter.setAttribute("height", "110%");
+saturatedFilter.appendChild(saturateElement);
+
+var hueRotateFilter = createSVGElement("filter");
+hueRotateFilter.setAttribute("id", "HueRotateFilter");
+hueRotateFilter.setAttribute("filterUnits", "objectBoundingBox");
+hueRotateFilter.setAttribute("x", "-5%");
+hueRotateFilter.setAttribute("y", "-5%");
+hueRotateFilter.setAttribute("width", "110%");
+hueRotateFilter.setAttribute("height", "110%");
+hueRotateFilter.appendChild(hueRotateElement);
+
+var luminanceToAlphaFilter = createSVGElement("filter");
+luminanceToAlphaFilter.setAttribute("id", "LuminanceToAlphaFilter");
+luminanceToAlphaFilter.setAttribute("filterUnits", "objectBoundingBox");
+luminanceToAlphaFilter.setAttribute("x", "-5%");
+luminanceToAlphaFilter.setAttribute("y", "-5%");
+luminanceToAlphaFilter.setAttribute("width", "110%");
+luminanceToAlphaFilter.setAttribute("height", "110%");
+luminanceToAlphaFilter.appendChild(luminanceToAlphaElement);
+luminanceToAlphaFilter.appendChild(compositeElement);
+
+var gradientElement = createSVGElement("linearGradient");
+gradientElement.setAttribute("id", "MyGradient");
+gradientElement.setAttribute("gradientUnits", "userSpaceOnUse");
+gradientElement.setAttribute("x1", "20");
+gradientElement.setAttribute("y1", "0");
+gradientElement.setAttribute("x2", "760");
+gradientElement.setAttribute("y2", "0");
+
+var stopElement1 = createSVGElement("stop");
+stopElement1.setAttribute("offset", "0");
+stopElement1.setAttribute("stop-color", "#dd00dd");
+
+var stopElement2 = createSVGElement("stop");
+stopElement2.setAttribute("offset", ".33");
+stopElement2.setAttribute("stop-color", "#22cc22");
+
+var stopElement3 = createSVGElement("stop");
+stopElement3.setAttribute("offset", ".67");
+stopElement3.setAttribute("stop-color", "#400000");
+
+var stopElement4 = createSVGElement("stop");
+stopElement4.setAttribute("offset", "1");
+stopElement4.setAttribute("stop-color", "#a0a0ff");
+
+gradientElement.appendChild(stopElement1);
+gradientElement.appendChild(stopElement2);
+gradientElement.appendChild(stopElement3);
+gradientElement.appendChild(stopElement4);
+
+var defsElement = createSVGElement("defs");
+defsElement.appendChild(saturatedFilter);
+defsElement.appendChild(matrixFilter);
+defsElement.appendChild(hueRotateFilter);
+defsElement.appendChild(luminanceToAlphaFilter);
+defsElement.appendChild(gradientElement);
+
+rootSVGElement.appendChild(defsElement);
+rootSVGElement.setAttribute("width", "800");
+rootSVGElement.setAttribute("height", "400");
+
+var rectElement = createSVGElement("rect");
+rectElement.setAttribute("width", 798);
+rectElement.setAttribute("height", 320);
+rectElement.setAttribute("x", "1");
+rectElement.setAttribute("y", "1");
+rectElement.setAttribute("fill", "none");
+rectElement.setAttribute("stroke", "blue");
+rectElement.setAttribute("filter", "url(#SaturateFilter)");
+
+var unfilteredRect = createSVGElement("rect");
+unfilteredRect.setAttribute("x", "20");
+unfilteredRect.setAttribute("y", "20");
+unfilteredRect.setAttribute("width", "760");
+unfilteredRect.setAttribute("height", "30");
+unfilteredRect.setAttribute("fill", "url(#MyGradient)");
+rootSVGElement.appendChild(unfilteredRect);
+
+var matrixRect = createSVGElement("rect");
+matrixRect.setAttribute("x", "20");
+matrixRect.setAttribute("y", "80");
+matrixRect.setAttribute("width", "760");
+matrixRect.setAttribute("height", "30");
+matrixRect.setAttribute("fill", "url(#MyGradient)");
+matrixRect.setAttribute("filter", "url(#MatrixFilter)");
+rootSVGElement.appendChild(matrixRect);
+
+var saturatedRect = createSVGElement("rect");
+saturatedRect.setAttribute("x", "20");
+saturatedRect.setAttribute("y", "140");
+saturatedRect.setAttribute("width", "760");
+saturatedRect.setAttribute("height", "30");
+saturatedRect.setAttribute("fill", "url(#MyGradient)");
+saturatedRect.setAttribute("filter", "url(#SaturateFilter)");
+rootSVGElement.appendChild(saturatedRect);
+
+var hueRotateRect = createSVGElement("rect");
+hueRotateRect.setAttribute("x", "20");
+hueRotateRect.setAttribute("y", "200");
+hueRotateRect.setAttribute("width", "760");
+hueRotateRect.setAttribute("height", "30");
+hueRotateRect.setAttribute("fill", "url(#MyGradient)");
+hueRotateRect.setAttribute("filter", "url(#HueRotateFilter)");
+rootSVGElement.appendChild(hueRotateRect);
+
+var luminanceToAlphaRect = createSVGElement("rect");
+luminanceToAlphaRect.setAttribute("x", "20");
+luminanceToAlphaRect.setAttribute("y", "260");
+luminanceToAlphaRect.setAttribute("width", "760");
+luminanceToAlphaRect.setAttribute("height", "30");
+luminanceToAlphaRect.setAttribute("fill", "url(#MyGradient)");
+luminanceToAlphaRect.setAttribute("filter", "url(#LuminanceToAlphaFilter)");
+rootSVGElement.appendChild(luminanceToAlphaRect);
+
+rootSVGElement.appendChild(rectElement);
+rootSVGElement.setAttribute("font-size", "20");
+rootSVGElement.setAttribute("font-family", "Verdana");
+
+shouldBeEqualToString("SVGNumberListToString(matrixElement.values.baseVal)", "0.9 0.9 0.9 0 0 0.33 0.33 0.33 0 0 0.33 0.33 0.33 0 0 0.33 0.33 0.33 0 0 ");
+shouldBe("Math.round(saturateElement.values.baseVal.getItem(0).value * 1000)", "500");
+shouldBe("Math.round(hueRotateElement.values.baseVal.getItem(0).value * 1000)", "10000");
+
+function executeTest() {
+    var number = rootSVGElement.createSVGNumber();
+
+    number.value = 0.33;
+    matrixElement.values.baseVal.replaceItem(number, 0);
+    matrixElement.values.baseVal.replaceItem(number, 1);
+    matrixElement.values.baseVal.replaceItem(number, 2);
+
+    number.value = 0.25;
+    saturateElement.values.baseVal.replaceItem(number, 0);
+
+    number.value = 90;
+    hueRotateElement.values.baseVal.replaceItem(number, 0);
+
+    shouldBeEqualToString("SVGNumberListToString(matrixElement.values.baseVal)", "0.33 0.33 0.33 0 0 0.33 0.33 0.33 0 0 0.33 0.33 0.33 0 0 0.33 0.33 0.33 0 0 ");
+    shouldBe("saturateElement.values.baseVal.getItem(0).value", "0.25");
+    shouldBe("hueRotateElement.values.baseVal.getItem(0).value", "90");
+
+    completeTest();
+}
+
+
+
+startTest(rootSVGElement, 100, 100);
+
+var successfullyParsed = true;
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 4a6ee88..c83786c 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,23 @@
+2010-10-08  Renata Hodovan  <reni at inf.u-szeged.hu>
+
+        Reviewed by Andreas Kling.
+
+        SVGFEColorMatrixElement doesn't support dynamic invalidation, when attributes change.
+        https://bugs.webkit.org/show_bug.cgi?id=47342
+
+        The dynamic changes are captured by the svgAttributeChange function, and invalidate the filter primitive if necessary.
+
+        Tests: svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr.html
+               svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr.html
+               svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr.html
+               svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop.html
+               svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop.html
+               svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop.html
+
+        * svg/SVGFEColorMatrixElement.cpp:
+        (WebCore::SVGFEColorMatrixElement::svgAttributeChanged):
+        * svg/SVGFEColorMatrixElement.h:
+
 2010-10-08  Pavel Podivilov  <podivilov at chromium.org>
 
         Reviewed by Pavel Feldman.
diff --git a/WebCore/svg/SVGFEColorMatrixElement.cpp b/WebCore/svg/SVGFEColorMatrixElement.cpp
index f14b4e7..83d112c 100644
--- a/WebCore/svg/SVGFEColorMatrixElement.cpp
+++ b/WebCore/svg/SVGFEColorMatrixElement.cpp
@@ -62,6 +62,16 @@ void SVGFEColorMatrixElement::parseMappedAttribute(Attribute* attr)
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
 
+void SVGFEColorMatrixElement::svgAttributeChanged(const QualifiedName& attrName)
+{
+    SVGFilterPrimitiveStandardAttributes::svgAttributeChanged(attrName);
+
+    if (attrName == SVGNames::typeAttr
+        || attrName == SVGNames::inAttr
+        || attrName == SVGNames::valuesAttr)
+        invalidate();
+}
+
 void SVGFEColorMatrixElement::synchronizeProperty(const QualifiedName& attrName)
 {
     SVGFilterPrimitiveStandardAttributes::synchronizeProperty(attrName);
diff --git a/WebCore/svg/SVGFEColorMatrixElement.h b/WebCore/svg/SVGFEColorMatrixElement.h
index 873d530..5d626a2 100644
--- a/WebCore/svg/SVGFEColorMatrixElement.h
+++ b/WebCore/svg/SVGFEColorMatrixElement.h
@@ -36,6 +36,7 @@ private:
     SVGFEColorMatrixElement(const QualifiedName&, Document*);
 
     virtual void parseMappedAttribute(Attribute*);
+    virtual void svgAttributeChanged(const QualifiedName&);
     virtual void synchronizeProperty(const QualifiedName&);
     virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*);
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list